Skip to content

Commit 72399d1

Browse files
committed
Added icons to entities and changed device type to "battery" for battery charge level entities.
1 parent c1b89a5 commit 72399d1

4 files changed

Lines changed: 164 additions & 1 deletion

File tree

custom_components/enpal_webparser/const.py

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@
5555
"%": None,
5656
}
5757

58+
DEVICE_CLASS_OVERRIDES = {
59+
"energy_battery_charge_level": "battery",
60+
"energy_battery_charge_level_unit_1": "battery",
61+
"energy_battery_charge_level_unit_2": "battery",
62+
}
63+
5864
# --- Wallbox Mode Mapping ---
5965
WALLBOX_MODE_MAP = {
6066
"eco": "Eco",
@@ -64,3 +70,147 @@
6470

6571
# --- Date/Time Formats ---
6672
ENPAL_TIMESTAMP_FORMAT = "%m/%d/%Y %H:%M:%S"
73+
74+
75+
ICON_MAP = {
76+
# IoT Edge Device
77+
"iotedgedevice_cpu_load": "mdi:cpu-64-bit",
78+
"iotedgedevice_hw_cronny_result": "mdi:cog-sync",
79+
"iotedgedevice_iot_data_consumption_lan_down_month": "mdi:download-network-outline",
80+
"iotedgedevice_iot_data_consumption_lan_up_month": "mdi:upload-network-outline",
81+
"iotedgedevice_iot_data_consumption_lte_down_month": "mdi:download-network",
82+
"iotedgedevice_iot_data_consumption_lte_up_month": "mdi:upload-network",
83+
"iotedgedevice_iot_mainstate": "mdi:state-machine",
84+
"iotedgedevice_lte_cellularguard_result_timestamp": "mdi:calendar-clock",
85+
"iotedgedevice_lte_cellularguard_result_value": "mdi:cellphone-cog",
86+
"iotedgedevice_lte_cellularguard_result_version": "mdi:cellphone-cog",
87+
"iotedgedevice_lte_connection_type": "mdi:access-point",
88+
"iotedgedevice_lte_cronny_result": "mdi:cellphone-cog",
89+
"iotedgedevice_lte_fail_over_message_0": "mdi:alert-circle-outline",
90+
"iotedgedevice_lte_fail_over_message_1": "mdi:alert-circle-outline",
91+
"iotedgedevice_lte_fail_over_message_2": "mdi:alert-circle-outline",
92+
"iotedgedevice_lte_fail_over_message_3": "mdi:alert-circle-outline",
93+
"iotedgedevice_lte_fail_over_message_4": "mdi:alert-circle-outline",
94+
"iotedgedevice_lte_failover_result": "mdi:cellphone-cog",
95+
"iotedgedevice_lte_modem_firmware_version": "mdi:chip",
96+
"iotedgedevice_lte_modem_type": "mdi:chip",
97+
"iotedgedevice_lte_predictor_result_passed": "mdi:cellphone-check",
98+
"iotedgedevice_lte_quality": "mdi:signal-cellular-3",
99+
"iotedgedevice_lte_rssi": "mdi:signal-cellular-3",
100+
"iotedgedevice_lte_state": "mdi:cellphone-settings",
101+
"iotedgedevice_memory_usage": "mdi:memory",
102+
103+
# Inverter
104+
"inverter_running_state": "mdi:run-fast",
105+
"inverter_system_state": "mdi:cog-sync",
106+
"inverter_mode_forcible_charge_discharge": "mdi:swap-vertical",
107+
"inverter_mode_power_active": "mdi:lightning-bolt",
108+
"inverter_power_factor": "mdi:math-compass",
109+
"inverter_serialnumber": "mdi:barcode",
110+
"inverter_setting_charge_from_grid": "mdi:transmission-tower-import",
111+
"inverter_state_alarmcodes_1": "mdi:alert",
112+
"inverter_state_alarmcodes_2": "mdi:alert",
113+
"inverter_state_alarmcodes_3": "mdi:alert",
114+
115+
# Battery
116+
"battery_force_chargedischarge_mode": "mdi:swap-vertical",
117+
"battery_running_state": "mdi:battery-sync",
118+
"battery_running_state_unit_1": "mdi:battery-sync",
119+
"battery_running_state_unit_2": "mdi:battery-sync",
120+
"duration_battery_force_chargedischarge": "mdi:timer",
121+
"mode_battery_working": "mdi:battery-sync",
122+
"battery_mode_forcible_charge_discharge": "mdi:swap-vertical",
123+
"battery_setting_charge_from_grid": "mdi:transmission-tower-import",
124+
125+
# Wallbox
126+
"count_wallbox_connector_1_phases_charging": "mdi:flash-triangle",
127+
"state_wallbox_connector_1_charge": "mdi:car-electric",
128+
"wallbox_lademodus": "mdi:ev-station",
129+
"wallbox_status": "mdi:information-outline",
130+
131+
# Site data
132+
"site_data_energy_consumption_total_day": "mdi:calendar-today",
133+
"site_data_energy_consumption_total_lifetime": "mdi:calendar-range",
134+
"site_data_power_consumption_total": "mdi:flash-auto",
135+
136+
# Inverter energy & power
137+
"inverter_current_string_1": "mdi:current-dc",
138+
"inverter_current_string_2": "mdi:current-dc",
139+
"inverter_energy_battery_charge_lifetime": "mdi:battery-plus",
140+
"inverter_energy_battery_discharge_lifetime": "mdi:battery-minus",
141+
"inverter_energy_grid_export_day": "mdi:transmission-tower-export",
142+
"inverter_energy_grid_export_lifetime": "mdi:transmission-tower-export",
143+
"inverter_energy_grid_import_day": "mdi:transmission-tower-import",
144+
"inverter_energy_grid_import_lifetime": "mdi:transmission-tower-import",
145+
"inverter_energy_production_total_day": "mdi:solar-power",
146+
"inverter_energy_production_total_lifetime": "mdi:solar-power",
147+
"inverter_frequency_grid": "mdi:sine-wave",
148+
"inverter_grid_import_power_total_calculated": "mdi:flash",
149+
"inverter_power_ac_phase_a": "mdi:flash",
150+
"inverter_power_ac_phase_b": "mdi:flash",
151+
"inverter_power_ac_phase_c": "mdi:flash",
152+
"inverter_power_active": "mdi:lightning-bolt",
153+
"inverter_power_active_fixed": "mdi:lightning-bolt-circle",
154+
"inverter_power_battery_charge_discharge": "mdi:swap-vertical",
155+
"inverter_power_battery_charge_max": "mdi:battery-arrow-up",
156+
"inverter_power_dc_string_1": "mdi:flash",
157+
"inverter_power_dc_string_2": "mdi:flash",
158+
"inverter_power_dc_total": "mdi:flash",
159+
"inverter_power_dc_total_calculated": "mdi:flash",
160+
"inverter_power_dc_total_huawei": "mdi:flash",
161+
"inverter_power_grid_export": "mdi:transmission-tower-export",
162+
"inverter_power_grid_export_calculated": "mdi:transmission-tower-export",
163+
"inverter_power_grid_export_huawei": "mdi:transmission-tower-export",
164+
"inverter_power_grid_maximum_feed": "mdi:transmission-tower",
165+
"inverter_power_reactive": "mdi:flash-alert",
166+
"inverter_temperature_housing_inside": "mdi:thermometer",
167+
"inverter_voltage_phase_a": "mdi:sine-wave",
168+
"inverter_voltage_phase_b": "mdi:sine-wave",
169+
"inverter_voltage_phase_c": "mdi:sine-wave",
170+
"inverter_voltage_string_1": "mdi:sine-wave",
171+
"inverter_voltage_string_2": "mdi:sine-wave",
172+
"inverter_energy_produced_total_dc": "mdi:solar-power",
173+
"inverter_energy_produced_today_dc": "mdi:solar-power",
174+
175+
# Battery voltage & current
176+
"battery_unit_1_voltage": "mdi:car-battery",
177+
"battery_unit_2_voltage": "mdi:car-battery",
178+
"battery_unit_3_voltage": "mdi:car-battery",
179+
"current_battery": "mdi:current-dc",
180+
"current_battery_unit_1": "mdi:current-dc",
181+
"current_battery_unit_2": "mdi:current-dc",
182+
"energy_battery_charge_day": "mdi:battery-plus",
183+
"energy_battery_discharge_day": "mdi:battery-minus",
184+
"power_battery_charge_discharge": "mdi:swap-vertical",
185+
"power_battery_charge_max": "mdi:battery-arrow-up",
186+
"power_battery_discharge_max": "mdi:battery-arrow-down",
187+
"power_battery_forcible_charge": "mdi:battery-arrow-up",
188+
"power_battery_forcible_discharge": "mdi:battery-arrow-down",
189+
"battery_storage_power_of_charge_from_grid": "mdi:transmission-tower-import",
190+
"temperature_battery": "mdi:thermometer",
191+
"voltage_battery": "mdi:car-battery",
192+
"voltage_battery_unit_1": "mdi:car-battery",
193+
"voltage_battery_unit_2": "mdi:car-battery",
194+
195+
# PowerSensor
196+
"powersensor_current_phase_a": "mdi:current-ac",
197+
"powersensor_current_phase_b": "mdi:current-ac",
198+
"powersensor_current_phase_c": "mdi:current-ac",
199+
"powersensor_power_ac_phase_a": "mdi:flash",
200+
"powersensor_power_ac_phase_b": "mdi:flash",
201+
"powersensor_power_ac_phase_c": "mdi:flash",
202+
"powersensor_voltage_phase_a": "mdi:sine-wave",
203+
"powersensor_voltage_phase_b": "mdi:sine-wave",
204+
"powersensor_voltage_phase_c": "mdi:sine-wave",
205+
206+
# Wallbox connector
207+
"current_wallbox_connector_1_phase_a": "mdi:current-ac",
208+
"current_wallbox_connector_1_phase_b": "mdi:current-ac",
209+
"current_wallbox_connector_1_phase_c": "mdi:current-ac",
210+
"energy_wallbox_connector_1_charged_total": "mdi:ev-station",
211+
"power_wallbox_connector_1_charging": "mdi:ev-station",
212+
"power_wallbox_connector_1_offered": "mdi:ev-plug-type2",
213+
"voltage_wallbox_connector_1_phase_a": "mdi:transmission-tower",
214+
"voltage_wallbox_connector_1_phase_b": "mdi:transmission-tower",
215+
"voltage_wallbox_connector_1_phase_c": "mdi:transmission-tower",
216+
}

custom_components/enpal_webparser/entity_factory.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
from homeassistant.helpers.entity import DeviceInfo
2525

2626
from .utils import make_id
27+
from .const import ICON_MAP
28+
2729

2830
class EnpalBaseSensor(CoordinatorEntity, SensorEntity):
2931
"""Generic Enpal sensor entity using the update coordinator."""
@@ -36,6 +38,11 @@ def __init__(self, sensor: dict, coordinator: DataUpdateCoordinator):
3638
self._attr_native_unit_of_measurement = sensor.get("unit")
3739
self._attr_enabled_default = sensor.get("enabled", True)
3840

41+
icon_key = make_id(sensor.get("name", ""))
42+
if icon_key in ICON_MAP:
43+
self._attr_icon = ICON_MAP[icon_key]
44+
45+
3946
device_class = sensor.get("device_class")
4047
if device_class and hasattr(SensorDeviceClass, device_class.upper()):
4148
self._attr_device_class = getattr(SensorDeviceClass, device_class.upper())

custom_components/enpal_webparser/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@
88
"iot_class": "local_polling",
99
"issue_tracker": "https://github.com/derolli1976/enpal/issues",
1010
"requirements": [],
11-
"version": "2.1.4"
11+
"version": "2.1.5"
1212
}

custom_components/enpal_webparser/utils.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
from .const import (
2626
DEFAULT_UNITS,
27+
DEVICE_CLASS_OVERRIDES,
2728
ENPAL_TIMESTAMP_FORMAT,
2829
UNIT_DEVICE_CLASS_MAP,
2930
)
@@ -161,6 +162,11 @@ def parse_card_rows(card: Tag, group: str, groups: List[str]) -> List[Dict[str,
161162
"enabled": group in groups,
162163
"enpal_last_update": timestamp_iso,
163164
}
165+
166+
sensor_id = make_id(sensor["name"])
167+
if sensor_id in DEVICE_CLASS_OVERRIDES:
168+
sensor["device_class"] = DEVICE_CLASS_OVERRIDES[sensor_id]
169+
164170
sensor_list.append(sensor)
165171

166172
return sensor_list

0 commit comments

Comments
 (0)