1 """Support for monitoring pyLoad."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from enum
import StrEnum
9 import voluptuous
as vol
12 PLATFORM_SCHEMA
as SENSOR_PLATFORM_SCHEMA,
15 SensorEntityDescription,
21 CONF_MONITORED_VARIABLES,
37 from .
import PyLoadConfigEntry
46 from .coordinator
import PyLoadData
47 from .entity
import BasePyLoadEntity
51 """pyLoad Sensor Entities."""
54 FREE_SPACE =
"free_space"
60 @dataclass(kw_only=True, frozen=True)
62 """Describes pyLoad switch entity."""
64 value_fn: Callable[[PyLoadData], StateType]
67 SENSOR_DESCRIPTIONS: tuple[PyLoadSensorEntityDescription, ...] = (
69 key=PyLoadSensorEntity.SPEED,
70 translation_key=PyLoadSensorEntity.SPEED,
71 device_class=SensorDeviceClass.DATA_RATE,
72 native_unit_of_measurement=UnitOfDataRate.BYTES_PER_SECOND,
73 suggested_unit_of_measurement=UnitOfDataRate.MEGABITS_PER_SECOND,
74 suggested_display_precision=1,
75 value_fn=
lambda data: data.speed,
78 key=PyLoadSensorEntity.ACTIVE,
79 translation_key=PyLoadSensorEntity.ACTIVE,
80 native_unit_of_measurement=UNIT_DOWNLOADS,
81 state_class=SensorStateClass.MEASUREMENT,
82 value_fn=
lambda data: data.active,
85 key=PyLoadSensorEntity.QUEUE,
86 translation_key=PyLoadSensorEntity.QUEUE,
87 native_unit_of_measurement=UNIT_DOWNLOADS,
88 state_class=SensorStateClass.MEASUREMENT,
89 value_fn=
lambda data: data.queue,
92 key=PyLoadSensorEntity.TOTAL,
93 translation_key=PyLoadSensorEntity.TOTAL,
94 native_unit_of_measurement=UNIT_DOWNLOADS,
95 state_class=SensorStateClass.MEASUREMENT,
96 value_fn=
lambda data: data.total,
99 key=PyLoadSensorEntity.FREE_SPACE,
100 translation_key=PyLoadSensorEntity.FREE_SPACE,
101 device_class=SensorDeviceClass.DATA_SIZE,
102 native_unit_of_measurement=UnitOfInformation.BYTES,
103 suggested_unit_of_measurement=UnitOfInformation.GIBIBYTES,
104 suggested_display_precision=1,
105 value_fn=
lambda data: data.free_space,
109 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
111 vol.Optional(CONF_HOST, default=DEFAULT_HOST): cv.string,
112 vol.Optional(CONF_MONITORED_VARIABLES, default=[
"speed"]): vol.All(
113 cv.ensure_list, [vol.In(PyLoadSensorEntity)]
115 vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
116 vol.Optional(CONF_PASSWORD): cv.string,
117 vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
118 vol.Optional(CONF_SSL, default=
False): cv.boolean,
119 vol.Optional(CONF_USERNAME): cv.string,
127 add_entities: AddEntitiesCallback,
128 discovery_info: DiscoveryInfoType |
None =
None,
130 """Import config from yaml."""
132 result = await hass.config_entries.flow.async_init(
133 DOMAIN, context={
"source": SOURCE_IMPORT}, data=config
136 result.get(
"type") == FlowResultType.CREATE_ENTRY
137 or result.get(
"reason") ==
"already_configured"
141 HOMEASSISTANT_DOMAIN,
142 f
"deprecated_yaml_{DOMAIN}",
145 breaks_in_ha_version=
"2025.1.0",
146 severity=IssueSeverity.WARNING,
147 translation_key=
"deprecated_yaml",
148 translation_placeholders={
150 "integration_title":
"pyLoad",
153 elif error := result.get(
"reason"):
157 f
"deprecated_yaml_import_issue_{error}",
158 breaks_in_ha_version=
"2025.1.0",
161 severity=IssueSeverity.WARNING,
162 translation_key=f
"deprecated_yaml_import_issue_{error}",
163 translation_placeholders=ISSUE_PLACEHOLDER,
169 entry: PyLoadConfigEntry,
170 async_add_entities: AddEntitiesCallback,
172 """Set up the pyLoad sensors."""
174 coordinator = entry.runtime_data
179 coordinator=coordinator,
180 entity_description=description,
182 for description
in SENSOR_DESCRIPTIONS
188 """Representation of a pyLoad sensor."""
190 entity_description: PyLoadSensorEntityDescription
194 """Return the state of the sensor."""
StateType native_value(self)
None async_create_issue(HomeAssistant hass, str entry_id)
None async_setup_entry(HomeAssistant hass, PyLoadConfigEntry entry, AddEntitiesCallback async_add_entities)
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)