1 """Support for AirGradient switch entities."""
3 from collections.abc
import Awaitable, Callable
4 from dataclasses
import dataclass
7 from airgradient
import AirGradientClient, Config
8 from airgradient.models
import ConfigurationControl
11 DOMAIN
as SWITCH_DOMAIN,
13 SwitchEntityDescription,
20 from .
import AirGradientConfigEntry
21 from .const
import DOMAIN
22 from .coordinator
import AirGradientCoordinator
23 from .entity
import AirGradientEntity
26 @dataclass(frozen=True, kw_only=True)
28 """Describes AirGradient switch entity."""
30 value_fn: Callable[[Config], bool]
31 set_value_fn: Callable[[AirGradientClient, bool], Awaitable[
None]]
35 key=
"post_data_to_airgradient",
36 translation_key=
"post_data_to_airgradient",
37 entity_category=EntityCategory.CONFIG,
38 value_fn=
lambda config: config.post_data_to_airgradient,
39 set_value_fn=
lambda client, value: client.enable_sharing_data(enable=value),
45 entry: AirGradientConfigEntry,
46 async_add_entities: AddEntitiesCallback,
48 """Set up AirGradient switch entities based on a config entry."""
49 coordinator = entry.runtime_data
51 added_entities =
False
54 def _async_check_entities() -> None:
55 nonlocal added_entities
58 coordinator.data.config.configuration_control
is ConfigurationControl.LOCAL
59 and not added_entities
66 coordinator.data.config.configuration_control
67 is not ConfigurationControl.LOCAL
70 entity_registry = er.async_get(hass)
71 unique_id = f
"{coordinator.serial_number}-{POST_DATA_TO_AIRGRADIENT.key}"
72 if entity_id := entity_registry.async_get_entity_id(
73 SWITCH_DOMAIN, DOMAIN, unique_id
75 entity_registry.async_remove(entity_id)
76 added_entities =
False
78 coordinator.async_add_listener(_async_check_entities)
79 _async_check_entities()
83 """Defines an AirGradient switch entity."""
85 entity_description: AirGradientSwitchEntityDescription
89 coordinator: AirGradientCoordinator,
90 description: AirGradientSwitchEntityDescription,
92 """Initialize AirGradient switch."""
95 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.serial_number}-{description.key}"
99 """Return the state of the switch."""
103 """Turn the switch on."""
104 await self.
entity_descriptionentity_description.set_value_fn(self.coordinator.client,
True)
108 """Turn the switch off."""
109 await self.
entity_descriptionentity_description.set_value_fn(self.coordinator.client,
False)
None async_turn_off(self, **Any kwargs)
None async_turn_on(self, **Any kwargs)
None __init__(self, AirGradientCoordinator coordinator, AirGradientSwitchEntityDescription description)
None async_request_refresh(self)
None async_setup_entry(HomeAssistant hass, AirGradientConfigEntry entry, AddEntitiesCallback async_add_entities)