Dieser Artikel ist Kapitel 3 eines Artikels mit vier Kapiteln.
Ich möchte LINE Bot darüber informieren, wann der menschliche Sensor reagiert hat und wie oft er innerhalb einer Stunde reagiert hat. Sie können SQL lokal ausführen, aber ich dachte, es wäre einfacher, es in einer Cloud-Datenbank zu speichern, da der Raspelkuchen mit einem menschlichen Sensor und der Raspeltorte, der als Server für LINE Bot verwendet wird, getrennt sind. Daher habe ich die Standard-Firebase verwendet.
Ich habe den menschlichen Sensor von [diesem Hersteller] verwendet (https://www.vstone.co.jp/robotshop/index.php?main_page=product_info&products_id=4361).
[Raspberry Pi] Verwendung und Verwendung des selbst hergestellten menschlichen Gefühlssensors wurde unverändert verwendet. Achten Sie auf GPIO-Verbindungsfehler (ich habe den Fehler gemacht, Pin 12 und Masse versehentlich festzunageln).
Firebase Ich bezog mich auf [Python] Erste Schritte mit der Firebase-Echtzeitdatenbank.
Installieren Sie firebase-admin mit dem folgenden Befehl auf Raspeye
$ pip install firebase-admin
Erstellen Sie eine Datenbank über die Firebase-Konsole. Es gibt Cloud Firestore
und Realtime Database
, aber bitte beachten Sie, dass es sich diesmal um ** Realtime Database
** handelt.
Ändern Sie die Regeln wie folgt:
Gehen Sie außerdem im Feld auf der rechten Seite von "Projektübersicht" zu "Projekt festlegen> Dienstkonto> Firebase Admin SDK", wählen Sie "Python" zum Kopieren aus und klicken Sie auf "Neuen privaten Schlüssel generieren". , Speichern Sie den heruntergeladenen privaten Schlüssel in Raspeye.
Unten ist der Code
firebase.py
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
from datetime import datetime
import time
import RPi.GPIO as GPIO
cred = credentials.Certificate("<Heruntergeladener privater Schlüssel>.json")
firebase_admin.initialize_app(cred, {
'databaseURL': 'https://<databaseURL>.firebaseio.com/'
})
ref = db.reference('data')
INTERVAL = 3
SLEEPTIME = 20
GPIO_PIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN, GPIO.IN)
while True:
if(GPIO.input(GPIO_PIN) == GPIO.HIGH):
print(datetime.now().strftime('%Y/%m/%d %H:%M:%S'))
new_data_ref = ref.push()
new_data_ref.set({
'timestamp': {'.sv': 'timestamp'}
})
time.sleep(SLEEPTIME)
else:
print(GPIO.input(GPIO_PIN))
time.sleep(INTERVAL)
Wenn es erkannt wird, schieben Sie es mit Zeitstempel in die Datenbank. Durch Drücken wird eine eindeutige ID generiert. Anscheinend ist die ID auch in chronologischer Reihenfolge.
Es ist auch Problem hier, aber es scheint die Gewohnheit zu sein, Zeitstempel aus dem Firebase-Admin-Modul von Python zu registrieren. Ich hoffe, Sie finden den Zeitstempel: {'.sv': 'Zeitstempel'} oben hilfreich.
Auf diese Weise wird es, wenn es erkannt wird, in die Echtzeitdatenbank geschrieben.
Die UNIX-Zeit 1597307961996
ist 2020/08/13 17:39:21, also ist es perfekt.
Das ist alles, um die Reaktionszeit des menschlichen Sensors in der Firebase-Echtzeitdatenbank zu speichern. Als nächstes erhalten Sie diese Daten von einem anderen Raspeltorte.