1 """Support for MQTT switches."""
3 from __future__
import annotations
5 from collections.abc
import Callable
8 import voluptuous
as vol
29 from .
import subscription
30 from .config
import MQTT_RW_SCHEMA
32 CONF_COMMAND_TEMPLATE,
37 from .entity
import MqttEntity, async_setup_entity_entry_helper
44 from .schemas
import MQTT_ENTITY_COMMON_SCHEMA
48 DEFAULT_NAME =
"MQTT Switch"
49 DEFAULT_PAYLOAD_ON =
"ON"
50 DEFAULT_PAYLOAD_OFF =
"OFF"
51 CONF_STATE_ON =
"state_on"
52 CONF_STATE_OFF =
"state_off"
54 PLATFORM_SCHEMA_MODERN = MQTT_RW_SCHEMA.extend(
56 vol.Optional(CONF_COMMAND_TEMPLATE): cv.template,
57 vol.Optional(CONF_NAME): vol.Any(cv.string,
None),
58 vol.Optional(CONF_PAYLOAD_OFF, default=DEFAULT_PAYLOAD_OFF): cv.string,
59 vol.Optional(CONF_PAYLOAD_ON, default=DEFAULT_PAYLOAD_ON): cv.string,
60 vol.Optional(CONF_STATE_OFF): cv.string,
61 vol.Optional(CONF_STATE_ON): cv.string,
62 vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
63 vol.Optional(CONF_DEVICE_CLASS): vol.Any(DEVICE_CLASSES_SCHEMA,
None),
65 ).extend(MQTT_ENTITY_COMMON_SCHEMA.schema)
67 DISCOVERY_SCHEMA = PLATFORM_SCHEMA_MODERN.extend({}, extra=vol.REMOVE_EXTRA)
72 config_entry: ConfigEntry,
73 async_add_entities: AddEntitiesCallback,
75 """Set up MQTT switch through YAML and through MQTT discovery."""
83 PLATFORM_SCHEMA_MODERN,
88 """Representation of a switch that can be toggled using MQTT."""
90 _default_name = DEFAULT_NAME
91 _entity_id_format = switch.ENTITY_ID_FORMAT
94 _is_on_map: dict[str | bytes, bool |
None]
95 _command_template: Callable[[PublishPayloadType], PublishPayloadType]
96 _value_template: Callable[[ReceivePayloadType], ReceivePayloadType]
100 """Return the config schema."""
101 return DISCOVERY_SCHEMA
104 """(Re)Setup the entity."""
106 state_on: str |
None = config.get(CONF_STATE_ON)
107 state_off: str |
None = config.get(CONF_STATE_OFF)
109 state_on
if state_on
else config[CONF_PAYLOAD_ON]:
True,
110 state_off
if state_off
else config[CONF_PAYLOAD_OFF]:
False,
114 config[CONF_OPTIMISTIC]
or config.get(CONF_STATE_TOPIC)
is None
118 config.get(CONF_COMMAND_TEMPLATE), entity=self
121 config.get(CONF_VALUE_TEMPLATE), entity=self
122 ).async_render_with_possible_json_value
126 """Handle new MQTT state messages."""
132 """(Re)Subscribe to topics."""
141 """(Re)Subscribe to topics."""
142 subscription.async_subscribe_topics_internal(self.
hasshasshass, self.
_sub_state_sub_state)
145 self.
_attr_is_on_attr_is_on = last_state.state == STATE_ON
148 """Turn the device on.
150 This method is a coroutine.
160 """Turn the device off.
162 This method is a coroutine.
None async_publish_with_config(self, str topic, PublishPayloadType payload)
bool add_subscription(self, str state_topic_config_key, Callable[[ReceiveMessage], None] msg_callback, set[str]|None tracked_attributes, bool disable_encoding=False)
None _subscribe_topics(self)
None async_turn_on(self, **Any kwargs)
None _state_message_received(self, ReceiveMessage msg)
None async_turn_off(self, **Any kwargs)
None _setup_from_config(self, ConfigType config)
None _prepare_subscribe_topics(self)
vol.Schema config_schema()
None async_write_ha_state(self)
State|None async_get_last_state(self)
None async_setup_entity_entry_helper(HomeAssistant hass, ConfigEntry entry, type[MqttEntity]|None entity_class, str domain, AddEntitiesCallback async_add_entities, VolSchemaType discovery_schema, VolSchemaType platform_schema_modern, dict[str, type[MqttEntity]]|None schema_class_mapping=None)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)