diff options
author | jwansek <eddie.atten.ea29@gmail.com> | 2025-02-16 14:16:43 +0000 |
---|---|---|
committer | jwansek <eddie.atten.ea29@gmail.com> | 2025-02-16 14:16:43 +0000 |
commit | dd7790dab8d3fbea8f2b58eb4d5aaffc36b3cb09 (patch) | |
tree | cd02b6348c1fd856133d934ed3459d35e0cf672e /tasmota-mqtt-client.py | |
parent | 8fc3775a16a6195f8ecf792cffe81afcf3b8a857 (diff) | |
download | TasmotaCLI-master.tar.gz TasmotaCLI-master.zip |
Diffstat (limited to 'tasmota-mqtt-client.py')
-rw-r--r-- | tasmota-mqtt-client.py | 104 |
1 files changed, 0 insertions, 104 deletions
diff --git a/tasmota-mqtt-client.py b/tasmota-mqtt-client.py deleted file mode 100644 index e8a43b8..0000000 --- a/tasmota-mqtt-client.py +++ /dev/null @@ -1,104 +0,0 @@ -import paho.mqtt.client as paho -import threading -import argparse -import getpass -import docker_net -import time -import json - -SENT_EVENT = threading.Event() - -class MQTTClient: - - switch_energy = None - switch_power = None - - def __init__(self, host, friendlyname, username, password, message = None): - self.host = host - self.friendlyname = friendlyname - self.username = username - self.password = password - self.message = message - - # print("Instantiated. Message:", message) - - self.mqtt_c = paho.Client("tasmota-cli", clean_session = True) - - self.mqtt_c.on_connect = self._on_connect_cb - if message is None: - self.mqtt_c.on_message = self._on_message_cb - - self.mqtt_c.username_pw_set(username = username, password = password) - self.mqtt_c.connect(self.host, 1883, 60) - self.mqtt_c.loop_forever() - - def _on_connect_cb(self, mqtt, userdata, flags, rc): - # print("Connected to broker") - topic = "tele/TasmotaPlug/%s/+" % self.friendlyname - if self.message is None: - print("Waiting for '%s'" % topic) - self.mqtt_c.subscribe(topic) - - else: - self.mqtt_c.publish("cmnd/TasmotaPlug/%s/Power" % self.friendlyname, payload = self.message) - print("Sent message '%s' to topic 'cmnd/TasmotaPlug/%s/Power'" % (self.message, self.friendlyname)) - SENT_EVENT.set() - self.mqtt_c.disconnect() - - def _on_message_cb(self, mqtt, userdata, msg): - # print('Topic: {0} | Message: {1}'.format(msg.topic, msg.payload)) - - if msg.topic.split("/")[2] == self.friendlyname: - if msg.topic.split("/")[3] == "SENSOR": - self.switch_energy = json.loads(msg.payload.decode())["ENERGY"] - elif msg.topic.split("/")[3] == "STATE": - self.switch_power = json.loads(msg.payload.decode())["POWER"] - - if self.switch_power is not None and self.switch_energy is not None: - self.mqtt_c.disconnect() - - - -parser = argparse.ArgumentParser() -parser.add_argument( - "-m", "--mqtt-host", - type = str, - help = "MQTT Server", - default = "<docker>" -) -parser.add_argument( - "-u", "--user", - type = str, - help = "Username to login with", - required = True -) -parser.add_argument( - "-t", "--toggle", - action = "store_true", - help = "Toggle current power status" -) -parser.add_argument( - "-n", "--friendlyname", - help = "Device friendly name", - type = str, - required = True -) - -if __name__ == "__main__": - args = vars(parser.parse_args()) - if args["mqtt_host"] == "<docker>": - args["mqtt_host"] = docker_net.get_mqtt_addr()[0] - if args["user"] is not None: - args["password"] = getpass.getpass("Input password for %s@%s: " % (args["user"], args["mqtt_host"])) - else: - args["password"] = None - - if args["toggle"]: - client = MQTTClient(args["mqtt_host"], args["friendlyname"], args["user"], args["password"], "TOGGLE") - # print("Waiting for event...") - SENT_EVENT.wait() - # print("Done waiting.") - - client = MQTTClient(args["mqtt_host"], args["friendlyname"], args["user"], args["password"]) - print(json.dumps(client.switch_energy, indent = 4)) - print("'%s' is currently %s" % (client.friendlyname, client.switch_power)) |