|
253 | 253 | }, |
254 | 254 |
|
255 | 255 | # 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 | + }, |
256 | 274 | "energy_to_grid_today": { |
257 | 275 | "name": "Energy to Grid Today", |
258 | 276 | "icon": "mdi:transmission-tower-export", |
@@ -532,6 +550,54 @@ def native_value(self) -> Any: |
532 | 550 |
|
533 | 551 | return round(max(0, load), 1) |
534 | 552 |
|
| 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 | + |
535 | 601 | elif self._sensor_key == "last_update": |
536 | 602 | # Last successful update timestamp |
537 | 603 | if self.coordinator.last_successful_update: |
|
0 commit comments