1 """Support for Fronius devices."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from typing
import TYPE_CHECKING, Any, Final
12 SensorEntityDescription,
19 UnitOfElectricCurrent,
20 UnitOfElectricPotential,
36 SOLAR_NET_DISCOVERY_NEW,
37 InverterStatusCodeOption,
38 MeterLocationCodeOption,
39 OhmPilotStateCodeOption,
40 get_inverter_status_message,
41 get_meter_location_description,
42 get_ohmpilot_state_message,
46 from .
import FroniusConfigEntry
47 from .coordinator
import (
48 FroniusCoordinatorBase,
49 FroniusInverterUpdateCoordinator,
50 FroniusLoggerUpdateCoordinator,
51 FroniusMeterUpdateCoordinator,
52 FroniusOhmpilotUpdateCoordinator,
53 FroniusPowerFlowUpdateCoordinator,
54 FroniusStorageUpdateCoordinator,
57 ENERGY_VOLT_AMPERE_REACTIVE_HOUR: Final =
"varh"
62 config_entry: FroniusConfigEntry,
63 async_add_entities: AddEntitiesCallback,
65 """Set up Fronius sensor entities based on a config entry."""
66 solar_net = config_entry.runtime_data
68 for inverter_coordinator
in solar_net.inverter_coordinators:
69 inverter_coordinator.add_entities_for_seen_keys(
70 async_add_entities, InverterSensor
72 if solar_net.logger_coordinator
is not None:
73 solar_net.logger_coordinator.add_entities_for_seen_keys(
74 async_add_entities, LoggerSensor
76 if solar_net.meter_coordinator
is not None:
77 solar_net.meter_coordinator.add_entities_for_seen_keys(
78 async_add_entities, MeterSensor
80 if solar_net.ohmpilot_coordinator
is not None:
81 solar_net.ohmpilot_coordinator.add_entities_for_seen_keys(
82 async_add_entities, OhmpilotSensor
84 if solar_net.power_flow_coordinator
is not None:
85 solar_net.power_flow_coordinator.add_entities_for_seen_keys(
86 async_add_entities, PowerFlowSensor
88 if solar_net.storage_coordinator
is not None:
89 solar_net.storage_coordinator.add_entities_for_seen_keys(
90 async_add_entities, StorageSensor
95 """Add newly found inverter entities."""
96 coordinator.add_entities_for_seen_keys(async_add_entities, InverterSensor)
98 config_entry.async_on_unload(
101 SOLAR_NET_DISCOVERY_NEW,
102 async_add_new_entities,
107 @dataclass(frozen=True)
109 """Describes Fronius sensor entity."""
111 default_value: StateType |
None =
None
114 invalid_when_falsy: bool =
False
115 response_key: str |
None =
None
116 value_fn: Callable[[StateType], StateType] |
None =
None
119 INVERTER_ENTITY_DESCRIPTIONS: list[FroniusSensorEntityDescription] = [
122 native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
123 device_class=SensorDeviceClass.ENERGY,
124 state_class=SensorStateClass.TOTAL_INCREASING,
128 native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
129 device_class=SensorDeviceClass.ENERGY,
130 state_class=SensorStateClass.TOTAL_INCREASING,
134 native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
135 device_class=SensorDeviceClass.ENERGY,
136 state_class=SensorStateClass.TOTAL_INCREASING,
137 invalid_when_falsy=
True,
142 native_unit_of_measurement=UnitOfFrequency.HERTZ,
143 device_class=SensorDeviceClass.FREQUENCY,
144 state_class=SensorStateClass.MEASUREMENT,
145 entity_registry_enabled_default=
False,
150 native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
151 device_class=SensorDeviceClass.CURRENT,
152 state_class=SensorStateClass.MEASUREMENT,
157 native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
158 device_class=SensorDeviceClass.CURRENT,
159 state_class=SensorStateClass.MEASUREMENT,
164 native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
165 device_class=SensorDeviceClass.CURRENT,
166 state_class=SensorStateClass.MEASUREMENT,
171 native_unit_of_measurement=UnitOfPower.WATT,
172 device_class=SensorDeviceClass.POWER,
173 state_class=SensorStateClass.MEASUREMENT,
178 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
179 device_class=SensorDeviceClass.VOLTAGE,
180 state_class=SensorStateClass.MEASUREMENT,
181 entity_registry_enabled_default=
False,
186 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
187 device_class=SensorDeviceClass.VOLTAGE,
188 state_class=SensorStateClass.MEASUREMENT,
193 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
194 device_class=SensorDeviceClass.VOLTAGE,
195 state_class=SensorStateClass.MEASUREMENT,
199 key=
"inverter_state",
200 entity_category=EntityCategory.DIAGNOSTIC,
204 entity_category=EntityCategory.DIAGNOSTIC,
208 entity_category=EntityCategory.DIAGNOSTIC,
209 entity_registry_enabled_default=
False,
212 key=
"status_message",
213 response_key=
"status_code",
214 entity_category=EntityCategory.DIAGNOSTIC,
215 device_class=SensorDeviceClass.ENUM,
216 options=[opt.value
for opt
in InverterStatusCodeOption],
217 value_fn=get_inverter_status_message,
221 entity_category=EntityCategory.DIAGNOSTIC,
222 entity_registry_enabled_default=
False,
226 entity_category=EntityCategory.DIAGNOSTIC,
227 entity_registry_enabled_default=
False,
231 LOGGER_ENTITY_DESCRIPTIONS: list[FroniusSensorEntityDescription] = [
234 state_class=SensorStateClass.MEASUREMENT,
238 state_class=SensorStateClass.MEASUREMENT,
241 key=
"delivery_factor",
242 state_class=SensorStateClass.MEASUREMENT,
246 METER_ENTITY_DESCRIPTIONS: list[FroniusSensorEntityDescription] = [
248 key=
"current_ac_phase_1",
249 native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
250 device_class=SensorDeviceClass.CURRENT,
251 state_class=SensorStateClass.MEASUREMENT,
252 entity_registry_enabled_default=
False,
255 key=
"current_ac_phase_2",
256 native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
257 device_class=SensorDeviceClass.CURRENT,
258 state_class=SensorStateClass.MEASUREMENT,
259 entity_registry_enabled_default=
False,
262 key=
"current_ac_phase_3",
263 native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
264 device_class=SensorDeviceClass.CURRENT,
265 state_class=SensorStateClass.MEASUREMENT,
266 entity_registry_enabled_default=
False,
269 key=
"energy_reactive_ac_consumed",
270 native_unit_of_measurement=ENERGY_VOLT_AMPERE_REACTIVE_HOUR,
271 state_class=SensorStateClass.TOTAL_INCREASING,
272 entity_registry_enabled_default=
False,
273 invalid_when_falsy=
True,
276 key=
"energy_reactive_ac_produced",
277 native_unit_of_measurement=ENERGY_VOLT_AMPERE_REACTIVE_HOUR,
278 state_class=SensorStateClass.TOTAL_INCREASING,
279 entity_registry_enabled_default=
False,
280 invalid_when_falsy=
True,
283 key=
"energy_real_ac_minus",
284 native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
285 device_class=SensorDeviceClass.ENERGY,
286 state_class=SensorStateClass.TOTAL_INCREASING,
287 entity_registry_enabled_default=
False,
288 invalid_when_falsy=
True,
291 key=
"energy_real_ac_plus",
292 native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
293 device_class=SensorDeviceClass.ENERGY,
294 state_class=SensorStateClass.TOTAL_INCREASING,
295 entity_registry_enabled_default=
False,
296 invalid_when_falsy=
True,
299 key=
"energy_real_consumed",
300 native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
301 device_class=SensorDeviceClass.ENERGY,
302 state_class=SensorStateClass.TOTAL_INCREASING,
303 invalid_when_falsy=
True,
306 key=
"energy_real_produced",
307 native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
308 device_class=SensorDeviceClass.ENERGY,
309 state_class=SensorStateClass.TOTAL_INCREASING,
310 invalid_when_falsy=
True,
313 key=
"frequency_phase_average",
314 native_unit_of_measurement=UnitOfFrequency.HERTZ,
315 device_class=SensorDeviceClass.FREQUENCY,
316 state_class=SensorStateClass.MEASUREMENT,
319 key=
"meter_location",
320 entity_category=EntityCategory.DIAGNOSTIC,
324 key=
"meter_location_description",
325 response_key=
"meter_location",
326 entity_category=EntityCategory.DIAGNOSTIC,
327 device_class=SensorDeviceClass.ENUM,
328 options=[opt.value
for opt
in MeterLocationCodeOption],
329 value_fn=get_meter_location_description,
332 key=
"power_apparent_phase_1",
333 native_unit_of_measurement=UnitOfApparentPower.VOLT_AMPERE,
334 device_class=SensorDeviceClass.APPARENT_POWER,
335 state_class=SensorStateClass.MEASUREMENT,
336 entity_registry_enabled_default=
False,
339 key=
"power_apparent_phase_2",
340 native_unit_of_measurement=UnitOfApparentPower.VOLT_AMPERE,
341 device_class=SensorDeviceClass.APPARENT_POWER,
342 state_class=SensorStateClass.MEASUREMENT,
343 entity_registry_enabled_default=
False,
346 key=
"power_apparent_phase_3",
347 native_unit_of_measurement=UnitOfApparentPower.VOLT_AMPERE,
348 device_class=SensorDeviceClass.APPARENT_POWER,
349 state_class=SensorStateClass.MEASUREMENT,
350 entity_registry_enabled_default=
False,
353 key=
"power_apparent",
354 native_unit_of_measurement=UnitOfApparentPower.VOLT_AMPERE,
355 device_class=SensorDeviceClass.APPARENT_POWER,
356 state_class=SensorStateClass.MEASUREMENT,
357 entity_registry_enabled_default=
False,
360 key=
"power_factor_phase_1",
361 device_class=SensorDeviceClass.POWER_FACTOR,
362 state_class=SensorStateClass.MEASUREMENT,
363 entity_registry_enabled_default=
False,
366 key=
"power_factor_phase_2",
367 device_class=SensorDeviceClass.POWER_FACTOR,
368 state_class=SensorStateClass.MEASUREMENT,
369 entity_registry_enabled_default=
False,
372 key=
"power_factor_phase_3",
373 device_class=SensorDeviceClass.POWER_FACTOR,
374 state_class=SensorStateClass.MEASUREMENT,
375 entity_registry_enabled_default=
False,
379 device_class=SensorDeviceClass.POWER_FACTOR,
380 state_class=SensorStateClass.MEASUREMENT,
383 key=
"power_reactive_phase_1",
384 native_unit_of_measurement=UnitOfReactivePower.VOLT_AMPERE_REACTIVE,
385 device_class=SensorDeviceClass.REACTIVE_POWER,
386 state_class=SensorStateClass.MEASUREMENT,
387 entity_registry_enabled_default=
False,
390 key=
"power_reactive_phase_2",
391 native_unit_of_measurement=UnitOfReactivePower.VOLT_AMPERE_REACTIVE,
392 device_class=SensorDeviceClass.REACTIVE_POWER,
393 state_class=SensorStateClass.MEASUREMENT,
394 entity_registry_enabled_default=
False,
397 key=
"power_reactive_phase_3",
398 native_unit_of_measurement=UnitOfReactivePower.VOLT_AMPERE_REACTIVE,
399 device_class=SensorDeviceClass.REACTIVE_POWER,
400 state_class=SensorStateClass.MEASUREMENT,
401 entity_registry_enabled_default=
False,
404 key=
"power_reactive",
405 native_unit_of_measurement=UnitOfReactivePower.VOLT_AMPERE_REACTIVE,
406 device_class=SensorDeviceClass.REACTIVE_POWER,
407 state_class=SensorStateClass.MEASUREMENT,
408 entity_registry_enabled_default=
False,
411 key=
"power_real_phase_1",
412 native_unit_of_measurement=UnitOfPower.WATT,
413 device_class=SensorDeviceClass.POWER,
414 state_class=SensorStateClass.MEASUREMENT,
415 entity_registry_enabled_default=
False,
418 key=
"power_real_phase_2",
419 native_unit_of_measurement=UnitOfPower.WATT,
420 device_class=SensorDeviceClass.POWER,
421 state_class=SensorStateClass.MEASUREMENT,
422 entity_registry_enabled_default=
False,
425 key=
"power_real_phase_3",
426 native_unit_of_measurement=UnitOfPower.WATT,
427 device_class=SensorDeviceClass.POWER,
428 state_class=SensorStateClass.MEASUREMENT,
429 entity_registry_enabled_default=
False,
433 native_unit_of_measurement=UnitOfPower.WATT,
434 device_class=SensorDeviceClass.POWER,
435 state_class=SensorStateClass.MEASUREMENT,
438 key=
"voltage_ac_phase_1",
439 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
440 device_class=SensorDeviceClass.VOLTAGE,
441 state_class=SensorStateClass.MEASUREMENT,
442 entity_registry_enabled_default=
False,
445 key=
"voltage_ac_phase_2",
446 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
447 device_class=SensorDeviceClass.VOLTAGE,
448 state_class=SensorStateClass.MEASUREMENT,
449 entity_registry_enabled_default=
False,
452 key=
"voltage_ac_phase_3",
453 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
454 device_class=SensorDeviceClass.VOLTAGE,
455 state_class=SensorStateClass.MEASUREMENT,
456 entity_registry_enabled_default=
False,
459 key=
"voltage_ac_phase_to_phase_12",
460 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
461 device_class=SensorDeviceClass.VOLTAGE,
462 state_class=SensorStateClass.MEASUREMENT,
463 entity_registry_enabled_default=
False,
466 key=
"voltage_ac_phase_to_phase_23",
467 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
468 device_class=SensorDeviceClass.VOLTAGE,
469 state_class=SensorStateClass.MEASUREMENT,
470 entity_registry_enabled_default=
False,
473 key=
"voltage_ac_phase_to_phase_31",
474 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
475 device_class=SensorDeviceClass.VOLTAGE,
476 state_class=SensorStateClass.MEASUREMENT,
477 entity_registry_enabled_default=
False,
481 OHMPILOT_ENTITY_DESCRIPTIONS: list[FroniusSensorEntityDescription] = [
483 key=
"energy_real_ac_consumed",
484 native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
485 device_class=SensorDeviceClass.ENERGY,
486 state_class=SensorStateClass.TOTAL_INCREASING,
487 invalid_when_falsy=
True,
491 native_unit_of_measurement=UnitOfPower.WATT,
492 device_class=SensorDeviceClass.POWER,
493 state_class=SensorStateClass.MEASUREMENT,
496 key=
"temperature_channel_1",
497 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
498 device_class=SensorDeviceClass.TEMPERATURE,
499 state_class=SensorStateClass.MEASUREMENT,
503 entity_category=EntityCategory.DIAGNOSTIC,
507 entity_category=EntityCategory.DIAGNOSTIC,
511 response_key=
"state_code",
512 entity_category=EntityCategory.DIAGNOSTIC,
513 device_class=SensorDeviceClass.ENUM,
514 options=[opt.value
for opt
in OhmPilotStateCodeOption],
515 value_fn=get_ohmpilot_state_message,
519 POWER_FLOW_ENTITY_DESCRIPTIONS: list[FroniusSensorEntityDescription] = [
522 native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
523 device_class=SensorDeviceClass.ENERGY,
524 state_class=SensorStateClass.TOTAL_INCREASING,
525 entity_registry_enabled_default=
False,
529 native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
530 device_class=SensorDeviceClass.ENERGY,
531 state_class=SensorStateClass.TOTAL_INCREASING,
532 entity_registry_enabled_default=
False,
536 native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
537 device_class=SensorDeviceClass.ENERGY,
538 state_class=SensorStateClass.TOTAL_INCREASING,
539 invalid_when_falsy=
True,
540 entity_registry_enabled_default=
False,
544 entity_category=EntityCategory.DIAGNOSTIC,
549 native_unit_of_measurement=UnitOfPower.WATT,
550 device_class=SensorDeviceClass.POWER,
551 state_class=SensorStateClass.MEASUREMENT,
552 entity_registry_enabled_default=
False,
555 key=
"power_battery_discharge",
556 response_key=
"power_battery",
558 value_fn=
lambda value:
max(value, 0),
559 native_unit_of_measurement=UnitOfPower.WATT,
560 device_class=SensorDeviceClass.POWER,
561 state_class=SensorStateClass.MEASUREMENT,
564 key=
"power_battery_charge",
565 response_key=
"power_battery",
567 value_fn=
lambda value:
max(0 - value, 0),
568 native_unit_of_measurement=UnitOfPower.WATT,
569 device_class=SensorDeviceClass.POWER,
570 state_class=SensorStateClass.MEASUREMENT,
575 native_unit_of_measurement=UnitOfPower.WATT,
576 device_class=SensorDeviceClass.POWER,
577 state_class=SensorStateClass.MEASUREMENT,
578 entity_registry_enabled_default=
False,
581 key=
"power_grid_import",
582 response_key=
"power_grid",
584 value_fn=
lambda value:
max(value, 0),
585 native_unit_of_measurement=UnitOfPower.WATT,
586 device_class=SensorDeviceClass.POWER,
587 state_class=SensorStateClass.MEASUREMENT,
590 key=
"power_grid_export",
591 response_key=
"power_grid",
593 value_fn=
lambda value:
max(0 - value, 0),
594 native_unit_of_measurement=UnitOfPower.WATT,
595 device_class=SensorDeviceClass.POWER,
596 state_class=SensorStateClass.MEASUREMENT,
601 native_unit_of_measurement=UnitOfPower.WATT,
602 device_class=SensorDeviceClass.POWER,
603 state_class=SensorStateClass.MEASUREMENT,
604 entity_registry_enabled_default=
False,
607 key=
"power_load_generated",
608 response_key=
"power_load",
610 value_fn=
lambda value:
max(value, 0),
611 native_unit_of_measurement=UnitOfPower.WATT,
612 device_class=SensorDeviceClass.POWER,
613 state_class=SensorStateClass.MEASUREMENT,
614 entity_registry_enabled_default=
False,
617 key=
"power_load_consumed",
618 response_key=
"power_load",
620 value_fn=
lambda value:
max(0 - value, 0),
621 native_unit_of_measurement=UnitOfPower.WATT,
622 device_class=SensorDeviceClass.POWER,
623 state_class=SensorStateClass.MEASUREMENT,
626 key=
"power_photovoltaics",
628 native_unit_of_measurement=UnitOfPower.WATT,
629 device_class=SensorDeviceClass.POWER,
630 state_class=SensorStateClass.MEASUREMENT,
633 key=
"relative_autonomy",
635 native_unit_of_measurement=PERCENTAGE,
636 state_class=SensorStateClass.MEASUREMENT,
639 key=
"relative_self_consumption",
641 native_unit_of_measurement=PERCENTAGE,
642 state_class=SensorStateClass.MEASUREMENT,
646 STORAGE_ENTITY_DESCRIPTIONS: list[FroniusSensorEntityDescription] = [
648 key=
"capacity_maximum",
649 native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
650 entity_category=EntityCategory.DIAGNOSTIC,
653 key=
"capacity_designed",
654 native_unit_of_measurement=UnitOfEnergy.WATT_HOUR,
655 entity_category=EntityCategory.DIAGNOSTIC,
659 native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
660 device_class=SensorDeviceClass.CURRENT,
661 state_class=SensorStateClass.MEASUREMENT,
665 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
666 device_class=SensorDeviceClass.VOLTAGE,
667 state_class=SensorStateClass.MEASUREMENT,
670 key=
"voltage_dc_maximum_cell",
671 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
672 device_class=SensorDeviceClass.VOLTAGE,
673 state_class=SensorStateClass.MEASUREMENT,
674 entity_registry_enabled_default=
False,
677 key=
"voltage_dc_minimum_cell",
678 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
679 device_class=SensorDeviceClass.VOLTAGE,
680 state_class=SensorStateClass.MEASUREMENT,
681 entity_registry_enabled_default=
False,
684 key=
"state_of_charge",
685 native_unit_of_measurement=PERCENTAGE,
686 device_class=SensorDeviceClass.BATTERY,
687 state_class=SensorStateClass.MEASUREMENT,
690 key=
"temperature_cell",
691 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
692 device_class=SensorDeviceClass.TEMPERATURE,
693 state_class=SensorStateClass.MEASUREMENT,
699 """Defines a Fronius coordinator entity."""
701 entity_description: FroniusSensorEntityDescription
703 _attr_has_entity_name =
True
707 coordinator: FroniusCoordinatorBase,
708 description: FroniusSensorEntityDescription,
711 """Set up an individual Fronius meter sensor."""
714 self.
response_keyresponse_key = description.response_key
or description.key
720 """Extract information for SolarNet device from coordinator data."""
721 return self.coordinator.data[self.
solar_net_idsolar_net_id]
724 """Extract entity value from coordinator. Raises KeyError if not included in latest update."""
726 if new_value
is None:
732 if isinstance(new_value, float):
733 return round(new_value, 4)
738 """Handle updated data from the coordinator."""
749 """Defines a Fronius inverter device sensor entity."""
753 coordinator: FroniusInverterUpdateCoordinator,
754 description: FroniusSensorEntityDescription,
757 """Set up an individual Fronius inverter sensor."""
758 super().
__init__(coordinator, description, solar_net_id)
762 f
"{coordinator.inverter_info.unique_id}-{description.key}"
767 """Defines a Fronius logger device sensor entity."""
771 coordinator: FroniusLoggerUpdateCoordinator,
772 description: FroniusSensorEntityDescription,
775 """Set up an individual Fronius meter sensor."""
776 super().
__init__(coordinator, description, solar_net_id)
784 f
'{logger_data["unique_identifier"]["value"]}-{description.key}'
789 """Defines a Fronius meter device sensor entity."""
793 coordinator: FroniusMeterUpdateCoordinator,
794 description: FroniusSensorEntityDescription,
797 """Set up an individual Fronius meter sensor."""
798 super().
__init__(coordinator, description, solar_net_id)
802 if (meter_uid := meter_data[
"serial"][
"value"]) ==
"n.a.":
804 f
"{coordinator.solar_net.solar_net_device_id}:"
805 f
'{meter_data["model"]["value"]}'
809 identifiers={(DOMAIN, meter_uid)},
810 manufacturer=meter_data[
"manufacturer"][
"value"],
811 model=meter_data[
"model"][
"value"],
812 name=meter_data[
"model"][
"value"],
813 via_device=(DOMAIN, coordinator.solar_net.solar_net_device_id),
819 """Defines a Fronius Ohmpilot sensor entity."""
823 coordinator: FroniusOhmpilotUpdateCoordinator,
824 description: FroniusSensorEntityDescription,
827 """Set up an individual Fronius meter sensor."""
828 super().
__init__(coordinator, description, solar_net_id)
832 identifiers={(DOMAIN, device_data[
"serial"][
"value"])},
833 manufacturer=device_data[
"manufacturer"][
"value"],
834 model=f
"{device_data['model']['value']} {device_data['hardware']['value']}",
835 name=device_data[
"model"][
"value"],
836 sw_version=device_data[
"software"][
"value"],
837 via_device=(DOMAIN, coordinator.solar_net.solar_net_device_id),
839 self.
_attr_unique_id_attr_unique_id = f
'{device_data["serial"]["value"]}-{description.key}'
843 """Defines a Fronius power flow sensor entity."""
847 coordinator: FroniusPowerFlowUpdateCoordinator,
848 description: FroniusSensorEntityDescription,
851 """Set up an individual Fronius power flow sensor."""
852 super().
__init__(coordinator, description, solar_net_id)
856 f
"{coordinator.solar_net.solar_net_device_id}-power_flow-{description.key}"
861 """Defines a Fronius storage device sensor entity."""
865 coordinator: FroniusStorageUpdateCoordinator,
866 description: FroniusSensorEntityDescription,
869 """Set up an individual Fronius storage sensor."""
870 super().
__init__(coordinator, description, solar_net_id)
873 self.
_attr_unique_id_attr_unique_id = f
'{storage_data["serial"]["value"]}-{description.key}'
875 identifiers={(DOMAIN, storage_data[
"serial"][
"value"])},
876 manufacturer=storage_data[
"manufacturer"][
"value"],
877 model=storage_data[
"model"][
"value"],
878 name=storage_data[
"model"][
"value"],
879 via_device=(DOMAIN, coordinator.solar_net.solar_net_device_id),
None __init__(self, FroniusInverterUpdateCoordinator coordinator, FroniusSensorEntityDescription description, str solar_net_id)
None __init__(self, FroniusLoggerUpdateCoordinator coordinator, FroniusSensorEntityDescription description, str solar_net_id)
_attr_native_unit_of_measurement
None __init__(self, FroniusMeterUpdateCoordinator coordinator, FroniusSensorEntityDescription description, str solar_net_id)
None __init__(self, FroniusOhmpilotUpdateCoordinator coordinator, FroniusSensorEntityDescription description, str solar_net_id)
None __init__(self, FroniusPowerFlowUpdateCoordinator coordinator, FroniusSensorEntityDescription description, str solar_net_id)
None __init__(self, FroniusStorageUpdateCoordinator coordinator, FroniusSensorEntityDescription description, str solar_net_id)
None __init__(self, FroniusCoordinatorBase coordinator, FroniusSensorEntityDescription description, str solar_net_id)
Any _get_entity_value(self)
dict[str, Any] _device_data(self)
None _handle_coordinator_update(self)
None async_write_ha_state(self)
web.Response get(self, web.Request request, str config_key)
None async_setup_entry(HomeAssistant hass, FroniusConfigEntry config_entry, AddEntitiesCallback async_add_entities)
None async_add_new_entities(Router router, AddEntitiesCallback async_add_entities, set[str] tracked)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)