1 """Support for Synology DSM switch."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
9 from synology_dsm.api.surveillance_station
import SynoSurveillanceStation
18 from .const
import DOMAIN
19 from .coordinator
import SynologyDSMSwitchUpdateCoordinator
20 from .entity
import SynologyDSMBaseEntity, SynologyDSMEntityDescription
21 from .models
import SynologyDSMData
23 _LOGGER = logging.getLogger(__name__)
26 @dataclass(frozen=True, kw_only=True)
28 SwitchEntityDescription, SynologyDSMEntityDescription
30 """Describes Synology DSM switch entity."""
33 SURVEILLANCE_SWITCH: tuple[SynologyDSMSwitchEntityDescription, ...] = (
35 api_key=SynoSurveillanceStation.HOME_MODE_API_KEY,
37 translation_key=
"home_mode",
43 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
45 """Set up the Synology NAS switch."""
46 data: SynologyDSMData = hass.data[DOMAIN][entry.unique_id]
47 if coordinator := data.coordinator_switches:
48 assert coordinator.version
is not None
51 data.api, coordinator.version, coordinator, description
53 for description
in SURVEILLANCE_SWITCH
58 SynologyDSMBaseEntity[SynologyDSMSwitchUpdateCoordinator], SwitchEntity
60 """Representation a Synology Surveillance Station Home Mode toggle."""
62 entity_description: SynologyDSMSwitchEntityDescription
68 coordinator: SynologyDSMSwitchUpdateCoordinator,
69 description: SynologyDSMSwitchEntityDescription,
71 """Initialize a Synology Surveillance Station Home Mode."""
72 super().
__init__(api, coordinator, description)
77 """Return the state."""
78 return self.coordinator.data[
"switches"][self.entity_description.key]
81 """Turn on Home mode."""
82 assert self._api.surveillance_station
is not None
83 assert self._api.information
85 "SynoDSMSurveillanceHomeModeToggle.turn_on(%s)",
86 self._api.information.serial,
88 await self._api.dsm.surveillance_station.set_home_mode(
True)
92 """Turn off Home mode."""
93 assert self._api.surveillance_station
is not None
94 assert self._api.information
96 "SynoDSMSurveillanceHomeModeToggle.turn_off(%s)",
97 self._api.information.serial,
99 await self._api.dsm.surveillance_station.set_home_mode(
False)
104 """Return True if entity is available."""
105 return bool(self._api.surveillance_station)
and super().available
109 """Return the device information."""
110 assert self._api.surveillance_station
is not None
111 assert self._api.information
is not None
112 assert self._api.network
is not None
117 f
"{self._api.information.serial}_{SynoSurveillanceStation.INFO_API_KEY}",
120 name=f
"{self._api.network.hostname} Surveillance Station",
121 manufacturer=
"Synology",
122 model=self._api.information.model,
124 via_device=(DOMAIN, self._api.information.serial),
None __init__(self, SynoApi api, str version, SynologyDSMSwitchUpdateCoordinator coordinator, SynologyDSMSwitchEntityDescription description)
None async_turn_off(self, **Any kwargs)
None async_turn_on(self, **Any kwargs)
DeviceInfo device_info(self)
None async_request_refresh(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)