Python: Получение состояния реле Sonoff Basic R3
Задача: получить состояние реле и записать его состояние в БД
Решение:
Реле отдает своё состояние по ссылке:
1 |
http://{ip}:8081/zeroconf/info |
Однако в зависимости от ревизии прошивки, данные могут немного отличаться. В нижеприведённом скрипте это учтено:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#!/usr/bin/python3 import config import pymysql import requests from urllib3.exceptions import InsecureRequestWarning import random ip="192.168.88.245" # IP реле source=2 # источник - реле SonOff_1 (Гостинная) place=1 # расположение реле - гостиннная # здесь кусок кода который опрашивает текущее состояние реле requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning) post_params = '{"deviceid": "","data": {}}' response = requests.post(f"http://{ip}:8081/zeroconf/info", data=post_params, verify=False) try: res = response.json() print(f"пришло:{res}") switch=True signal=0 if type(res['data'])==str: res["data"]=json.loads(res["data"]) if res["data"]["switch"]=="off":switch=False if "signalStrength" in res["data"]:signal=res["data"]["signalStrength"] except Exception as e: print(f"Ошибка:{e}") exit(-1) print(signal) print(switch) # соединяемся с БД con=pymysql.connect(host=config.gconfig['mysql_host'], port=3306, user=config.gconfig['mysql_user'], password=config.gconfig['mysql_password'], database=config.gconfig['mysql_base'], cursorclass=pymysql.cursors.DictCursor ) # ложим данные в БД with con.cursor() as cursor: sql=f"insert into m_data (place,source,value_type,value,dt) values ({place},{source},3,{switch},now())"; cursor.execute(sql) con.commit() sql=f"insert into m_data (place,source,value_type,value,dt) values ({place},{source},4,{signal},now())"; cursor.execute(sql) con.commit() |