2022-05-31 07:32:44 +00:00
|
|
|
"""Support for MQTT message handling."""
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
import voluptuous as vol
|
|
|
|
|
2022-06-20 06:51:12 +00:00
|
|
|
from homeassistant.const import CONF_VALUE_TEMPLATE
|
2022-05-31 07:32:44 +00:00
|
|
|
from homeassistant.helpers import config_validation as cv
|
|
|
|
|
|
|
|
from .const import (
|
|
|
|
CONF_COMMAND_TOPIC,
|
|
|
|
CONF_ENCODING,
|
|
|
|
CONF_QOS,
|
|
|
|
CONF_RETAIN,
|
|
|
|
CONF_STATE_TOPIC,
|
|
|
|
DEFAULT_ENCODING,
|
|
|
|
DEFAULT_QOS,
|
|
|
|
DEFAULT_RETAIN,
|
|
|
|
)
|
|
|
|
from .util import _VALID_QOS_SCHEMA, valid_publish_topic, valid_subscribe_topic
|
|
|
|
|
|
|
|
SCHEMA_BASE = {
|
|
|
|
vol.Optional(CONF_QOS, default=DEFAULT_QOS): _VALID_QOS_SCHEMA,
|
|
|
|
vol.Optional(CONF_ENCODING, default=DEFAULT_ENCODING): cv.string,
|
|
|
|
}
|
|
|
|
|
|
|
|
MQTT_BASE_SCHEMA = vol.Schema(SCHEMA_BASE)
|
|
|
|
|
|
|
|
# Sensor type platforms subscribe to MQTT events
|
|
|
|
MQTT_RO_SCHEMA = MQTT_BASE_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_SCHEMA = MQTT_BASE_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,
|
|
|
|
}
|
|
|
|
)
|