1 """Provides device automations for Netatmo."""
3 from __future__
import annotations
5 import voluptuous
as vol
8 DEVICE_TRIGGER_BASE_SCHEMA,
9 InvalidDeviceAutomationConfig,
22 config_validation
as cv,
23 device_registry
as dr,
24 entity_registry
as er,
29 from .climate
import STATE_NETATMO_AWAY, STATE_NETATMO_HG, STATE_NETATMO_SCHEDULE
33 EVENT_TYPE_THERM_MODE,
34 INDOOR_CAMERA_TRIGGERS,
36 OUTDOOR_CAMERA_TRIGGERS,
39 CONF_SUBTYPE =
"subtype"
42 "Smart Indoor Camera": INDOOR_CAMERA_TRIGGERS,
43 "Smart Outdoor Camera": OUTDOOR_CAMERA_TRIGGERS,
44 "Smart Thermostat": CLIMATE_TRIGGERS,
45 "Smart Valve": CLIMATE_TRIGGERS,
49 EVENT_TYPE_THERM_MODE: [
50 STATE_NETATMO_SCHEDULE,
56 TRIGGER_TYPES = OUTDOOR_CAMERA_TRIGGERS + INDOOR_CAMERA_TRIGGERS + CLIMATE_TRIGGERS
58 TRIGGER_SCHEMA = DEVICE_TRIGGER_BASE_SCHEMA.extend(
60 vol.Required(CONF_ENTITY_ID): cv.entity_id_or_uuid,
61 vol.Required(CONF_TYPE): vol.In(TRIGGER_TYPES),
62 vol.Optional(CONF_SUBTYPE): str,
68 hass: HomeAssistant, config: ConfigType
70 """Validate config."""
73 device_registry = dr.async_get(hass)
74 device = device_registry.async_get(config[CONF_DEVICE_ID])
76 if not device
or device.model
is None:
78 f
"Trigger invalid, device with ID {config[CONF_DEVICE_ID]} not found"
81 trigger = config[CONF_TYPE]
85 or device.model
not in DEVICES
86 or trigger
not in DEVICES[device.model]
94 hass: HomeAssistant, device_id: str
95 ) -> list[dict[str, str]]:
96 """List device triggers for Netatmo devices."""
97 registry = er.async_get(hass)
98 device_registry = dr.async_get(hass)
99 triggers: list[dict[str, str]] = []
101 for entry
in er.async_entries_for_device(registry, device_id):
103 device := device_registry.async_get(device_id)
104 )
is None or device.model
is None:
107 for trigger
in DEVICES.get(device.model, []):
108 if trigger
in SUBTYPES:
111 CONF_PLATFORM:
"device",
112 CONF_DEVICE_ID: device_id,
114 CONF_ENTITY_ID: entry.id,
116 CONF_SUBTYPE: subtype,
118 for subtype
in SUBTYPES[trigger]
123 CONF_PLATFORM:
"device",
124 CONF_DEVICE_ID: device_id,
126 CONF_ENTITY_ID: entry.id,
137 action: TriggerActionType,
138 trigger_info: TriggerInfo,
140 """Attach a trigger."""
141 device_registry = dr.async_get(hass)
142 device = device_registry.async_get(config[CONF_DEVICE_ID])
147 if device.model
not in DEVICES:
151 event_trigger.CONF_PLATFORM:
"event",
152 event_trigger.CONF_EVENT_TYPE: NETATMO_EVENT,
153 event_trigger.CONF_EVENT_DATA: {
154 "type": config[CONF_TYPE],
155 ATTR_DEVICE_ID: config[ATTR_DEVICE_ID],
159 if config[CONF_TYPE]
in SUBTYPES:
161 {event_trigger.CONF_EVENT_DATA: {
"data": {
"mode": config[CONF_SUBTYPE]}}}
164 event_config = event_trigger.TRIGGER_SCHEMA(event_config)
165 return await event_trigger.async_attach_trigger(
166 hass, event_config, action, trigger_info, platform_type=
"device"
list[dict[str, str]] async_get_triggers(HomeAssistant hass, str device_id)
ConfigType async_validate_trigger_config(HomeAssistant hass, ConfigType config)
CALLBACK_TYPE async_attach_trigger(HomeAssistant hass, ConfigType config, TriggerActionType action, TriggerInfo trigger_info)