前回に引き続き家の温度/湿度を監視できる時計を作成していきます。
今回はラズパイ側のセンサーで取得した値をCloud Storage for Firebaseへ値をプッシュしたいと思います!
ラズパイセットアップはこちら
// インポート
import datetime
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
import RPi.GPIO as GPIO
import dht11
import time
// firestoreアカウントを使用
cred = credentials.Certificate('serviceAccountKey.json')
firebase_admin.initialize_app(cred)
db = firestore.client()
// GPIOを定義
GPIO.setwarnings(True)
GPIO.setmode(GPIO.BCM)
// GPIOのpinを指定
instance = dht11.DHT11(pin=14)
try:
while True:
result=instance.read()
if result.is_valid():
// setTempで温度と湿度を定義
def setTemp(temp="%-3.1f℃" % result.temperature, hum="%-3.1f%%" % result.humidity):
Date = datetime.datetime.now()
# キーを日付時刻で作成
ref = db.collection('Database').document(str(Date))
// setTempで温度と湿度をsetする
ref.set({
u'hum': hum,
u'temp': temp,
})
def resizeDatabase():
// firebaseコレクションを変数へ
ref = db.collection('Database')
// firebaseの値をget
docs = ref.stream()
dataSize = 0
// 何回ぶん表示するか
maxLength = 1
// firebaseの値をforで回す
for doc in docs:
// firebaseの値を表示
print(doc.id, doc._data)
// 表示たら1プラス
dataSize += 1
if dataSize == 1:
firstDateId = doc.id
if dataSize > maxLength:
// firebaseから値を削除
deleteDoc(firstDateId)
def deleteDoc(id):
db.collection('Database').document(id).delete()
if __name__ == '__main__':
setTemp()
resizeDatabase()
time.sleep(30)
except KeyboardInterrupt:
print("Cleanup")
GPIO.cleanup()