commit 87c18128f904254ee77c39378a94abd4d545d0b1 Author: Siwat Sirichai Date: Mon Feb 12 09:54:08 2024 -0800 Add mqtt-hass-sync.py diff --git a/mqtt-hass-sync.py b/mqtt-hass-sync.py new file mode 100644 index 0000000..f666a2f --- /dev/null +++ b/mqtt-hass-sync.py @@ -0,0 +1,37 @@ +import appdaemon.plugins.hass.hassapi as hass +import appdaemon.plugins.mqtt.mqttapi as mqtt +import appdaemon.adbase as base + + +class hass_mqtt_state_sync(base.ADBase): + + def initialize(self): + self.hass = self.get_plugin_api("HASS") + self.mqtt = self.get_plugin_api("MQTT") + self.ad = self.get_ad_api() + + self.entity_id = self.args["entity_id"] + self.entity = self.hass.get_entity(self.entity_id) + self.mqtt_topic_state = self.args["mqtt_topic_state"] + self.mqtt_topic_set_state = self.args["mqtt_topic_set_state"] + self.mqtt_topic_request = self.args["mqtt_topic_request"] + + self.mqtt.mqtt_subscribe(self.mqtt_topic_set_state) + self.mqtt.mqtt_subscribe(self.mqtt_topic_request) + self.mqtt.listen_event(self.handle_set_state_payload, "MQTT_MESSAGE", topic=self.mqtt_topic_set_state) + self.mqtt.listen_event(self.handle_request_payload, "MQTT_MESSAGE", topic=self.mqtt_topic_request) + self.entity.listen_state(self.handle_hass_state_change) + + def publish_state_to_mqtt(self): + state = self.hass.get_state(self.entity_id) + self.mqtt.mqtt_publish(self.mqtt_topic_state, str(state)) + + def handle_set_state_payload(self, event_name, data, cb_args): + self.entity.set_state(state = data["payload"]) + + def handle_request_payload(self, event_name, data, cb_args): + self.publish_state_to_mqtt() + + def handle_hass_state_change(self, entity, attribute, old, new, cb_args): + self.ad.log("State change detected: {} -> {}".format(old, new)) + self.publish_state_to_mqtt() \ No newline at end of file