Move CONF_STATE_TOPIC, CONF_COMMAND_TOPIC and CONF_RETAIN to mqtt component.
This commit is contained in:
parent
0ef0d4bac7
commit
a7016e4b32
9 changed files with 73 additions and 69 deletions
|
@ -14,14 +14,14 @@ from homeassistant.const import (
|
||||||
STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_DISARMED,
|
STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_DISARMED,
|
||||||
STATE_ALARM_PENDING, STATE_ALARM_TRIGGERED, STATE_UNKNOWN,
|
STATE_ALARM_PENDING, STATE_ALARM_TRIGGERED, STATE_UNKNOWN,
|
||||||
CONF_NAME)
|
CONF_NAME)
|
||||||
|
from homeassistant.components.mqtt import (
|
||||||
|
CONF_STATE_TOPIC, CONF_COMMAND_TOPIC, CONF_QOS)
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
DEPENDENCIES = ['mqtt']
|
DEPENDENCIES = ['mqtt']
|
||||||
|
|
||||||
CONF_STATE_TOPIC = 'state_topic'
|
|
||||||
CONF_COMMAND_TOPIC = 'command_topic'
|
|
||||||
CONF_PAYLOAD_DISARM = 'payload_disarm'
|
CONF_PAYLOAD_DISARM = 'payload_disarm'
|
||||||
CONF_PAYLOAD_ARM_HOME = 'payload_arm_home'
|
CONF_PAYLOAD_ARM_HOME = 'payload_arm_home'
|
||||||
CONF_PAYLOAD_ARM_AWAY = 'payload_arm_away'
|
CONF_PAYLOAD_ARM_AWAY = 'payload_arm_away'
|
||||||
|
@ -50,11 +50,11 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
config[CONF_NAME],
|
config[CONF_NAME],
|
||||||
config[CONF_STATE_TOPIC],
|
config[CONF_STATE_TOPIC],
|
||||||
config[CONF_COMMAND_TOPIC],
|
config[CONF_COMMAND_TOPIC],
|
||||||
config[mqtt.CONF_QOS],
|
config[CONF_QOS],
|
||||||
config[CONF_PAYLOAD_DISARM],
|
config[CONF_PAYLOAD_DISARM],
|
||||||
config[CONF_PAYLOAD_ARM_HOME],
|
config[CONF_PAYLOAD_ARM_HOME],
|
||||||
config[CONF_PAYLOAD_ARM_AWAY],
|
config[CONF_PAYLOAD_ARM_AWAY],
|
||||||
config.get('code'))])
|
config.get(CONF_CODE))])
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=too-many-arguments, too-many-instance-attributes
|
# pylint: disable=too-many-arguments, too-many-instance-attributes
|
||||||
|
@ -74,7 +74,7 @@ class MqttAlarm(alarm.AlarmControlPanel):
|
||||||
self._payload_disarm = payload_disarm
|
self._payload_disarm = payload_disarm
|
||||||
self._payload_arm_home = payload_arm_home
|
self._payload_arm_home = payload_arm_home
|
||||||
self._payload_arm_away = payload_arm_away
|
self._payload_arm_away = payload_arm_away
|
||||||
self._code = str(code) if code else None
|
self._code = code
|
||||||
|
|
||||||
def message_received(topic, payload, qos):
|
def message_received(topic, payload, qos):
|
||||||
"""A new MQTT message has been received."""
|
"""A new MQTT message has been received."""
|
||||||
|
|
|
@ -12,6 +12,7 @@ import homeassistant.components.mqtt as mqtt
|
||||||
from homeassistant.components.binary_sensor import (BinarySensorDevice,
|
from homeassistant.components.binary_sensor import (BinarySensorDevice,
|
||||||
SENSOR_CLASSES)
|
SENSOR_CLASSES)
|
||||||
from homeassistant.const import CONF_NAME, CONF_VALUE_TEMPLATE
|
from homeassistant.const import CONF_NAME, CONF_VALUE_TEMPLATE
|
||||||
|
from homeassistant.components.mqtt import CONF_STATE_TOPIC, CONF_QOS
|
||||||
from homeassistant.helpers import template
|
from homeassistant.helpers import template
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
|
@ -19,7 +20,6 @@ _LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
DEPENDENCIES = ['mqtt']
|
DEPENDENCIES = ['mqtt']
|
||||||
|
|
||||||
CONF_STATE_TOPIC = 'state_topic'
|
|
||||||
CONF_SENSOR_CLASS = 'sensor_class'
|
CONF_SENSOR_CLASS = 'sensor_class'
|
||||||
CONF_PAYLOAD_ON = 'payload_on'
|
CONF_PAYLOAD_ON = 'payload_on'
|
||||||
CONF_PAYLOAD_OFF = 'payload_off'
|
CONF_PAYLOAD_OFF = 'payload_off'
|
||||||
|
@ -28,14 +28,12 @@ DEFAULT_NAME = 'MQTT Binary sensor'
|
||||||
DEFAULT_PAYLOAD_ON = 'ON'
|
DEFAULT_PAYLOAD_ON = 'ON'
|
||||||
DEFAULT_PAYLOAD_OFF = 'OFF'
|
DEFAULT_PAYLOAD_OFF = 'OFF'
|
||||||
|
|
||||||
PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = mqtt.MQTT_RO_PLATFORM_SCHEMA.extend({
|
||||||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
||||||
vol.Required(CONF_STATE_TOPIC): mqtt.valid_subscribe_topic,
|
|
||||||
vol.Optional(CONF_SENSOR_CLASS, default=None):
|
vol.Optional(CONF_SENSOR_CLASS, default=None):
|
||||||
vol.Any(vol.In(SENSOR_CLASSES), vol.SetTo(None)),
|
vol.Any(vol.In(SENSOR_CLASSES), vol.SetTo(None)),
|
||||||
vol.Optional(CONF_PAYLOAD_ON, default=DEFAULT_PAYLOAD_ON): cv.string,
|
vol.Optional(CONF_PAYLOAD_ON, default=DEFAULT_PAYLOAD_ON): cv.string,
|
||||||
vol.Optional(CONF_PAYLOAD_OFF, default=DEFAULT_PAYLOAD_OFF): cv.string,
|
vol.Optional(CONF_PAYLOAD_OFF, default=DEFAULT_PAYLOAD_OFF): cv.string,
|
||||||
vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,7 +45,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
config[CONF_NAME],
|
config[CONF_NAME],
|
||||||
config[CONF_STATE_TOPIC],
|
config[CONF_STATE_TOPIC],
|
||||||
config[CONF_SENSOR_CLASS],
|
config[CONF_SENSOR_CLASS],
|
||||||
config[mqtt.CONF_QOS],
|
config[CONF_QOS],
|
||||||
config[CONF_PAYLOAD_ON],
|
config[CONF_PAYLOAD_ON],
|
||||||
config[CONF_PAYLOAD_OFF],
|
config[CONF_PAYLOAD_OFF],
|
||||||
config.get(CONF_VALUE_TEMPLATE)
|
config.get(CONF_VALUE_TEMPLATE)
|
||||||
|
|
|
@ -9,6 +9,7 @@ import logging
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
import homeassistant.components.mqtt as mqtt
|
import homeassistant.components.mqtt as mqtt
|
||||||
|
from homeassistant.components.mqtt import CONF_QOS
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
DEPENDENCIES = ['mqtt']
|
DEPENDENCIES = ['mqtt']
|
||||||
|
@ -25,7 +26,7 @@ PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend({
|
||||||
def setup_scanner(hass, config, see):
|
def setup_scanner(hass, config, see):
|
||||||
"""Setup the MQTT tracker."""
|
"""Setup the MQTT tracker."""
|
||||||
devices = config[CONF_DEVICES]
|
devices = config[CONF_DEVICES]
|
||||||
qos = config[mqtt.CONF_QOS]
|
qos = config[CONF_QOS]
|
||||||
|
|
||||||
dev_id_lookup = {}
|
dev_id_lookup = {}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,9 @@ import voluptuous as vol
|
||||||
import homeassistant.components.mqtt as mqtt
|
import homeassistant.components.mqtt as mqtt
|
||||||
from homeassistant.components.light import (
|
from homeassistant.components.light import (
|
||||||
ATTR_BRIGHTNESS, ATTR_RGB_COLOR, Light)
|
ATTR_BRIGHTNESS, ATTR_RGB_COLOR, Light)
|
||||||
from homeassistant.const import CONF_NAME, CONF_OPTIMISTIC
|
from homeassistant.const import CONF_NAME, CONF_OPTIMISTIC, CONF_VALUE_TEMPLATE
|
||||||
|
from homeassistant.components.mqtt import (
|
||||||
|
CONF_STATE_TOPIC, CONF_COMMAND_TOPIC, CONF_QOS, CONF_RETAIN)
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.template import render_with_possible_json_value
|
from homeassistant.helpers.template import render_with_possible_json_value
|
||||||
|
|
||||||
|
@ -20,8 +22,6 @@ _LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
DEPENDENCIES = ['mqtt']
|
DEPENDENCIES = ['mqtt']
|
||||||
|
|
||||||
CONF_STATE_TOPIC = 'state_topic'
|
|
||||||
CONF_COMMAND_TOPIC = 'command_topic'
|
|
||||||
CONF_STATE_VALUE_TEMPLATE = 'state_value_template'
|
CONF_STATE_VALUE_TEMPLATE = 'state_value_template'
|
||||||
CONF_BRIGHTNESS_STATE_TOPIC = 'brightness_state_topic'
|
CONF_BRIGHTNESS_STATE_TOPIC = 'brightness_state_topic'
|
||||||
CONF_BRIGHTNESS_COMMAND_TOPIC = 'brightness_command_topic'
|
CONF_BRIGHTNESS_COMMAND_TOPIC = 'brightness_command_topic'
|
||||||
|
@ -39,10 +39,8 @@ DEFAULT_PAYLOAD_OFF = 'OFF'
|
||||||
DEFAULT_OPTIMISTIC = False
|
DEFAULT_OPTIMISTIC = False
|
||||||
DEFAULT_BRIGHTNESS_SCALE = 255
|
DEFAULT_BRIGHTNESS_SCALE = 255
|
||||||
|
|
||||||
PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = mqtt.MQTT_RW_PLATFORM_SCHEMA.extend({
|
||||||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
||||||
vol.Optional(CONF_STATE_TOPIC): mqtt.valid_subscribe_topic,
|
|
||||||
vol.Required(CONF_COMMAND_TOPIC): mqtt.valid_publish_topic,
|
|
||||||
vol.Optional(CONF_STATE_VALUE_TEMPLATE): cv.template,
|
vol.Optional(CONF_STATE_VALUE_TEMPLATE): cv.template,
|
||||||
vol.Optional(CONF_BRIGHTNESS_STATE_TOPIC): mqtt.valid_subscribe_topic,
|
vol.Optional(CONF_BRIGHTNESS_STATE_TOPIC): mqtt.valid_subscribe_topic,
|
||||||
vol.Optional(CONF_BRIGHTNESS_COMMAND_TOPIC): mqtt.valid_publish_topic,
|
vol.Optional(CONF_BRIGHTNESS_COMMAND_TOPIC): mqtt.valid_publish_topic,
|
||||||
|
@ -60,6 +58,8 @@ PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend({
|
||||||
|
|
||||||
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
|
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
|
||||||
"""Add MQTT Light."""
|
"""Add MQTT Light."""
|
||||||
|
config.setdefault(CONF_STATE_VALUE_TEMPLATE,
|
||||||
|
config.get(CONF_VALUE_TEMPLATE))
|
||||||
add_devices_callback([MqttLight(
|
add_devices_callback([MqttLight(
|
||||||
hass,
|
hass,
|
||||||
config[CONF_NAME],
|
config[CONF_NAME],
|
||||||
|
@ -78,7 +78,8 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None):
|
||||||
'brightness': config.get(CONF_BRIGHTNESS_VALUE_TEMPLATE),
|
'brightness': config.get(CONF_BRIGHTNESS_VALUE_TEMPLATE),
|
||||||
'rgb': config.get(CONF_RGB_VALUE_TEMPLATE)
|
'rgb': config.get(CONF_RGB_VALUE_TEMPLATE)
|
||||||
},
|
},
|
||||||
config[mqtt.CONF_QOS],
|
config[CONF_QOS],
|
||||||
|
config[CONF_RETAIN],
|
||||||
{
|
{
|
||||||
'on': config[CONF_PAYLOAD_ON],
|
'on': config[CONF_PAYLOAD_ON],
|
||||||
'off': config[CONF_PAYLOAD_OFF],
|
'off': config[CONF_PAYLOAD_OFF],
|
||||||
|
@ -92,13 +93,14 @@ class MqttLight(Light):
|
||||||
"""MQTT light."""
|
"""MQTT light."""
|
||||||
|
|
||||||
# pylint: disable=too-many-arguments,too-many-instance-attributes
|
# pylint: disable=too-many-arguments,too-many-instance-attributes
|
||||||
def __init__(self, hass, name, topic, templates, qos, payload, optimistic,
|
def __init__(self, hass, name, topic, templates, qos, retain, payload,
|
||||||
brightness_scale):
|
optimistic, brightness_scale):
|
||||||
"""Initialize MQTT light."""
|
"""Initialize MQTT light."""
|
||||||
self._hass = hass
|
self._hass = hass
|
||||||
self._name = name
|
self._name = name
|
||||||
self._topic = topic
|
self._topic = topic
|
||||||
self._qos = qos
|
self._qos = qos
|
||||||
|
self._retain = retain
|
||||||
self._payload = payload
|
self._payload = payload
|
||||||
self._optimistic = optimistic or topic["state_topic"] is None
|
self._optimistic = optimistic or topic["state_topic"] is None
|
||||||
self._optimistic_rgb = optimistic or topic["rgb_state_topic"] is None
|
self._optimistic_rgb = optimistic or topic["rgb_state_topic"] is None
|
||||||
|
@ -194,7 +196,8 @@ class MqttLight(Light):
|
||||||
self._topic["rgb_command_topic"] is not None:
|
self._topic["rgb_command_topic"] is not None:
|
||||||
|
|
||||||
mqtt.publish(self._hass, self._topic["rgb_command_topic"],
|
mqtt.publish(self._hass, self._topic["rgb_command_topic"],
|
||||||
"{},{},{}".format(*kwargs[ATTR_RGB_COLOR]), self._qos)
|
"{},{},{}".format(*kwargs[ATTR_RGB_COLOR]),
|
||||||
|
self._qos, self._retain)
|
||||||
|
|
||||||
if self._optimistic_rgb:
|
if self._optimistic_rgb:
|
||||||
self._rgb = kwargs[ATTR_RGB_COLOR]
|
self._rgb = kwargs[ATTR_RGB_COLOR]
|
||||||
|
@ -205,14 +208,14 @@ class MqttLight(Light):
|
||||||
percent_bright = float(kwargs[ATTR_BRIGHTNESS]) / 255
|
percent_bright = float(kwargs[ATTR_BRIGHTNESS]) / 255
|
||||||
device_brightness = int(percent_bright * self._brightness_scale)
|
device_brightness = int(percent_bright * self._brightness_scale)
|
||||||
mqtt.publish(self._hass, self._topic["brightness_command_topic"],
|
mqtt.publish(self._hass, self._topic["brightness_command_topic"],
|
||||||
device_brightness, self._qos)
|
device_brightness, self._qos, self._retain)
|
||||||
|
|
||||||
if self._optimistic_brightness:
|
if self._optimistic_brightness:
|
||||||
self._brightness = kwargs[ATTR_BRIGHTNESS]
|
self._brightness = kwargs[ATTR_BRIGHTNESS]
|
||||||
should_update = True
|
should_update = True
|
||||||
|
|
||||||
mqtt.publish(self._hass, self._topic["command_topic"],
|
mqtt.publish(self._hass, self._topic["command_topic"],
|
||||||
self._payload["on"], self._qos)
|
self._payload["on"], self._qos, self._retain)
|
||||||
|
|
||||||
if self._optimistic:
|
if self._optimistic:
|
||||||
# Optimistically assume that switch has changed state.
|
# Optimistically assume that switch has changed state.
|
||||||
|
@ -225,7 +228,7 @@ class MqttLight(Light):
|
||||||
def turn_off(self, **kwargs):
|
def turn_off(self, **kwargs):
|
||||||
"""Turn the device off."""
|
"""Turn the device off."""
|
||||||
mqtt.publish(self._hass, self._topic["command_topic"],
|
mqtt.publish(self._hass, self._topic["command_topic"],
|
||||||
self._payload["off"], self._qos)
|
self._payload["off"], self._qos, self._retain)
|
||||||
|
|
||||||
if self._optimistic:
|
if self._optimistic:
|
||||||
# Optimistically assume that switch has changed state.
|
# Optimistically assume that switch has changed state.
|
||||||
|
|
|
@ -11,6 +11,8 @@ import voluptuous as vol
|
||||||
import homeassistant.components.mqtt as mqtt
|
import homeassistant.components.mqtt as mqtt
|
||||||
from homeassistant.components.lock import LockDevice
|
from homeassistant.components.lock import LockDevice
|
||||||
from homeassistant.const import CONF_NAME, CONF_OPTIMISTIC, CONF_VALUE_TEMPLATE
|
from homeassistant.const import CONF_NAME, CONF_OPTIMISTIC, CONF_VALUE_TEMPLATE
|
||||||
|
from homeassistant.components.mqtt import (
|
||||||
|
CONF_STATE_TOPIC, CONF_COMMAND_TOPIC, CONF_QOS, CONF_RETAIN)
|
||||||
from homeassistant.helpers import template
|
from homeassistant.helpers import template
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
|
@ -18,9 +20,6 @@ _LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
DEPENDENCIES = ['mqtt']
|
DEPENDENCIES = ['mqtt']
|
||||||
|
|
||||||
CONF_STATE_TOPIC = 'state_topic'
|
|
||||||
CONF_COMMAND_TOPIC = 'command_topic'
|
|
||||||
CONF_RETAIN = 'retain'
|
|
||||||
CONF_PAYLOAD_LOCK = 'payload_lock'
|
CONF_PAYLOAD_LOCK = 'payload_lock'
|
||||||
CONF_PAYLOAD_UNLOCK = 'payload_unlock'
|
CONF_PAYLOAD_UNLOCK = 'payload_unlock'
|
||||||
|
|
||||||
|
@ -28,19 +27,14 @@ DEFAULT_NAME = "MQTT Lock"
|
||||||
DEFAULT_PAYLOAD_LOCK = "LOCK"
|
DEFAULT_PAYLOAD_LOCK = "LOCK"
|
||||||
DEFAULT_PAYLOAD_UNLOCK = "UNLOCK"
|
DEFAULT_PAYLOAD_UNLOCK = "UNLOCK"
|
||||||
DEFAULT_OPTIMISTIC = False
|
DEFAULT_OPTIMISTIC = False
|
||||||
DEFAULT_RETAIN = False
|
|
||||||
|
|
||||||
PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = mqtt.MQTT_RW_PLATFORM_SCHEMA.extend({
|
||||||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
||||||
vol.Optional(CONF_STATE_TOPIC): mqtt.valid_subscribe_topic,
|
|
||||||
vol.Required(CONF_COMMAND_TOPIC): mqtt.valid_publish_topic,
|
|
||||||
vol.Optional(CONF_PAYLOAD_LOCK, default=DEFAULT_PAYLOAD_LOCK):
|
vol.Optional(CONF_PAYLOAD_LOCK, default=DEFAULT_PAYLOAD_LOCK):
|
||||||
cv.string,
|
cv.string,
|
||||||
vol.Optional(CONF_PAYLOAD_UNLOCK, default=DEFAULT_PAYLOAD_UNLOCK):
|
vol.Optional(CONF_PAYLOAD_UNLOCK, default=DEFAULT_PAYLOAD_UNLOCK):
|
||||||
cv.string,
|
cv.string,
|
||||||
vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean,
|
vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean,
|
||||||
vol.Optional(CONF_RETAIN, default=DEFAULT_RETAIN): cv.boolean,
|
|
||||||
vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,7 +46,7 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None):
|
||||||
config[CONF_NAME],
|
config[CONF_NAME],
|
||||||
config.get(CONF_STATE_TOPIC),
|
config.get(CONF_STATE_TOPIC),
|
||||||
config[CONF_COMMAND_TOPIC],
|
config[CONF_COMMAND_TOPIC],
|
||||||
config[mqtt.CONF_QOS],
|
config[CONF_QOS],
|
||||||
config[CONF_RETAIN],
|
config[CONF_RETAIN],
|
||||||
config[CONF_PAYLOAD_LOCK],
|
config[CONF_PAYLOAD_LOCK],
|
||||||
config[CONF_PAYLOAD_UNLOCK],
|
config[CONF_PAYLOAD_UNLOCK],
|
||||||
|
|
|
@ -18,7 +18,7 @@ from homeassistant.helpers import template
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP,
|
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP,
|
||||||
CONF_PLATFORM, CONF_SCAN_INTERVAL)
|
CONF_PLATFORM, CONF_SCAN_INTERVAL, CONF_VALUE_TEMPLATE)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -40,7 +40,11 @@ CONF_USERNAME = 'username'
|
||||||
CONF_PASSWORD = 'password'
|
CONF_PASSWORD = 'password'
|
||||||
CONF_CERTIFICATE = 'certificate'
|
CONF_CERTIFICATE = 'certificate'
|
||||||
CONF_PROTOCOL = 'protocol'
|
CONF_PROTOCOL = 'protocol'
|
||||||
|
|
||||||
|
CONF_STATE_TOPIC = 'state_topic'
|
||||||
|
CONF_COMMAND_TOPIC = 'command_topic'
|
||||||
CONF_QOS = 'qos'
|
CONF_QOS = 'qos'
|
||||||
|
CONF_RETAIN = 'retain'
|
||||||
|
|
||||||
PROTOCOL_31 = '3.1'
|
PROTOCOL_31 = '3.1'
|
||||||
PROTOCOL_311 = '3.1.1'
|
PROTOCOL_311 = '3.1.1'
|
||||||
|
@ -55,10 +59,22 @@ ATTR_TOPIC = 'topic'
|
||||||
ATTR_PAYLOAD = 'payload'
|
ATTR_PAYLOAD = 'payload'
|
||||||
ATTR_PAYLOAD_TEMPLATE = 'payload_template'
|
ATTR_PAYLOAD_TEMPLATE = 'payload_template'
|
||||||
ATTR_QOS = CONF_QOS
|
ATTR_QOS = CONF_QOS
|
||||||
ATTR_RETAIN = 'retain'
|
ATTR_RETAIN = CONF_RETAIN
|
||||||
|
|
||||||
MAX_RECONNECT_WAIT = 300 # seconds
|
MAX_RECONNECT_WAIT = 300 # seconds
|
||||||
|
|
||||||
|
|
||||||
|
def valid_subscribe_topic(value, invalid_chars='\0'):
|
||||||
|
"""Validate that we can subscribe using this MQTT topic."""
|
||||||
|
if isinstance(value, str) and all(c not in value for c in invalid_chars):
|
||||||
|
return vol.Length(min=1, max=65535)(value)
|
||||||
|
raise vol.Invalid('Invalid MQTT topic name')
|
||||||
|
|
||||||
|
|
||||||
|
def valid_publish_topic(value):
|
||||||
|
"""Validate that we can publish using this MQTT topic."""
|
||||||
|
return valid_subscribe_topic(value, invalid_chars='#+\0')
|
||||||
|
|
||||||
_VALID_QOS_SCHEMA = vol.All(vol.Coerce(int), vol.In([0, 1, 2]))
|
_VALID_QOS_SCHEMA = vol.All(vol.Coerce(int), vol.In([0, 1, 2]))
|
||||||
_HBMQTT_CONFIG_SCHEMA = vol.Schema(dict)
|
_HBMQTT_CONFIG_SCHEMA = vol.Schema(dict)
|
||||||
|
|
||||||
|
@ -86,19 +102,22 @@ MQTT_BASE_PLATFORM_SCHEMA = vol.Schema({
|
||||||
vol.Optional(CONF_QOS, default=DEFAULT_QOS): _VALID_QOS_SCHEMA,
|
vol.Optional(CONF_QOS, default=DEFAULT_QOS): _VALID_QOS_SCHEMA,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
# Sensor type platforms subscribe to mqtt events
|
||||||
|
MQTT_RO_PLATFORM_SCHEMA = MQTT_BASE_PLATFORM_SCHEMA.extend({
|
||||||
|
vol.Required(CONF_STATE_TOPIC): valid_subscribe_topic,
|
||||||
|
vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
|
||||||
|
})
|
||||||
|
|
||||||
|
# Switch type platforms publish to mqtt and may subscribe
|
||||||
|
MQTT_RW_PLATFORM_SCHEMA = MQTT_BASE_PLATFORM_SCHEMA.extend({
|
||||||
|
vol.Required(CONF_COMMAND_TOPIC): valid_publish_topic,
|
||||||
|
vol.Optional(CONF_RETAIN, default=DEFAULT_RETAIN): cv.boolean,
|
||||||
|
vol.Optional(CONF_STATE_TOPIC): valid_subscribe_topic,
|
||||||
|
vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
# Service call validation schema
|
# Service call validation schema
|
||||||
def valid_subscribe_topic(value, invalid_chars='\0'):
|
|
||||||
"""Validate that we can subscribe using this MQTT topic."""
|
|
||||||
if isinstance(value, str) and all(c not in value for c in invalid_chars):
|
|
||||||
return vol.Length(min=1, max=65535)(value)
|
|
||||||
raise vol.Invalid('Invalid MQTT topic name')
|
|
||||||
|
|
||||||
|
|
||||||
def valid_publish_topic(value):
|
|
||||||
"""Validate that we can publish using this MQTT topic."""
|
|
||||||
return valid_subscribe_topic(value, invalid_chars='#+\0')
|
|
||||||
|
|
||||||
MQTT_PUBLISH_SCHEMA = vol.Schema({
|
MQTT_PUBLISH_SCHEMA = vol.Schema({
|
||||||
vol.Required(ATTR_TOPIC): valid_publish_topic,
|
vol.Required(ATTR_TOPIC): valid_publish_topic,
|
||||||
vol.Exclusive(ATTR_PAYLOAD, 'payload'): object,
|
vol.Exclusive(ATTR_PAYLOAD, 'payload'): object,
|
||||||
|
|
|
@ -11,6 +11,8 @@ import voluptuous as vol
|
||||||
import homeassistant.components.mqtt as mqtt
|
import homeassistant.components.mqtt as mqtt
|
||||||
from homeassistant.components.rollershutter import RollershutterDevice
|
from homeassistant.components.rollershutter import RollershutterDevice
|
||||||
from homeassistant.const import CONF_NAME, CONF_VALUE_TEMPLATE
|
from homeassistant.const import CONF_NAME, CONF_VALUE_TEMPLATE
|
||||||
|
from homeassistant.components.mqtt import (
|
||||||
|
CONF_STATE_TOPIC, CONF_COMMAND_TOPIC, CONF_QOS)
|
||||||
from homeassistant.helpers import template
|
from homeassistant.helpers import template
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
|
@ -18,8 +20,6 @@ _LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
DEPENDENCIES = ['mqtt']
|
DEPENDENCIES = ['mqtt']
|
||||||
|
|
||||||
CONF_STATE_TOPIC = 'state_topic'
|
|
||||||
CONF_COMMAND_TOPIC = 'command_topic'
|
|
||||||
CONF_PAYLOAD_UP = 'payload_up'
|
CONF_PAYLOAD_UP = 'payload_up'
|
||||||
CONF_PAYLOAD_DOWN = 'payload_down'
|
CONF_PAYLOAD_DOWN = 'payload_down'
|
||||||
CONF_PAYLOAD_STOP = 'payload_stop'
|
CONF_PAYLOAD_STOP = 'payload_stop'
|
||||||
|
@ -29,14 +29,11 @@ DEFAULT_PAYLOAD_UP = "UP"
|
||||||
DEFAULT_PAYLOAD_DOWN = "DOWN"
|
DEFAULT_PAYLOAD_DOWN = "DOWN"
|
||||||
DEFAULT_PAYLOAD_STOP = "STOP"
|
DEFAULT_PAYLOAD_STOP = "STOP"
|
||||||
|
|
||||||
PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = mqtt.MQTT_RW_PLATFORM_SCHEMA.extend({
|
||||||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
||||||
vol.Optional(CONF_STATE_TOPIC): mqtt.valid_subscribe_topic,
|
|
||||||
vol.Required(CONF_COMMAND_TOPIC): mqtt.valid_publish_topic,
|
|
||||||
vol.Optional(CONF_PAYLOAD_UP, default=DEFAULT_PAYLOAD_UP): cv.string,
|
vol.Optional(CONF_PAYLOAD_UP, default=DEFAULT_PAYLOAD_UP): cv.string,
|
||||||
vol.Optional(CONF_PAYLOAD_DOWN, default=DEFAULT_PAYLOAD_DOWN): cv.string,
|
vol.Optional(CONF_PAYLOAD_DOWN, default=DEFAULT_PAYLOAD_DOWN): cv.string,
|
||||||
vol.Optional(CONF_PAYLOAD_STOP, default=DEFAULT_PAYLOAD_STOP): cv.string,
|
vol.Optional(CONF_PAYLOAD_STOP, default=DEFAULT_PAYLOAD_STOP): cv.string,
|
||||||
vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,7 +44,7 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None):
|
||||||
config[CONF_NAME],
|
config[CONF_NAME],
|
||||||
config.get(CONF_STATE_TOPIC),
|
config.get(CONF_STATE_TOPIC),
|
||||||
config[CONF_COMMAND_TOPIC],
|
config[CONF_COMMAND_TOPIC],
|
||||||
config[mqtt.CONF_QOS],
|
config[CONF_QOS],
|
||||||
config[CONF_PAYLOAD_UP],
|
config[CONF_PAYLOAD_UP],
|
||||||
config[CONF_PAYLOAD_DOWN],
|
config[CONF_PAYLOAD_DOWN],
|
||||||
config[CONF_PAYLOAD_STOP],
|
config[CONF_PAYLOAD_STOP],
|
||||||
|
|
|
@ -10,6 +10,7 @@ import voluptuous as vol
|
||||||
|
|
||||||
import homeassistant.components.mqtt as mqtt
|
import homeassistant.components.mqtt as mqtt
|
||||||
from homeassistant.const import CONF_NAME, CONF_VALUE_TEMPLATE, STATE_UNKNOWN
|
from homeassistant.const import CONF_NAME, CONF_VALUE_TEMPLATE, STATE_UNKNOWN
|
||||||
|
from homeassistant.components.mqtt import CONF_STATE_TOPIC, CONF_QOS
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
from homeassistant.helpers import template
|
from homeassistant.helpers import template
|
||||||
|
@ -18,16 +19,13 @@ _LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
DEPENDENCIES = ['mqtt']
|
DEPENDENCIES = ['mqtt']
|
||||||
|
|
||||||
CONF_STATE_TOPIC = 'state_topic'
|
|
||||||
CONF_UNIT_OF_MEASUREMENT = 'unit_of_measurement'
|
CONF_UNIT_OF_MEASUREMENT = 'unit_of_measurement'
|
||||||
|
|
||||||
DEFAULT_NAME = "MQTT Sensor"
|
DEFAULT_NAME = "MQTT Sensor"
|
||||||
|
|
||||||
PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = mqtt.MQTT_RO_PLATFORM_SCHEMA.extend({
|
||||||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
||||||
vol.Required(CONF_STATE_TOPIC): mqtt.valid_subscribe_topic,
|
|
||||||
vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,
|
vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,
|
||||||
vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,7 +36,7 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None):
|
||||||
hass,
|
hass,
|
||||||
config[CONF_NAME],
|
config[CONF_NAME],
|
||||||
config[CONF_STATE_TOPIC],
|
config[CONF_STATE_TOPIC],
|
||||||
config[mqtt.CONF_QOS],
|
config[CONF_QOS],
|
||||||
config.get(CONF_UNIT_OF_MEASUREMENT),
|
config.get(CONF_UNIT_OF_MEASUREMENT),
|
||||||
config.get(CONF_VALUE_TEMPLATE),
|
config.get(CONF_VALUE_TEMPLATE),
|
||||||
)])
|
)])
|
||||||
|
|
|
@ -11,6 +11,8 @@ import voluptuous as vol
|
||||||
import homeassistant.components.mqtt as mqtt
|
import homeassistant.components.mqtt as mqtt
|
||||||
from homeassistant.components.switch import SwitchDevice
|
from homeassistant.components.switch import SwitchDevice
|
||||||
from homeassistant.const import CONF_NAME, CONF_OPTIMISTIC, CONF_VALUE_TEMPLATE
|
from homeassistant.const import CONF_NAME, CONF_OPTIMISTIC, CONF_VALUE_TEMPLATE
|
||||||
|
from homeassistant.components.mqtt import (
|
||||||
|
CONF_STATE_TOPIC, CONF_COMMAND_TOPIC, CONF_QOS, CONF_RETAIN)
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers import template
|
from homeassistant.helpers import template
|
||||||
|
|
||||||
|
@ -18,9 +20,6 @@ _LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
DEPENDENCIES = ['mqtt']
|
DEPENDENCIES = ['mqtt']
|
||||||
|
|
||||||
CONF_STATE_TOPIC = 'state_topic'
|
|
||||||
CONF_COMMAND_TOPIC = 'command_topic'
|
|
||||||
CONF_RETAIN = 'retain'
|
|
||||||
CONF_PAYLOAD_ON = 'payload_on'
|
CONF_PAYLOAD_ON = 'payload_on'
|
||||||
CONF_PAYLOAD_OFF = 'payload_off'
|
CONF_PAYLOAD_OFF = 'payload_off'
|
||||||
|
|
||||||
|
@ -28,17 +27,12 @@ DEFAULT_NAME = "MQTT Switch"
|
||||||
DEFAULT_PAYLOAD_ON = "ON"
|
DEFAULT_PAYLOAD_ON = "ON"
|
||||||
DEFAULT_PAYLOAD_OFF = "OFF"
|
DEFAULT_PAYLOAD_OFF = "OFF"
|
||||||
DEFAULT_OPTIMISTIC = False
|
DEFAULT_OPTIMISTIC = False
|
||||||
DEFAULT_RETAIN = False
|
|
||||||
|
|
||||||
PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = mqtt.MQTT_RW_PLATFORM_SCHEMA.extend({
|
||||||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
||||||
vol.Optional(CONF_STATE_TOPIC): mqtt.valid_subscribe_topic,
|
|
||||||
vol.Required(CONF_COMMAND_TOPIC): mqtt.valid_publish_topic,
|
|
||||||
vol.Optional(CONF_RETAIN, default=DEFAULT_RETAIN): cv.boolean,
|
|
||||||
vol.Optional(CONF_PAYLOAD_ON, default=DEFAULT_PAYLOAD_ON): cv.string,
|
vol.Optional(CONF_PAYLOAD_ON, default=DEFAULT_PAYLOAD_ON): cv.string,
|
||||||
vol.Optional(CONF_PAYLOAD_OFF, default=DEFAULT_PAYLOAD_OFF): cv.string,
|
vol.Optional(CONF_PAYLOAD_OFF, default=DEFAULT_PAYLOAD_OFF): cv.string,
|
||||||
vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean,
|
vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean,
|
||||||
vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,7 +44,7 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None):
|
||||||
config[CONF_NAME],
|
config[CONF_NAME],
|
||||||
config.get(CONF_STATE_TOPIC),
|
config.get(CONF_STATE_TOPIC),
|
||||||
config[CONF_COMMAND_TOPIC],
|
config[CONF_COMMAND_TOPIC],
|
||||||
config[mqtt.CONF_QOS],
|
config[CONF_QOS],
|
||||||
config[CONF_RETAIN],
|
config[CONF_RETAIN],
|
||||||
config[CONF_PAYLOAD_ON],
|
config[CONF_PAYLOAD_ON],
|
||||||
config[CONF_PAYLOAD_OFF],
|
config[CONF_PAYLOAD_OFF],
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue