Skip to content

Commit 2c6b289

Browse files
committed
add combo grid sensor
1 parent 4905bf5 commit 2c6b289

1 file changed

Lines changed: 66 additions & 0 deletions

File tree

custom_components/growatt_modbus/sensor.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,24 @@
253253
},
254254

255255
# Energy Breakdown (storage/hybrid models)
256+
"grid_energy_today": {
257+
"name": "Grid Energy Today",
258+
"icon": "mdi:transmission-tower",
259+
"device_class": SensorDeviceClass.ENERGY,
260+
"state_class": SensorStateClass.TOTAL,
261+
"unit": UnitOfEnergy.KILO_WATT_HOUR,
262+
"attr": "calculated",
263+
"condition": lambda data: data.load_energy_today > 0 or data.energy_to_grid_today > 0,
264+
},
265+
"grid_energy_total": {
266+
"name": "Grid Energy Total",
267+
"icon": "mdi:transmission-tower",
268+
"device_class": SensorDeviceClass.ENERGY,
269+
"state_class": SensorStateClass.TOTAL,
270+
"unit": UnitOfEnergy.KILO_WATT_HOUR,
271+
"attr": "calculated",
272+
"condition": lambda data: data.load_energy_total > 0 or data.energy_to_grid_total > 0,
273+
},
256274
"energy_to_grid_today": {
257275
"name": "Energy to Grid Today",
258276
"icon": "mdi:transmission-tower-export",
@@ -532,6 +550,54 @@ def native_value(self) -> Any:
532550

533551
return round(max(0, load), 1)
534552

553+
elif self._sensor_key == "grid_energy_today":
554+
# Combined grid energy: positive=export, negative=import
555+
# Net grid energy = export - import
556+
export_energy = getattr(data, "energy_to_grid_today", 0)
557+
load_energy = getattr(data, "load_energy_today", 0)
558+
solar_energy = getattr(data, "energy_today", 0)
559+
560+
# Import = load - solar + export
561+
import_energy = max(0, load_energy - solar_energy + export_energy)
562+
563+
# Net: positive when more export than import
564+
net_energy = export_energy - import_energy
565+
return round(net_energy, 2)
566+
567+
elif self._sensor_key == "grid_energy_total":
568+
# Combined grid energy: positive=export, negative=import
569+
# Net grid energy = export - import
570+
export_energy = getattr(data, "energy_to_grid_total", 0)
571+
load_energy = getattr(data, "load_energy_total", 0)
572+
solar_energy = getattr(data, "energy_total", 0)
573+
574+
# Import = load - solar + export
575+
import_energy = max(0, load_energy - solar_energy + export_energy)
576+
577+
# Net: positive when more export than import
578+
net_energy = export_energy - import_energy
579+
return round(net_energy, 2)
580+
581+
elif self._sensor_key == "grid_import_energy_today":
582+
# Grid import energy = house load - solar + export
583+
load_energy = getattr(data, "load_energy_today", 0)
584+
solar_energy = getattr(data, "energy_today", 0)
585+
export_energy = getattr(data, "energy_to_grid_today", 0)
586+
587+
# Import = what you consumed minus what solar provided plus what was exported
588+
import_energy = max(0, load_energy - solar_energy + export_energy)
589+
return round(import_energy, 2)
590+
591+
elif self._sensor_key == "grid_import_energy_total":
592+
# Grid import energy = house load - solar + export
593+
load_energy = getattr(data, "load_energy_total", 0)
594+
solar_energy = getattr(data, "energy_total", 0)
595+
export_energy = getattr(data, "energy_to_grid_total", 0)
596+
597+
# Import = what you consumed minus what solar provided plus what was exported
598+
import_energy = max(0, load_energy - solar_energy + export_energy)
599+
return round(import_energy, 2)
600+
535601
elif self._sensor_key == "last_update":
536602
# Last successful update timestamp
537603
if self.coordinator.last_successful_update:

0 commit comments

Comments
 (0)