1 """Support for Tuya switches."""
3 from __future__
import annotations
7 from tuya_sharing
import CustomerDevice, Manager
12 SwitchEntityDescription,
19 from .
import TuyaConfigEntry
20 from .const
import TUYA_DISCOVERY_NEW, DPCode
21 from .entity
import TuyaEntity
26 SWITCHES: dict[str, tuple[SwitchEntityDescription, ...]] = {
32 translation_key=
"start",
36 translation_key=
"heat_preservation",
37 entity_category=EntityCategory.CONFIG,
44 key=DPCode.DISINFECTION,
45 translation_key=
"disinfection",
49 translation_key=
"water",
57 translation_key=
"ionizer",
59 entity_category=EntityCategory.CONFIG,
62 key=DPCode.CHILD_LOCK,
63 translation_key=
"child_lock",
64 icon=
"mdi:account-lock",
65 entity_category=EntityCategory.CONFIG,
68 key=DPCode.FILTER_RESET,
69 translation_key=
"filter_reset",
71 entity_category=EntityCategory.CONFIG,
79 translation_key=
"slow_feed",
80 entity_category=EntityCategory.CONFIG,
87 key=DPCode.FILTER_RESET,
88 translation_key=
"filter_reset",
89 entity_category=EntityCategory.CONFIG,
92 key=DPCode.PUMP_RESET,
93 translation_key=
"water_pump_reset",
94 entity_category=EntityCategory.CONFIG,
98 translation_key=
"power",
101 key=DPCode.WATER_RESET,
102 translation_key=
"reset_of_water_usage_days",
103 entity_category=EntityCategory.CONFIG,
107 translation_key=
"uv_sterilization",
108 entity_category=EntityCategory.CONFIG,
119 translation_key=
"plug",
125 key=DPCode.CHILD_LOCK,
126 translation_key=
"child_lock",
127 entity_category=EntityCategory.CONFIG,
131 translation_key=
"switch",
139 translation_key=
"radio",
143 translation_key=
"alarm_1",
144 entity_category=EntityCategory.CONFIG,
148 translation_key=
"alarm_2",
149 entity_category=EntityCategory.CONFIG,
153 translation_key=
"alarm_3",
154 entity_category=EntityCategory.CONFIG,
158 translation_key=
"alarm_4",
159 entity_category=EntityCategory.CONFIG,
163 translation_key=
"sleep_aid",
172 translation_key=
"switch_1",
173 device_class=SwitchDeviceClass.OUTLET,
177 translation_key=
"switch_2",
178 device_class=SwitchDeviceClass.OUTLET,
185 key=DPCode.CHILD_LOCK,
186 translation_key=
"child_lock",
187 entity_category=EntityCategory.CONFIG,
191 translation_key=
"switch_1",
192 device_class=SwitchDeviceClass.OUTLET,
196 translation_key=
"switch_2",
197 device_class=SwitchDeviceClass.OUTLET,
201 translation_key=
"switch_3",
202 device_class=SwitchDeviceClass.OUTLET,
206 translation_key=
"switch_4",
207 device_class=SwitchDeviceClass.OUTLET,
211 translation_key=
"switch_5",
212 device_class=SwitchDeviceClass.OUTLET,
216 translation_key=
"switch_6",
217 device_class=SwitchDeviceClass.OUTLET,
221 translation_key=
"switch_7",
222 device_class=SwitchDeviceClass.OUTLET,
226 translation_key=
"switch_8",
227 device_class=SwitchDeviceClass.OUTLET,
230 key=DPCode.SWITCH_USB1,
231 translation_key=
"usb_1",
234 key=DPCode.SWITCH_USB2,
235 translation_key=
"usb_2",
238 key=DPCode.SWITCH_USB3,
239 translation_key=
"usb_3",
242 key=DPCode.SWITCH_USB4,
243 translation_key=
"usb_4",
246 key=DPCode.SWITCH_USB5,
247 translation_key=
"usb_5",
250 key=DPCode.SWITCH_USB6,
251 translation_key=
"usb_6",
255 translation_key=
"switch",
256 device_class=SwitchDeviceClass.OUTLET,
264 translation_key=
"ionizer",
265 entity_category=EntityCategory.CONFIG,
268 key=DPCode.FILTER_RESET,
269 translation_key=
"filter_cartridge_reset",
270 entity_category=EntityCategory.CONFIG,
274 translation_key=
"child_lock",
275 entity_category=EntityCategory.CONFIG,
279 translation_key=
"power",
283 translation_key=
"humidification",
284 entity_category=EntityCategory.CONFIG,
288 translation_key=
"uv_sterilization",
289 entity_category=EntityCategory.CONFIG,
297 translation_key=
"ionizer",
298 entity_category=EntityCategory.CONFIG,
302 translation_key=
"child_lock",
303 entity_category=EntityCategory.CONFIG,
311 translation_key=
"switch",
312 entity_category=EntityCategory.CONFIG,
316 translation_key=
"start",
317 entity_category=EntityCategory.CONFIG,
324 key=DPCode.CHILD_LOCK,
325 translation_key=
"child_lock",
326 entity_category=EntityCategory.CONFIG,
330 translation_key=
"socket_1",
331 device_class=SwitchDeviceClass.OUTLET,
335 translation_key=
"socket_2",
336 device_class=SwitchDeviceClass.OUTLET,
340 translation_key=
"socket_3",
341 device_class=SwitchDeviceClass.OUTLET,
345 translation_key=
"socket_4",
346 device_class=SwitchDeviceClass.OUTLET,
350 translation_key=
"socket_5",
351 device_class=SwitchDeviceClass.OUTLET,
355 translation_key=
"socket_6",
356 device_class=SwitchDeviceClass.OUTLET,
359 key=DPCode.SWITCH_USB1,
360 translation_key=
"usb_1",
363 key=DPCode.SWITCH_USB2,
364 translation_key=
"usb_2",
367 key=DPCode.SWITCH_USB3,
368 translation_key=
"usb_3",
371 key=DPCode.SWITCH_USB4,
372 translation_key=
"usb_4",
375 key=DPCode.SWITCH_USB5,
376 translation_key=
"usb_5",
379 key=DPCode.SWITCH_USB6,
380 translation_key=
"usb_6",
384 translation_key=
"socket",
385 device_class=SwitchDeviceClass.OUTLET,
394 translation_key=
"switch",
402 translation_key=
"ionizer",
403 entity_category=EntityCategory.CONFIG,
407 translation_key=
"child_lock",
408 entity_category=EntityCategory.CONFIG,
415 key=DPCode.SWITCH_DISTURB,
416 translation_key=
"do_not_disturb",
417 entity_category=EntityCategory.CONFIG,
420 key=DPCode.VOICE_SWITCH,
421 translation_key=
"mute_voice",
422 entity_category=EntityCategory.CONFIG,
429 translation_key=
"switch",
437 translation_key=
"switch_1",
441 translation_key=
"switch_2",
449 translation_key=
"mute",
450 entity_category=EntityCategory.CONFIG,
457 key=DPCode.WIRELESS_BATTERYLOCK,
458 translation_key=
"battery_lock",
459 entity_category=EntityCategory.CONFIG,
462 key=DPCode.CRY_DETECTION_SWITCH,
463 translation_key=
"cry_detection",
464 entity_category=EntityCategory.CONFIG,
467 key=DPCode.DECIBEL_SWITCH,
468 translation_key=
"sound_detection",
469 entity_category=EntityCategory.CONFIG,
472 key=DPCode.RECORD_SWITCH,
473 translation_key=
"video_recording",
474 entity_category=EntityCategory.CONFIG,
477 key=DPCode.MOTION_RECORD,
478 translation_key=
"motion_recording",
479 entity_category=EntityCategory.CONFIG,
482 key=DPCode.BASIC_PRIVATE,
483 translation_key=
"privacy_mode",
484 entity_category=EntityCategory.CONFIG,
487 key=DPCode.BASIC_FLIP,
488 translation_key=
"flip",
489 entity_category=EntityCategory.CONFIG,
492 key=DPCode.BASIC_OSD,
493 translation_key=
"time_watermark",
494 entity_category=EntityCategory.CONFIG,
497 key=DPCode.BASIC_WDR,
498 translation_key=
"wide_dynamic_range",
499 entity_category=EntityCategory.CONFIG,
502 key=DPCode.MOTION_TRACKING,
503 translation_key=
"motion_tracking",
504 entity_category=EntityCategory.CONFIG,
507 key=DPCode.MOTION_SWITCH,
508 translation_key=
"motion_alarm",
509 entity_category=EntityCategory.CONFIG,
517 translation_key=
"power",
521 translation_key=
"pump",
528 translation_key=
"switch",
535 translation_key=
"switch",
543 translation_key=
"switch_1",
544 device_class=SwitchDeviceClass.OUTLET,
548 translation_key=
"switch_2",
549 device_class=SwitchDeviceClass.OUTLET,
553 translation_key=
"switch_3",
554 device_class=SwitchDeviceClass.OUTLET,
558 translation_key=
"switch_4",
559 device_class=SwitchDeviceClass.OUTLET,
562 key=DPCode.CHILD_LOCK,
563 translation_key=
"child_lock",
564 entity_category=EntityCategory.CONFIG,
571 key=DPCode.SWITCH_SAVE_ENERGY,
572 translation_key=
"energy_saving",
573 entity_category=EntityCategory.CONFIG,
580 key=DPCode.CHILD_LOCK,
581 translation_key=
"child_lock",
582 entity_category=EntityCategory.CONFIG,
589 key=DPCode.CHILD_LOCK,
590 translation_key=
"child_lock",
591 entity_category=EntityCategory.CONFIG,
594 key=DPCode.WINDOW_CHECK,
595 translation_key=
"open_window_detection",
596 entity_category=EntityCategory.CONFIG,
611 translation_key=
"switch",
612 device_class=SwitchDeviceClass.OUTLET,
619 key=DPCode.DO_NOT_DISTURB,
620 translation_key=
"do_not_disturb",
621 entity_category=EntityCategory.CONFIG,
629 translation_key=
"power",
632 key=DPCode.SWITCH_SPRAY,
633 translation_key=
"spray",
636 key=DPCode.SWITCH_VOICE,
637 translation_key=
"voice",
638 entity_category=EntityCategory.CONFIG,
646 translation_key=
"switch",
654 translation_key=
"anion",
655 entity_category=EntityCategory.CONFIG,
658 key=DPCode.HUMIDIFIER,
659 translation_key=
"humidification",
660 entity_category=EntityCategory.CONFIG,
664 translation_key=
"oxygen_bar",
665 entity_category=EntityCategory.CONFIG,
669 translation_key=
"natural_wind",
670 entity_category=EntityCategory.CONFIG,
674 translation_key=
"sound",
675 entity_category=EntityCategory.CONFIG,
678 key=DPCode.CHILD_LOCK,
679 translation_key=
"child_lock",
680 entity_category=EntityCategory.CONFIG,
687 key=DPCode.CONTROL_BACK,
688 translation_key=
"reverse",
689 entity_category=EntityCategory.CONFIG,
693 translation_key=
"reverse",
694 entity_category=EntityCategory.CONFIG,
701 key=DPCode.SWITCH_SOUND,
702 translation_key=
"voice",
703 entity_category=EntityCategory.CONFIG,
707 translation_key=
"sleep",
708 entity_category=EntityCategory.CONFIG,
711 key=DPCode.STERILIZATION,
712 translation_key=
"sterilization",
713 entity_category=EntityCategory.CONFIG,
720 translation_key=
"switch",
727 SWITCHES[
"cz"] = SWITCHES[
"pc"]
731 hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
733 """Set up tuya sensors dynamically through tuya discovery."""
734 hass_data = entry.runtime_data
738 """Discover and add a discovered tuya sensor."""
739 entities: list[TuyaSwitchEntity] = []
740 for device_id
in device_ids:
741 device = hass_data.manager.device_map[device_id]
742 if descriptions := SWITCHES.get(device.category):
745 for description
in descriptions
746 if description.key
in device.status
753 entry.async_on_unload(
759 """Tuya Switch Device."""
763 device: CustomerDevice,
764 device_manager: Manager,
765 description: SwitchEntityDescription,
767 """Init TuyaHaSwitch."""
768 super().
__init__(device, device_manager)
774 """Return true if switch is on."""
778 """Turn the switch on."""
782 """Turn the switch off."""
None _send_command(self, list[dict[str, Any]] commands)
None __init__(self, CustomerDevice device, Manager device_manager, SwitchEntityDescription description)
None turn_on(self, **Any kwargs)
None turn_off(self, **Any kwargs)
ElkSystem|None async_discover_device(HomeAssistant hass, str host)
None async_setup_entry(HomeAssistant hass, TuyaConfigEntry entry, AddEntitiesCallback async_add_entities)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)