ブログの投稿ログ

2021年
9月
8月
7月
6月

家の温度/湿度を監視できる時計2

前回に引き続き家の温度/湿度を監視できる時計を作成していきます。
今回はラズパイ側のセンサーで取得した値を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()