From 83eb48f8dfb3efd47158fdb561d16355367bdd95 Mon Sep 17 00:00:00 2001 From: jwansek Date: Mon, 17 Aug 2026 19:45:02 +0100 Subject: Added the handing of a sonoff scene switcher which corrisponds to a tasmota-flashed LED strip controller --- mqtt-client/mqtt-client.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'mqtt-client') diff --git a/mqtt-client/mqtt-client.py b/mqtt-client/mqtt-client.py index c1a05e4..363e57e 100644 --- a/mqtt-client/mqtt-client.py +++ b/mqtt-client/mqtt-client.py @@ -2,6 +2,7 @@ import paho.mqtt.client as paho from influxdb_client import InfluxDBClient, Point, WritePrecision from influxdb_client.client.write_api import SYNCHRONOUS import prometheus_client +import urllib.parse import threading import datetime import requests @@ -59,6 +60,9 @@ class MQTTClient: "ActivePower": ("Power", int), "RMSCurrent": ("Current", float) } + self.sonoff_scene_buttons = { + "BedroomLightsButtons": "192.168.5.17" + } # print(self.send_raw_tasmota_http("192.168.5.6", os.environ["MQTT_PASSWD"], "Power")) @@ -140,6 +144,9 @@ class MQTTClient: if friendlyname in self.zigbee_plugs: self.handle_zigbee_plug(friendlyname, fields) + if friendlyname in self.sonoff_scene_buttons.keys() and "FC12/0000" in fields.keys(): + self.handle_sonoff_scene_button(friendlyname = friendlyname, timespressed = fields["FC12/0000"], button = fields["Endpoint"]) + if friendlyname == "DoorSensor": with open(os.path.join(os.path.dirname(__file__), "door_log.csv"), "a") as f: f.write("%s,%s,%s\n" % (datetime.datetime.now().astimezone().isoformat(), friendlyname, ",".join(sorted(["%s=%s" % (k, v) for k, v in fields.items()])))) @@ -173,6 +180,25 @@ class MQTTClient: if "Read" not in fields.keys(): self.append_influxdb(fields, "zigbee", {"friendlyname": friendlyname, "id": zigbee_id}) + def handle_sonoff_scene_button(self, friendlyname, timespressed, button): + url_base = "http://%s/cm?cmnd=" % self.sonoff_scene_buttons[friendlyname] + + if timespressed == 1: + if button == 1: + req = requests.get(url_base + urllib.parse.quote_plus("Color2 -")) + elif button == 2: + req = requests.get(url_base + urllib.parse.quote_plus("Color2 +")) + elif button == 3: + req = requests.get(url_base + urllib.parse.quote_plus("Dimmer2 -")) + elif button == 4: + req = requests.get(url_base + urllib.parse.quote_plus("Dimmer2 +")) + + response = req.json() + print("%s responded with %s" % (self.sonoff_scene_buttons[friendlyname], json.dumps(response))) + if "Dimmer" in response.keys(): + if response["Dimmer"] == 1: + req = requests.get(url_base + urllib.parse.quote_plus("Power OFF")) + def set_plug(self, friendlyname, payload): t = "cmnd/TasmotaPlug/%s/Power" % friendlyname self.mqttc.publish(t, payload = payload) -- cgit v1.2.3