1 """Sensor for displaying the number of result from Flume."""
5 from pyflume
import FlumeAuth, FlumeData
6 from requests
import Session
11 SensorEntityDescription,
29 KEY_DEVICE_LOCATION_NAME,
30 KEY_DEVICE_LOCATION_TIMEZONE,
33 from .coordinator
import FlumeDeviceDataUpdateCoordinator
34 from .entity
import FlumeEntity
35 from .util
import get_valid_flume_devices
37 FLUME_QUERIES_SENSOR: tuple[SensorEntityDescription, ...] = (
39 key=
"current_interval",
40 translation_key=
"current_interval",
41 suggested_display_precision=2,
42 native_unit_of_measurement=f
"{UnitOfVolume.GALLONS}/m",
43 state_class=SensorStateClass.MEASUREMENT,
47 translation_key=
"month_to_date",
48 suggested_display_precision=2,
49 native_unit_of_measurement=UnitOfVolume.GALLONS,
50 device_class=SensorDeviceClass.WATER,
51 state_class=SensorStateClass.TOTAL_INCREASING,
55 translation_key=
"week_to_date",
56 suggested_display_precision=2,
57 native_unit_of_measurement=UnitOfVolume.GALLONS,
58 device_class=SensorDeviceClass.WATER,
59 state_class=SensorStateClass.TOTAL_INCREASING,
63 translation_key=
"today",
64 suggested_display_precision=2,
65 native_unit_of_measurement=UnitOfVolume.GALLONS,
66 device_class=SensorDeviceClass.WATER,
67 state_class=SensorStateClass.TOTAL_INCREASING,
71 translation_key=
"last_60_min",
72 suggested_display_precision=2,
73 native_unit_of_measurement=f
"{UnitOfVolume.GALLONS}/h",
74 state_class=SensorStateClass.MEASUREMENT,
78 translation_key=
"last_24_hrs",
79 suggested_display_precision=2,
80 native_unit_of_measurement=f
"{UnitOfVolume.GALLONS}/d",
81 state_class=SensorStateClass.MEASUREMENT,
85 translation_key=
"last_30_days",
86 suggested_display_precision=2,
87 native_unit_of_measurement=f
"{UnitOfVolume.GALLONS}/mo",
88 state_class=SensorStateClass.MEASUREMENT,
94 http_session: Session, flume_auth: FlumeAuth, flume_devices: list[dict[str, Any]]
95 ) -> dict[str, FlumeData]:
96 """Create FlumeData objects for each device."""
97 flume_datas: dict[str, FlumeData] = {}
98 for device
in flume_devices:
99 device_id = device[KEY_DEVICE_ID]
100 device_timezone = device[KEY_DEVICE_LOCATION][KEY_DEVICE_LOCATION_TIMEZONE]
101 flume_data = FlumeData(
105 scan_interval=DEVICE_SCAN_INTERVAL,
106 update_on_init=
False,
107 http_session=http_session,
109 flume_datas[device_id] = flume_data
115 config_entry: ConfigEntry,
116 async_add_entities: AddEntitiesCallback,
118 """Set up the Flume sensor."""
120 flume_domain_data = hass.data[DOMAIN][config_entry.entry_id]
121 flume_devices = flume_domain_data[FLUME_DEVICES]
122 flume_auth: FlumeAuth = flume_domain_data[FLUME_AUTH]
123 http_session: Session = flume_domain_data[FLUME_HTTP_SESSION]
127 if device[KEY_DEVICE_TYPE] == FLUME_TYPE_SENSOR
129 flume_entity_list: list[FlumeSensor] = []
130 flume_datas = await hass.async_add_executor_job(
131 make_flume_datas, http_session, flume_auth, flume_devices
134 for device
in flume_devices:
135 device_id: str = device[KEY_DEVICE_ID]
136 device_location_name = device[KEY_DEVICE_LOCATION][KEY_DEVICE_LOCATION_NAME]
137 flume_device = flume_datas[device_id]
140 hass=hass, flume_device=flume_device
143 flume_entity_list.extend(
146 coordinator=coordinator,
147 description=description,
149 location_name=device_location_name,
151 for description
in FLUME_QUERIES_SENSOR
159 """Representation of the Flume sensor."""
163 """Return the state of the sensor."""
164 sensor_key = self.entity_description.key
165 if sensor_key
not in self.coordinator.flume_device.values:
168 return self.coordinator.flume_device.values[sensor_key]
StateType native_value(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
dict[str, FlumeData] make_flume_datas(Session http_session, FlumeAuth flume_auth, list[dict[str, Any]] flume_devices)
list[dict[str, Any]] get_valid_flume_devices(FlumeDeviceList flume_devices)