More support for availability reporting on MQTT components (#11336)
* Abstract MQTT availability from individual components - Moved availability topic and payloads to MQTT base schema. - Updated components that already report availability: - Switch - Binary sensor - Cover * Add availability reporting to additional MQTT components - Light - JSON light - Template light - Lock - Fan - HVAC - Sensor - Vacuum - Alarm control panel * Annotate MQTT platform coroutines
This commit is contained in:
parent
541707c3e7
commit
f0bf7b0def
25 changed files with 530 additions and 193 deletions
|
@ -21,7 +21,9 @@ from homeassistant.const import (
|
|||
CONF_BRIGHTNESS, CONF_COLOR_TEMP, CONF_EFFECT,
|
||||
CONF_NAME, CONF_OPTIMISTIC, CONF_RGB, CONF_WHITE_VALUE, CONF_XY)
|
||||
from homeassistant.components.mqtt import (
|
||||
CONF_STATE_TOPIC, CONF_COMMAND_TOPIC, CONF_QOS, CONF_RETAIN)
|
||||
CONF_AVAILABILITY_TOPIC, CONF_STATE_TOPIC, CONF_COMMAND_TOPIC,
|
||||
CONF_PAYLOAD_AVAILABLE, CONF_PAYLOAD_NOT_AVAILABLE, CONF_QOS, CONF_RETAIN,
|
||||
MqttAvailability)
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
@ -66,7 +68,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
|||
vol.Optional(CONF_WHITE_VALUE, default=DEFAULT_WHITE_VALUE): cv.boolean,
|
||||
vol.Optional(CONF_XY, default=DEFAULT_XY): cv.boolean,
|
||||
vol.Required(CONF_COMMAND_TOPIC): mqtt.valid_publish_topic,
|
||||
})
|
||||
}).extend(mqtt.MQTT_AVAILABILITY_SCHEMA.schema)
|
||||
|
||||
|
||||
@asyncio.coroutine
|
||||
|
@ -97,17 +99,23 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
|
|||
CONF_FLASH_TIME_SHORT,
|
||||
CONF_FLASH_TIME_LONG
|
||||
)
|
||||
}
|
||||
},
|
||||
config.get(CONF_AVAILABILITY_TOPIC),
|
||||
config.get(CONF_PAYLOAD_AVAILABLE),
|
||||
config.get(CONF_PAYLOAD_NOT_AVAILABLE)
|
||||
)])
|
||||
|
||||
|
||||
class MqttJson(Light):
|
||||
class MqttJson(MqttAvailability, Light):
|
||||
"""Representation of a MQTT JSON light."""
|
||||
|
||||
def __init__(self, name, effect_list, topic, qos, retain, optimistic,
|
||||
brightness, color_temp, effect, rgb, white_value, xy,
|
||||
flash_times):
|
||||
flash_times, availability_topic, payload_available,
|
||||
payload_not_available):
|
||||
"""Initialize MQTT JSON light."""
|
||||
super().__init__(availability_topic, qos, payload_available,
|
||||
payload_not_available)
|
||||
self._name = name
|
||||
self._effect_list = effect_list
|
||||
self._topic = topic
|
||||
|
@ -157,10 +165,9 @@ class MqttJson(Light):
|
|||
|
||||
@asyncio.coroutine
|
||||
def async_added_to_hass(self):
|
||||
"""Subscribe to MQTT events.
|
||||
"""Subscribe to MQTT events."""
|
||||
yield from super().async_added_to_hass()
|
||||
|
||||
This method is a coroutine.
|
||||
"""
|
||||
@callback
|
||||
def state_received(topic, payload, qos):
|
||||
"""Handle new MQTT messages."""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue