Parcourir la source

Add Gladys Assistant integration (#137)

* Update config.ini.dist

* Update miflora-mqtt-daemon.py

* Update config.ini.dist

* Update config.ini.dist

* Update config.ini.dist

* Update README.md

Co-authored-by: Thomas Dietrich <Thomas@Nurzen.de>
Grégory LASSERRE il y a 4 ans
Parent
commit
562bf34973
3 fichiers modifiés avec 26 ajouts et 1 suppressions
  1. 1 0
      README.md
  2. 4 1
      config.ini.dist
  3. 21 0
      miflora-mqtt-daemon.py

+ 1 - 0
README.md

@@ -29,6 +29,7 @@ The program can be executed in **daemon mode** to run continuously in the backgr
     * following the [Homie Convention v2.0.5](https://github.com/marvinroger/homie)
     * following the [mqtt-smarthome architecture proposal](https://github.com/mqtt-smarthome/mqtt-smarthome)
     * using the [HomeAssistant MQTT discovery format](https://home-assistant.io/docs/mqtt/discovery/)
+    * using the [Gladys MQTT proposal](https://gladysassistant.com/docs/integrations/mqtt/)
     * using the [ThingsBoard.io](https://thingsboard.io/) MQTT interface
     * following the [Wiren Board MQTT Conventions](https://github.com/contactless/homeui/blob/master/conventions.md)
 * MQTT authentication support

+ 4 - 1
config.ini.dist

@@ -17,9 +17,11 @@
 #                       (https://github.com/mqtt-smarthome/mqtt-smarthome)
 #  homeassistant-mqtt - Publish to an MQTT broker following the HomeAssistant discovery format
 #                       (https://www.home-assistant.io/docs/mqtt/discovery/)
+#         gladys-mqtt - Publish to an MQTT broker following the Gladys MQTT proposal
+#                       https://gladysassistant.com/docs/integrations/mqtt/
 #    thingsboard-json - Publish to the ThingsBoard MQTT broker
 #                       (https://thingsboard.io)
-#    wirenboard-mqtt -  Publish to the Wiren Board MQTT broker
+#     wirenboard-mqtt - Publish to the Wiren Board MQTT broker
 #                       (https://wirenboard.com)
 #                json - Print to stdout as json encoded strings
 #
@@ -53,6 +55,7 @@
 # Default depends on the configured reporting_method
 #base_topic = miflora                   # Default for: mqtt-json, mqtt-smarthome, homeassistant-mqtt
 #base_topic = homie                     # Default for: mqtt-homie
+#base_topic = gladys/master/device      # Default for: gladys-mqtt
 #base_topic = v1/devices/me/telemetry   # Default for: thingsboard-json
 #base_topic =                           # Default for: wirenboard-mqtt
 

+ 21 - 0
miflora-mqtt-daemon.py

@@ -347,6 +347,23 @@ elif reporting_mode == 'homeassistant-mqtt':
             }
             payload['expire_after'] = '3600'
             mqtt_client.publish(discovery_topic, json.dumps(payload), 1, True)
+elif reporting_mode == 'gladys-mqtt':
+    print_line('Announcing Mi Flora devices to MQTT broker for auto-discovery ...')
+    
+    for [flora_name, flora] in flores.items():
+        topic_path = '{}/mqtt:miflora:{}/feature'.format(base_topic, flora_name.lower())
+        data = OrderedDict()
+        for param,_ in parameters.items():
+            data[param] = flora['poller'].parameter_value(param)
+        mqtt_client.publish('{}/mqtt:battery/state'.format(topic_path),data['battery'],1,True)
+        mqtt_client.publish('{}/mqtt:moisture/state'.format(topic_path),data['moisture'],1,True)
+        mqtt_client.publish('{}/mqtt:light/state'.format(topic_path),data['light'],1,True)
+        mqtt_client.publish('{}/mqtt:conductivity/state'.format(topic_path),data['conductivity'],1,True)
+        mqtt_client.publish('{}/mqtt:temperature/state'.format(topic_path),data['temperature'],1,True)
+
+
+    sleep(0.5) # some slack for the publish roundtrip and callback function
+    print()
 elif reporting_mode == 'wirenboard-mqtt':
     print_line('Announcing Mi Flora devices to MQTT broker for auto-discovery ...')
     for [flora_name, flora] in flores.items():
@@ -421,6 +438,10 @@ while True:
             print_line('Publishing to MQTT topic "{}/sensor/{}/state"'.format(base_topic, flora_name.lower()))
             mqtt_client.publish('{}/sensor/{}/state'.format(base_topic, flora_name.lower()), json.dumps(data))
             sleep(0.5) # some slack for the publish roundtrip and callback function
+        elif reporting_mode == 'gladys-mqtt':
+            print_line('Publishing to MQTT topic "{}/mqtt:miflora:{}/feature"'.format(base_topic, flora_name.lower()))
+            mqtt_client.publish('{}/mqtt:miflora:{}/feature'.format(base_topic, flora_name.lower()), json.dumps(data))
+            sleep(0.5) # some slack for the publish roundtrip and callback function
         elif reporting_mode == 'mqtt-homie':
             print_line('Publishing data to MQTT base topic "{}/{}"'.format(base_topic, flora_name.lower()))
             mqtt_client[flora_name.lower()].publish('{}/{}/$state'.format(base_topic, flora_name.lower()), 'ready', 1, True)