1 """Support for MQTT buttons."""
3 from __future__
import annotations
5 import voluptuous
as vol
16 from .config
import DEFAULT_RETAIN, MQTT_BASE_SCHEMA
17 from .const
import CONF_COMMAND_TEMPLATE, CONF_COMMAND_TOPIC, CONF_RETAIN
18 from .entity
import MqttEntity, async_setup_entity_entry_helper
19 from .models
import MqttCommandTemplate
20 from .schemas
import MQTT_ENTITY_COMMON_SCHEMA
21 from .util
import valid_publish_topic
25 CONF_PAYLOAD_PRESS =
"payload_press"
26 DEFAULT_NAME =
"MQTT Button"
27 DEFAULT_PAYLOAD_PRESS =
"PRESS"
29 PLATFORM_SCHEMA_MODERN = MQTT_BASE_SCHEMA.extend(
31 vol.Optional(CONF_COMMAND_TEMPLATE): cv.template,
32 vol.Required(CONF_COMMAND_TOPIC): valid_publish_topic,
33 vol.Optional(CONF_DEVICE_CLASS): vol.Any(DEVICE_CLASSES_SCHEMA,
None),
34 vol.Optional(CONF_NAME): vol.Any(cv.string,
None),
35 vol.Optional(CONF_PAYLOAD_PRESS, default=DEFAULT_PAYLOAD_PRESS): cv.string,
36 vol.Optional(CONF_RETAIN, default=DEFAULT_RETAIN): cv.boolean,
38 ).extend(MQTT_ENTITY_COMMON_SCHEMA.schema)
40 DISCOVERY_SCHEMA = PLATFORM_SCHEMA_MODERN.extend({}, extra=vol.REMOVE_EXTRA)
45 config_entry: ConfigEntry,
46 async_add_entities: AddEntitiesCallback,
48 """Set up MQTT button through YAML and through MQTT discovery."""
56 PLATFORM_SCHEMA_MODERN,
61 """Representation of a switch that can be toggled using MQTT."""
63 _default_name = DEFAULT_NAME
64 _entity_id_format = button.ENTITY_ID_FORMAT
68 """Return the config schema."""
69 return DISCOVERY_SCHEMA
72 """(Re)Setup the entity."""
74 config.get(CONF_COMMAND_TEMPLATE), entity=self
80 """(Re)Subscribe to topics."""
83 """(Re)Subscribe to topics."""
86 """Turn the device on.
88 This method is a coroutine.
90 payload = self._command_template(self._config[CONF_PAYLOAD_PRESS])
91 await self.async_publish_with_config(self._config[CONF_COMMAND_TOPIC], payload)
web.Response get(self, web.Request request, str config_key)
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)