Refactor shared mqtt schema's to new module (#117944)
* Refactor mqtt schema's to new module * Remove unrelated change
This commit is contained in:
parent
ad69a23fda
commit
050fc73056
35 changed files with 255 additions and 231 deletions
|
@ -42,12 +42,12 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
)
|
)
|
||||||
from .models import MqttCommandTemplate, MqttValueTemplate, ReceiveMessage
|
from .models import MqttCommandTemplate, MqttValueTemplate, ReceiveMessage
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_publish_topic, valid_subscribe_topic
|
from .util import valid_publish_topic, valid_subscribe_topic
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
|
@ -39,13 +39,13 @@ from .config import MQTT_RO_SCHEMA
|
||||||
from .const import CONF_ENCODING, CONF_QOS, CONF_STATE_TOPIC, PAYLOAD_NONE
|
from .const import CONF_ENCODING, CONF_QOS, CONF_STATE_TOPIC, PAYLOAD_NONE
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttAvailability,
|
MqttAvailability,
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
)
|
)
|
||||||
from .models import MqttValueTemplate, ReceiveMessage
|
from .models import MqttValueTemplate, ReceiveMessage
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -21,12 +21,9 @@ from .const import (
|
||||||
CONF_QOS,
|
CONF_QOS,
|
||||||
CONF_RETAIN,
|
CONF_RETAIN,
|
||||||
)
|
)
|
||||||
from .mixins import (
|
from .mixins import MqttEntity, async_setup_entity_entry_helper
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
|
||||||
async_setup_entity_entry_helper,
|
|
||||||
)
|
|
||||||
from .models import MqttCommandTemplate
|
from .models import MqttCommandTemplate
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_publish_topic
|
from .util import valid_publish_topic
|
||||||
|
|
||||||
CONF_PAYLOAD_PRESS = "payload_press"
|
CONF_PAYLOAD_PRESS = "payload_press"
|
||||||
|
|
|
@ -21,12 +21,9 @@ from . import subscription
|
||||||
from .config import MQTT_BASE_SCHEMA
|
from .config import MQTT_BASE_SCHEMA
|
||||||
from .const import CONF_QOS, CONF_TOPIC
|
from .const import CONF_QOS, CONF_TOPIC
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import MqttEntity, async_setup_entity_entry_helper
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
|
||||||
async_setup_entity_entry_helper,
|
|
||||||
)
|
|
||||||
from .models import ReceiveMessage
|
from .models import ReceiveMessage
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_subscribe_topic
|
from .util import valid_subscribe_topic
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
|
@ -81,7 +81,6 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
|
@ -93,6 +92,7 @@ from .models import (
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
)
|
)
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_publish_topic, valid_subscribe_topic
|
from .util import valid_publish_topic, valid_subscribe_topic
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
|
@ -14,13 +14,28 @@ ATTR_RETAIN = "retain"
|
||||||
ATTR_SERIAL_NUMBER = "serial_number"
|
ATTR_SERIAL_NUMBER = "serial_number"
|
||||||
ATTR_TOPIC = "topic"
|
ATTR_TOPIC = "topic"
|
||||||
|
|
||||||
|
AVAILABILITY_ALL = "all"
|
||||||
|
AVAILABILITY_ANY = "any"
|
||||||
|
AVAILABILITY_LATEST = "latest"
|
||||||
|
|
||||||
|
AVAILABILITY_MODES = [AVAILABILITY_ALL, AVAILABILITY_ANY, AVAILABILITY_LATEST]
|
||||||
|
|
||||||
|
CONF_PAYLOAD_AVAILABLE = "payload_available"
|
||||||
|
CONF_PAYLOAD_NOT_AVAILABLE = "payload_not_available"
|
||||||
|
|
||||||
CONF_AVAILABILITY = "availability"
|
CONF_AVAILABILITY = "availability"
|
||||||
|
|
||||||
|
CONF_AVAILABILITY_MODE = "availability_mode"
|
||||||
|
CONF_AVAILABILITY_TEMPLATE = "availability_template"
|
||||||
|
CONF_AVAILABILITY_TOPIC = "availability_topic"
|
||||||
CONF_BROKER = "broker"
|
CONF_BROKER = "broker"
|
||||||
CONF_BIRTH_MESSAGE = "birth_message"
|
CONF_BIRTH_MESSAGE = "birth_message"
|
||||||
CONF_COMMAND_TEMPLATE = "command_template"
|
CONF_COMMAND_TEMPLATE = "command_template"
|
||||||
CONF_COMMAND_TOPIC = "command_topic"
|
CONF_COMMAND_TOPIC = "command_topic"
|
||||||
CONF_DISCOVERY_PREFIX = "discovery_prefix"
|
CONF_DISCOVERY_PREFIX = "discovery_prefix"
|
||||||
CONF_ENCODING = "encoding"
|
CONF_ENCODING = "encoding"
|
||||||
|
CONF_JSON_ATTRS_TOPIC = "json_attributes_topic"
|
||||||
|
CONF_JSON_ATTRS_TEMPLATE = "json_attributes_template"
|
||||||
CONF_KEEPALIVE = "keepalive"
|
CONF_KEEPALIVE = "keepalive"
|
||||||
CONF_ORIGIN = "origin"
|
CONF_ORIGIN = "origin"
|
||||||
CONF_QOS = ATTR_QOS
|
CONF_QOS = ATTR_QOS
|
||||||
|
@ -42,6 +57,7 @@ CONF_CURRENT_HUMIDITY_TEMPLATE = "current_humidity_template"
|
||||||
CONF_CURRENT_HUMIDITY_TOPIC = "current_humidity_topic"
|
CONF_CURRENT_HUMIDITY_TOPIC = "current_humidity_topic"
|
||||||
CONF_CURRENT_TEMP_TEMPLATE = "current_temperature_template"
|
CONF_CURRENT_TEMP_TEMPLATE = "current_temperature_template"
|
||||||
CONF_CURRENT_TEMP_TOPIC = "current_temperature_topic"
|
CONF_CURRENT_TEMP_TOPIC = "current_temperature_topic"
|
||||||
|
CONF_ENABLED_BY_DEFAULT = "enabled_by_default"
|
||||||
CONF_MODE_COMMAND_TEMPLATE = "mode_command_template"
|
CONF_MODE_COMMAND_TEMPLATE = "mode_command_template"
|
||||||
CONF_MODE_COMMAND_TOPIC = "mode_command_topic"
|
CONF_MODE_COMMAND_TOPIC = "mode_command_topic"
|
||||||
CONF_MODE_LIST = "modes"
|
CONF_MODE_LIST = "modes"
|
||||||
|
@ -169,3 +185,34 @@ RELOADABLE_PLATFORMS = [
|
||||||
]
|
]
|
||||||
|
|
||||||
TEMPLATE_ERRORS = (jinja2.TemplateError, TemplateError, TypeError, ValueError)
|
TEMPLATE_ERRORS = (jinja2.TemplateError, TemplateError, TypeError, ValueError)
|
||||||
|
|
||||||
|
SUPPORTED_COMPONENTS = {
|
||||||
|
"alarm_control_panel",
|
||||||
|
"binary_sensor",
|
||||||
|
"button",
|
||||||
|
"camera",
|
||||||
|
"climate",
|
||||||
|
"cover",
|
||||||
|
"device_automation",
|
||||||
|
"device_tracker",
|
||||||
|
"event",
|
||||||
|
"fan",
|
||||||
|
"humidifier",
|
||||||
|
"image",
|
||||||
|
"lawn_mower",
|
||||||
|
"light",
|
||||||
|
"lock",
|
||||||
|
"notify",
|
||||||
|
"number",
|
||||||
|
"scene",
|
||||||
|
"siren",
|
||||||
|
"select",
|
||||||
|
"sensor",
|
||||||
|
"switch",
|
||||||
|
"tag",
|
||||||
|
"text",
|
||||||
|
"update",
|
||||||
|
"vacuum",
|
||||||
|
"valve",
|
||||||
|
"water_heater",
|
||||||
|
}
|
||||||
|
|
|
@ -64,12 +64,12 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
)
|
)
|
||||||
from .models import MqttCommandTemplate, MqttValueTemplate, ReceiveMessage
|
from .models import MqttCommandTemplate, MqttValueTemplate, ReceiveMessage
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_publish_topic, valid_subscribe_topic
|
from .util import valid_publish_topic, valid_subscribe_topic
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
|
@ -34,12 +34,12 @@ from .const import CONF_PAYLOAD_RESET, CONF_QOS, CONF_STATE_TOPIC
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
CONF_JSON_ATTRS_TOPIC,
|
CONF_JSON_ATTRS_TOPIC,
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
)
|
)
|
||||||
from .models import MqttValueTemplate, ReceiveMessage, ReceivePayloadType
|
from .models import MqttValueTemplate, ReceiveMessage, ReceivePayloadType
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_subscribe_topic
|
from .util import valid_subscribe_topic
|
||||||
|
|
||||||
CONF_PAYLOAD_HOME = "payload_home"
|
CONF_PAYLOAD_HOME = "payload_home"
|
||||||
|
|
|
@ -36,13 +36,9 @@ from .const import (
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
)
|
)
|
||||||
from .discovery import MQTTDiscoveryPayload, clear_discovery_hash
|
from .discovery import MQTTDiscoveryPayload, clear_discovery_hash
|
||||||
from .mixins import (
|
from .mixins import MqttDiscoveryDeviceUpdate, send_discovery_done, update_device
|
||||||
MQTT_ENTITY_DEVICE_INFO_SCHEMA,
|
|
||||||
MqttDiscoveryDeviceUpdate,
|
|
||||||
send_discovery_done,
|
|
||||||
update_device,
|
|
||||||
)
|
|
||||||
from .models import DATA_MQTT
|
from .models import DATA_MQTT
|
||||||
|
from .schemas import MQTT_ENTITY_DEVICE_INFO_SCHEMA
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -10,10 +10,8 @@ import re
|
||||||
import time
|
import time
|
||||||
from typing import TYPE_CHECKING, Any
|
from typing import TYPE_CHECKING, Any
|
||||||
|
|
||||||
import voluptuous as vol
|
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import CONF_DEVICE, CONF_NAME, CONF_PLATFORM
|
from homeassistant.const import CONF_DEVICE, CONF_PLATFORM
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.data_entry_flow import FlowResultType
|
from homeassistant.data_entry_flow import FlowResultType
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
@ -35,12 +33,12 @@ from .const import (
|
||||||
ATTR_DISCOVERY_TOPIC,
|
ATTR_DISCOVERY_TOPIC,
|
||||||
CONF_AVAILABILITY,
|
CONF_AVAILABILITY,
|
||||||
CONF_ORIGIN,
|
CONF_ORIGIN,
|
||||||
CONF_SUPPORT_URL,
|
|
||||||
CONF_SW_VERSION,
|
|
||||||
CONF_TOPIC,
|
CONF_TOPIC,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
|
SUPPORTED_COMPONENTS,
|
||||||
)
|
)
|
||||||
from .models import DATA_MQTT, MqttOriginInfo, ReceiveMessage
|
from .models import DATA_MQTT, MqttOriginInfo, ReceiveMessage
|
||||||
|
from .schemas import MQTT_ORIGIN_INFO_SCHEMA
|
||||||
from .util import async_forward_entry_setup_and_setup_discovery
|
from .util import async_forward_entry_setup_and_setup_discovery
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
@ -50,37 +48,6 @@ TOPIC_MATCHER = re.compile(
|
||||||
r"?(?P<object_id>[a-zA-Z0-9_-]+)/config"
|
r"?(?P<object_id>[a-zA-Z0-9_-]+)/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
SUPPORTED_COMPONENTS = {
|
|
||||||
"alarm_control_panel",
|
|
||||||
"binary_sensor",
|
|
||||||
"button",
|
|
||||||
"camera",
|
|
||||||
"climate",
|
|
||||||
"cover",
|
|
||||||
"device_automation",
|
|
||||||
"device_tracker",
|
|
||||||
"event",
|
|
||||||
"fan",
|
|
||||||
"humidifier",
|
|
||||||
"image",
|
|
||||||
"lawn_mower",
|
|
||||||
"light",
|
|
||||||
"lock",
|
|
||||||
"notify",
|
|
||||||
"number",
|
|
||||||
"scene",
|
|
||||||
"siren",
|
|
||||||
"select",
|
|
||||||
"sensor",
|
|
||||||
"switch",
|
|
||||||
"tag",
|
|
||||||
"text",
|
|
||||||
"update",
|
|
||||||
"vacuum",
|
|
||||||
"valve",
|
|
||||||
"water_heater",
|
|
||||||
}
|
|
||||||
|
|
||||||
MQTT_DISCOVERY_UPDATED: SignalTypeFormat[MQTTDiscoveryPayload] = SignalTypeFormat(
|
MQTT_DISCOVERY_UPDATED: SignalTypeFormat[MQTTDiscoveryPayload] = SignalTypeFormat(
|
||||||
"mqtt_discovery_updated_{}_{}"
|
"mqtt_discovery_updated_{}_{}"
|
||||||
)
|
)
|
||||||
|
@ -94,16 +61,6 @@ MQTT_DISCOVERY_DONE: SignalTypeFormat[Any] = SignalTypeFormat(
|
||||||
|
|
||||||
TOPIC_BASE = "~"
|
TOPIC_BASE = "~"
|
||||||
|
|
||||||
MQTT_ORIGIN_INFO_SCHEMA = vol.All(
|
|
||||||
vol.Schema(
|
|
||||||
{
|
|
||||||
vol.Required(CONF_NAME): cv.string,
|
|
||||||
vol.Optional(CONF_SW_VERSION): cv.string,
|
|
||||||
vol.Optional(CONF_SUPPORT_URL): cv.configuration_url,
|
|
||||||
}
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class MQTTDiscoveryPayload(dict[str, Any]):
|
class MQTTDiscoveryPayload(dict[str, Any]):
|
||||||
"""Class to hold and MQTT discovery payload and discovery data."""
|
"""Class to hold and MQTT discovery payload and discovery data."""
|
||||||
|
|
|
@ -32,11 +32,7 @@ from .const import (
|
||||||
PAYLOAD_NONE,
|
PAYLOAD_NONE,
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import MqttEntity, async_setup_entity_entry_helper
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
|
||||||
async_setup_entity_entry_helper,
|
|
||||||
)
|
|
||||||
from .models import (
|
from .models import (
|
||||||
DATA_MQTT,
|
DATA_MQTT,
|
||||||
MqttValueTemplate,
|
MqttValueTemplate,
|
||||||
|
@ -45,6 +41,7 @@ from .models import (
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
)
|
)
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,6 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
|
@ -64,6 +63,7 @@ from .models import (
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
)
|
)
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_publish_topic, valid_subscribe_topic
|
from .util import valid_publish_topic, valid_subscribe_topic
|
||||||
|
|
||||||
CONF_DIRECTION_STATE_TOPIC = "direction_state_topic"
|
CONF_DIRECTION_STATE_TOPIC = "direction_state_topic"
|
||||||
|
|
|
@ -53,7 +53,6 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
|
@ -65,6 +64,7 @@ from .models import (
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
)
|
)
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_publish_topic, valid_subscribe_topic
|
from .util import valid_publish_topic, valid_subscribe_topic
|
||||||
|
|
||||||
CONF_AVAILABLE_MODES_LIST = "modes"
|
CONF_AVAILABLE_MODES_LIST = "modes"
|
||||||
|
|
|
@ -27,11 +27,7 @@ from . import subscription
|
||||||
from .config import MQTT_BASE_SCHEMA
|
from .config import MQTT_BASE_SCHEMA
|
||||||
from .const import CONF_ENCODING, CONF_QOS
|
from .const import CONF_ENCODING, CONF_QOS
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import MqttEntity, async_setup_entity_entry_helper
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
|
||||||
async_setup_entity_entry_helper,
|
|
||||||
)
|
|
||||||
from .models import (
|
from .models import (
|
||||||
DATA_MQTT,
|
DATA_MQTT,
|
||||||
MessageCallbackType,
|
MessageCallbackType,
|
||||||
|
@ -39,6 +35,7 @@ from .models import (
|
||||||
MqttValueTemplateException,
|
MqttValueTemplateException,
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
)
|
)
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_subscribe_topic
|
from .util import valid_subscribe_topic
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
|
@ -33,7 +33,6 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
|
@ -45,6 +44,7 @@ from .models import (
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
)
|
)
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_publish_topic, valid_subscribe_topic
|
from .util import valid_publish_topic, valid_subscribe_topic
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
|
@ -54,7 +54,7 @@ from ..const import (
|
||||||
PAYLOAD_NONE,
|
PAYLOAD_NONE,
|
||||||
)
|
)
|
||||||
from ..debug_info import log_messages
|
from ..debug_info import log_messages
|
||||||
from ..mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity, write_state_on_attr_change
|
from ..mixins import MqttEntity, write_state_on_attr_change
|
||||||
from ..models import (
|
from ..models import (
|
||||||
MessageCallbackType,
|
MessageCallbackType,
|
||||||
MqttCommandTemplate,
|
MqttCommandTemplate,
|
||||||
|
@ -65,6 +65,7 @@ from ..models import (
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
TemplateVarsType,
|
TemplateVarsType,
|
||||||
)
|
)
|
||||||
|
from ..schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from ..util import valid_publish_topic, valid_subscribe_topic
|
from ..util import valid_publish_topic, valid_subscribe_topic
|
||||||
from .schema import MQTT_LIGHT_SCHEMA_SCHEMA
|
from .schema import MQTT_LIGHT_SCHEMA_SCHEMA
|
||||||
|
|
||||||
|
|
|
@ -67,8 +67,9 @@ from ..const import (
|
||||||
DOMAIN as MQTT_DOMAIN,
|
DOMAIN as MQTT_DOMAIN,
|
||||||
)
|
)
|
||||||
from ..debug_info import log_messages
|
from ..debug_info import log_messages
|
||||||
from ..mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity, write_state_on_attr_change
|
from ..mixins import MqttEntity, write_state_on_attr_change
|
||||||
from ..models import ReceiveMessage
|
from ..models import ReceiveMessage
|
||||||
|
from ..schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from ..util import valid_subscribe_topic
|
from ..util import valid_subscribe_topic
|
||||||
from .schema import MQTT_LIGHT_SCHEMA_SCHEMA
|
from .schema import MQTT_LIGHT_SCHEMA_SCHEMA
|
||||||
from .schema_basic import (
|
from .schema_basic import (
|
||||||
|
|
|
@ -45,7 +45,7 @@ from ..const import (
|
||||||
PAYLOAD_NONE,
|
PAYLOAD_NONE,
|
||||||
)
|
)
|
||||||
from ..debug_info import log_messages
|
from ..debug_info import log_messages
|
||||||
from ..mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity, write_state_on_attr_change
|
from ..mixins import MqttEntity, write_state_on_attr_change
|
||||||
from ..models import (
|
from ..models import (
|
||||||
MqttCommandTemplate,
|
MqttCommandTemplate,
|
||||||
MqttValueTemplate,
|
MqttValueTemplate,
|
||||||
|
@ -53,6 +53,7 @@ from ..models import (
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
)
|
)
|
||||||
|
from ..schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .schema import MQTT_LIGHT_SCHEMA_SCHEMA
|
from .schema import MQTT_LIGHT_SCHEMA_SCHEMA
|
||||||
from .schema_basic import MQTT_LIGHT_ATTRIBUTES_BLOCKED
|
from .schema_basic import MQTT_LIGHT_ATTRIBUTES_BLOCKED
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,6 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
|
@ -49,6 +48,7 @@ from .models import (
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
)
|
)
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
|
|
||||||
CONF_CODE_FORMAT = "code_format"
|
CONF_CODE_FORMAT = "code_format"
|
||||||
|
|
||||||
|
|
|
@ -31,11 +31,7 @@ from homeassistant.const import (
|
||||||
CONF_VALUE_TEMPLATE,
|
CONF_VALUE_TEMPLATE,
|
||||||
)
|
)
|
||||||
from homeassistant.core import Event, HomeAssistant, callback
|
from homeassistant.core import Event, HomeAssistant, callback
|
||||||
from homeassistant.helpers import (
|
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
||||||
config_validation as cv,
|
|
||||||
device_registry as dr,
|
|
||||||
entity_registry as er,
|
|
||||||
)
|
|
||||||
from homeassistant.helpers.device_registry import (
|
from homeassistant.helpers.device_registry import (
|
||||||
DeviceEntry,
|
DeviceEntry,
|
||||||
DeviceInfo,
|
DeviceInfo,
|
||||||
|
@ -45,11 +41,7 @@ from homeassistant.helpers.dispatcher import (
|
||||||
async_dispatcher_connect,
|
async_dispatcher_connect,
|
||||||
async_dispatcher_send,
|
async_dispatcher_send,
|
||||||
)
|
)
|
||||||
from homeassistant.helpers.entity import (
|
from homeassistant.helpers.entity import Entity, async_generate_entity_id
|
||||||
ENTITY_CATEGORIES_SCHEMA,
|
|
||||||
Entity,
|
|
||||||
async_generate_entity_id,
|
|
||||||
)
|
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.event import (
|
from homeassistant.helpers.event import (
|
||||||
async_track_device_registry_updated_event,
|
async_track_device_registry_updated_event,
|
||||||
|
@ -71,16 +63,24 @@ from .const import (
|
||||||
ATTR_DISCOVERY_HASH,
|
ATTR_DISCOVERY_HASH,
|
||||||
ATTR_DISCOVERY_PAYLOAD,
|
ATTR_DISCOVERY_PAYLOAD,
|
||||||
ATTR_DISCOVERY_TOPIC,
|
ATTR_DISCOVERY_TOPIC,
|
||||||
|
AVAILABILITY_ALL,
|
||||||
|
AVAILABILITY_ANY,
|
||||||
CONF_AVAILABILITY,
|
CONF_AVAILABILITY,
|
||||||
|
CONF_AVAILABILITY_MODE,
|
||||||
|
CONF_AVAILABILITY_TEMPLATE,
|
||||||
|
CONF_AVAILABILITY_TOPIC,
|
||||||
CONF_CONFIGURATION_URL,
|
CONF_CONFIGURATION_URL,
|
||||||
CONF_CONNECTIONS,
|
CONF_CONNECTIONS,
|
||||||
CONF_DEPRECATED_VIA_HUB,
|
CONF_ENABLED_BY_DEFAULT,
|
||||||
CONF_ENCODING,
|
CONF_ENCODING,
|
||||||
CONF_HW_VERSION,
|
CONF_HW_VERSION,
|
||||||
CONF_IDENTIFIERS,
|
CONF_IDENTIFIERS,
|
||||||
|
CONF_JSON_ATTRS_TEMPLATE,
|
||||||
|
CONF_JSON_ATTRS_TOPIC,
|
||||||
CONF_MANUFACTURER,
|
CONF_MANUFACTURER,
|
||||||
CONF_OBJECT_ID,
|
CONF_OBJECT_ID,
|
||||||
CONF_ORIGIN,
|
CONF_PAYLOAD_AVAILABLE,
|
||||||
|
CONF_PAYLOAD_NOT_AVAILABLE,
|
||||||
CONF_QOS,
|
CONF_QOS,
|
||||||
CONF_SCHEMA,
|
CONF_SCHEMA,
|
||||||
CONF_SERIAL_NUMBER,
|
CONF_SERIAL_NUMBER,
|
||||||
|
@ -89,8 +89,6 @@ from .const import (
|
||||||
CONF_TOPIC,
|
CONF_TOPIC,
|
||||||
CONF_VIA_DEVICE,
|
CONF_VIA_DEVICE,
|
||||||
DEFAULT_ENCODING,
|
DEFAULT_ENCODING,
|
||||||
DEFAULT_PAYLOAD_AVAILABLE,
|
|
||||||
DEFAULT_PAYLOAD_NOT_AVAILABLE,
|
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
MQTT_CONNECTED,
|
MQTT_CONNECTED,
|
||||||
MQTT_DISCONNECTED,
|
MQTT_DISCONNECTED,
|
||||||
|
@ -100,7 +98,6 @@ from .discovery import (
|
||||||
MQTT_DISCOVERY_DONE,
|
MQTT_DISCOVERY_DONE,
|
||||||
MQTT_DISCOVERY_NEW,
|
MQTT_DISCOVERY_NEW,
|
||||||
MQTT_DISCOVERY_UPDATED,
|
MQTT_DISCOVERY_UPDATED,
|
||||||
MQTT_ORIGIN_INFO_SCHEMA,
|
|
||||||
MQTTDiscoveryPayload,
|
MQTTDiscoveryPayload,
|
||||||
clear_discovery_hash,
|
clear_discovery_hash,
|
||||||
set_discovery_hash,
|
set_discovery_hash,
|
||||||
|
@ -119,25 +116,10 @@ from .subscription import (
|
||||||
async_subscribe_topics,
|
async_subscribe_topics,
|
||||||
async_unsubscribe_topics,
|
async_unsubscribe_topics,
|
||||||
)
|
)
|
||||||
from .util import mqtt_config_entry_enabled, valid_subscribe_topic
|
from .util import mqtt_config_entry_enabled
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
AVAILABILITY_ALL = "all"
|
|
||||||
AVAILABILITY_ANY = "any"
|
|
||||||
AVAILABILITY_LATEST = "latest"
|
|
||||||
|
|
||||||
AVAILABILITY_MODES = [AVAILABILITY_ALL, AVAILABILITY_ANY, AVAILABILITY_LATEST]
|
|
||||||
|
|
||||||
CONF_AVAILABILITY_MODE = "availability_mode"
|
|
||||||
CONF_AVAILABILITY_TEMPLATE = "availability_template"
|
|
||||||
CONF_AVAILABILITY_TOPIC = "availability_topic"
|
|
||||||
CONF_ENABLED_BY_DEFAULT = "enabled_by_default"
|
|
||||||
CONF_PAYLOAD_AVAILABLE = "payload_available"
|
|
||||||
CONF_PAYLOAD_NOT_AVAILABLE = "payload_not_available"
|
|
||||||
CONF_JSON_ATTRS_TOPIC = "json_attributes_topic"
|
|
||||||
CONF_JSON_ATTRS_TEMPLATE = "json_attributes_template"
|
|
||||||
|
|
||||||
MQTT_ATTRIBUTES_BLOCKED = {
|
MQTT_ATTRIBUTES_BLOCKED = {
|
||||||
"assumed_state",
|
"assumed_state",
|
||||||
"available",
|
"available",
|
||||||
|
@ -157,96 +139,6 @@ MQTT_ATTRIBUTES_BLOCKED = {
|
||||||
"unit_of_measurement",
|
"unit_of_measurement",
|
||||||
}
|
}
|
||||||
|
|
||||||
MQTT_AVAILABILITY_SINGLE_SCHEMA = vol.Schema(
|
|
||||||
{
|
|
||||||
vol.Exclusive(CONF_AVAILABILITY_TOPIC, "availability"): valid_subscribe_topic,
|
|
||||||
vol.Optional(CONF_AVAILABILITY_TEMPLATE): cv.template,
|
|
||||||
vol.Optional(
|
|
||||||
CONF_PAYLOAD_AVAILABLE, default=DEFAULT_PAYLOAD_AVAILABLE
|
|
||||||
): cv.string,
|
|
||||||
vol.Optional(
|
|
||||||
CONF_PAYLOAD_NOT_AVAILABLE, default=DEFAULT_PAYLOAD_NOT_AVAILABLE
|
|
||||||
): cv.string,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
MQTT_AVAILABILITY_LIST_SCHEMA = vol.Schema(
|
|
||||||
{
|
|
||||||
vol.Optional(CONF_AVAILABILITY_MODE, default=AVAILABILITY_LATEST): vol.All(
|
|
||||||
cv.string, vol.In(AVAILABILITY_MODES)
|
|
||||||
),
|
|
||||||
vol.Exclusive(CONF_AVAILABILITY, "availability"): vol.All(
|
|
||||||
cv.ensure_list,
|
|
||||||
[
|
|
||||||
{
|
|
||||||
vol.Required(CONF_TOPIC): valid_subscribe_topic,
|
|
||||||
vol.Optional(
|
|
||||||
CONF_PAYLOAD_AVAILABLE, default=DEFAULT_PAYLOAD_AVAILABLE
|
|
||||||
): cv.string,
|
|
||||||
vol.Optional(
|
|
||||||
CONF_PAYLOAD_NOT_AVAILABLE,
|
|
||||||
default=DEFAULT_PAYLOAD_NOT_AVAILABLE,
|
|
||||||
): cv.string,
|
|
||||||
vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
|
|
||||||
}
|
|
||||||
],
|
|
||||||
),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
MQTT_AVAILABILITY_SCHEMA = MQTT_AVAILABILITY_SINGLE_SCHEMA.extend(
|
|
||||||
MQTT_AVAILABILITY_LIST_SCHEMA.schema
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def validate_device_has_at_least_one_identifier(value: ConfigType) -> ConfigType:
|
|
||||||
"""Validate that a device info entry has at least one identifying value."""
|
|
||||||
if value.get(CONF_IDENTIFIERS) or value.get(CONF_CONNECTIONS):
|
|
||||||
return value
|
|
||||||
raise vol.Invalid(
|
|
||||||
"Device must have at least one identifying value in "
|
|
||||||
"'identifiers' and/or 'connections'"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
MQTT_ENTITY_DEVICE_INFO_SCHEMA = vol.All(
|
|
||||||
cv.deprecated(CONF_DEPRECATED_VIA_HUB, CONF_VIA_DEVICE),
|
|
||||||
vol.Schema(
|
|
||||||
{
|
|
||||||
vol.Optional(CONF_IDENTIFIERS, default=list): vol.All(
|
|
||||||
cv.ensure_list, [cv.string]
|
|
||||||
),
|
|
||||||
vol.Optional(CONF_CONNECTIONS, default=list): vol.All(
|
|
||||||
cv.ensure_list, [vol.All(vol.Length(2), [cv.string])]
|
|
||||||
),
|
|
||||||
vol.Optional(CONF_MANUFACTURER): cv.string,
|
|
||||||
vol.Optional(CONF_MODEL): cv.string,
|
|
||||||
vol.Optional(CONF_NAME): cv.string,
|
|
||||||
vol.Optional(CONF_HW_VERSION): cv.string,
|
|
||||||
vol.Optional(CONF_SERIAL_NUMBER): cv.string,
|
|
||||||
vol.Optional(CONF_SW_VERSION): cv.string,
|
|
||||||
vol.Optional(CONF_VIA_DEVICE): cv.string,
|
|
||||||
vol.Optional(CONF_SUGGESTED_AREA): cv.string,
|
|
||||||
vol.Optional(CONF_CONFIGURATION_URL): cv.configuration_url,
|
|
||||||
}
|
|
||||||
),
|
|
||||||
validate_device_has_at_least_one_identifier,
|
|
||||||
)
|
|
||||||
|
|
||||||
MQTT_ENTITY_COMMON_SCHEMA = MQTT_AVAILABILITY_SCHEMA.extend(
|
|
||||||
{
|
|
||||||
vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA,
|
|
||||||
vol.Optional(CONF_ORIGIN): MQTT_ORIGIN_INFO_SCHEMA,
|
|
||||||
vol.Optional(CONF_ENABLED_BY_DEFAULT, default=True): cv.boolean,
|
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
|
||||||
vol.Optional(CONF_ICON): cv.icon,
|
|
||||||
vol.Optional(CONF_JSON_ATTRS_TOPIC): valid_subscribe_topic,
|
|
||||||
vol.Optional(CONF_JSON_ATTRS_TEMPLATE): cv.template,
|
|
||||||
vol.Optional(CONF_OBJECT_ID): cv.string,
|
|
||||||
vol.Optional(CONF_UNIQUE_ID): cv.string,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class SetupEntity(Protocol):
|
class SetupEntity(Protocol):
|
||||||
"""Protocol type for async_setup_entities."""
|
"""Protocol type for async_setup_entities."""
|
||||||
|
|
|
@ -21,12 +21,9 @@ from .const import (
|
||||||
CONF_QOS,
|
CONF_QOS,
|
||||||
CONF_RETAIN,
|
CONF_RETAIN,
|
||||||
)
|
)
|
||||||
from .mixins import (
|
from .mixins import MqttEntity, async_setup_entity_entry_helper
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
|
||||||
async_setup_entity_entry_helper,
|
|
||||||
)
|
|
||||||
from .models import MqttCommandTemplate
|
from .models import MqttCommandTemplate
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_publish_topic
|
from .util import valid_publish_topic
|
||||||
|
|
||||||
DEFAULT_NAME = "MQTT notify"
|
DEFAULT_NAME = "MQTT notify"
|
||||||
|
|
|
@ -43,7 +43,6 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
|
@ -55,6 +54,7 @@ from .models import (
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
)
|
)
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,8 @@ from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
from .config import MQTT_BASE_SCHEMA
|
from .config import MQTT_BASE_SCHEMA
|
||||||
from .const import CONF_COMMAND_TOPIC, CONF_ENCODING, CONF_QOS, CONF_RETAIN
|
from .const import CONF_COMMAND_TOPIC, CONF_ENCODING, CONF_QOS, CONF_RETAIN
|
||||||
from .mixins import (
|
from .mixins import MqttEntity, async_setup_entity_entry_helper
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
MqttEntity,
|
|
||||||
async_setup_entity_entry_helper,
|
|
||||||
)
|
|
||||||
from .util import valid_publish_topic
|
from .util import valid_publish_topic
|
||||||
|
|
||||||
DEFAULT_NAME = "MQTT Scene"
|
DEFAULT_NAME = "MQTT Scene"
|
||||||
|
|
150
homeassistant/components/mqtt/schemas.py
Normal file
150
homeassistant/components/mqtt/schemas.py
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
"""Shared schemas for MQTT discovery and YAML config items."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.const import (
|
||||||
|
CONF_DEVICE,
|
||||||
|
CONF_ENTITY_CATEGORY,
|
||||||
|
CONF_ICON,
|
||||||
|
CONF_MODEL,
|
||||||
|
CONF_NAME,
|
||||||
|
CONF_UNIQUE_ID,
|
||||||
|
CONF_VALUE_TEMPLATE,
|
||||||
|
)
|
||||||
|
from homeassistant.helpers import config_validation as cv
|
||||||
|
from homeassistant.helpers.entity import ENTITY_CATEGORIES_SCHEMA
|
||||||
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
|
from .const import (
|
||||||
|
AVAILABILITY_LATEST,
|
||||||
|
AVAILABILITY_MODES,
|
||||||
|
CONF_AVAILABILITY,
|
||||||
|
CONF_AVAILABILITY_MODE,
|
||||||
|
CONF_AVAILABILITY_TEMPLATE,
|
||||||
|
CONF_AVAILABILITY_TOPIC,
|
||||||
|
CONF_CONFIGURATION_URL,
|
||||||
|
CONF_CONNECTIONS,
|
||||||
|
CONF_DEPRECATED_VIA_HUB,
|
||||||
|
CONF_ENABLED_BY_DEFAULT,
|
||||||
|
CONF_HW_VERSION,
|
||||||
|
CONF_IDENTIFIERS,
|
||||||
|
CONF_JSON_ATTRS_TEMPLATE,
|
||||||
|
CONF_JSON_ATTRS_TOPIC,
|
||||||
|
CONF_MANUFACTURER,
|
||||||
|
CONF_OBJECT_ID,
|
||||||
|
CONF_ORIGIN,
|
||||||
|
CONF_PAYLOAD_AVAILABLE,
|
||||||
|
CONF_PAYLOAD_NOT_AVAILABLE,
|
||||||
|
CONF_SERIAL_NUMBER,
|
||||||
|
CONF_SUGGESTED_AREA,
|
||||||
|
CONF_SUPPORT_URL,
|
||||||
|
CONF_SW_VERSION,
|
||||||
|
CONF_TOPIC,
|
||||||
|
CONF_VIA_DEVICE,
|
||||||
|
DEFAULT_PAYLOAD_AVAILABLE,
|
||||||
|
DEFAULT_PAYLOAD_NOT_AVAILABLE,
|
||||||
|
)
|
||||||
|
from .util import valid_subscribe_topic
|
||||||
|
|
||||||
|
MQTT_AVAILABILITY_SINGLE_SCHEMA = vol.Schema(
|
||||||
|
{
|
||||||
|
vol.Exclusive(CONF_AVAILABILITY_TOPIC, "availability"): valid_subscribe_topic,
|
||||||
|
vol.Optional(CONF_AVAILABILITY_TEMPLATE): cv.template,
|
||||||
|
vol.Optional(
|
||||||
|
CONF_PAYLOAD_AVAILABLE, default=DEFAULT_PAYLOAD_AVAILABLE
|
||||||
|
): cv.string,
|
||||||
|
vol.Optional(
|
||||||
|
CONF_PAYLOAD_NOT_AVAILABLE, default=DEFAULT_PAYLOAD_NOT_AVAILABLE
|
||||||
|
): cv.string,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
MQTT_AVAILABILITY_LIST_SCHEMA = vol.Schema(
|
||||||
|
{
|
||||||
|
vol.Optional(CONF_AVAILABILITY_MODE, default=AVAILABILITY_LATEST): vol.All(
|
||||||
|
cv.string, vol.In(AVAILABILITY_MODES)
|
||||||
|
),
|
||||||
|
vol.Exclusive(CONF_AVAILABILITY, "availability"): vol.All(
|
||||||
|
cv.ensure_list,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
vol.Required(CONF_TOPIC): valid_subscribe_topic,
|
||||||
|
vol.Optional(
|
||||||
|
CONF_PAYLOAD_AVAILABLE, default=DEFAULT_PAYLOAD_AVAILABLE
|
||||||
|
): cv.string,
|
||||||
|
vol.Optional(
|
||||||
|
CONF_PAYLOAD_NOT_AVAILABLE,
|
||||||
|
default=DEFAULT_PAYLOAD_NOT_AVAILABLE,
|
||||||
|
): cv.string,
|
||||||
|
vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
|
||||||
|
}
|
||||||
|
],
|
||||||
|
),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
MQTT_AVAILABILITY_SCHEMA = MQTT_AVAILABILITY_SINGLE_SCHEMA.extend(
|
||||||
|
MQTT_AVAILABILITY_LIST_SCHEMA.schema
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def validate_device_has_at_least_one_identifier(value: ConfigType) -> ConfigType:
|
||||||
|
"""Validate that a device info entry has at least one identifying value."""
|
||||||
|
if value.get(CONF_IDENTIFIERS) or value.get(CONF_CONNECTIONS):
|
||||||
|
return value
|
||||||
|
raise vol.Invalid(
|
||||||
|
"Device must have at least one identifying value in "
|
||||||
|
"'identifiers' and/or 'connections'"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
MQTT_ENTITY_DEVICE_INFO_SCHEMA = vol.All(
|
||||||
|
cv.deprecated(CONF_DEPRECATED_VIA_HUB, CONF_VIA_DEVICE),
|
||||||
|
vol.Schema(
|
||||||
|
{
|
||||||
|
vol.Optional(CONF_IDENTIFIERS, default=list): vol.All(
|
||||||
|
cv.ensure_list, [cv.string]
|
||||||
|
),
|
||||||
|
vol.Optional(CONF_CONNECTIONS, default=list): vol.All(
|
||||||
|
cv.ensure_list, [vol.All(vol.Length(2), [cv.string])]
|
||||||
|
),
|
||||||
|
vol.Optional(CONF_MANUFACTURER): cv.string,
|
||||||
|
vol.Optional(CONF_MODEL): cv.string,
|
||||||
|
vol.Optional(CONF_NAME): cv.string,
|
||||||
|
vol.Optional(CONF_HW_VERSION): cv.string,
|
||||||
|
vol.Optional(CONF_SERIAL_NUMBER): cv.string,
|
||||||
|
vol.Optional(CONF_SW_VERSION): cv.string,
|
||||||
|
vol.Optional(CONF_VIA_DEVICE): cv.string,
|
||||||
|
vol.Optional(CONF_SUGGESTED_AREA): cv.string,
|
||||||
|
vol.Optional(CONF_CONFIGURATION_URL): cv.configuration_url,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
validate_device_has_at_least_one_identifier,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
MQTT_ORIGIN_INFO_SCHEMA = vol.All(
|
||||||
|
vol.Schema(
|
||||||
|
{
|
||||||
|
vol.Required(CONF_NAME): cv.string,
|
||||||
|
vol.Optional(CONF_SW_VERSION): cv.string,
|
||||||
|
vol.Optional(CONF_SUPPORT_URL): cv.configuration_url,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
MQTT_ENTITY_COMMON_SCHEMA = MQTT_AVAILABILITY_SCHEMA.extend(
|
||||||
|
{
|
||||||
|
vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA,
|
||||||
|
vol.Optional(CONF_ORIGIN): MQTT_ORIGIN_INFO_SCHEMA,
|
||||||
|
vol.Optional(CONF_ENABLED_BY_DEFAULT, default=True): cv.boolean,
|
||||||
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
|
vol.Optional(CONF_ICON): cv.icon,
|
||||||
|
vol.Optional(CONF_JSON_ATTRS_TOPIC): valid_subscribe_topic,
|
||||||
|
vol.Optional(CONF_JSON_ATTRS_TEMPLATE): cv.template,
|
||||||
|
vol.Optional(CONF_OBJECT_ID): cv.string,
|
||||||
|
vol.Optional(CONF_UNIQUE_ID): cv.string,
|
||||||
|
}
|
||||||
|
)
|
|
@ -29,7 +29,6 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
|
@ -41,6 +40,7 @@ from .models import (
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
)
|
)
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,6 @@ from .config import MQTT_RO_SCHEMA
|
||||||
from .const import CONF_ENCODING, CONF_QOS, CONF_STATE_TOPIC, PAYLOAD_NONE
|
from .const import CONF_ENCODING, CONF_QOS, CONF_STATE_TOPIC, PAYLOAD_NONE
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttAvailability,
|
MqttAvailability,
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
|
@ -54,6 +53,7 @@ from .models import (
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
)
|
)
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,6 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
|
@ -62,6 +61,7 @@ from .models import (
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
)
|
)
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
|
|
||||||
DEFAULT_NAME = "MQTT Siren"
|
DEFAULT_NAME = "MQTT Siren"
|
||||||
DEFAULT_PAYLOAD_ON = "ON"
|
DEFAULT_PAYLOAD_ON = "ON"
|
||||||
|
|
|
@ -38,12 +38,12 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
)
|
)
|
||||||
from .models import MqttValueTemplate, ReceiveMessage
|
from .models import MqttValueTemplate, ReceiveMessage
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
|
|
||||||
DEFAULT_NAME = "MQTT Switch"
|
DEFAULT_NAME = "MQTT Switch"
|
||||||
DEFAULT_PAYLOAD_ON = "ON"
|
DEFAULT_PAYLOAD_ON = "ON"
|
||||||
|
|
|
@ -20,7 +20,6 @@ from .config import MQTT_BASE_SCHEMA
|
||||||
from .const import ATTR_DISCOVERY_HASH, CONF_QOS, CONF_TOPIC
|
from .const import ATTR_DISCOVERY_HASH, CONF_QOS, CONF_TOPIC
|
||||||
from .discovery import MQTTDiscoveryPayload
|
from .discovery import MQTTDiscoveryPayload
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_DEVICE_INFO_SCHEMA,
|
|
||||||
MqttDiscoveryDeviceUpdate,
|
MqttDiscoveryDeviceUpdate,
|
||||||
async_handle_schema_error,
|
async_handle_schema_error,
|
||||||
async_setup_non_entity_entry_helper,
|
async_setup_non_entity_entry_helper,
|
||||||
|
@ -34,6 +33,7 @@ from .models import (
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
)
|
)
|
||||||
|
from .schemas import MQTT_ENTITY_DEVICE_INFO_SCHEMA
|
||||||
from .subscription import EntitySubscription
|
from .subscription import EntitySubscription
|
||||||
from .util import valid_subscribe_topic
|
from .util import valid_subscribe_topic
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,6 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
|
@ -49,6 +48,7 @@ from .models import (
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
ReceivePayloadType,
|
ReceivePayloadType,
|
||||||
)
|
)
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -34,12 +34,12 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
)
|
)
|
||||||
from .models import MessageCallbackType, MqttValueTemplate, ReceiveMessage
|
from .models import MessageCallbackType, MqttValueTemplate, ReceiveMessage
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_publish_topic, valid_subscribe_topic
|
from .util import valid_publish_topic, valid_subscribe_topic
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
|
@ -51,12 +51,12 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
)
|
)
|
||||||
from .models import ReceiveMessage
|
from .models import ReceiveMessage
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_publish_topic
|
from .util import valid_publish_topic
|
||||||
|
|
||||||
LEGACY = "legacy"
|
LEGACY = "legacy"
|
||||||
|
|
|
@ -62,12 +62,12 @@ from .const import (
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
MqttEntity,
|
MqttEntity,
|
||||||
async_setup_entity_entry_helper,
|
async_setup_entity_entry_helper,
|
||||||
write_state_on_attr_change,
|
write_state_on_attr_change,
|
||||||
)
|
)
|
||||||
from .models import MqttCommandTemplate, MqttValueTemplate, ReceiveMessage
|
from .models import MqttCommandTemplate, MqttValueTemplate, ReceiveMessage
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_publish_topic, valid_subscribe_topic
|
from .util import valid_publish_topic, valid_subscribe_topic
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
|
@ -65,12 +65,9 @@ from .const import (
|
||||||
DEFAULT_OPTIMISTIC,
|
DEFAULT_OPTIMISTIC,
|
||||||
)
|
)
|
||||||
from .debug_info import log_messages
|
from .debug_info import log_messages
|
||||||
from .mixins import (
|
from .mixins import async_setup_entity_entry_helper, write_state_on_attr_change
|
||||||
MQTT_ENTITY_COMMON_SCHEMA,
|
|
||||||
async_setup_entity_entry_helper,
|
|
||||||
write_state_on_attr_change,
|
|
||||||
)
|
|
||||||
from .models import MqttCommandTemplate, MqttValueTemplate, ReceiveMessage
|
from .models import MqttCommandTemplate, MqttValueTemplate, ReceiveMessage
|
||||||
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
from .util import valid_publish_topic, valid_subscribe_topic
|
from .util import valid_publish_topic, valid_subscribe_topic
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
|
@ -24,13 +24,13 @@ from homeassistant.components.mqtt.client import (
|
||||||
RECONNECT_INTERVAL_SECONDS,
|
RECONNECT_INTERVAL_SECONDS,
|
||||||
EnsureJobAfterCooldown,
|
EnsureJobAfterCooldown,
|
||||||
)
|
)
|
||||||
from homeassistant.components.mqtt.mixins import MQTT_ENTITY_DEVICE_INFO_SCHEMA
|
|
||||||
from homeassistant.components.mqtt.models import (
|
from homeassistant.components.mqtt.models import (
|
||||||
MessageCallbackType,
|
MessageCallbackType,
|
||||||
MqttCommandTemplateException,
|
MqttCommandTemplateException,
|
||||||
MqttValueTemplateException,
|
MqttValueTemplateException,
|
||||||
ReceiveMessage,
|
ReceiveMessage,
|
||||||
)
|
)
|
||||||
|
from homeassistant.components.mqtt.schemas import MQTT_ENTITY_DEVICE_INFO_SCHEMA
|
||||||
from homeassistant.components.sensor import SensorDeviceClass
|
from homeassistant.components.sensor import SensorDeviceClass
|
||||||
from homeassistant.config_entries import ConfigEntryDisabler, ConfigEntryState
|
from homeassistant.config_entries import ConfigEntryDisabler, ConfigEntryState
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
|
|
Loading…
Add table
Reference in a new issue