entity state sync
This commit is contained in:
parent
ab69f75120
commit
176633899f
3 changed files with 287 additions and 0 deletions
42
hass_mqtt_state_sync.py
Normal file
42
hass_mqtt_state_sync.py
Normal file
|
@ -0,0 +1,42 @@
|
|||
import appdaemon.plugins.hass.hassapi as hass
|
||||
import appdaemon.plugins.mqtt.mqttapi as mqtt
|
||||
import appdaemon.adbase as base
|
||||
|
||||
|
||||
class hass_mqtt_state_sync(hass.Hass,mqtt.Mqtt):
|
||||
|
||||
def initialize(self):
|
||||
self.entity_id = self.args["entity_id"]
|
||||
self.entity = self.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_subscribe(self.mqtt_topic_set_state, namespace="mqtt")
|
||||
self.mqtt_subscribe(self.mqtt_topic_request, namespace="mqtt")
|
||||
self.listen_event(self.handle_set_state_payload, "MQTT_MESSAGE", topic=self.mqtt_topic_set_state, namespace="mqtt")
|
||||
self.listen_event(self.handle_request_payload, "MQTT_MESSAGE", topic=self.mqtt_topic_request, namespace="mqtt")
|
||||
self.entity.listen_state(self.handle_hass_state_change)
|
||||
self.publish_state_to_mqtt()
|
||||
|
||||
def publish_state_to_mqtt(self):
|
||||
state = self.get_state(self.entity_id)
|
||||
self.mqtt_publish(self.mqtt_topic_state, str(state), namespace="mqtt")
|
||||
|
||||
def handle_set_state_payload(self, event_name, data, cb_args):
|
||||
state = data["payload"]
|
||||
|
||||
# Set state alone does not trigger state change event, so we need to call it manually
|
||||
if state == "on":
|
||||
self.call_service("homeassistant/turn_on", entity_id=self.entity_id)
|
||||
elif state == "off":
|
||||
self.call_service("homeassistant/turn_off", entity_id=self.entity_id)
|
||||
else:
|
||||
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.log("State change detected: {} -> {}".format(old, new))
|
||||
self.publish_state_to_mqtt()
|
Loading…
Add table
Add a link
Reference in a new issue