diff options
| author | jwansek <eddie.atten.ea29@gmail.com> | 2025-01-17 00:41:03 +0000 | 
|---|---|---|
| committer | jwansek <eddie.atten.ea29@gmail.com> | 2025-01-17 00:41:03 +0000 | 
| commit | e7114310f91bac3cc673cdb46278abf128b7fef0 (patch) | |
| tree | 0fc6df421e232ee749fd359cf7a2fb78d70e4bca | |
| parent | f1cf15db0b167a3faab530859ea602e6ff0c2177 (diff) | |
| download | power.eda.gay-e7114310f91bac3cc673cdb46278abf128b7fef0.tar.gz power.eda.gay-e7114310f91bac3cc673cdb46278abf128b7fef0.zip | |
Changed MQTT topic naming scheme, added logging zigbee information
| -rw-r--r-- | mqtt-client/mqtt-client.py | 35 | ||||
| -rw-r--r-- | switch-snmp/port-names.conf | 16 | 
2 files changed, 37 insertions, 14 deletions
| diff --git a/mqtt-client/mqtt-client.py b/mqtt-client/mqtt-client.py index c51f4b8..a441e6d 100644 --- a/mqtt-client/mqtt-client.py +++ b/mqtt-client/mqtt-client.py @@ -23,20 +23,39 @@ class MQTTClient:      def _on_connect_cb(self, mqtt, userdata, flags, rc):          #print("Connected to broker") -        self.mqttc.subscribe("tele/+/SENSOR") +        self.mqttc.subscribe("tele/+/+/SENSOR")      def _on_message_cb(self, mqtt, userdata, msg):          #print('Topic: {0} | Message: {1}'.format(msg.topic, msg.payload)) -        if "Tasmota" in msg.topic: -            self.handle_tasmota(msg) - -    def handle_tasmota(self, msg): -        from_ = msg.topic.split("/")[1] +        # my MQTT naming scheme is tele/<sensor type>/<specific sensor location>/<whatever> +        # e.g. +        #    tele/TasmotaPlug/TasmotaNAS/SENSOR +        #    tele/TasmotaZigbee/TasmotaZigbee/SENSOR (there is only one Tasmota Zigbee bridge) +        type_ = msg.topic.split("/")[1] +        location = msg.topic.split("/")[2]          msg_j = json.loads(msg.payload.decode()) -        print("'%s' is using %.1fw @ %s. %.1fkWh so far today, %.1fkWh yesterday" % (from_, msg_j["ENERGY"]["Power"], msg_j["Time"],  msg_j["ENERGY"]["Today"], msg_j["ENERGY"]["Yesterday"])) + +        if type_ == "TasmotaPlug": +            self.handle_plug(msg_j, location) +        elif type_ == "TasmotaZigbee": +            self.handle_zigbee(msg_j) + +    def handle_plug(self, msg_j, location): +        print("'%s' is using %.1fw @ %s. %.1fkWh so far today, %.1fkWh yesterday" % (location, msg_j["ENERGY"]["Power"], msg_j["Time"],  msg_j["ENERGY"]["Today"], msg_j["ENERGY"]["Yesterday"]))          fields = {k: v for k, v in msg_j["ENERGY"].items() if k not in {"TotalStartTime"}} -        points = [{"measurement": "tasmota_power", "tags": {"plug": from_}, "fields": fields}] +        self.append_influxdb(fields, "tasmota_power", {"plug": location}) + +    def handle_zigbee(self, msg_j): +        zigbee_id = list(msg_j["ZbReceived"].keys())[0] +        fields = msg_j["ZbReceived"][zigbee_id] +        friendlyname = fields.pop("Name") +        del fields["Device"] +        print("Zigbee device '%s' reported: %s" % (friendlyname, str(fields))) +        self.append_influxdb(fields, "zigbee", {"friendlyname": friendlyname, "id": zigbee_id}) + +    def append_influxdb(self, fields, measurement_name, tags): +        points = [{"measurement": measurement_name, "tags": tags, "fields": fields}]          write_api = self.influxc.write_api(write_options = SYNCHRONOUS)          write_api.write(              os.environ["DOCKER_INFLUXDB_INIT_BUCKET"], diff --git a/switch-snmp/port-names.conf b/switch-snmp/port-names.conf index 67d1ad8..761804a 100644 --- a/switch-snmp/port-names.conf +++ b/switch-snmp/port-names.conf @@ -1,6 +1,10 @@ -1 = Routerbox -5 = PiKVM -6 = EAP225 WiFi -8 = Git Raspberry Pi -7 = Intel Compute Stick -13 = Monitor Raspberry Pi +1 = EAP225 Wifi +2 = PiKVM +4 = 2.5Gb Switch +6 = Routerbox +13 = Intel Compute Stick +24 = Frigate Pi +23 = Modem & ES205G +8 = PiKVM +10 = TL-RP108GE & EAP110 + | 
