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

やはり、1-Wireのデータ取得が遅いのである。ということで、ウェイトを入れ、その分データの取得秒数を伸ばし、送信は1回に限る、で解決。スマートではないが確実な方法かと思う。

from gpiozero import OutputDevice, Button
from time import sleep
from datetime import datetime
from w1thermsensor import W1ThermSensor, Sensor, errors
import requests

FAN1 = OutputDevice(17)
FAN2 = OutputDevice(27)
RQSW = Button(5)

sensor_1 = W1ThermSensor(sensor_type=Sensor.DS18B20, sensor_id='センサーID1')
sensor_2 = W1ThermSensor(sensor_type=Sensor.DS18B20, sensor_id='センサーID2')

temp_1 = 0  # 初期化
temp_2 = 0  # 初期化

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

def send(message):
    payload = {'message': message}
    requests.post(host, data=payload, headers=headers)

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

try:
    
    while True:
        try:
            temp_1 = sensor_1.get_temperature()
            print('水槽小 {0:.1f}℃'.format(temp_1))

            if temp_1 > 25:
                FAN1.on()
                new_state_1 = True
                if old_state_1 == False and new_state_1 == True:
                    print('FAN1 ON')
                    send('\n' + '水槽小 {0:.1f}℃'.format(temp_1) + '\n' + 'FAN W
orked!')
                    old_state_1 = new_state_1

            if temp_1 < 23:
                FAN1.off()
                new_state_1 = False
                if old_state_1 == True and new_state_1 == False:
                    print('FAN1 OFF')
                    send('\n' + '水槽小 {0:.1f}℃'.format(temp_1) + '\n' + 'FAN S
topped!')
                    old_state_1 = new_state_1
        except errors.SensorNotReadyError:
            print('水槽小センサーがまだ準備できていません。')

        try:
            temp_2 = sensor_2.get_temperature()
            print('水槽大 {0:.1f}℃'.format(temp_2))

            if temp_2 > 25:
                FAN2.on()
                new_state_2 = True
                if old_state_2 == False and new_state_2 == True:
                    print('FAN2 ON')
                    send('\n' + '水槽大 {0:.1f}℃'.format(temp_2) + '\n' + 'FAN 
Worked!')
                    old_state_2 = new_state_2

            if temp_2 < 23:
                FAN2.off()
                new_state_2 = False
                if old_state_2 == True and new_state_2 == False:
                    print('FAN2 OFF')
                    send('\n' + '水槽大 {0:.1f}℃'.format(temp_2) + '\n' + 'FAN 
Stopped!')
                    old_state_2 = new_state_2
        except errors.SensorNotReadyError:
            print('水槽大センサーがまだ準備できていません。')

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

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

        if 6 <= int(current_h) <= 23:
            if int(current_m) == 43:
                if 0 <= int(current_s) <= 5:
                    print(current_s)
                    send('\n' + '水槽大 {0:.1f}℃'.format(temp_2) + '\n' + '水槽
小 {0:.1f}℃'.format(temp_1))
                    sleep(5)

        if RQSW.is_pressed:
            send('\n' + '水槽大 {0:.1f}℃'.format(temp_2) + '\n' + '水槽小 {0:.1
f}℃'.format(temp_1))
            sleep(5)

except KeyboardInterrupt:
    pass

コメント

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