60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
"""
|
|
custom_components.mqtt_example
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Shows how to communicate with MQTT. Follows a topic on MQTT and updates the
|
|
state of an entity to the last message received on that topic.
|
|
|
|
Also offers a service 'set_state' that will publish a message on the topic that
|
|
will be passed via MQTT to our message received listener. Call the service with
|
|
example payload {"new_state": "some new state"}.
|
|
|
|
Configuration:
|
|
|
|
To use the mqtt_example component you will need to add the following to your
|
|
configuration.yaml file.
|
|
|
|
mqtt_example:
|
|
topic: home-assistant/mqtt_example
|
|
|
|
"""
|
|
import homeassistant.loader as loader
|
|
|
|
# The domain of your component. Should be equal to the name of your component
|
|
DOMAIN = "mqtt_example"
|
|
|
|
# List of component names (string) your component depends upon
|
|
DEPENDENCIES = ['mqtt']
|
|
|
|
|
|
CONF_TOPIC = 'topic'
|
|
DEFAULT_TOPIC = 'home-assistant/mqtt_example'
|
|
|
|
|
|
def setup(hass, config):
|
|
""" Setup our mqtt_example component. """
|
|
mqtt = loader.get_component('mqtt')
|
|
topic = config[DOMAIN].get('topic', DEFAULT_TOPIC)
|
|
entity_id = 'mqtt_example.last_message'
|
|
|
|
# Listen to a message on MQTT
|
|
|
|
def message_received(topic, payload, qos):
|
|
""" A new MQTT message has been received. """
|
|
hass.states.set(entity_id, payload)
|
|
|
|
mqtt.subscribe(hass, topic, message_received)
|
|
|
|
hass.states.set(entity_id, 'No messages')
|
|
|
|
# Service to publish a message on MQTT
|
|
|
|
def set_state_service(call):
|
|
""" Service to send a message. """
|
|
mqtt.publish(hass, topic, call.data.get('new_state'))
|
|
|
|
# Register our service with Home Assistant
|
|
hass.services.register(DOMAIN, 'set_state', set_state_service)
|
|
|
|
# return boolean to indicate that initialization was successful
|
|
return True
|