1 """Support for setting the Transmission BitTorrent client Turtle Mode."""
3 from collections.abc
import Callable
4 from dataclasses
import dataclass
13 from .
import TransmissionConfigEntry
14 from .const
import DOMAIN
15 from .coordinator
import TransmissionDataUpdateCoordinator
18 @dataclass(frozen=True, kw_only=True)
20 """Entity description class for Transmission switches."""
22 is_on_func: Callable[[TransmissionDataUpdateCoordinator], bool |
None]
23 on_func: Callable[[TransmissionDataUpdateCoordinator],
None]
24 off_func: Callable[[TransmissionDataUpdateCoordinator],
None]
27 SWITCH_TYPES: tuple[TransmissionSwitchEntityDescription, ...] = (
30 translation_key=
"on_off",
31 is_on_func=
lambda coordinator: coordinator.data.active_torrent_count > 0,
32 on_func=
lambda coordinator: coordinator.start_torrents(),
33 off_func=
lambda coordinator: coordinator.stop_torrents(),
37 translation_key=
"turtle_mode",
38 is_on_func=
lambda coordinator: coordinator.get_alt_speed_enabled(),
39 on_func=
lambda coordinator: coordinator.set_alt_speed_enabled(
True),
40 off_func=
lambda coordinator: coordinator.set_alt_speed_enabled(
False),
47 config_entry: TransmissionConfigEntry,
48 async_add_entities: AddEntitiesCallback,
50 """Set up the Transmission switch."""
52 coordinator = config_entry.runtime_data
60 CoordinatorEntity[TransmissionDataUpdateCoordinator], SwitchEntity
62 """Representation of a Transmission switch."""
64 entity_description: TransmissionSwitchEntityDescription
65 _attr_has_entity_name =
True
69 coordinator: TransmissionDataUpdateCoordinator,
70 entity_description: TransmissionSwitchEntityDescription,
72 """Initialize the Transmission switch."""
76 f
"{coordinator.config_entry.entry_id}-{entity_description.key}"
79 entry_type=DeviceEntryType.SERVICE,
80 identifiers={(DOMAIN, coordinator.config_entry.entry_id)},
81 manufacturer=
"Transmission",
86 """Return true if device is on."""
90 """Turn the device on."""
91 await self.
hasshasshass.async_add_executor_job(
97 """Turn the device off."""
98 await self.
hasshasshass.async_add_executor_job(
None async_turn_off(self, **Any kwargs)
None async_turn_on(self, **Any kwargs)
None __init__(self, TransmissionDataUpdateCoordinator coordinator, TransmissionSwitchEntityDescription entity_description)
None async_request_refresh(self)
None async_setup_entry(HomeAssistant hass, TransmissionConfigEntry config_entry, AddEntitiesCallback async_add_entities)