水槽冷却ファンコントローラの2ch化のまとめ

7時〜23時に各水槽の水温が通知される。25℃を超えたらFANが稼働し、23℃を下回ったらFANが止まる。毎時43分には温度の通知がある。43分とした意味は特にない、00分だと何かの通知に被るから。Raspberry Pi ZERO WにDS18B20を2本接続し、GPIO17と27にフォトカプラを介して5Vリレーを接続、12VFANをON/OFFコントロールする。RPi.GPIOではなく敢えてgpiozeroを使ってみた。

from gpiozero import OutputDevice
from time import sleep
from datetime import datetime
from w1thermsensor import W1ThermSensor
import requests

FAN1 = OutputDevice(17)
FAN2 = OutputDevice(27)

sensor = W1ThermSensor()

host = 'https://notify-api.line.me/api/notify'
token = '取得したtoken'
headers = {'Authorization': f'Bearer {token}'}

old_state_1 = False
new_state_1 = False
old_state_2 = False
new_state_2 = False

try:
    while True:

        for sensor in W1ThermSensor.get_available_sensors():
            if str(sensor.id)=='センサーIDその1':
                temp_1 = sensor.get_temperature()
                if int(temp_1) > 24:
                    FAN1.on()
                    new_state_1 = True
                    if old_state_1 == False and new_state_1 == True:
                        send('\n' + '水槽小 {0:.1f}℃'.format(temp_1) + '\n' + 'FAN Worked!')
                        old_state_1 = new_state_1
                        
                if int(temp_1) < 23:
                    FAN1.off()
                    new_state_1 = False
                    if old_state_1 == True and new_state_1 == False:
                        send('\n' + '水槽小 {0:.1f}℃'.format(temp_1) + '\n' + 'FAN Stopped!')
                        old_state_1 = new_state_1
                        
            if str(sensor.id)=='センサーIDその2':
                temp_2 = sensor.get_temperature()
                
                if int(temp_2) > 24:
                    FAN2.on()
                    new_state_2 = True
                    if old_state_2 ==False and new_state_2 == True:
                        send('\n' + '水槽大 {0:.1f}℃'.format(temp_2) + '\n' + 'FAN Worked!')
                        old_state_2 = new_state_2

                if int(temp_2) < 23:
                    FAN2.off()
                    new_state_2 = False
                    if old_state_2 == True and new_state_2 == False:
                        send('\n' + '水槽大 {0:.1f}℃'.format(temp_2) + '\n' + 'FAN Stopped!')
                        old_state_2 = new_state_2

        # 現在の日時を取得
        current_time = datetime.now()

        # 時、分、秒をそれぞれ取得
        current_h = current_time.hour
        current_m = current_time.minute
        current_s = current_time.second

        if int(current_s) == 00 and int(current_m) == 43 and int(current_h) >= 7
 and int(current_h)<= 23:
            send('\n' + '水槽大 {0:.1f}℃'.format(temp_2) + '\n' + '水槽小 {0:.1f}℃'.format(temp_1))
                        
        #LINENotifyにメッセージを送付
        def send(message):
            payload = {'message': message}
            headers = {'Authorization': 'Bearer ' + token} 
            requests.post(host, data=payload, headers=headers)

except KeyboardInterrupt:
    pass

実は同じことをESP32でも実現できていた、というか、当初はそれで運用しようと思っといたのであるが、よくよく考えるとそばにて既にRaspberry Pi zeroを運用していたので、親機をまとめてしまったのである。

コメント

タイトルとURLをコピーしました