Python: Получение состояния реле Sonoff Basic R3
Задача: получить состояние реле и записать его состояние в БД
Решение:
Реле отдает своё состояние по ссылке:
http://{ip}:8081/zeroconf/info
Однако в зависимости от ревизии прошивки, данные могут немного отличаться. В нижеприведённом скрипте это учтено:
#!/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()



