1 """Constants for the Fronius integration."""
3 from enum
import StrEnum
4 from typing
import Final, NamedTuple, TypedDict
9 DOMAIN: Final =
"fronius"
12 SOLAR_NET_DISCOVERY_NEW: Final =
"fronius_discovery_new"
13 SOLAR_NET_ID_POWER_FLOW: SolarNetId =
"power_flow"
14 SOLAR_NET_ID_SYSTEM: SolarNetId =
"system"
15 SOLAR_NET_RESCAN_TIMER: Final = 60
19 """ConfigEntry for the Fronius integration."""
26 """Information about a Fronius inverter device."""
28 device_info: DeviceInfo
29 solar_net_id: SolarNetId
34 """Status codes for Fronius inverters."""
40 BOOTLOADING =
"bootloading"
49 _INVERTER_STATUS_CODES: Final[dict[int, InverterStatusCodeOption]] = {
50 0: InverterStatusCodeOption.STARTUP,
51 1: InverterStatusCodeOption.STARTUP,
52 2: InverterStatusCodeOption.STARTUP,
53 3: InverterStatusCodeOption.STARTUP,
54 4: InverterStatusCodeOption.STARTUP,
55 5: InverterStatusCodeOption.STARTUP,
56 6: InverterStatusCodeOption.STARTUP,
57 7: InverterStatusCodeOption.RUNNING,
58 8: InverterStatusCodeOption.STANDBY,
59 9: InverterStatusCodeOption.BOOTLOADING,
60 10: InverterStatusCodeOption.ERROR,
61 11: InverterStatusCodeOption.IDLE,
62 12: InverterStatusCodeOption.READY,
63 13: InverterStatusCodeOption.SLEEPING,
64 255: InverterStatusCodeOption.UNKNOWN,
69 """Return a status message for a given status code."""
70 return _INVERTER_STATUS_CODES.get(code, InverterStatusCodeOption.INVALID)
74 """Meter location codes for Fronius meters."""
78 CONSUMPTION_PATH =
"consumption_path"
79 GENERATOR =
"external_generator"
80 EXT_BATTERY =
"external_battery"
85 """Return a location_description for a given location code."""
88 return MeterLocationCodeOption.FEED_IN
90 return MeterLocationCodeOption.CONSUMPTION_PATH
92 return MeterLocationCodeOption.GENERATOR
94 return MeterLocationCodeOption.EXT_BATTERY
95 case _
as _code
if 256 <= _code <= 511:
96 return MeterLocationCodeOption.SUBLOAD
101 """OhmPilot state codes for Fronius inverters."""
104 UP_AND_RUNNING =
"up_and_running"
105 KEEP_MINIMUM_TEMPERATURE =
"keep_minimum_temperature"
106 LEGIONELLA_PROTECTION =
"legionella_protection"
107 CRITICAL_FAULT =
"critical_fault"
109 BOOST_MODE =
"boost_mode"
112 _OHMPILOT_STATE_CODES: Final[dict[int, OhmPilotStateCodeOption]] = {
113 0: OhmPilotStateCodeOption.UP_AND_RUNNING,
114 1: OhmPilotStateCodeOption.KEEP_MINIMUM_TEMPERATURE,
115 2: OhmPilotStateCodeOption.LEGIONELLA_PROTECTION,
116 3: OhmPilotStateCodeOption.CRITICAL_FAULT,
117 4: OhmPilotStateCodeOption.FAULT,
118 5: OhmPilotStateCodeOption.BOOST_MODE,
123 """Return a status message for a given status code."""
124 return _OHMPILOT_STATE_CODES.get(code)
OhmPilotStateCodeOption|None get_ohmpilot_state_message(StateType code)
InverterStatusCodeOption get_inverter_status_message(StateType code)
MeterLocationCodeOption|None get_meter_location_description(StateType code)