Repository: evcc-io/evcc

Issue:
Wallbox Pulsar Pro does not understand mA regulation
### Describe the bug

Hi, I have the impression that the Pulsar Pro does not understand mA regulation. In this example, it gets send 8.8 A as set current, and then moves to 16 A. Would it be better to supress mA regulation for this type of wallbox?



### Steps to reproduce

1. See log 
2.
3.
...


### Configuration details

```yaml
# open evcc at http://evcc.local:7070
network:
  schema: http
  host: evcc.local # .local suffix announces the hostname on MDNS
  port: 7070

log: debug
levels:
  cache: error

# unique installation id
plant: *****

interval: 16s # control cycle interval

# trial token, valid until 2025-07-02
sponsortoken: *****

# sponsors can set telemetry: true to enable anonymous data aggregation
# see https://github.com/evcc-io/evcc/discussions/4554
telemetry: false

meters:
- type: template
  template: sungrow-hybrid
  id: 1
  host: 127.0.0.1
  port: 5021
  usage: grid
  modbus: tcpip
  name: grid1
- type: template
  template: sungrow-hybrid
  id: 1
  host: 127.0.0.1
  port: 5021
  usage: pv
  modbus: tcpip
  name: pv2
- type: template
  template: sungrow-hybrid
  id: 1
  host: 127.0.0.1
  port: 5021
  usage: battery
  modbus: tcpip
  name: battery3
  capacity: 16

    #chargers:
    #- type: template
    #  template: pulsarplus
    #  name: wallbox5
    #  remotestart: true
    #  connecttimeout: 2m # optional
    #  meterinterval: 20s # optional etwas weniger als die haelfte von interval
    #    #ChargingRateUnit: A
    #    #getconfiguration: false
    #    #ForcePowerCtrl: true

chargers:
  - name: wallbox5
    type: template
    template: pulsarplus
      #stationid: EVB-P12354 # Station ID des Ladepunktes. Nur erforderlich wenn mehrere OCPP-Ladestationen eingerichtet sind um diese korrekt zuzuweisen. Eine einzelne OCPP-Ladestation kann auch automatisch zugeordnet werden. Hinweis: In Ausnahmefällen kann es erforderlich sein, diese ID manuell an die OCPP-URL der Ladestation in der Form ws://<evcc-adresse>:8887/<stationid> anzuhängen. Die meisten Ladestationen fügen die ID intern automatisch hinzu. (optional)
      #connector: 1 # Anschlussnummer bei Ladestationen mit mehreren Anschlüssen. Die Zählung beginnt bei 1 für den ersten Anschluss. (optional)
    remotestart: true # Diese Option nur aktivieren wenn keinerlei Möglichkeit besteht Transaktionen seitens des Ladepunktes zu initiieren! Das ist nur der Fall wenn z. B. kein RFID-Lesegerät vorhanden ist und Ladevorgänge grundsätzlich einzeln per App freigeschaltet werden müssten. Normalerweise sollte der Ladepunkt am Gerät immer so konfiguriert werden, dass entweder eine RFID-Karte zur Freischaltung verwendet wird oder der Ladepunkt auf "Autostart", "Freies Laden" o.ä. eingestellt ist. Zunächst die Dokumentation und die Konfigurationsmöglichkeiten des Ladepunktes prüfen, ggf. beim Hersteller nachfragen! (optional)
      #idtag: *****
    connecttimeout: 2m # optional
    meterinterval: 7s # optional
      #metervalues: Energy.Active.Import.Register,Power.Active.Import,SoC,Current.Offered,Power.Offered,Current.Import,Voltage # optional

vehicles:
- type: template
  template: renault
  user: *****
  password: *****
  vin: *****
  title: Zoe
  icon: car
  capacity: 52
  phases: 3
  mode: off
  minCurrent: 8
  maxCurrent: 20
  cache: 15m
  alternativewakeup: false
  name: ev4

loadpoints:
- title: Einfahrt
  charger: wallbox5
  mode: off
  enable:
    threshold: -3000
    delay: 1m
  disable:
    threshold: -3000 # maximum import power (W)
    delay: 10m

site:
  title: Zuhause
  meters:
    grid: grid1
    pv:
      - pv2
    battery:
      - battery3
  residualPower: 100

tariffs:
  currency: EUR # (default EUR)
  grid:
    # static grid price
    type: fixed
    price: 0.34 # [currency]/kWh

  feedin:
    # rate for feeding excess (pv) energy to the grid
    type: fixed
    price: 0.07 # [currency]/kWh
  solar:
    - type: template
      template: forecast-solar
      lat: *****
      lon: *****
      dec: 30 # 0 = horizontal, 90 = vertikal
      kwp: 5.22
      az: -100 # -180 = Norden, -90 = Osten, 0 = Süden, 90 = Westen, 180 = Norden
    - type: template
      template: forecast-solar
      lat: *****
      lon: *****
      dec: 30 # 0 = horizontal, 90 = vertikal
      kwp: 5.22
      az: 80 # -180 = Norden, -90 = Osten, 0 = Süden, 90 = Westen, 180 = Norden

modbusproxy:
  - port: 5021
    uri: 192.168.2.39:502


Version: `0.204.5`
```

### Log details

```text
[site ] DEBUG 2025/06/27 09:49:44 site power: -553W
[lp-1 ] DEBUG 2025/06/27 09:49:44 charge voltages: [237 233 236]V
[lp-1 ] DEBUG 2025/06/27 09:49:44 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/27 09:49:44 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/27 09:49:44 charge total import: 583.146kWh
[lp-1 ] DEBUG 2025/06/27 09:49:44 charger status: C
[lp-1 ] DEBUG 2025/06/27 09:49:44 soc estimated: 48.45% (vehicle: 48.00%)
[lp-1 ] DEBUG 2025/06/27 09:49:44 vehicle soc: 48%
[lp-1 ] DEBUG 2025/06/27 09:49:44 vehicle range: 157km
[lp-1 ] DEBUG 2025/06/27 09:49:44 pv charge current: 8.8A = 8A + 0.801A (-553W @ 3p)
[ocpp ] TRACE 2025/06/27 09:49:44 send Wallbox: [2,"1053070551","SetChargingProfile",{"connectorId":1,"csChargingProfiles":{"chargingProfileId":30,"stackLevel":10,"chargingProfilePurpose":"TxDefaultProfile","chargingProfileKind":"Absolute","chargingSchedule":{"startSchedule":"2025-06-27T07:48:44Z","chargingRateUnit":"A","chargingSchedulePeriod":[{"startPeriod":0,"limit":8.8}]}}}]
[ocpp ] TRACE 2025/06/27 09:49:45 recv Wallbox: [3,"1053070551",{"status": "Accepted"}]
[lp-1 ] DEBUG 2025/06/27 09:49:45 set charge current limit: 8.8A
[ocpp ] TRACE 2025/06/27 09:49:49 recv Wallbox: [2,"1979342630","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T07:49:49Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "8307.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "583157.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "11.8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "11.8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "11.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "236.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "234.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "11232"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 09:49:49 send Wallbox: [3,"1979342630",{}]
[ocpp ] TRACE 2025/06/27 09:49:56 recv Wallbox: [2,"518030432","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T07:49:56Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "10865.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "583178.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "235.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "234.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "11216"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 09:49:56 send Wallbox: [3,"518030432",{}]
[site ] DEBUG 2025/06/27 09:50:00 ----
[lp-1 ] DEBUG 2025/06/27 09:50:00 charge power: 10866W
[lp-1 ] DEBUG 2025/06/27 09:50:00 charge currents: [15.5 15.5 15.5]A
```

### What type of operating system or environment does evcc run on?

Linux

### External automation

- [x] I have made sure that no external automation like HomeAssistant or Node-RED is active or accessing any of the mentioned devices when this issue occurs.

### Nightly build

- [x] I have verified that the issue is reproducible with the latest nightly build

### Version

evcc version 0.204.5

Hints from issue comments:
@mfuchs1984: Which firmware version is running on it?@premultiply: > Would it be better to supress mA regulation for this type of wallbox?

Its basic part of the OCPP spec.@poml88: Yes, but we know that the ocpp implementation of WB is not so good...

I think I managed to configure the Zoe temporarily as "coarsecurrent"
```
- name: my_car
  type: custom
  title: Mein Auto # display name for UI
  capacity: 52 # battery capacity (kWh)
  features: ["coarsecurrent"]
```
So, I can see if things improve.

It is firmware 6.7.24 on the WB.
@mfuchs1984: I doubt this will help. An option is to try if the charger works with the Home Assistant ocpp integration which uses a different kind of charging profile. In case this works, you can integrate the charger in evcc through the Home Assistant API.

Btw., you are not the only one with this problem
https://github.com/evcc-io/evcc/discussions/20074
https://github.com/evcc-io/evcc/issues/18974
In the second one, pulsar logs were provided showing a potential timing issues in the wallbox firmware. Changing the evcc interval seems to have improved the behavior.@poml88: Yes, I saw those issues, that is why in my config the interval is not 30s but 16s with the meterinterval 7s to fire at 14s, just before the 16s... But this seems not to be the problem. 
It works fine is the A is set to an integer, as soon as it is .something it will go wild.
Maybe I can confirm this with the "coarsecurrent". 
If so, it would be good to kill mA regulation for the Pulsars.
Anyway I was thinking to change the Pulsar for a cfos Brain solar or daheimladen smart pro. But for the moment I am stuck with the Pulsar. And other people as well it seems.@poml88: Ok, it has happened again. But I have another theory, coming back to the timing, look at the log:
It seems that the Pulsar need 7-8 seconds to answer the request for the meter values `(send Wallbox: [3,"157694705",{}]`). In the case logged, the request for changing the current was sent before the request for meter values was answered, i.e., the Pulsar had two messages from evcc to process.
To me it seems this is causing the failure. 
Can we avoid sending another message to the Pulsar before the previous one was answered?

```
[lp-1 ] DEBUG 2025/06/27 12:08:14 set min current: 10
[ocpp ] TRACE 2025/06/27 12:08:16 recv Wallbox: [2,"501959659","Heartbeat",{}]
[ocpp ] TRACE 2025/06/27 12:08:16 send Wallbox: [3,"501959659",{"currentTime":"2025-06-27T10:08:16Z"}]
[ocpp ] TRACE 2025/06/27 12:08:17 recv Wallbox: [2,"242362365","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T10:08:16Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "6255.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "588343.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "9.1"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "233.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "6246"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 12:08:17 send Wallbox: [3,"242362365",{}]
[ocpp ] TRACE 2025/06/27 12:08:24 recv Wallbox: [2,"157694705","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T10:08:23Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "6264.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "588354.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "234.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "6264"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 12:08:24 send Wallbox: [3,"157694705",{}]
[lp-1 ] DEBUG 2025/06/27 12:08:30 charge power: 6264W
[lp-1 ] DEBUG 2025/06/27 12:08:30 charge currents: [9 9 9]A
[lp-1 ] DEBUG 2025/06/27 12:08:30 charge voltages: [234 230 232]V
[lp-1 ] DEBUG 2025/06/27 12:08:30 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/27 12:08:30 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/27 12:08:30 charge total import: 588.354kWh
[lp-1 ] DEBUG 2025/06/27 12:08:30 charger status: C
[lp-1 ] DEBUG 2025/06/27 12:08:30 pv charge current: min 10A > 1.49A (5183W @ 3p, battery: true)
[ocpp ] TRACE 2025/06/27 12:08:30 send Wallbox: [2,"290696704","SetChargingProfile",{"connectorId":1,"csChargingProfiles":{"chargingProfileId":30,"stackLevel":10,"chargingProfilePurpose":"TxDefaultProfile","chargingProfileKind":"Absolute","chargingSchedule":{"startSchedule":"2025-06-27T10:07:30Z","chargingRateUnit":"A","chargingSchedulePeriod":[{"startPeriod":0,"limit":10}]}}}]
[ocpp ] TRACE 2025/06/27 12:08:31 recv Wallbox: [2,"562969595","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T10:08:30Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "6269.1"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "588365.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "9.1"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "6246"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 12:08:31 send Wallbox: [3,"562969595",{}]
[ocpp ] TRACE 2025/06/27 12:08:32 recv Wallbox: [3,"290696704",{"status": "Accepted"}]
[lp-1 ] DEBUG 2025/06/27 12:08:32 set charge current limit: 10A
[ocpp ] TRACE 2025/06/27 12:08:38 recv Wallbox: [2,"858179739","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T10:08:37Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "10726.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "588381.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "11072"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 12:08:38 send Wallbox: [3,"858179739",{}]
[ocpp ] TRACE 2025/06/27 12:08:45 recv Wallbox: [2,"263893285","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T10:08:44Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "10764.7"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "588400.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.6"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "11088"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 12:08:45 send Wallbox: [3,"263893285",{}]
[lp-1 ] DEBUG 2025/06/27 12:08:46 charge power: 10765W
[lp-1 ] DEBUG 2025/06/27 12:08:46 charge currents: [15.5 15.5 15.6]A 
```@poml88: ...nein, ist es auch nicht. 
Ich bekomme es auch mit anderen Intervallen nicht hin. Der Fehler ist immer da, nur wenn das interval kurz ist, dann korriegiert er das sofort und es fällt nicht so auf....
Ich geb's einfach auf...@mfuchs1984: Kannst ja ggf. mal probieren, ob's mit der Home Assistant ocpp integration klappt, siehe https://github.com/evcc-io/evcc/discussions/18414

Und definitiv dem Hersteller melden. Die Firmware wird ja offensichtlich gepflegt, also besteht die Chance auf eine Verbesserung.@poml88: Ja, ach, ne, weisste... ;) Ich brauch im Winter eh die 1p3p Umschaltung... Und ne Wallbox, die die realen Ströme kennt...
Aber für andere: Es scheint mit interval=14s und meterinterval=10s relativ gut zu funktionieren...@poml88: The only other thing I note is:
When evcc tries to stop the Pulsar, it is setting the current to 0 A.
The error from above occurs again and instead of 0 A the Pulsar goes to 16 A.
Then, evcc notices a logic error, enabled instead of expected disabled.
But instead of setting the current to 0 A again, it sets it to 8 A and by doing so enabling the charger again.
And then the cycle starts from the top.

In my point of view, if evcc sees a "enabled instead of expected disabled" it should set the current to 0 A, not to 8 A or whatever it was before.

See log.

```
[lp-1 ] DEBUG 2025/06/27 13:18:12 pv disable in 0s
[lp-1 ] DEBUG 2025/06/27 13:18:12 pv disable timer elapsed
[lp-1 ] DEBUG 2025/06/27 13:18:12 pv timer reset
[lp-1 ] DEBUG 2025/06/27 13:18:12 pv timer inactive
[ocpp ] TRACE 2025/06/27 13:18:12 recv Wallbox: [2,"757971298","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:18:12Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "5443.7"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592072.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "5536"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:18:12 send Wallbox: [3,"757971298",{}]
[ocpp ] TRACE 2025/06/27 13:18:12 recv Wallbox: [3,"3333133857",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:18:12 send Wallbox: [2,"1206886029","SetChargingProfile",{"connectorId":1,"csChargingProfiles":{"chargingProfileId":30,"stackLevel":10,"chargingProfilePurpose":"TxDefaultProfile","chargingProfileKind":"Absolute","chargingSchedule":{"startSchedule":"2025-06-27T11:17:12Z","chargingRateUnit":"A","chargingSchedulePeriod":[{"startPeriod":0,"limit":0}]}}}]
[ocpp ] TRACE 2025/06/27 13:18:12 recv Wallbox: [2,"1848660899","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:18:12Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "5443.7"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592073.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.8"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "5536"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:18:12 send Wallbox: [3,"1848660899",{}]
[ocpp ] TRACE 2025/06/27 13:18:14 recv Wallbox: [3,"1206886029",{"status": "Accepted"}]
[lp-1 ] DEBUG 2025/06/27 13:18:14 charger disable
[lp-1 ] DEBUG 2025/06/27 13:18:14 wake-up timer: stop
[site ] DEBUG 2025/06/27 13:18:14 solar forecast: accumulated 116.565kWh, produced 189.800kWh, scale 1.628
[ocpp ] TRACE 2025/06/27 13:18:22 send Wallbox: [2,"957399836","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:18:22 recv Wallbox: [3,"957399836",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:18:22 recv Wallbox: [2,"820487973","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:18:21Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "10717.9"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592093.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.6"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "11040"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:18:22 send Wallbox: [3,"820487973",{}]
[ocpp ] TRACE 2025/06/27 13:18:22 recv Wallbox: [2,"502668058","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:18:22Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "10702.4"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592094.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.6"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "11024"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:18:22 send Wallbox: [3,"502668058",{}]
[site ] DEBUG 2025/06/27 13:18:26 ----
[lp-1 ] DEBUG 2025/06/27 13:18:26 charge power: 10702W
[lp-1 ] DEBUG 2025/06/27 13:18:26 charge currents: [15.5 15.5 15.6]A
[site ] DEBUG 2025/06/27 13:18:26 grid power: 1995W
[site ] DEBUG 2025/06/27 13:18:26 pv 1 power: 2653W
[site ] DEBUG 2025/06/27 13:18:26 battery 1 power: 7371W
[site ] DEBUG 2025/06/27 13:18:26 grid currents: [1.46 5.44 1.46]A
[site ] DEBUG 2025/06/27 13:18:26 battery 1 soc: 42%
[site ] DEBUG 2025/06/27 13:18:26 site power: 9466W
[lp-1 ] DEBUG 2025/06/27 13:18:26 charge voltages: [230 230 229]V
[lp-1 ] DEBUG 2025/06/27 13:18:26 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:18:26 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:18:26 charge total import: 592.094kWh
[lp-1 ] DEBUG 2025/06/27 13:18:26 charger status: C
[lp-1 ] DEBUG 2025/06/27 13:18:26 pv charge current: 0A = 0A + -13.7A (9466W @ 3p)
[site ] DEBUG 2025/06/27 13:18:26 solar forecast: accumulated 116.573kWh, produced 189.900kWh, scale 1.629
[ocpp ] TRACE 2025/06/27 13:18:32 send Wallbox: [2,"120422581","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:18:32 recv Wallbox: [3,"120422581",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:18:32 recv Wallbox: [2,"953460714","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:18:31Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "10717.9"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592120.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.6"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "11040"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:18:32 send Wallbox: [3,"953460714",{}]
[ocpp ] TRACE 2025/06/27 13:18:32 recv Wallbox: [2,"767476528","Heartbeat",{}]
[ocpp ] TRACE 2025/06/27 13:18:32 send Wallbox: [3,"767476528",{"currentTime":"2025-06-27T11:18:32Z"}]
[ocpp ] TRACE 2025/06/27 13:18:33 recv Wallbox: [2,"675898489","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:18:32Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "10694.8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592123.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.6"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "11040"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:18:33 send Wallbox: [3,"675898489",{}]
[site ] DEBUG 2025/06/27 13:18:40 ----
[lp-1 ] DEBUG 2025/06/27 13:18:40 charge power: 10695W
[lp-1 ] DEBUG 2025/06/27 13:18:40 charge currents: [15.4 15.5 15.6]A
[site ] DEBUG 2025/06/27 13:18:40 grid power: 2017W
[site ] DEBUG 2025/06/27 13:18:40 pv 1 power: 2653W
[site ] DEBUG 2025/06/27 13:18:40 battery 1 power: 7321W
[site ] DEBUG 2025/06/27 13:18:40 grid currents: [1.46 5.44 1.46]A
[site ] DEBUG 2025/06/27 13:18:40 battery 1 soc: 42%
[site ] DEBUG 2025/06/27 13:18:40 site power: 9438W
[lp-1 ] DEBUG 2025/06/27 13:18:40 charge voltages: [231 230 229]V
[lp-1 ] DEBUG 2025/06/27 13:18:40 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:18:40 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:18:40 charge total import: 592.123kWh
[lp-1 ] DEBUG 2025/06/27 13:18:40 charger status: C
[lp-1 ] DEBUG 2025/06/27 13:18:40 pv charge current: 0A = 0A + -13.7A (9438W @ 3p)
[site ] DEBUG 2025/06/27 13:18:40 solar forecast: accumulated 116.582kWh, produced 189.900kWh, scale 1.629
[ocpp ] TRACE 2025/06/27 13:18:42 send Wallbox: [2,"510534010","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:18:42 recv Wallbox: [3,"510534010",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:18:42 recv Wallbox: [2,"2077223690","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:18:41Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "10687.2"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592150.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.6"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "11056"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:18:42 send Wallbox: [3,"2077223690",{}]
[ocpp ] TRACE 2025/06/27 13:18:43 recv Wallbox: [2,"2032159395","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:18:42Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "10671.8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592153.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.6"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "11040"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:18:43 send Wallbox: [3,"2032159395",{}]
[ocpp ] TRACE 2025/06/27 13:18:52 send Wallbox: [2,"3550597387","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:18:52 recv Wallbox: [3,"3550597387",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:18:52 recv Wallbox: [2,"2049976865","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:18:51Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "10671.9"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592179.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "11040"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:18:52 send Wallbox: [3,"2049976865",{}]
[ocpp ] TRACE 2025/06/27 13:18:53 recv Wallbox: [2,"1990378408","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:18:52Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "10656.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592182.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "11024"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:18:53 send Wallbox: [3,"1990378408",{}]
[site ] DEBUG 2025/06/27 13:18:54 ----
[lp-1 ] DEBUG 2025/06/27 13:18:54 charge power: 10656W
[lp-1 ] DEBUG 2025/06/27 13:18:54 charge currents: [15.4 15.5 15.5]A
[site ] DEBUG 2025/06/27 13:18:54 grid power: 2005W
[site ] DEBUG 2025/06/27 13:18:54 pv 1 power: 2704W
[site ] DEBUG 2025/06/27 13:18:54 battery 1 power: 7309W
[site ] DEBUG 2025/06/27 13:18:54 grid currents: [1.7 5.44 1.46]A
[site ] DEBUG 2025/06/27 13:18:54 battery 1 soc: 42%
[site ] DEBUG 2025/06/27 13:18:54 site power: 9414W
[lp-1 ] DEBUG 2025/06/27 13:18:54 charge voltages: [230 230 229]V
[lp-1 ] DEBUG 2025/06/27 13:18:54 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:18:54 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:18:54 charge total import: 592.182kWh
[lp-1 ] DEBUG 2025/06/27 13:18:54 charger status: C
[lp-1 ] DEBUG 2025/06/27 13:18:54 pv charge current: 0A = 0A + -13.6A (9414W @ 3p)
[site ] DEBUG 2025/06/27 13:18:54 solar forecast: accumulated 116.591kWh, produced 189.900kWh, scale 1.629
[ocpp ] TRACE 2025/06/27 13:19:02 send Wallbox: [2,"1758777423","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:19:02 recv Wallbox: [3,"1758777423",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:19:02 recv Wallbox: [2,"1586940409","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:19:01Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "10710.3"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592207.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.6"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "11056"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:19:02 send Wallbox: [3,"1586940409",{}]
[ocpp ] TRACE 2025/06/27 13:19:03 recv Wallbox: [2,"938913284","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:19:02Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "10687.4"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592210.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "11056"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:19:03 send Wallbox: [3,"938913284",{}]
[site ] DEBUG 2025/06/27 13:19:08 ----
[lp-1 ] DEBUG 2025/06/27 13:19:08 charge power: 10687W
[lp-1 ] DEBUG 2025/06/27 13:19:08 charge currents: [15.4 15.5 15.5]A
[site ] DEBUG 2025/06/27 13:19:08 grid power: 2043W
[site ] DEBUG 2025/06/27 13:19:08 pv 1 power: 2704W
[site ] DEBUG 2025/06/27 13:19:08 battery 1 power: 7267W
[site ] DEBUG 2025/06/27 13:19:08 grid currents: [1.7 5.44 1.7]A
[site ] DEBUG 2025/06/27 13:19:08 battery 1 soc: 42%
[site ] DEBUG 2025/06/27 13:19:08 site power: 9410W
[lp-1 ] DEBUG 2025/06/27 13:19:08 charge voltages: [231 231 229]V
[lp-1 ] DEBUG 2025/06/27 13:19:08 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:19:08 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:19:08 charge total import: 592.210kWh
[lp-1 ] DEBUG 2025/06/27 13:19:08 charger status: C
[lp-1 ] DEBUG 2025/06/27 13:19:08 pv charge current: 0A = 0A + -13.6A (9410W @ 3p)
[site ] DEBUG 2025/06/27 13:19:08 solar forecast: accumulated 116.600kWh, produced 189.900kWh, scale 1.629
[ocpp ] TRACE 2025/06/27 13:19:12 send Wallbox: [2,"4158851523","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:19:12 recv Wallbox: [3,"4158851523",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:19:12 recv Wallbox: [2,"2011032356","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:19:11Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "10679.2"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592236.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.6"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "11056"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:19:12 send Wallbox: [3,"2011032356",{}]
[ocpp ] TRACE 2025/06/27 13:19:13 recv Wallbox: [2,"330515946","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:19:12Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "10726.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592239.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.6"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "11072"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:19:13 send Wallbox: [3,"330515946",{}]
[ocpp ] TRACE 2025/06/27 13:19:22 send Wallbox: [2,"4253204976","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[site ] DEBUG 2025/06/27 13:19:22 ----
[lp-1 ] DEBUG 2025/06/27 13:19:22 charge power: 10726W
[lp-1 ] DEBUG 2025/06/27 13:19:22 charge currents: [15.4 15.5 15.6]A
[site ] DEBUG 2025/06/27 13:19:22 grid power: 2018W
[site ] DEBUG 2025/06/27 13:19:22 pv 1 power: 2755W
[site ] DEBUG 2025/06/27 13:19:22 battery 1 power: 7209W
[site ] DEBUG 2025/06/27 13:19:22 grid currents: [1.46 5.44 1.51]A
[site ] DEBUG 2025/06/27 13:19:22 battery 1 soc: 42%
[site ] DEBUG 2025/06/27 13:19:22 site power: 9327W
[lp-1 ] DEBUG 2025/06/27 13:19:22 charge voltages: [230 232 230]V
[lp-1 ] DEBUG 2025/06/27 13:19:22 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:19:22 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:19:22 charge total import: 592.239kWh
[lp-1 ] DEBUG 2025/06/27 13:19:22 charger status: C
[lp-1 ] WARN 2025/06/27 13:19:22 charger out of sync: expected disabled, got enabled
[lp-1 ] DEBUG 2025/06/27 13:19:22 charger enable
[lp-1 ] DEBUG 2025/06/27 13:19:22 pv charge current: 0A = 0A + -13.5A (9327W @ 3p)
[lp-1 ] DEBUG 2025/06/27 13:19:22 projected site power 9327W >= -3000W disable threshold
[lp-1 ] DEBUG 2025/06/27 13:19:22 pv disable timer start: 10m0s
[lp-1 ] DEBUG 2025/06/27 13:19:22 pv disable in 10m0s
[ocpp ] TRACE 2025/06/27 13:19:22 recv Wallbox: [3,"4253204976",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:19:22 send Wallbox: [2,"3577158105","SetChargingProfile",{"connectorId":1,"csChargingProfiles":{"chargingProfileId":30,"stackLevel":10,"chargingProfilePurpose":"TxDefaultProfile","chargingProfileKind":"Absolute","chargingSchedule":{"startSchedule":"2025-06-27T11:18:22Z","chargingRateUnit":"A","chargingSchedulePeriod":[{"startPeriod":0,"limit":8}]}}}]
[ocpp ] TRACE 2025/06/27 13:19:22 recv Wallbox: [2,"1395869862","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:19:22Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "10679.4"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592267.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.6"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "11024"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:19:22 send Wallbox: [3,"1395869862",{}]
[ocpp ] TRACE 2025/06/27 13:19:23 recv Wallbox: [3,"3577158105",{"status": "Accepted"}]
[lp-1 ] DEBUG 2025/06/27 13:19:23 set charge current limit: 8A
[site ] DEBUG 2025/06/27 13:19:23 solar forecast: accumulated 116.609kWh, produced 189.900kWh, scale 1.629
[ocpp ] TRACE 2025/06/27 13:19:23 recv Wallbox: [2,"1050058614","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:19:23Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "10710.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592270.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "11056"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:19:23 send Wallbox: [3,"1050058614",{}]
[ocpp ] TRACE 2025/06/27 13:19:32 recv Wallbox: [2,"131928121","Heartbeat",{}]
[ocpp ] TRACE 2025/06/27 13:19:32 send Wallbox: [3,"131928121",{"currentTime":"2025-06-27T11:19:32Z"}]
[ocpp ] TRACE 2025/06/27 13:19:34 send Wallbox: [2,"359022566","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:19:34 recv Wallbox: [3,"359022566",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:19:34 recv Wallbox: [2,"1518432080","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:19:33Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "10679.2"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592299.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.6"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "228.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "11024"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:19:34 send Wallbox: [3,"1518432080",{}]
[ocpp ] TRACE 2025/06/27 13:19:34 recv Wallbox: [2,"26813793","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:19:33Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "10679.2"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592299.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "15.4"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "15.5"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "15.6"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "228.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "16"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "11024"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:19:34 send Wallbox: [3,"26813793",{}]
[site ] DEBUG 2025/06/27 13:19:36 ----
[lp-1 ] DEBUG 2025/06/27 13:19:36 charge power: 10679W
[lp-1 ] DEBUG 2025/06/27 13:19:36 charge currents: [15.4 15.5 15.6]A
[site ] DEBUG 2025/06/27 13:19:36 grid power: 2020W
[site ] DEBUG 2025/06/27 13:19:36 pv 1 power: 2806W
[site ] DEBUG 2025/06/27 13:19:36 battery 1 power: 7139W
[site ] DEBUG 2025/06/27 13:19:36 grid currents: [1.69 5.44 1.51]A
[site ] DEBUG 2025/06/27 13:19:36 battery 1 soc: 41%
[site ] DEBUG 2025/06/27 13:19:36 site power: 9259W
[lp-1 ] DEBUG 2025/06/27 13:19:36 charge voltages: [231 230 228]V
[lp-1 ] DEBUG 2025/06/27 13:19:36 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:19:36 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:19:36 charge total import: 592.299kWh
[lp-1 ] DEBUG 2025/06/27 13:19:36 charger status: C
[lp-1 ] WARN 2025/06/27 13:19:36 charger logic error: current mismatch (got 16A, expected 8A) - make sure your interval is at least 30s
[lp-1 ] DEBUG 2025/06/27 13:19:36 pv charge current: 2.58A = 16A + -13.4A (9259W @ 3p)
[lp-1 ] DEBUG 2025/06/27 13:19:36 projected site power 9259W >= -3000W disable threshold
[lp-1 ] DEBUG 2025/06/27 13:19:36 pv disable in 9m46s
[lp-1 ] DEBUG 2025/06/27 13:19:36 pv disable timer remaining: 9m46s
[ocpp ] TRACE 2025/06/27 13:19:36 send Wallbox: [2,"4088265919","SetChargingProfile",{"connectorId":1,"csChargingProfiles":{"chargingProfileId":30,"stackLevel":10,"chargingProfilePurpose":"TxDefaultProfile","chargingProfileKind":"Absolute","chargingSchedule":{"startSchedule":"2025-06-27T11:18:36Z","chargingRateUnit":"A","chargingSchedulePeriod":[{"startPeriod":0,"limit":8}]}}}]
[ocpp ] TRACE 2025/06/27 13:19:37 recv Wallbox: [3,"4088265919",{"status": "Accepted"}]
[lp-1 ] DEBUG 2025/06/27 13:19:37 set charge current limit: 8A
[site ] DEBUG 2025/06/27 13:19:37 solar forecast: accumulated 116.618kWh, produced 189.900kWh, scale 1.628
[ocpp ] TRACE 2025/06/27 13:19:44 send Wallbox: [2,"1109913834","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:19:44 recv Wallbox: [3,"1109913834",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:19:44 recv Wallbox: [2,"1352033713","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:19:43Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "5474.7"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592321.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "5544"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:19:44 send Wallbox: [3,"1352033713",{}]
[ocpp ] TRACE 2025/06/27 13:19:44 recv Wallbox: [2,"179745394","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:19:43Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "5474.7"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592321.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "5544"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:19:44 send Wallbox: [3,"179745394",{}]
[site ] DEBUG 2025/06/27 13:19:50 ----
[lp-1 ] DEBUG 2025/06/27 13:19:50 charge power: 5475W
[lp-1 ] DEBUG 2025/06/27 13:19:50 charge currents: [7.9 7.9 7.9]A
[site ] DEBUG 2025/06/27 13:19:50 grid power: 197W
[site ] DEBUG 2025/06/27 13:19:50 pv 1 power: 2870W
[site ] DEBUG 2025/06/27 13:19:50 battery 1 power: 2625W
[site ] DEBUG 2025/06/27 13:19:50 grid currents: [-0.341 3.45 -0.419]A
[site ] DEBUG 2025/06/27 13:19:50 battery 1 soc: 41%
[site ] DEBUG 2025/06/27 13:19:50 site power: 2922W
[lp-1 ] DEBUG 2025/06/27 13:19:50 charge voltages: [232 231 230]V
[lp-1 ] DEBUG 2025/06/27 13:19:50 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:19:50 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:19:50 charge total import: 592.321kWh
[lp-1 ] DEBUG 2025/06/27 13:19:50 charger status: C
[lp-1 ] DEBUG 2025/06/27 13:19:50 pv charge current: 3.77A = 8A + -4.23A (2922W @ 3p)
[lp-1 ] DEBUG 2025/06/27 13:19:50 projected site power 2922W >= -3000W disable threshold
[lp-1 ] DEBUG 2025/06/27 13:19:50 pv disable in 9m32s
[lp-1 ] DEBUG 2025/06/27 13:19:50 pv disable timer remaining: 9m32s
[site ] DEBUG 2025/06/27 13:19:50 solar forecast: accumulated 116.626kWh, produced 189.900kWh, scale 1.628
[ocpp ] TRACE 2025/06/27 13:19:54 send Wallbox: [2,"480465519","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:19:54 recv Wallbox: [3,"480465519",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:19:54 recv Wallbox: [2,"576463071","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:19:53Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "5458.9"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592332.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "5528"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:19:54 send Wallbox: [3,"576463071",{}]
[ocpp ] TRACE 2025/06/27 13:19:54 recv Wallbox: [2,"1748292236","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:19:53Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "5458.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592333.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "5528"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:19:54 send Wallbox: [3,"1748292236",{}]
[ocpp ] TRACE 2025/06/27 13:20:04 send Wallbox: [2,"352731396","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[site ] DEBUG 2025/06/27 13:20:04 ----
[lp-1 ] DEBUG 2025/06/27 13:20:04 charge power: 5459W
[lp-1 ] DEBUG 2025/06/27 13:20:04 charge currents: [7.9 7.9 7.9]A
[site ] DEBUG 2025/06/27 13:20:04 grid power: -0W
[site ] DEBUG 2025/06/27 13:20:04 pv 1 power: 2976W
[site ] DEBUG 2025/06/27 13:20:04 battery 1 power: 2732W
[site ] DEBUG 2025/06/27 13:20:04 grid currents: [-1.16 2.57 -1.11]A
[site ] DEBUG 2025/06/27 13:20:04 battery 1 soc: 41%
[site ] DEBUG 2025/06/27 13:20:04 site power: 2832W
[lp-1 ] DEBUG 2025/06/27 13:20:04 charge voltages: [231 231 229]V
[lp-1 ] DEBUG 2025/06/27 13:20:04 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:20:04 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:20:04 charge total import: 592.333kWh
[lp-1 ] DEBUG 2025/06/27 13:20:04 charger status: C
[lp-1 ] DEBUG 2025/06/27 13:20:04 pv charge current: 3.9A = 8A + -4.1A (2832W @ 3p)
[lp-1 ] DEBUG 2025/06/27 13:20:04 projected site power 2832W >= -3000W disable threshold
[lp-1 ] DEBUG 2025/06/27 13:20:04 pv disable in 9m18s
[lp-1 ] DEBUG 2025/06/27 13:20:04 pv disable timer remaining: 9m18s
[site ] DEBUG 2025/06/27 13:20:04 solar forecast: accumulated 116.635kWh, produced 189.900kWh, scale 1.628
[ocpp ] TRACE 2025/06/27 13:20:04 recv Wallbox: [2,"784698926","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:20:03Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "5451.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592345.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "5544"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:20:04 send Wallbox: [3,"784698926",{}]
[ocpp ] TRACE 2025/06/27 13:20:04 recv Wallbox: [3,"352731396",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:20:05 recv Wallbox: [2,"1104157171","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:20:03Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "5451.5"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592345.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.8"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "5544"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:20:05 send Wallbox: [3,"1104157171",{}]
[ocpp ] TRACE 2025/06/27 13:20:14 send Wallbox: [2,"2890996698","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:20:14 recv Wallbox: [3,"2890996698",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:20:14 recv Wallbox: [2,"1814366550","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:20:13Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "5466.8"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592356.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "5536"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:20:14 send Wallbox: [3,"1814366550",{}]
[ocpp ] TRACE 2025/06/27 13:20:14 recv Wallbox: [2,"1769443604","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:20:13Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "5451.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592357.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "5544"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:20:14 send Wallbox: [3,"1769443604",{}]
[site ] DEBUG 2025/06/27 13:20:18 ----
[lp-1 ] DEBUG 2025/06/27 13:20:18 charge power: 5452W
[lp-1 ] DEBUG 2025/06/27 13:20:18 charge currents: [7.8 7.9 7.9]A
[site ] DEBUG 2025/06/27 13:20:18 grid power: -0W
[site ] DEBUG 2025/06/27 13:20:18 pv 1 power: 3028W
[site ] DEBUG 2025/06/27 13:20:18 battery 1 power: 2648W
[site ] DEBUG 2025/06/27 13:20:18 grid currents: [-1.38 2.57 -1.09]A
[site ] DEBUG 2025/06/27 13:20:18 battery 1 soc: 41%
[site ] DEBUG 2025/06/27 13:20:18 site power: 2748W
[lp-1 ] DEBUG 2025/06/27 13:20:18 charge voltages: [232 232 229]V
[lp-1 ] DEBUG 2025/06/27 13:20:18 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:20:18 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:20:18 charge total import: 592.357kWh
[lp-1 ] DEBUG 2025/06/27 13:20:18 charger status: C
[lp-1 ] DEBUG 2025/06/27 13:20:18 pv charge current: 4.02A = 8A + -3.98A (2748W @ 3p)
[lp-1 ] DEBUG 2025/06/27 13:20:18 projected site power 2748W >= -3000W disable threshold
[lp-1 ] DEBUG 2025/06/27 13:20:18 pv disable in 9m4s
[lp-1 ] DEBUG 2025/06/27 13:20:18 pv disable timer remaining: 9m4s
[site ] DEBUG 2025/06/27 13:20:18 solar forecast: accumulated 116.644kWh, produced 189.900kWh, scale 1.628
[ocpp ] TRACE 2025/06/27 13:20:24 send Wallbox: [2,"273199802","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:20:24 recv Wallbox: [3,"273199802",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:20:24 recv Wallbox: [2,"218223650","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:20:23Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "5451.6"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592369.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.8"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "5544"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:20:24 send Wallbox: [3,"218223650",{}]
[ocpp ] TRACE 2025/06/27 13:20:24 recv Wallbox: [2,"48930576","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:20:23Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "5451.6"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592369.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "5544"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:20:24 send Wallbox: [3,"48930576",{}]
[site ] DEBUG 2025/06/27 13:20:32 ----
[lp-1 ] DEBUG 2025/06/27 13:20:32 charge power: 5452W
[lp-1 ] DEBUG 2025/06/27 13:20:32 charge currents: [7.9 7.8 7.9]A
[site ] DEBUG 2025/06/27 13:20:32 grid power: 20W
[site ] DEBUG 2025/06/27 13:20:32 pv 1 power: 3134W
[site ] DEBUG 2025/06/27 13:20:32 battery 1 power: 2571W
[site ] DEBUG 2025/06/27 13:20:32 grid currents: [-1.11 2.57 -1.33]A
[site ] DEBUG 2025/06/27 13:20:32 battery 1 soc: 41%
[site ] DEBUG 2025/06/27 13:20:32 site power: 2691W
[lp-1 ] DEBUG 2025/06/27 13:20:32 charge voltages: [232 231 230]V
[lp-1 ] DEBUG 2025/06/27 13:20:32 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:20:32 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:20:32 charge total import: 592.369kWh
[lp-1 ] DEBUG 2025/06/27 13:20:32 charger status: C
[lp-1 ] DEBUG 2025/06/27 13:20:32 pv charge current: 4.1A = 8A + -3.9A (2691W @ 3p)
[lp-1 ] DEBUG 2025/06/27 13:20:32 projected site power 2691W >= -3000W disable threshold
[lp-1 ] DEBUG 2025/06/27 13:20:32 pv disable in 8m50s
[lp-1 ] DEBUG 2025/06/27 13:20:32 pv disable timer remaining: 8m50s
[site ] DEBUG 2025/06/27 13:20:32 solar forecast: accumulated 116.653kWh, produced 190.000kWh, scale 1.629
[ocpp ] TRACE 2025/06/27 13:20:32 recv Wallbox: [2,"6055442","Heartbeat",{}]
[ocpp ] TRACE 2025/06/27 13:20:32 send Wallbox: [3,"6055442",{"currentTime":"2025-06-27T11:20:32Z"}]
[ocpp ] TRACE 2025/06/27 13:20:34 send Wallbox: [2,"1130180934","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:20:34 recv Wallbox: [3,"1130180934",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:20:34 recv Wallbox: [2,"16432795","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:20:33Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "5474.7"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592380.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "5544"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:20:34 send Wallbox: [3,"16432795",{}]
[ocpp ] TRACE 2025/06/27 13:20:34 recv Wallbox: [2,"1164716914","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:20:33Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "5482.6"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592381.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "5552"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:20:34 send Wallbox: [3,"1164716914",{}]
[ocpp ] TRACE 2025/06/27 13:20:44 send Wallbox: [2,"1800473990","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:20:44 recv Wallbox: [3,"1800473990",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:20:44 recv Wallbox: [2,"1035017673","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:20:43Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "5490.5"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592393.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "233.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "5560"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:20:44 send Wallbox: [3,"1035017673",{}]
[ocpp ] TRACE 2025/06/27 13:20:45 recv Wallbox: [2,"2005768928","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:20:43Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "5490.5"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592394.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "233.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "5560"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:20:45 send Wallbox: [3,"2005768928",{}]
[site ] DEBUG 2025/06/27 13:20:46 ----
[lp-1 ] DEBUG 2025/06/27 13:20:46 charge power: 5490W
[lp-1 ] DEBUG 2025/06/27 13:20:46 charge currents: [7.9 7.9 7.9]A
[site ] DEBUG 2025/06/27 13:20:46 grid power: -0W
[site ] DEBUG 2025/06/27 13:20:46 pv 1 power: 3186W
[site ] DEBUG 2025/06/27 13:20:46 battery 1 power: 2515W
[site ] DEBUG 2025/06/27 13:20:46 grid currents: [-1.33 2.57 -1.33]A
[site ] DEBUG 2025/06/27 13:20:46 battery 1 soc: 41%
[site ] DEBUG 2025/06/27 13:20:46 site power: 2615W
[lp-1 ] DEBUG 2025/06/27 13:20:46 charge voltages: [233 232 230]V
[lp-1 ] DEBUG 2025/06/27 13:20:46 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:20:46 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/27 13:20:46 charge total import: 592.394kWh
[lp-1 ] DEBUG 2025/06/27 13:20:46 charger status: C
[lp-1 ] DEBUG 2025/06/27 13:20:46 pv charge current: 4.21A = 8A + -3.79A (2615W @ 3p)
[lp-1 ] DEBUG 2025/06/27 13:20:46 projected site power 2615W >= -3000W disable threshold
[lp-1 ] DEBUG 2025/06/27 13:20:46 pv disable in 8m36s
[lp-1 ] DEBUG 2025/06/27 13:20:46 pv disable timer remaining: 8m36s
[site ] DEBUG 2025/06/27 13:20:46 solar forecast: accumulated 116.662kWh, produced 190.000kWh, scale 1.629
[ocpp ] TRACE 2025/06/27 13:20:54 send Wallbox: [2,"2570752939","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/27 13:20:54 recv Wallbox: [3,"2570752939",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/27 13:20:54 recv Wallbox: [2,"1847462154","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:20:53Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "5459.4"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592405.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.8"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "5552"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:20:54 send Wallbox: [3,"1847462154",{}]
[ocpp ] TRACE 2025/06/27 13:20:55 recv Wallbox: [2,"1323252190","MeterValues",{"meterValue": [{"timestamp": "2025-06-27T11:20:53Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "5459.4"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "592405.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "8"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "5552"} ]} ],"connectorId": 1,"transactionId": 1750754529}]
[ocpp ] TRACE 2025/06/27 13:20:55 send Wallbox: [3,"1323252190",{}] 
```@poml88: Lademodus war auf "PV" und wollte sich selber abschalten wegen mangelnder Sonne...@andig: > But instead of setting the current to 0 A again, it sets it to 8 A and by doing so enabling the charger again.
And then the cycle starts from the top.

8A ist dein Minimalstrom. Enabled wird damit evcc erstmal in sync mit der Box ist, die ist ja eh „an“.

Scheint hier gibts einiges für Pulsar zu tun, aber erstmal nix für uns. Closing. @poml88: Hi, can I please ask a few more questions?

> > But instead of setting the current to 0 A again, it sets it to 8 A and by doing so enabling the charger again.
> > And then the cycle starts from the top.
> 
> 8A ist dein Minimalstrom. Enabled wird damit evcc erstmal in sync mit der Box ist, die ist ja eh „an“.

1) Yes and no, because if I go from "pv" to "off" the behaviour is opposite. Then evcc insists on the 0 A. According to your logic, evcc should switch itself back on, because
> 8A ist dein Minimalstrom. Enabled wird damit evcc erstmal in sync mit der Box ist, die ist ja eh „an“.

Is that not so? It would be better if evcc would insist in both cases on 0 A. But yes, it is the Pulsar Pro firmware that is flawed, no doubt.

2) It seems that I might not be so wrong with my assumption above. I have a series of successful commands as in the log, where the charging profile is set correctly if there is no other request going on. This seems reproducible.

So I will increase the interval to 40 or so and thus reduce the number of times the wallbox is queried, let's see if that brings something.

BTW, I am running in integer mode now as you can see, maybe that helps as well. Full A steps.

3) Why is the Pulsar sending the Metervalues twice, as in the log? I guess the request for the values is this:
`send Wallbox: [2,"1725619297","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]`
why is evcc then sending (and what does it mean)
`send Wallbox: [3,"52690600",{}]` is that a "ok, received"?
Anyway, why twice the values? Every time. It takes a lot of time to complete the metervalues request.


```
[site ] DEBUG 2025/06/28 11:16:09 ----
[lp-1 ] DEBUG 2025/06/28 11:16:09 charge power: 5562W
[lp-1 ] DEBUG 2025/06/28 11:16:09 charge currents: [7.9 7.9 7.9]A
[site ] DEBUG 2025/06/28 11:16:09 grid power: -0W
[site ] DEBUG 2025/06/28 11:16:09 pv 1 power: 8964W
[site ] DEBUG 2025/06/28 11:16:09 battery 1 power: -3020W
[site ] DEBUG 2025/06/28 11:16:09 grid currents: [-0.776 3.33 -0.679]A
[site ] DEBUG 2025/06/28 11:16:10 battery 1 soc: 86%
[site ] DEBUG 2025/06/28 11:16:10 site power: -2920W
[lp-1 ] DEBUG 2025/06/28 11:16:10 charge voltages: [238 234 232]V
[lp-1 ] DEBUG 2025/06/28 11:16:10 detected connected phases: 3p
[lp-1 ] DEBUG 2025/06/28 11:16:10 detected active phases: 3p
[lp-1 ] DEBUG 2025/06/28 11:16:10 charge total import: 596.944kWh
[lp-1 ] DEBUG 2025/06/28 11:16:10 charger status: C
[lp-1 ] DEBUG 2025/06/28 11:16:10 pv charge current: 12.2A = 8A + 4.23A (-2920W @ 3p)
[ocpp ] TRACE 2025/06/28 11:16:10 send Wallbox: [2,"3565949880","SetChargingProfile",{"connectorId":1,"csChargingProfiles":{"chargingProfileId":30,"stackLevel":10,"chargingProfilePurpose":"TxDefaultProfile","chargingProfileKind":"Absolute","chargingSchedule":{"startSchedule":"2025-06-28T09:15:10Z","chargingRateUnit":"A","chargingSchedulePeriod":[{"startPeriod":0,"limit":9}]}}}]
[ocpp ] TRACE 2025/06/28 11:16:11 recv Wallbox: [3,"3565949880",{"status": "Accepted"}]
[lp-1 ] DEBUG 2025/06/28 11:16:11 set charge current limit: 9A
[site ] DEBUG 2025/06/28 11:16:11 solar forecast: accumulated 142.398kWh, produced 224.600kWh, scale 1.577
[ocpp ] TRACE 2025/06/28 11:16:14 send Wallbox: [2,"1725619297","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 11:16:14 recv Wallbox: [3,"1725619297",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/28 11:16:14 recv Wallbox: [2,"52690600","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T09:16:14Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "5584.8"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "596957.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "7.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "8.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "238.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "234.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "6336"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 11:16:14 send Wallbox: [3,"52690600",{}]
[ocpp ] TRACE 2025/06/28 11:16:18 recv Wallbox: [2,"404304215","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T09:16:18Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "6341.1"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "596963.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "9.1"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "237.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "234.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "6318"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 11:16:18 send Wallbox: [3,"404304215",{}] 
```


@mfuchs1984: You can see the difference between both MeterValues message when looking at the "context". The first message has the context "Trigger", this is the response to the request by evcc. The second one ist "Sample.Periodic", which is the charger sending the message periodically without an explicit request. Evcc uses both, I think the reason is simplicity: some charger do not reliably respond to requests (some even don't support triggers at all), others do not reliably send them  periodically, so evcc just configures periodic sending and requests. More responses do not hurt.@mfuchs1984: > why is evcc then sending (and what does it mean)
send `Wallbox: [3,"52690600",{}]` is that a "ok, received"?

Exactly @poml88: Ok, great, thanks.

I have set now meterinterval: 30s. But still it seems to me the meter values are requested every 10 seconds. Is that correct?

```
[ocpp ] TRACE 2025/06/28 11:45:26 send Wallbox: [2,"3554309639","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 11:45:26 recv Wallbox: [2,"2093048915","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T09:45:25Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "6330.6"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "598772.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "8.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "236.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "234.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "236.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "6354"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 11:45:26 send Wallbox: [3,"2093048915",{}]
[ocpp ] TRACE 2025/06/28 11:45:26 recv Wallbox: [3,"3554309639",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/28 11:45:26 recv Wallbox: [2,"1176307667","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T09:45:25Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "6354.2"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "598773.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "8.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "9.1"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "236.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "234.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "236.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "6354"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 11:45:26 send Wallbox: [3,"1176307667",{}]
[ocpp ] TRACE 2025/06/28 11:45:36 send Wallbox: [2,"2567605899","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 11:45:36 recv Wallbox: [3,"2567605899",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/28 11:45:36 recv Wallbox: [2,"90089814","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T09:45:35Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "6345.2"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "598788.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "9.1"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "8.9"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "236.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "234.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "235.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "6345"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 11:45:36 send Wallbox: [3,"90089814",{}]
[ocpp ] TRACE 2025/06/28 11:45:46 send Wallbox: [2,"3524593422","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 11:45:46 recv Wallbox: [3,"3524593422",{"status": "Accepted"}]
[ocpp ] TRACE 2025/06/28 11:45:46 recv Wallbox: [2,"623279930","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T09:45:45Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "6392.1"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "598805.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "9.1"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "9.1"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "235.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "234.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "236.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "6345"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 11:45:46 send Wallbox: [3,"623279930",{}] 
```@poml88: Something is strange with `meterinterval`.
It is set to 29s now, but totally irragular?

```
[ocpp ] TRACE 2025/06/28 12:01:14 send Wallbox: [2,"4120822086","TriggerMessage",{"requestedMessage":"BootNotification"}]
[ocpp ] TRACE 2025/06/28 12:01:17 send Wallbox: [2,"2687429597","TriggerMessage",{"requestedMessage":"MeterValues"}]
[ocpp ] TRACE 2025/06/28 12:01:17 send Wallbox: [2,"166365854","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:01:19 send Wallbox: [2,"843176297","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:01:29 send Wallbox: [2,"2689594282","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:01:39 send Wallbox: [2,"4022681996","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:01:55 send Wallbox: [2,"674436007","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:02:05 send Wallbox: [2,"3194026783","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:02:23 send Wallbox: [2,"127341331","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:02:33 send Wallbox: [2,"837203036","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:02:53 send Wallbox: [2,"3792437374","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:02:56 send Wallbox: [2,"2641500324","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:03:07 send Wallbox: [2,"514021856","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:03:21 send Wallbox: [2,"393291620","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}] 
```@poml88: Also what I receive then....

```
[ocpp ] TRACE 2025/06/28 12:02:56 recv Wallbox: [2,"415986585","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T10:02:56Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "600007.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "235.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "228.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "232.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "0"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 12:03:07 recv Wallbox: [2,"2030771209","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T10:03:07Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "600007.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "235.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "228.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "0"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 12:03:21 recv Wallbox: [2,"1900862533","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T10:03:20Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "600007.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "235.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "228.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "0"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 12:03:32 recv Wallbox: [2,"835189718","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T10:03:32Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "600007.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "235.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "228.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "0"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 12:03:51 recv Wallbox: [2,"817058643","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T10:03:50Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "600007.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "234.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "228.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "0"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 12:04:01 recv Wallbox: [2,"1388265893","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T10:04:00Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "600007.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "235.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "228.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "0"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 12:04:19 recv Wallbox: [2,"2135594404","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T10:04:18Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "600007.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "235.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "228.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "0"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 12:04:29 recv Wallbox: [2,"1570004696","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T10:04:28Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Active.Import","unit": "W","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "600007.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3","measurand": "Current.Import","unit": "A","value": "0.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L1-N","measurand": "Voltage","unit": "V","value": "235.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L2-N","measurand": "Voltage","unit": "V","value": "229.0"},{"format": "Raw","location": "Outlet","context": "Trigger","phase": "L3-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Current.Offered","unit": "A","value": "0"},{"format": "Raw","location": "Outlet","context": "Trigger","measurand": "Power.Offered","unit": "W","value": "0"} ]} ],"connectorId": 1,"transactionId": 1751021748}] 
```@poml88: I can't get it to do anything else than requestion every 10 seconds. Is this a bug? Wanted behaviour?@poml88: Interestingly "14s" works. Is there a max value for the meterinterval?
Maximum value I can put is 16. Is that connected to interval? That is set to 30s.@mfuchs1984: Evcc always sends a MeterValues when the last values are older than 10 seconds. The meterinterval is only used to configure the periodic sending by the wallbox.@poml88: Thanks for replying! But I am not sure, look, it is set to 15s now.
It is sending indeed the TriggerMessage every 15s.

Ok, I see, must be a coincidence... The Sample.Periodic is 15 sec as well...

```
[ocpp ] TRACE 2025/06/28 12:45:49 send Wallbox: [2,"452219959","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:46:05 send Wallbox: [2,"2383228856","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:46:19 send Wallbox: [2,"4083484223","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:46:35 send Wallbox: [2,"4050188986","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:46:49 send Wallbox: [2,"2349362459","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:47:05 send Wallbox: [2,"2567693775","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:47:19 send Wallbox: [2,"2712927385","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:47:35 send Wallbox: [2,"2025052584","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:47:49 send Wallbox: [2,"310786649","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:48:05 send Wallbox: [2,"2635977872","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:48:19 send Wallbox: [2,"1732716768","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:48:35 send Wallbox: [2,"2817880867","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:48:49 send Wallbox: [2,"3062836811","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:49:05 send Wallbox: [2,"1380882604","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:49:19 send Wallbox: [2,"2713741917","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:49:35 send Wallbox: [2,"2592700886","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:49:49 send Wallbox: [2,"3594388309","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:50:05 send Wallbox: [2,"2741245403","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:50:21 send Wallbox: [2,"3632829927","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:50:35 send Wallbox: [2,"950265081","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:50:51 send Wallbox: [2,"1155681636","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:51:05 send Wallbox: [2,"4153552553","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:51:21 send Wallbox: [2,"574973958","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:51:35 send Wallbox: [2,"3577699527","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:51:51 send Wallbox: [2,"2232736948","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:52:05 send Wallbox: [2,"1697388684","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:52:21 send Wallbox: [2,"3017940533","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:52:35 send Wallbox: [2,"1038338597","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:52:51 send Wallbox: [2,"248113973","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:53:05 send Wallbox: [2,"1850951033","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}]
[ocpp ] TRACE 2025/06/28 12:53:21 send Wallbox: [2,"433752685","TriggerMessage",{"requestedMessage":"MeterValues","connectorId":1}] 
```


```
[ocpp ] TRACE 2025/06/28 12:54:11 recv Wallbox: [2,"475528161","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T10:54:10Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "6276.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "601032.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "8.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "233.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "236.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "6300"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 12:54:26 recv Wallbox: [2,"1192779245","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T10:54:25Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "6267.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "601056.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "8.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "233.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "235.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "6291"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 12:54:41 recv Wallbox: [2,"577134224","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T10:54:41Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "6276.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "601081.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "8.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "233.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "236.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "6300"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 12:54:57 recv Wallbox: [2,"2087298553","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T10:54:56Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "6268.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "601104.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "8.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "233.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "230.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "236.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "6291"} ]} ],"connectorId": 1,"transactionId": 1751021748}]
[ocpp ] TRACE 2025/06/28 12:55:12 recv Wallbox: [2,"1044568414","MeterValues",{"meterValue": [{"timestamp": "2025-06-28T10:55:11Z","sampledValue": [{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Active.Import","unit": "W","value": "6285.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Energy.Active.Import.Register","unit": "Wh","value": "601129.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2","measurand": "Current.Import","unit": "A","value": "8.9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3","measurand": "Current.Import","unit": "A","value": "9.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L1-N","measurand": "Voltage","unit": "V","value": "233.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L2-N","measurand": "Voltage","unit": "V","value": "231.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","phase": "L3-N","measurand": "Voltage","unit": "V","value": "237.0"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Current.Offered","unit": "A","value": "9"},{"format": "Raw","location": "Outlet","context": "Sample.Periodic","measurand": "Power.Offered","unit": "W","value": "6309"} ]} ],"connectorId": 1,"transactionId": 1751021748}] 
```@poml88: Ok, the firmware reimains buggy.
The `coarsecurrent` helps in a way that evcc is not sending a new charginprofile for every miliampere. So less errors by the wallbox. And the 15s meterinterval seems to help as well by sending less requests to the wallbox.

Bottom line is also that the Pulsar Pro does not understand mA regulation. I would really recommend to deactivate it for this wallbox. It regulates only in full ampere. And it is much better to send as few charginprofiles via ocpp as possible.

So the conclusion remains: different wallbox.

Solution patch:
diff --git a/assets/js/components/Config/ChargerModal.vue b/assets/js/components/Config/ChargerModal.vue
index 12d3896f..ced53233 100644
--- a/assets/js/components/Config/ChargerModal.vue
+++ b/assets/js/components/Config/ChargerModal.vue
@@ -8,6 +8,7 @@
 		:modal-title="modalTitle"
 		:provide-template-options="provideTemplateOptions"
 		:initial-values="initialValues"
+		:is-type-deprecated="isTypeDeprecated"
 		:is-yaml-input-type="isYamlInput"
 		:transform-api-data="transformApiData"
 		:filter-template-params="filterTemplateParams"
@@ -54,7 +55,7 @@ import heatpumpYaml from "./defaultYaml/heatpump.yaml?raw";
 import switchsocketHeaterYaml from "./defaultYaml/switchsocketHeater.yaml?raw";
 import switchsocketChargerYaml from "./defaultYaml/switchsocketCharger.yaml?raw";
 import sgreadyYaml from "./defaultYaml/sgready.yaml?raw";
-import sgreadyBoostYaml from "./defaultYaml/sgreadyBoost.yaml?raw";
+import sgreadyRelayYaml from "./defaultYaml/sgreadyRelay.yaml?raw";
 import { LOADPOINT_TYPE, type LoadpointType } from "@/types/evcc";
 
 const initialValues = {
@@ -122,7 +123,7 @@ export default defineComponent({
 						...products.filter((p) => p.group === "heatinggeneric"),
 						...[
 							ConfigType.Custom,
-							ConfigType.SgReadyBoost,
+							ConfigType.SgReadyRelay,
 							ConfigType.SgReady,
 							ConfigType.Heatpump,
 							ConfigType.SwitchSocket,
@@ -186,9 +187,13 @@ export default defineComponent({
 				ConfigType.Heatpump,
 				ConfigType.SwitchSocket,
 				ConfigType.SgReady,
-				ConfigType.SgReadyBoost,
+				ConfigType.SgReadyRelay,
+				ConfigType.SgReadyBoost, // deprecated
 			].includes(type);
 		},
+		isTypeDeprecated(type: ConfigType): boolean {
+			return type === ConfigType.SgReadyBoost;
+		},
 		handleTemplateChange(e: Event, values: DeviceValues) {
 			const value = (e.target as HTMLSelectElement).value as ConfigType;
 			if (this.isYamlInput(value)) {
@@ -225,8 +230,8 @@ export default defineComponent({
 					return this.isHeating ? switchsocketHeaterYaml : switchsocketChargerYaml;
 				case ConfigType.SgReady:
 					return sgreadyYaml;
-				case ConfigType.SgReadyBoost:
-					return sgreadyBoostYaml;
+				case ConfigType.SgReadyRelay:
+					return sgreadyRelayYaml;
 				default: // template
 					return "";
 			}
diff --git a/assets/js/components/Config/DeviceModal/DeviceModalBase.vue b/assets/js/components/Config/DeviceModal/DeviceModalBase.vue
index 5c2d36a7..f2050945 100644
--- a/assets/js/components/Config/DeviceModal/DeviceModalBase.vue
+++ b/assets/js/components/Config/DeviceModal/DeviceModalBase.vue
@@ -28,6 +28,10 @@
 					@change="handleTemplateChange"
 				/>
 
+				<p v-if="showDeprecatedWarning" class="text-danger">
+					{{ $t("config.general.typeDeprecated", { type: values.type }) }}
+				</p>
+
 				<YamlEntry
 					v-if="showYamlInput"
 					v-model="values.yaml"
@@ -172,6 +176,8 @@ export default defineComponent({
 		preserveOnTemplateChange: Array as PropType<string[]>,
 		// Optional: determine if YAML input should be shown
 		isYamlInputType: Function as PropType<(type: ConfigType) => boolean>,
+		// Optional: determine if a config type is deprecated
+		isTypeDeprecated: Function as PropType<(type: ConfigType) => boolean>,
 		// Optional: provide template options from parent (to avoid circular dependency)
 		provideTemplateOptions: Function as PropType<(products: Product[]) => TemplateGroup[]>,
 		// Optional: handle template change (receives event and values, allows setting values.yaml)
@@ -298,6 +304,9 @@ export default defineComponent({
 		showTemplateSelector() {
 			return this.computedTemplateOptions.length > 0;
 		},
+		showDeprecatedWarning() {
+			return this.isTypeDeprecated && this.isTypeDeprecated(this.values.type);
+		},
 	},
 	watch: {
 		isModalVisible(visible) {
diff --git a/assets/js/components/Config/DeviceTags.vue b/assets/js/components/Config/DeviceTags.vue
index 36fa3354..0d631346 100644
--- a/assets/js/components/Config/DeviceTags.vue
+++ b/assets/js/components/Config/DeviceTags.vue
@@ -92,6 +92,7 @@ export default {
 				case "singlePhase":
 				case "enabled":
 				case "configured":
+				case "dimmed":
 					return value
 						? this.$t("config.deviceValue.yes")
 						: this.$t("config.deviceValue.no");
diff --git a/assets/js/components/Config/PropertyField.vue b/assets/js/components/Config/PropertyField.vue
index 80d961be..a26dfe3c 100644
--- a/assets/js/components/Config/PropertyField.vue
+++ b/assets/js/components/Config/PropertyField.vue
@@ -199,7 +199,7 @@ export default {
 			// Otherwise, convert them to the correct format
 			return values.map((value) => ({
 				key: value,
-				name: this.$t(`config.options.${this.property}.${value || "none"}`),
+				name: this.getOptionName(value),
 			}));
 		},
 		value: {
@@ -247,6 +247,10 @@ export default {
 		},
 	},
 	methods: {
+		getOptionName(value) {
+			const translationKey = `config.options.${this.property}.${value || "none"}`;
+			return this.$te(translationKey) ? this.$t(translationKey) : value;
+		},
 		toggleSelectMode() {
 			this.$nextTick(() => {
 				this.selectMode = !this.selectMode;
diff --git a/assets/js/components/Config/defaultYaml/sgreadyBoost.yaml b/assets/js/components/Config/defaultYaml/sgreadyBoost.yaml
deleted file mode 100644
index 764ee5c1..00000000
--- a/assets/js/components/Config/defaultYaml/sgreadyBoost.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-## required attributes [type: sgready-boost]
-
-charger: # configuration of a switch controlling the sg-ready port
-  type: template
-  template: shelly # example shelly
-  host: 192.168.0.101 #
-
-## optional attributes (read-only)
-
-#temp: # current temperature (°C)
-#  source: const
-#  value: 42
-#limittemp: # temperature limit (°C) configured in device
-#  source: const
-#  value: 84
diff --git a/assets/js/components/Config/defaultYaml/sgreadyRelay.yaml b/assets/js/components/Config/defaultYaml/sgreadyRelay.yaml
new file mode 100644
index 00000000..3e6f8ed8
--- /dev/null
+++ b/assets/js/components/Config/defaultYaml/sgreadyRelay.yaml
@@ -0,0 +1,26 @@
+## required attributes [type: sgready-relay]
+
+boost: # relay that switches the boost contact of the heat pump
+  type: template
+  template: shelly # example shelly one
+  host: 192.168.0.101 #
+
+## optional attributes
+
+#dim: # relay that switches the dim contact of the heat pump
+#  type: template
+#  template: shelly # example shelly two
+#  host: 192.168.0.102 #
+
+#power: # meter reading in W
+#  source: const
+#  value: 1234
+#energy: # meter reading in kWh
+#  source: const
+#  value: 42.5
+#temp: # current temperature (°C)
+#  source: const
+#  value: 42
+#limittemp: # temperature limit (°C) configured in device
+#  source: const
+#  value: 84
diff --git a/assets/js/types/evcc.ts b/assets/js/types/evcc.ts
index 7745aa7d..1988ae80 100644
--- a/assets/js/types/evcc.ts
+++ b/assets/js/types/evcc.ts
@@ -112,7 +112,8 @@ export enum ConfigType {
   Heatpump = "heatpump",
   SwitchSocket = "switchsocket",
   SgReady = "sgready",
-  SgReadyBoost = "sgready-boost",
+  SgReadyRelay = "sgready-relay",
+  SgReadyBoost = "sgready-boost", // deprecated
 }
 
 export type ConfigVehicle = Entity;
diff --git a/charger/sgready-boost.go b/charger/sgready-boost.go
deleted file mode 100644
index 67eccb8c..00000000
--- a/charger/sgready-boost.go
+++ /dev/null
@@ -1,79 +0,0 @@
-package charger
-
-import (
-	"context"
-	"fmt"
-
-	"github.com/evcc-io/evcc/api"
-	"github.com/evcc-io/evcc/charger/measurement"
-	"github.com/evcc-io/evcc/util"
-	"github.com/evcc-io/evcc/util/config"
-)
-
-func init() {
-	registry.AddCtx("sgready-boost", NewSgReadyBoostFromConfig)
-}
-
-// NewSgReadyBoostFromConfig creates an SG Ready charger with boost relay from generic config
-func NewSgReadyBoostFromConfig(ctx context.Context, other map[string]any) (api.Charger, error) {
-	cc := struct {
-		embed                   `mapstructure:",squash"`
-		Charger                 config.Typed
-		measurement.Temperature `mapstructure:",squash"`
-	}{
-		embed: embed{
-			Icon_:     "heatpump",
-			Features_: []api.Feature{api.Heating, api.IntegratedDevice},
-		},
-	}
-
-	if err := util.DecodeOther(other, &cc); err != nil {
-		return nil, err
-	}
-
-	charger, err := NewFromConfig(ctx, cc.Charger.Type, cc.Charger.Other)
-	if err != nil {
-		return nil, err
-	}
-
-	tempG, limitTempG, err := cc.Temperature.Configure(ctx)
-	if err != nil {
-		return nil, err
-	}
-
-	res, err := NewSgReadyBoost(ctx, &cc.embed, charger)
-	if err != nil {
-		return nil, err
-	}
-
-	return decorateSgReady(res, nil, nil, tempG, limitTempG), nil
-}
-
-// NewSgReadyBoost creates SG Ready charger with boost relay
-func NewSgReadyBoost(ctx context.Context, embed *embed, charger api.Charger) (*SgReady, error) {
-	modeS := func(mode int64) error {
-		switch mode {
-		case Dim:
-			return api.ErrNotAvailable
-		case Normal:
-			return charger.Enable(false)
-		case Boost:
-			return charger.Enable(true)
-		default:
-			return fmt.Errorf("invalid sgready mode: %d", mode)
-		}
-	}
-
-	modeG := func() (int64, error) {
-		enabled, err := charger.Enabled()
-		if err != nil {
-			return 0, err
-		}
-		if enabled {
-			return Boost, nil
-		}
-		return Normal, nil
-	}
-
-	return NewSgReady(ctx, embed, modeS, modeG, nil)
-}
diff --git a/charger/sgready-relay.go b/charger/sgready-relay.go
new file mode 100644
index 00000000..dbe430e9
--- /dev/null
+++ b/charger/sgready-relay.go
@@ -0,0 +1,134 @@
+package charger
+
+import (
+	"context"
+	"fmt"
+
+	"github.com/evcc-io/evcc/api"
+	"github.com/evcc-io/evcc/charger/measurement"
+	"github.com/evcc-io/evcc/util"
+	"github.com/evcc-io/evcc/util/config"
+)
+
+func init() {
+	registry.AddCtx("sgready-relay", NewSgReadyRelayFromConfig)
+
+	// TODO deprecated
+	registry.AddCtx("sgready-boost", func(ctx context.Context, other map[string]any) (api.Charger, error) {
+		if charger, ok := other["charger"]; ok {
+			other["boost"] = charger
+			delete(other, "charger")
+		}
+		return NewSgReadyRelayFromConfig(ctx, other)
+	})
+}
+
+// NewSgReadyRelayFromConfig creates an SG Ready charger with boost/dim relays from generic config
+func NewSgReadyRelayFromConfig(ctx context.Context, other map[string]any) (api.Charger, error) {
+	cc := struct {
+		embed                   `mapstructure:",squash"`
+		Boost                   config.Typed
+		Dim                     *config.Typed
+		measurement.Temperature `mapstructure:",squash"`
+		measurement.Energy      `mapstructure:",squash"`
+	}{
+		embed: embed{
+			Icon_:     "heatpump",
+			Features_: []api.Feature{api.Heating, api.IntegratedDevice},
+		},
+	}
+
+	if err := util.DecodeOther(other, &cc); err != nil {
+		return nil, err
+	}
+
+	boost, err := NewFromConfig(ctx, cc.Boost.Type, cc.Boost.Other)
+	if err != nil {
+		return nil, err
+	}
+
+	var dim api.Charger
+	if cc.Dim != nil {
+		dim, err = NewFromConfig(ctx, cc.Dim.Type, cc.Dim.Other)
+		if err != nil {
+			return nil, err
+		}
+	}
+
+	tempG, limitTempG, err := cc.Temperature.Configure(ctx)
+	if err != nil {
+		return nil, err
+	}
+
+	res, err := NewSgReadyRelay(ctx, &cc.embed, boost, dim)
+	if err != nil {
+		return nil, err
+	}
+
+	powerG, energyG, err := cc.Energy.Configure(ctx)
+	if err != nil {
+		return nil, err
+	}
+
+	return decorateSgReady(res, powerG, energyG, tempG, limitTempG), nil
+}
+
+// NewSgReadyRelay creates SG Ready charger with boost relay
+func NewSgReadyRelay(ctx context.Context, embed *embed, boost, dim api.Charger) (*SgReady, error) {
+	modeS := func(mode int64) error {
+		switch mode {
+		case Dim:
+			if dim == nil {
+				return api.ErrNotAvailable
+			}
+			if err := boost.Enable(false); err != nil {
+				return err
+			}
+			return dim.Enable(true)
+
+		case Normal:
+			if dim != nil {
+				if err := dim.Enable(false); err != nil {
+					return err
+				}
+			}
+			return boost.Enable(false)
+
+		case Boost:
+			if dim != nil {
+				if err := dim.Enable(false); err != nil {
+					return err
+				}
+			}
+			return boost.Enable(true)
+
+		default:
+			return fmt.Errorf("invalid sgready mode: %d", mode)
+		}
+	}
+
+	modeG := func() (int64, error) {
+		if dim != nil {
+			dimmed, err := dim.Enabled()
+			if err != nil {
+				return 0, err
+			}
+			if dimmed {
+				return Dim, nil
+			}
+		}
+
+		boosted, err := boost.Enabled()
+		if err != nil {
+			return 0, err
+		}
+
+		if boosted {
+			return Boost, nil
+		}
+
+		return Normal, nil
+	}
+
+	return NewSgReady(ctx, embed, modeS, modeG, nil)
+}
diff --git a/charger/sgready.go b/charger/sgready.go
index c57c4f55..fa05e647 100644
--- a/charger/sgready.go
+++ b/charger/sgready.go
@@ -19,7 +19,6 @@ package charger
 
 import (
 	"context"
-	"errors"
 
 	"github.com/evcc-io/evcc/api"
 	"github.com/evcc-io/evcc/charger/measurement"
@@ -134,11 +133,11 @@ func (wb *SgReady) Status() (api.ChargeStatus, error) {
 		return api.StatusNone, err
 	}
 
-	if mode == Dim {
-		return api.StatusNone, errors.New("dim mode")
+	status := map[int64]api.ChargeStatus{
+		Dim:    api.StatusB,
+		Normal: api.StatusB,
+		Boost:  api.StatusC,
 	}
-
-	status := map[int64]api.ChargeStatus{Boost: api.StatusC, Normal: api.StatusB}
 	return status[mode], nil
 }
 
diff --git a/cmd/setup.go b/cmd/setup.go
index e1a5a4c5..4e73a3c5 100644
--- a/cmd/setup.go
+++ b/cmd/setup.go
@@ -830,7 +830,7 @@ func tariffInstance(name string, conf config.Typed) (api.Tariff, error) {
 		return nil, fmt.Errorf("cannot decode custom tariff '%s': %w", name, err)
 	}
 
-	instance, err := tariff.NewCachedFromConfig(ctx, conf.Type, props)
+	instance, err := tariff.NewFromConfig(ctx, conf.Type, props)
 	if err != nil {
 		if ce := new(util.ConfigError); errors.As(err, &ce) {
 			return nil, err
diff --git a/core/loadpoint.go b/core/loadpoint.go
index ab9f99cb..caa4b590 100644
--- a/core/loadpoint.go
+++ b/core/loadpoint.go
@@ -148,6 +148,7 @@ type Loadpoint struct {
 	planTime         time.Time     // time goal
 	planPrecondition time.Duration // precondition duration
 	planEnergy       float64       // Plan charge energy in kWh (dumb vehicles)
+	planEnergyOffset float64       // already charged energy in kWh when plan was set
 	planSlotEnd      time.Time     // current plan slot end time
 	planActive       bool          // charge plan exists and has a currently active slot
 
@@ -514,6 +515,9 @@ func (lp *Loadpoint) evVehicleConnectHandler() {
 
 	// create charging session
 	lp.createSession()
+
+	// reset energy-based charging plan offset
+	lp.planEnergyOffset = 0
 }
 
 // evVehicleDisconnectHandler sends external start event
diff --git a/core/loadpoint_api.go b/core/loadpoint_api.go
index 46eb4203..b9d4e527 100644
--- a/core/loadpoint_api.go
+++ b/core/loadpoint_api.go
@@ -368,6 +368,7 @@ func (lp *Loadpoint) setPlanEnergy(finishAt time.Time, precondition time.Duratio
 
 	lp.planTime = finishAt
 	lp.planPrecondition = precondition
+	lp.planEnergyOffset = lp.getChargedEnergy() / 1e3
 	lp.publish(keys.PlanTime, finishAt)
 	lp.publish(keys.PlanPrecondition, precondition)
 	lp.settings.SetTime(keys.PlanTime, finishAt)
diff --git a/core/loadpoint_plan.go b/core/loadpoint_plan.go
index 6a29c1f3..cf022a43 100644
--- a/core/loadpoint_plan.go
+++ b/core/loadpoint_plan.go
@@ -37,7 +37,7 @@ func (lp *Loadpoint) finishPlan() {
 
 // remainingPlanEnergy returns missing energy amount in kWh
 func (lp *Loadpoint) remainingPlanEnergy(planEnergy float64) float64 {
-	return max(0, planEnergy-lp.getChargedEnergy()/1e3)
+	return max(0, planEnergy-(lp.getChargedEnergy()/1e3-lp.planEnergyOffset))
 }
 
 // GetPlanRequiredDuration is the estimated total charging duration
diff --git a/core/planner/planner.go b/core/planner/planner.go
index 45621d9a..62689816 100644
--- a/core/planner/planner.go
+++ b/core/planner/planner.go
@@ -200,6 +200,9 @@ func (t *Planner) Plan(requiredDuration, precondition time.Duration, targetTime
 		precondition = max(precondition-durationAfterRates, 0)
 	}
 
+	// don't precondition longer than charging duration
+	precondition = min(precondition, requiredDuration)
+
 	// reduce target time by precondition duration
 	targetTime = targetTime.Add(-precondition)
 	requiredDuration = max(requiredDuration-precondition, 0)
@@ -210,12 +213,12 @@ func (t *Planner) Plan(requiredDuration, precondition time.Duration, targetTime
 		rates, precond = splitPreconditionSlots(rates, targetTime)
 	}
 
-	// sort rates by price and time
-	slices.SortStableFunc(rates, sortByCost)
-
 	// create plan unless only precond slots remaining
 	var plan api.Rates
 	if requiredDuration > 0 {
+		// sort rates by price and time
+		slices.SortStableFunc(rates, sortByCost)
+
 		plan = t.plan(rates, requiredDuration, targetTime)
 
 		// sort plan by time
@@ -231,12 +234,29 @@ func (t *Planner) Plan(requiredDuration, precondition time.Duration, targetTime
 func splitPreconditionSlots(rates api.Rates, preCondStart time.Time) (api.Rates, api.Rates) {
 	var res, precond api.Rates
 
-	for _, r := range slices.Clone(rates) {
+	for _, r := range rates {
 		if !r.End.After(preCondStart) {
 			res = append(res, r)
 			continue
 		}
 
+		// split slot
+		if !r.Start.After(preCondStart) {
+			// keep the first part of the slot
+			res = append(res, api.Rate{
+				Start: r.Start,
+				End:   preCondStart,
+				Value: r.Value,
+			})
+
+			// adjust the second part of the slot
+			r = api.Rate{
+				Start: preCondStart,
+				End:   r.End,
+				Value: r.Value,
+			}
+		}
+
 		precond = append(precond, r)
 	}
 
diff --git a/core/site_optimizer.go b/core/site_optimizer.go
index ad1b9212..1e4b01d8 100644
--- a/core/site_optimizer.go
+++ b/core/site_optimizer.go
@@ -51,6 +51,8 @@ type responseDetails struct {
 	BatteryDetails []batteryDetail `json:"batteryDetails"`
 }
 
+const slotsPerHour = float64(time.Hour / tariff.SlotDuration)
+
 func (site *Site) optimizerUpdateAsync(battery []measurement) {
 	var err error
 
@@ -210,6 +212,8 @@ func (site *Site) optimizerUpdate(battery []measurement) error {
 			if goal > 0 {
 				if v := lp.GetVehicle(); socBased && v != nil {
 					goal *= v.Capacity() * 10
+				} else {
+					goal *= 1000 // Wh
 				}
 			}
 
@@ -219,7 +223,7 @@ func (site *Site) optimizerUpdate(battery []measurement) error {
 					bat.SGoal = lo.RepeatBy(minLen, func(_ int) float32 { return 0 })
 					bat.SGoal[slot] = float32(goal)
 				} else {
-					site.log.WARN.Printf("plan beyond forecast range: %.1f at %v", goal, ts.Round(time.Minute))
+					site.log.DEBUG.Printf("plan beyond forecast range: %.1f at %v", goal, ts.Round(time.Minute))
 				}
 			}
 
@@ -234,7 +238,7 @@ func (site *Site) optimizerUpdate(battery []measurement) error {
 					maxPower := lp.EffectiveMaxPower()
 
 					bat.PDemand = prorate(lo.RepeatBy(minLen, func(i int) float32 {
-						return float32(maxPower)
+						return float32(maxPower / slotsPerHour)
 					}), firstSlotDuration)
 
 					for i := range maxLen {
@@ -349,7 +353,7 @@ func continuousDemand(lp loadpoint.API, minLen int) []float32 {
 	}
 
 	return lo.RepeatBy(minLen, func(i int) float32 {
-		return float32(pwr)
+		return float32(pwr / slotsPerHour)
 	})
 }
 
diff --git a/core/site_vehicles.go b/core/site_vehicles.go
index ae79d7c1..a2e88fda 100644
--- a/core/site_vehicles.go
+++ b/core/site_vehicles.go
@@ -39,15 +39,18 @@ func (site *Site) publishVehicles() {
 	res := make(map[string]vehicleStruct, len(vv))
 
 	for _, v := range vv {
-		var plan *planStruct
+		instance := v.Instance()
+		if instance == nil {
+			continue
+		}
+
+		ac := instance.OnIdentified()
 
+		var plan *planStruct
 		if time, precondition, soc := v.GetPlanSoc(); !time.IsZero() {
 			plan = &planStruct{Soc: soc, Precondition: int64(precondition.Seconds()), Time: time}
 		}
 
-		instance := v.Instance()
-		ac := instance.OnIdentified()
-
 		res[v.Name()] = vehicleStruct{
 			Title:          instance.GetTitle(),
 			Icon:           instance.Icon(),
diff --git a/go.mod b/go.mod
index 6f5651d8..bc065684 100644
--- a/go.mod
+++ b/go.mod
@@ -9,15 +9,15 @@ require (
 	github.com/Masterminds/sprig/v3 v3.3.0
 	github.com/PuerkitoBio/goquery v1.10.3
 	github.com/WulfgarW/sensonet v0.0.6
-	github.com/andig/evopt v0.0.0-20251022070911-ac2eb6abb08e
+	github.com/andig/evopt v0.0.0-20251030151600-82023795e6f5
 	github.com/andig/go-powerwall v0.2.1-0.20230808194509-dd70cdb6e140
 	github.com/andig/gosunspec v0.0.0-20240918203654-860ce51d602b
 	github.com/andig/mbserver v0.0.0-20230310211055-1d29cbb5820e
 	github.com/asaskevich/EventBus v0.0.0-20200907212545-49d423059eef
-	github.com/aws/aws-sdk-go-v2 v1.39.4
-	github.com/aws/aws-sdk-go-v2/config v1.31.15
-	github.com/aws/aws-sdk-go-v2/credentials v1.18.19
-	github.com/aws/aws-sdk-go-v2/service/cognitoidentity v1.33.8
+	github.com/aws/aws-sdk-go-v2 v1.39.6
+	github.com/aws/aws-sdk-go-v2/config v1.31.17
+	github.com/aws/aws-sdk-go-v2/credentials v1.18.21
+	github.com/aws/aws-sdk-go-v2/service/cognitoidentity v1.33.10
 	github.com/basgys/goxml2json v1.1.0
 	github.com/basvdlei/gotsmart v0.0.3
 	github.com/benbjohnson/clock v1.3.5
@@ -54,9 +54,9 @@ require (
 	github.com/gosimple/slug v1.15.0
 	github.com/gregdel/pushover v1.4.0
 	github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79
-	github.com/grid-x/modbus v0.0.0-20250804090520-c9ca708272cb
+	github.com/grid-x/modbus v0.0.0-20251101080009-99e372e638c1
 	github.com/hashicorp/go-version v1.7.0
-	github.com/hasura/go-graphql-client v0.14.5
+	github.com/hasura/go-graphql-client v0.15.0
 	github.com/influxdata/influxdb-client-go/v2 v2.14.0
 	github.com/insomniacslk/tapo v1.0.1
 	github.com/itchyny/gojq v0.12.17
@@ -74,7 +74,7 @@ require (
 	github.com/lunixbochs/struc v0.0.0-20241101090106-8d528fa2c543
 	github.com/mabunixda/wattpilot v1.8.5
 	github.com/mitchellh/go-homedir v1.1.0
-	github.com/modelcontextprotocol/go-sdk v1.0.0
+	github.com/modelcontextprotocol/go-sdk v1.1.0
 	github.com/muka/go-bluetooth v0.0.0-20240701044517-04c4f09c514e
 	github.com/mxschmitt/golang-combinations v1.2.0
 	github.com/nicksnyder/go-i18n/v2 v2.6.0
@@ -82,7 +82,7 @@ require (
 	github.com/philippseith/signalr v0.8.0
 	github.com/prometheus-community/pro-bing v0.7.0
 	github.com/prometheus/client_golang v1.23.2
-	github.com/prometheus/common v0.67.1
+	github.com/prometheus/common v0.67.2
 	github.com/robertkrimen/otto v0.5.1
 	github.com/samber/lo v1.52.0
 	github.com/sirupsen/logrus v1.9.3
@@ -104,7 +104,7 @@ require (
 	go.uber.org/mock v0.6.0
 	go.yaml.in/yaml/v4 v4.0.0-rc.2
 	golang.org/x/crypto v0.43.0
-	golang.org/x/crypto/x509roots/fallback v0.0.0-20251023013721-017a1aaa2d99
+	golang.org/x/crypto/x509roots/fallback v0.0.0-20251028130051-c0531f9c3451
 	golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546
 	golang.org/x/net v0.46.0
 	golang.org/x/oauth2 v0.32.0
@@ -113,7 +113,7 @@ require (
 	golang.org/x/tools v0.38.0
 	google.golang.org/grpc v1.76.0
 	google.golang.org/protobuf v1.36.10
-	gorm.io/gorm v1.31.0
+	gorm.io/gorm v1.31.1
 )
 
 require (
@@ -123,16 +123,16 @@ require (
 	github.com/andybalholm/cascadia v1.3.3 // indirect
 	github.com/antihax/optional v1.0.0 // indirect
 	github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect
-	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.11 // indirect
-	github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.11 // indirect
-	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.11 // indirect
+	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13 // indirect
+	github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.13 // indirect
+	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.13 // indirect
 	github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect
-	github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2 // indirect
-	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11 // indirect
-	github.com/aws/aws-sdk-go-v2/service/sso v1.29.8 // indirect
-	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.3 // indirect
-	github.com/aws/aws-sdk-go-v2/service/sts v1.38.9 // indirect
-	github.com/aws/smithy-go v1.23.1 // indirect
+	github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 // indirect
+	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13 // indirect
+	github.com/aws/aws-sdk-go-v2/service/sso v1.30.1 // indirect
+	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.5 // indirect
+	github.com/aws/aws-sdk-go-v2/service/sts v1.39.1 // indirect
+	github.com/aws/smithy-go v1.23.2 // indirect
 	github.com/azihsoyn/rijndael256 v0.0.0-20200316065338-d14eefa2b66b // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/bitly/go-simplejson v0.5.0 // indirect
@@ -209,7 +209,7 @@ require (
 	github.com/prometheus/client_model v0.6.2 // indirect
 	github.com/prometheus/procfs v0.16.1 // indirect
 	github.com/quic-go/qpack v0.5.1 // indirect
-	github.com/quic-go/quic-go v0.53.0 // indirect
+	github.com/quic-go/quic-go v0.55.0 // indirect
 	github.com/quic-go/webtransport-go v0.9.0 // indirect
 	github.com/relvacode/iso8601 v1.6.0 // indirect
 	github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
@@ -242,7 +242,7 @@ require (
 	modernc.org/libc v1.66.10 // indirect
 	modernc.org/mathutil v1.7.1 // indirect
 	modernc.org/memory v1.11.0 // indirect
-	modernc.org/sqlite v1.39.1 // indirect
+	modernc.org/sqlite v1.40.0 // indirect
 )
 
 tool (
diff --git a/go.sum b/go.sum
index 2c9521ff..df3c0900 100644
--- a/go.sum
+++ b/go.sum
@@ -33,8 +33,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/andig/evopt v0.0.0-20251022070911-ac2eb6abb08e h1:VoKyQNWYNhE1KOXSJ13HINDEAIT8GnSU2Y2AIjeGudA=
-github.com/andig/evopt v0.0.0-20251022070911-ac2eb6abb08e/go.mod h1:C05cTe1ffvaip2xNNHMJSy/OtGT/NH1sXQgmV/7be8k=
+github.com/andig/evopt v0.0.0-20251030151600-82023795e6f5 h1:jeveaNoQ2MLsP55bg6y6i5oTBz/2X1pSS7YBZ3EPTEc=
+github.com/andig/evopt v0.0.0-20251030151600-82023795e6f5/go.mod h1:C05cTe1ffvaip2xNNHMJSy/OtGT/NH1sXQgmV/7be8k=
 github.com/andig/go-powerwall v0.2.1-0.20230808194509-dd70cdb6e140 h1:C93T8vg7CN4Q4BBDbBMOvBoTYBA+CaBEvlY2SZF8aa0=
 github.com/andig/go-powerwall v0.2.1-0.20230808194509-dd70cdb6e140/go.mod h1:Xk09mD+7RTCuuHMX5RxlqgEUeh9oZdIX0rL0qiY6l/4=
 github.com/andig/gosunspec v0.0.0-20240918203654-860ce51d602b h1:81UMfM949I7StrRay7YDUZazY8M1u/JHkzwcFEjiilQ=
@@ -58,34 +58,34 @@ github.com/asaskevich/EventBus v0.0.0-20200907212545-49d423059eef/go.mod h1:JS7h
 github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
 github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
 github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
-github.com/aws/aws-sdk-go-v2 v1.39.4 h1:qTsQKcdQPHnfGYBBs+Btl8QwxJeoWcOcPcixK90mRhg=
-github.com/aws/aws-sdk-go-v2 v1.39.4/go.mod h1:yWSxrnioGUZ4WVv9TgMrNUeLV3PFESn/v+6T/Su8gnM=
-github.com/aws/aws-sdk-go-v2/config v1.31.15 h1:gE3M4xuNXfC/9bG4hyowGm/35uQTi7bUKeYs5e/6uvU=
-github.com/aws/aws-sdk-go-v2/config v1.31.15/go.mod h1:HvnvGJoE2I95KAIW8kkWVPJ4XhdrlvwJpV6pEzFQa8o=
-github.com/aws/aws-sdk-go-v2/credentials v1.18.19 h1:Jc1zzwkSY1QbkEcLujwqRTXOdvW8ppND3jRBb/VhBQc=
-github.com/aws/aws-sdk-go-v2/credentials v1.18.19/go.mod h1:DIfQ9fAk5H0pGtnqfqkbSIzky82qYnGvh06ASQXXg6A=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.11 h1:X7X4YKb+c0rkI6d4uJ5tEMxXgCZ+jZ/D6mvkno8c8Uw=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.11/go.mod h1:EqM6vPZQsZHYvC4Cai35UDg/f5NCEU+vp0WfbVqVcZc=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.11 h1:7AANQZkF3ihM8fbdftpjhken0TP9sBzFbV/Ze/Y4HXA=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.11/go.mod h1:NTF4QCGkm6fzVwncpkFQqoquQyOolcyXfbpC98urj+c=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.11 h1:ShdtWUZT37LCAA4Mw2kJAJtzaszfSHFb5n25sdcv4YE=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.11/go.mod h1:7bUb2sSr2MZ3M/N+VyETLTQtInemHXb/Fl3s8CLzm0Y=
+github.com/aws/aws-sdk-go-v2 v1.39.6 h1:2JrPCVgWJm7bm83BDwY5z8ietmeJUbh3O2ACnn+Xsqk=
+github.com/aws/aws-sdk-go-v2 v1.39.6/go.mod h1:c9pm7VwuW0UPxAEYGyTmyurVcNrbF6Rt/wixFqDhcjE=
+github.com/aws/aws-sdk-go-v2/config v1.31.17 h1:QFl8lL6RgakNK86vusim14P2k8BFSxjvUkcWLDjgz9Y=
+github.com/aws/aws-sdk-go-v2/config v1.31.17/go.mod h1:V8P7ILjp/Uef/aX8TjGk6OHZN6IKPM5YW6S78QnRD5c=
+github.com/aws/aws-sdk-go-v2/credentials v1.18.21 h1:56HGpsgnmD+2/KpG0ikvvR8+3v3COCwaF4r+oWwOeNA=
+github.com/aws/aws-sdk-go-v2/credentials v1.18.21/go.mod h1:3YELwedmQbw7cXNaII2Wywd+YY58AmLPwX4LzARgmmA=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13 h1:T1brd5dR3/fzNFAQch/iBKeX07/ffu/cLu+q+RuzEWk=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13/go.mod h1:Peg/GBAQ6JDt+RoBf4meB1wylmAipb7Kg2ZFakZTlwk=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.13 h1:a+8/MLcWlIxo1lF9xaGt3J/u3yOZx+CdSveSNwjhD40=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.13/go.mod h1:oGnKwIYZ4XttyU2JWxFrwvhF6YKiK/9/wmE3v3Iu9K8=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.13 h1:HBSI2kDkMdWz4ZM7FjwE7e/pWDEZ+nR95x8Ztet1ooY=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.13/go.mod h1:YE94ZoDArI7awZqJzBAZ3PDD2zSfuP7w6P2knOzIn8M=
 github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk=
 github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc=
-github.com/aws/aws-sdk-go-v2/service/cognitoidentity v1.33.8 h1:vMGe+donWilTZ1CD3KsW+0B2831RhWY+14ZmVAi0rCE=
-github.com/aws/aws-sdk-go-v2/service/cognitoidentity v1.33.8/go.mod h1:7aAxUSQJIXPojc/+lUPJnIiTfl+lUx6cehUifbrbDaw=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2 h1:xtuxji5CS0JknaXoACOunXOYOQzgfTvGAc9s2QdCJA4=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2/go.mod h1:zxwi0DIR0rcRcgdbl7E2MSOvxDyyXGBlScvBkARFaLQ=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11 h1:GpMf3z2KJa4RnJ0ew3Hac+hRFYLZ9DDjfgXjuW+pB54=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11/go.mod h1:6MZP3ZI4QQsgUCFTwMZA2V0sEriNQ8k2hmoHF3qjimQ=
-github.com/aws/aws-sdk-go-v2/service/sso v1.29.8 h1:M5nimZmugcZUO9wG7iVtROxPhiqyZX6ejS1lxlDPbTU=
-github.com/aws/aws-sdk-go-v2/service/sso v1.29.8/go.mod h1:mbef/pgKhtKRwrigPPs7SSSKZgytzP8PQ6P6JAAdqyM=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.3 h1:S5GuJZpYxE0lKeMHKn+BRTz6PTFpgThyJ+5mYfux7BM=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.3/go.mod h1:X4OF+BTd7HIb3L+tc4UlWHVrpgwZZIVENU15pRDVTI0=
-github.com/aws/aws-sdk-go-v2/service/sts v1.38.9 h1:Ekml5vGg6sHSZLZJQJagefnVe6PmqC2oiRkBq4F7fU0=
-github.com/aws/aws-sdk-go-v2/service/sts v1.38.9/go.mod h1:/e15V+o1zFHWdH3u7lpI3rVBcxszktIKuHKCY2/py+k=
-github.com/aws/smithy-go v1.23.1 h1:sLvcH6dfAFwGkHLZ7dGiYF7aK6mg4CgKA/iDKjLDt9M=
-github.com/aws/smithy-go v1.23.1/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
+github.com/aws/aws-sdk-go-v2/service/cognitoidentity v1.33.10 h1:Lx1tOt8Zo9onYJQ2vhwnXjgIESysOiJ65bx9PaYPCcc=
+github.com/aws/aws-sdk-go-v2/service/cognitoidentity v1.33.10/go.mod h1:ahZYJFutez0db6zWQyLWNddBtDDGovvOShiUTnOYPPw=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 h1:x2Ibm/Af8Fi+BH+Hsn9TXGdT+hKbDd5XOTZxTMxDk7o=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3/go.mod h1:IW1jwyrQgMdhisceG8fQLmQIydcT/jWY21rFhzgaKwo=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13 h1:kDqdFvMY4AtKoACfzIGD8A0+hbT41KTKF//gq7jITfM=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13/go.mod h1:lmKuogqSU3HzQCwZ9ZtcqOc5XGMqtDK7OIc2+DxiUEg=
+github.com/aws/aws-sdk-go-v2/service/sso v1.30.1 h1:0JPwLz1J+5lEOfy/g0SURC9cxhbQ1lIMHMa+AHZSzz0=
+github.com/aws/aws-sdk-go-v2/service/sso v1.30.1/go.mod h1:fKvyjJcz63iL/ftA6RaM8sRCtN4r4zl4tjL3qw5ec7k=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.5 h1:OWs0/j2UYR5LOGi88sD5/lhN6TDLG6SfA7CqsQO9zF0=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.5/go.mod h1:klO+ejMvYsB4QATfEOIXk8WAEwN4N0aBfJpvC+5SZBo=
+github.com/aws/aws-sdk-go-v2/service/sts v1.39.1 h1:mLlUgHn02ue8whiR4BmxxGJLR2gwU6s6ZzJ5wDamBUs=
+github.com/aws/aws-sdk-go-v2/service/sts v1.39.1/go.mod h1:E19xDjpzPZC7LS2knI9E6BaRFDK43Eul7vd6rSq2HWk=
+github.com/aws/smithy-go v1.23.2 h1:Crv0eatJUQhaManss33hS5r40CG3ZFH+21XSkqMrIUM=
+github.com/aws/smithy-go v1.23.2/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
 github.com/azihsoyn/rijndael256 v0.0.0-20200316065338-d14eefa2b66b h1:/2dABok/UswXOj5rjbR5bZ411ApGBq1pAEZdy5rvFrY=
 github.com/azihsoyn/rijndael256 v0.0.0-20200316065338-d14eefa2b66b/go.mod h1:ef+2vMUkiKcy2Tz7HykB01KbgUnkK4gQKq4ZeR4RYVs=
 github.com/basgys/goxml2json v1.1.0 h1:4ln5i4rseYfXNd86lGEB+Vi652IsIXIvggKM/BhUKVw=
@@ -379,8 +379,8 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO
 github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
 github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
 github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
-github.com/hasura/go-graphql-client v0.14.5 h1:M9HxxGLCcDZnxJGYyWXAzDYEpommgjW+sUW3V8EaGms=
-github.com/hasura/go-graphql-client v0.14.5/go.mod h1:jfSZtBER3or+88Q9vFhWHiFMPppfYILRyl+0zsgPIIw=
+github.com/hasura/go-graphql-client v0.15.0 h1:C8gO+pilV5jyH7zuvQ0tJwxt/QSXRrhEJz35phPLk9Y=
+github.com/hasura/go-graphql-client v0.15.0/go.mod h1:jfSZtBER3or+88Q9vFhWHiFMPppfYILRyl+0zsgPIIw=
 github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
 github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
@@ -508,8 +508,8 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F
 github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
 github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
-github.com/modelcontextprotocol/go-sdk v1.0.0 h1:Z4MSjLi38bTgLrd/LjSmofqRqyBiVKRyQSJgw8q8V74=
-github.com/modelcontextprotocol/go-sdk v1.0.0/go.mod h1:nYtYQroQ2KQiM0/SbyEPUWQ6xs4B95gJjEalc9AQyOs=
+github.com/modelcontextprotocol/go-sdk v1.1.0 h1:Qjayg53dnKC4UZ+792W21e4BpwEZBzwgRW6LrjLWSwA=
+github.com/modelcontextprotocol/go-sdk v1.1.0/go.mod h1:6fM3LCm3yV7pAs8isnKLn07oKtB0MP9LHd3DfAcKw10=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -624,8 +624,8 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8
 github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
 github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
-github.com/prometheus/common v0.67.1 h1:OTSON1P4DNxzTg4hmKCc37o4ZAZDv0cfXLkOt0oEowI=
-github.com/prometheus/common v0.67.1/go.mod h1:RpmT9v35q2Y+lsieQsdOh5sXZ6ajUGC8NjZAmr8vb0Q=
+github.com/prometheus/common v0.67.2 h1:PcBAckGFTIHt2+L3I33uNRTlKTplNzFctXcWhPyAEN8=
+github.com/prometheus/common v0.67.2/go.mod h1:63W3KZb1JOKgcjlIr64WW/LvFGAqKPj0atm+knVGEko=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
@@ -636,8 +636,8 @@ github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzM
 github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
 github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI=
 github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg=
-github.com/quic-go/quic-go v0.53.0 h1:QHX46sISpG2S03dPeZBgVIZp8dGagIaiu2FiVYvpCZI=
-github.com/quic-go/quic-go v0.53.0/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY=
+github.com/quic-go/quic-go v0.55.0 h1:zccPQIqYCXDt5NmcEabyYvOnomjs8Tlwl7tISjJh9Mk=
+github.com/quic-go/quic-go v0.55.0/go.mod h1:DR51ilwU1uE164KuWXhinFcKWGlEjzys2l8zUl5Ss1U=
 github.com/quic-go/webtransport-go v0.9.0 h1:jgys+7/wm6JarGDrW+lD/r9BGqBAmqY/ssklE09bA70=
 github.com/quic-go/webtransport-go v0.9.0/go.mod h1:4FUYIiUc75XSsF6HShcLeXXYZJ9AGwo/xh3L8M/P1ao=
 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
@@ -817,8 +817,8 @@ golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v
 golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
 golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
 golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
-golang.org/x/crypto/x509roots/fallback v0.0.0-20251023013721-017a1aaa2d99 h1:wDUMX+FrqOQbPABhkt+/JytZLod0j/y/S3c5yYpXDSk=
-golang.org/x/crypto/x509roots/fallback v0.0.0-20251023013721-017a1aaa2d99/go.mod h1:MEIPiCnxvQEjA4astfaKItNwEVZA5Ki+3+nyGbJ5N18=
+golang.org/x/crypto/x509roots/fallback v0.0.0-20251028130051-c0531f9c3451 h1:ntT/VrHMoSyusO9qDIYKxtkMfluoOkLrr6AJfVRROsE=
+golang.org/x/crypto/x509roots/fallback v0.0.0-20251028130051-c0531f9c3451/go.mod h1:MEIPiCnxvQEjA4astfaKItNwEVZA5Ki+3+nyGbJ5N18=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 h1:mgKeJMpvi0yx/sU5GsxQ7p6s2wtOnGAHZWCHUM4KGzY=
 golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70=
@@ -1047,8 +1047,8 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/gorm v1.31.0 h1:0VlycGreVhK7RF/Bwt51Fk8v0xLiiiFdbGDPIZQ7mJY=
-gorm.io/gorm v1.31.0/go.mod h1:XyQVbO2k6YkOis7C2437jSit3SsDK72s7n7rsSHd+Gs=
+gorm.io/gorm v1.31.1 h1:7CA8FTFz/gRfgqgpeKIBcervUn3xSyPUmr6B2WXJ7kg=
+gorm.io/gorm v1.31.1/go.mod h1:XyQVbO2k6YkOis7C2437jSit3SsDK72s7n7rsSHd+Gs=
 honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1073,8 +1073,8 @@ modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8=
 modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
 modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
 modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
-modernc.org/sqlite v1.39.1 h1:H+/wGFzuSCIEVCvXYVHX5RQglwhMOvtHSv+VtidL2r4=
-modernc.org/sqlite v1.39.1/go.mod h1:9fjQZ0mB1LLP0GYrp39oOJXx/I2sxEnZtzCmEQIKvGE=
+modernc.org/sqlite v1.40.0 h1:bNWEDlYhNPAUdUdBzjAvn8icAs/2gaKlj4vM+tQ6KdQ=
+modernc.org/sqlite v1.40.0/go.mod h1:9fjQZ0mB1LLP0GYrp39oOJXx/I2sxEnZtzCmEQIKvGE=
 modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
 modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
 modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
diff --git a/i18n/bg.json b/i18n/bg.json
index d7358726..22d2ea8b 100644
--- a/i18n/bg.json
+++ b/i18n/bg.json
@@ -58,8 +58,8 @@
           "heating": "Индивидуален нагревател"
         },
         "heatpump": "Индивидуална термо помпа",
-        "sgready": "Индивидуална термо помпа (sg-ready, и др.)",
-        "sgready-boost": "Индивидуална термо помпа (sg-ready, boost)",
+        "sgready": "Индивидуална термо помпа (sg-ready чрез plugins)",
+        "sgready-relay": "Индивидуална термо помпа (sg-ready чрез relays)",
         "switchsocket": "Индивидуален превключвател"
       }
     },
diff --git a/i18n/cs.json b/i18n/cs.json
index 608b383d..f30c3753 100644
--- a/i18n/cs.json
+++ b/i18n/cs.json
@@ -58,8 +58,9 @@
           "heating": "Vlastní konfigurace kotle (topení)"
         },
         "heatpump": "Vlastní konfigurace tepelného čerpadla",
-        "sgready": "Vlastní konfigurace tepelného čerpadla (SG Ready, All)",
-        "sgready-boost": "Vlastní konfigurace tepelného čerpadla (SGReady, Boost)",
+        "sgready": "Vlastní konfigurace tepelného čerpadla (sg-ready přes plugins)",
+        "sgready-boost": "Uživatelsky definované tepelné čerpadlo (sg-ready-boost, zastaralé)",
+        "sgready-relay": "Vlastní konfigurace tepelného čerpadla (sg-ready přes relé)",
         "switchsocket": "Vlastní konfigurace chytré zásuvky"
       }
     },
@@ -118,7 +119,7 @@
       "temp": "Teplota",
       "topic": "Téma",
       "url": "URL",
-      "vehicleLimitSoc": "Limit vozidla",
+      "vehicleLimitSoc": "Limit nabíjení",
       "yes": "ano"
     },
     "deviceValueChargeStatus": {
@@ -143,9 +144,9 @@
       "title": "EEBus"
     },
     "ext": {
-      "description": "Lze použít pro správu zatížení nebo pro statistické účely.",
-      "titleAdd": "Přidat externí měřič",
-      "titleEdit": "Upravit externí měřič"
+      "description": "Zaznamenávat hodnoty energie neřízených spotřebičů (např. mrazák, myčka nádobí, atd.) pro statistické účely. Tyto měřáky je možné použít pro správu příkonu (např. dílčí distribuci).",
+      "titleAdd": "Přidat měřič spotřebiče",
+      "titleEdit": "Upravit měřič spotřebiče"
     },
     "form": {
       "danger": "Nebezpečí",
@@ -334,7 +335,7 @@
       "option": {
         "aux": "Přidat samoregulační spotřebič",
         "battery": "Přidat měřič baterie",
-        "ext": "Přidat externí měřič",
+        "ext": "Přidat běžný spotřebič",
         "pv": "Přidat měřič solární energie"
       },
       "save": "Uložit",
@@ -512,7 +513,7 @@
     "validation": {
       "failed": "selhalo",
       "label": "Stav",
-      "running": "Ověřování…",
+      "running": "Ověřování správnosti…",
       "success": "úspěch",
       "unknown": "neznámý",
       "validate": "ověřit"
@@ -658,7 +659,7 @@
   "help": {
     "discussionsButton": "GitHub diskuse",
     "documentationButton": "Dokumentace",
-    "issueButton": "Nahlásit bug",
+    "issueButton": "Nahlásit problém",
     "issueDescription": "Našli jste podivné nebo nesprávné chování?",
     "logsButton": "Zobrazit protokoly",
     "logsDescription": "Zkontrolujte protokoly na chyby.",
@@ -1074,7 +1075,7 @@
   },
   "smartCost": {
     "activeHours": "{active} z {total}",
-    "activeHoursLabel": "Aktivních hodin",
+    "activeHoursLabel": "Aktivní čas",
     "applyToAll": "Aplikovat všude?",
     "batteryDescription": "Nabíjí baterii FVE ze distribuční sítě.",
     "cheapTitle": "Levné nabíjení ze sítě",
@@ -1091,7 +1092,7 @@
     "saved": "Uloženo."
   },
   "smartFeedInPriority": {
-    "activeHoursLabel": "Pozastaveno",
+    "activeHoursLabel": "Doba pozastavení",
     "description": "Pozastaví nabíjení pro maximalizaci výdělečné dodávky do distribuční sítě.",
     "priceLabel": "Cena výkupu energie",
     "priceLimit": "Cenový strop pro výkup energie",
diff --git a/i18n/da.json b/i18n/da.json
index 3d766d96..c2c96c16 100644
--- a/i18n/da.json
+++ b/i18n/da.json
@@ -58,8 +58,8 @@
           "heating": "Brugerdefineret varmelegeme"
         },
         "heatpump": "Brugerdefineret varmepumpe",
-        "sgready": "Brugerdefineret varmepumpe (sg-klar, alle)",
-        "sgready-boost": "Brugerdefineret varmepumpe (sg-klar, boost)",
+        "sgready": "Brugerdefineret varmepumpe (sg-ready via plugins)",
+        "sgready-relay": "Brugerdefineret varmepumpe (sg-ready via relæer)",
         "switchsocket": "Brugerdefineret stikkontakt"
       }
     },
diff --git a/i18n/de.json b/i18n/de.json
index da4523ef..ae0585bf 100644
--- a/i18n/de.json
+++ b/i18n/de.json
@@ -58,8 +58,8 @@
           "heating": "Benutzerdefinierte Heizung"
         },
         "heatpump": "Benutzerdefinierte Wärmepumpe",
-        "sgready": "Benutzerdefinierte Wärmepumpe (sg-ready, komplett)",
-        "sgready-boost": "Benutzerdefinierte Wärmepumpe (sg-ready, boost)",
+        "sgready": "Benutzerdefinierte Wärmepumpe (SG-Ready über Plugins)",
+        "sgready-relay": "Benutzerdefinierte Wärmepumpe (SG-Ready über Relais)",
         "switchsocket": "Benutzerdefinierte schaltbare Steckdose"
       }
     },
@@ -94,6 +94,7 @@
       "currency": "Währung",
       "current": "Strom",
       "currentRange": "Strom",
+      "dimmed": "Gedimmt",
       "enabled": "Ladebereit",
       "energy": "Energie",
       "feedinPrice": "Einspeisevergütung",
@@ -185,6 +186,7 @@
       "telemetry": "Telemetrie",
       "templateLoading": "Lade …",
       "title": "Titel",
+      "typeDeprecated": "Der Typ '{type}' ist veraltet und wird in einer zukünftigen Version entfernt. Bitte Changelog prüfen und Gerät neu anlegen.",
       "validateSave": "Überprüfen & speichern"
     },
     "grid": {
diff --git a/i18n/el.json b/i18n/el.json
index a9c67ae7..103bdc66 100644
--- a/i18n/el.json
+++ b/i18n/el.json
@@ -58,8 +58,8 @@
           "heating": "Θερμαντήρας που καθορίζεται από τον χρήστη"
         },
         "heatpump": "Αντλία θερμότητας που καθορίζεται από τον χρήστη",
-        "sgready": "Αντλία θερμότητας που καθορίζεται από τον χρήστη (SG-ready, all)",
-        "sgready-boost": "Αντλία θερμότητας που καθορίζεται από τον χρήστη (SG-ready, boost)",
+        "sgready": "Αντλία θερμότητας που καθορίζεται από τον χρήστη (sg-ready μέσω plugins)",
+        "sgready-relay": "Αντλία θερμότητας που καθορίζεται από τον χρήστη (sg-ready μέσω ρελέ)",
         "switchsocket": "Διακόπτης πρίζας που καθορίζεται από τον χρήστη"
       }
     },
diff --git a/i18n/en.json b/i18n/en.json
index a921a18d..d88a2931 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -58,8 +58,9 @@
           "heating": "User-defined heater"
         },
         "heatpump": "User-defined heat pump",
-        "sgready": "User-defined heat pump (sg-ready, all)",
-        "sgready-boost": "User-defined heat pump (sg-ready, boost)",
+        "sgready": "User-defined heat pump (sg-ready via plugins)",
+        "sgready-boost": "User-defined heat pump (sg-ready-boost, deprecated)",
+        "sgready-relay": "User-defined heat pump (sg-ready via relays)",
         "switchsocket": "User-defined switch socket"
       }
     },
@@ -94,6 +95,7 @@
       "currency": "Currency",
       "current": "Current",
       "currentRange": "Current",
+      "dimmed": "Dimmed",
       "enabled": "Enabled",
       "energy": "Energy",
       "feedinPrice": "Feed-in price",
@@ -185,6 +187,7 @@
       "telemetry": "Telemetry",
       "templateLoading": "Loading...",
       "title": "Title",
+      "typeDeprecated": "The type '{type}' is outdated and will be removed in a future version. Please check the changelog and recreate this device.",
       "validateSave": "Validate & save"
     },
     "grid": {
diff --git a/i18n/es.json b/i18n/es.json
index e9f5b5d9..3e24f13e 100644
--- a/i18n/es.json
+++ b/i18n/es.json
@@ -48,8 +48,8 @@
           "heating": "Calefactor definido por el usuario"
         },
         "heatpump": "Bomba de calor definida por el usuario",
-        "sgready": "Bomba de calor definida por el usuario (sg-ready, todas)",
-        "sgready-boost": "Bomba de calor definida por el usuario (sg-ready, boost)",
+        "sgready": "Bomba de calor definida por el usuario (sg-ready via plugins)",
+        "sgready-relay": "Bomba de calor definida por el usuario (sg-ready via relays)",
         "switchsocket": "Enchufe conmutable definido por el usuario"
       }
     },
diff --git a/i18n/fi.json b/i18n/fi.json
index d7045f1b..7bcefa5e 100644
--- a/i18n/fi.json
+++ b/i18n/fi.json
@@ -58,8 +58,8 @@
           "heating": "Itse määritelty lämmitin"
         },
         "heatpump": "Itse määritelty lämpöpumppu",
-        "sgready": "Itse määritelty lämpöpumppu (älyverkkovalmius, kaikki)",
-        "sgready-boost": "Itse määritelty lämpöpumppu (älyverkkovalmius, tehostus)",
+        "sgready": "Itse määritelty lämpöpumppu (sg-ready pluginien kautta)",
+        "sgready-relay": "Itse määritelty lämpöpumppu (sg-ready releiden kautta)",
         "switchsocket": "Itse määritelty relepistorasia"
       }
     },
diff --git a/i18n/fr.json b/i18n/fr.json
index ed1f570e..da2ce86f 100644
--- a/i18n/fr.json
+++ b/i18n/fr.json
@@ -58,8 +58,9 @@
           "heating": "Chauffage personnalisé"
         },
         "heatpump": "Pompe à chaleur personnalisée",
-        "sgready": "Pompe à chaleur personnalisée (sg-ready, tout)",
-        "sgready-boost": "Pompe à chaleur personnalisée (sg-ready, boost)",
+        "sgready": "Pompe à chaleur personnalisée (sg-ready via plugins)",
+        "sgready-boost": "Pompe à chaleur personnalisée (sg-ready-boost, obsolète)",
+        "sgready-relay": "Pompe à chaleur personnalisée (sg-ready via relays)",
         "switchsocket": "Prise de commutation personnalisée"
       }
     },
@@ -94,6 +95,7 @@
       "currency": "Devise",
       "current": "Courant",
       "currentRange": "Courant",
+      "dimmed": "Atténué",
       "enabled": "Activé",
       "energy": "Énergie",
       "feedinPrice": "Prix de revente",
@@ -118,7 +120,7 @@
       "temp": "Température",
       "topic": "Sujet",
       "url": "URL",
-      "vehicleLimitSoc": "Limite du véhicule",
+      "vehicleLimitSoc": "Limite de charge",
       "yes": "oui"
     },
     "deviceValueChargeStatus": {
@@ -132,7 +134,7 @@
     },
     "devices": {
       "auxMeter": "Consommateur intelligent",
-      "batteryStorage": "Batterie",
+      "batteryStorage": "Stockage de la batterie",
       "consumer": "Consommateur",
       "solarSystem": "Système photovoltaïque"
     },
@@ -185,6 +187,7 @@
       "telemetry": "Télémétrie",
       "templateLoading": "Charge...",
       "title": "Titre",
+      "typeDeprecated": "Le type '{type}' est obsolète est sera supprimé dans une future version. Veuillez consulter les notes de modifications et recréer cet appareil.",
       "validateSave": "Valider & enregistrer"
     },
     "grid": {
@@ -355,12 +358,12 @@
       "titleChoice": "Que voulez-vous ajouter ?",
       "titleLabel": "Titre",
       "usage": {
-        "aux": "Compteur de consommateur auto-régulé",
-        "battery": "Compteur de batterie",
-        "charge": "Compteur de chargeur",
-        "grid": "Compteur du réseau",
+        "aux": "Consommateur auto-régulé",
+        "battery": "Batterie",
+        "charge": "Consommateur / Chargeur",
+        "grid": "Réseau",
         "label": "Utilisation",
-        "pv": "Compteur production solaire"
+        "pv": "Production"
       },
       "validateSave": "Valider et enregistrer"
     },
@@ -939,7 +942,7 @@
       "unknownPrice": "encore inconnu"
     },
     "targetEnergy": {
-      "label": "Limite de charge",
+      "label": "Limite",
       "noLimit": "aucune"
     },
     "vehicle": {
diff --git a/i18n/hr.json b/i18n/hr.json
index fff1a29b..a5ed93fe 100644
--- a/i18n/hr.json
+++ b/i18n/hr.json
@@ -58,8 +58,8 @@
           "heating": "Korisnički definirani grijač"
         },
         "heatpump": "Korisnički definirana dizalica topline",
-        "sgready": "Korisnički definirana dizalica topline (sg-ready, svi)",
-        "sgready-boost": "Korisnički definirana dizalica topline (sg-ready, boost)",
+        "sgready": "Korisnički definirana dizalica topline (sg-ready putem dodataka)",
+        "sgready-relay": "Korisnički definirana dizalica topline (sg-ready putem releja)",
         "switchsocket": "Korisnički definirana upravljiva utičnica"
       }
     },
diff --git a/i18n/hu.json b/i18n/hu.json
index 5f251695..af632c0d 100644
--- a/i18n/hu.json
+++ b/i18n/hu.json
@@ -58,8 +58,8 @@
           "heating": "Felhasználó által meghatározott fűtőberendezés"
         },
         "heatpump": "Felhasználó által meghatározott hőszivattyú",
-        "sgready": "Felhasználó által meghatározott hőszivattyú (sg-ready, all)",
-        "sgready-boost": "Felhasználó által meghatározott hőszivattyú (sg-ready, boost)",
+        "sgready": "Felhasználó által meghatározott hőszivattyú (sg-ready pluginokon keresztül)",
+        "sgready-relay": "Felhasználó által meghatározott hőszivattyú (sg-ready reléken keresztül)",
         "switchsocket": "Felhasználó által meghatározott dugalj"
       }
     },
diff --git a/i18n/lb.json b/i18n/lb.json
index d1bf31a0..d2840429 100644
--- a/i18n/lb.json
+++ b/i18n/lb.json
@@ -58,8 +58,8 @@
           "heating": "Benotzerdefinéirt Heizung"
         },
         "heatpump": "Benotzerdefinéirt Wärmepompel",
-        "sgready": "Benotzerdefinéirt Wärmepompel (sg-ready, komplett)",
-        "sgready-boost": "Benotzerdefinéirt Wärmepompel (sg-ready, boost)",
+        "sgready": "Benotzerdefinéiert Wärmepompel (sg-ready iwwer Plugins)",
+        "sgready-relay": "Benotzerdefinéiert Wärmepompel (sg-ready iwwer Relais)",
         "switchsocket": "Benotzerdefinéirt schaltbar Steckdous"
       }
     },
diff --git a/i18n/lt.json b/i18n/lt.json
index 725eb7fc..82918ed8 100644
--- a/i18n/lt.json
+++ b/i18n/lt.json
@@ -58,8 +58,9 @@
           "heating": "Vartotojo nustatytas šildytuvas"
         },
         "heatpump": "Vartotojo nustatytas šilumos siurblys",
-        "sgready": "Vartotojo nustatytas šilumos siurblys (SG-Ready, visi)",
-        "sgready-boost": "Vartotojo nustatytas šilumos siurblys (SG-Ready, boost)",
+        "sgready": "Vartotojo nustatytas šilumos siurblys (SG-Ready, naudojant įskiepius)",
+        "sgready-boost": "Vartotojo nustatytas šilumos siurblys (SG-Ready-boost, nebenaudojama)",
+        "sgready-relay": "Vartotojo nustatytas šilumos siurblys (SG-Ready, naudojant reles)",
         "switchsocket": "Vartotojo apibrėžta išmanioji rozetė"
       }
     },
@@ -94,6 +95,7 @@
       "currency": "Valiuta",
       "current": "Srovė",
       "currentRange": "Srovė",
+      "dimmed": "Galia sumažinta",
       "enabled": "Aktyvuotas",
       "energy": "Energija",
       "feedinPrice": "Tiekimo į tinklą kaina",
@@ -185,6 +187,7 @@
       "telemetry": "Telemetrija",
       "templateLoading": "Įkrauname...",
       "title": "Pavadinimas",
+      "typeDeprecated": "Tipas '{type}' yra pasenęs ir bus pašalintas būsimoje versijoje. Patikrinkite versijų pakeitimų žurnalą ir iš naujo sukonfigūruokite šį įrenginį.",
       "validateSave": "Patikrinti ir išsaugoti"
     },
     "grid": {
diff --git a/i18n/nl.json b/i18n/nl.json
index 6e3b1676..9ce53d97 100644
--- a/i18n/nl.json
+++ b/i18n/nl.json
@@ -58,8 +58,8 @@
           "heating": "Gebruikersgedefinieerde verwarmer"
         },
         "heatpump": "Gebruikersgedefinieerde warmtepomp",
-        "sgready": "Gebruikersgedefinieerde warmtepomp (sg-ready, alle)",
-        "sgready-boost": "Gebruikersgedefinieerde warmtepomp (sg-ready, boost)",
+        "sgready": "Gebruikersgedefinieerde warmtepomp (sg-ready via plugins)",
+        "sgready-relay": "Gebruikersgedefinieerde warmtepomp (sg-ready via relais)",
         "switchsocket": "Gebruikersgedefinieerd schakelbaar stopcontact"
       }
     },
diff --git a/i18n/pl.json b/i18n/pl.json
index 6c809edb..6ba8e281 100644
--- a/i18n/pl.json
+++ b/i18n/pl.json
@@ -58,8 +58,8 @@
           "heating": "Podgrzewacz zdefiniowany przez użytkownika"
         },
         "heatpump": "Pompa ciepła zdefiniowana przez użytkownika",
-        "sgready": "Pompa ciepła zdefiniowana przez użytkownika (sg-ready, all)",
-        "sgready-boost": "Pompa ciepła zdefiniowana przez użytkownika (sg-ready, boost)",
+        "sgready": "Pompa ciepła zdefiniowana przez użytkownika (sg-ready przez wtyczki)",
+        "sgready-relay": "Pompa ciepła zdefiniowana przez użytkownika (sg-ready przez przekaźniki)",
         "switchsocket": "Gniazdo przełączalne zdefiniowane przez użytkownika"
       }
     },
diff --git a/i18n/pt.json b/i18n/pt.json
index 6f235249..d1b8d75d 100644
--- a/i18n/pt.json
+++ b/i18n/pt.json
@@ -58,8 +58,8 @@
           "heating": "Aquecimento personalizado"
         },
         "heatpump": "Bomba de calor personalizada",
-        "sgready": "Bomba de calor personalizada (sg-ready, tout)",
-        "sgready-boost": "Bomba de calor personalizada (sg-ready, boost)",
+        "sgready": "Bomba de calor personalizada (sg-ready via plugins)",
+        "sgready-relay": "Bomba de calor personalizada (sg-ready via relés)",
         "switchsocket": "Tomada de interrutor definida pelo utilizador"
       }
     },
diff --git a/i18n/sl.json b/i18n/sl.json
index de10252c..17bc08a5 100644
--- a/i18n/sl.json
+++ b/i18n/sl.json
@@ -58,8 +58,8 @@
           "heating": "Uporabniško določen grelec"
         },
         "heatpump": "Uporabniško določena toplotna črpalka",
-        "sgready": "Uporabniško določena toplotna črpalka (sg-ready, all)",
-        "sgready-boost": "Uporabniško določena toplotna črpalka (sg-ready, boost)",
+        "sgready": "Uporabniško določena toplotna črpalka (sg-ready preko vtičnikov)",
+        "sgready-relay": "Uporabniško določena toplotna črpalka (sg-ready preko relejev)",
         "switchsocket": "Uporabniško definirana vtičnica stikala"
       }
     },
diff --git a/i18n/sv.json b/i18n/sv.json
index c7be7b2b..bf382a61 100644
--- a/i18n/sv.json
+++ b/i18n/sv.json
@@ -58,8 +58,9 @@
           "heating": "Egendefinierad värmare"
         },
         "heatpump": "Egendefinierad värmepump",
-        "sgready": "Egendefinierad värmepump (sg-ready, alla)",
-        "sgready-boost": "Egendefinierad värmepump (sg-ready, boost)",
+        "sgready": "Egendefinierad värmepump (sg-ready via plugins)",
+        "sgready-boost": "Användardefinierad värmepump (sg-ready-boost, föråldrad)",
+        "sgready-relay": "Egendefinierad värmepump (sg-ready via reläer)",
         "switchsocket": "Egendefinierad strömbrytare"
       }
     },
@@ -94,6 +95,7 @@
       "currency": "Valuta",
       "current": "Ström",
       "currentRange": "Ström",
+      "dimmed": "Nedtonad",
       "enabled": "Aktiverad",
       "energy": "Energi",
       "feedinPrice": "Inmatningspris",
@@ -185,6 +187,7 @@
       "telemetry": "Telemetri",
       "templateLoading": "Laddar...",
       "title": "Titel",
+      "typeDeprecated": "Typen '{type}' är föråldrad och kommer att tas bort i en framtida version. Kontrollera ändringsloggen och återskapa den här enheten.",
       "validateSave": "Validera & spara"
     },
     "grid": {
diff --git a/i18n/ta.json b/i18n/ta.json
index 8a8950f8..14749473 100644
--- a/i18n/ta.json
+++ b/i18n/ta.json
@@ -58,8 +58,8 @@
           "heating": "பயனர் வரையறுக்கப்பட்ட ஈட்டர்"
         },
         "heatpump": "பயனர் வரையறுக்கப்பட்ட வெப்ப பம்ப்",
-        "sgready": "பயனர் வரையறுக்கப்பட்ட வெப்ப பம்ப் (எச்.சி-தயார், அனைத்தும்)",
-        "sgready-boost": "பயனர் வரையறுக்கப்பட்ட வெப்ப பம்ப் (எச்.சி-தயார், பூச்ட்)",
+        "sgready": "பயனர் வரையறுக்கப்பட்ட வெப்ப பம்ப் (sg-ready via plugins)",
+        "sgready-relay": "பயனர் வரையறுக்கப்பட்ட வெப்ப பம்ப் (sg-ready via relays)",
         "switchsocket": "பயனர் வரையறுக்கப்பட்ட சுவிட்ச் சாக்கெட்"
       }
     },
diff --git a/i18n/tr.json b/i18n/tr.json
index 8d1573eb..58b38983 100644
--- a/i18n/tr.json
+++ b/i18n/tr.json
@@ -58,8 +58,8 @@
           "heating": "Kullanıcı tanımlı ısıtıcı"
         },
         "heatpump": "Kullanıcı tanımlı ısı pompası",
-        "sgready": "Kullanıcı tanımlı ısı pompası (sg-ready, tamamı)",
-        "sgready-boost": "Kullanıcı tanımlı ısı pompası (sg-ready, takviye)",
+        "sgready": "Kullanıcı tanımlı ısı pompası (sg-ready eklentiler üzerinden)",
+        "sgready-relay": "Kullanıcı tanımlı ısı pompası (sg-ready röleler üzerinden)",
         "switchsocket": "Kullanıcı tanımlı şalterli priz"
       }
     },
diff --git a/i18n/uk.json b/i18n/uk.json
index c4e5a577..2ca646c8 100644
--- a/i18n/uk.json
+++ b/i18n/uk.json
@@ -58,8 +58,9 @@
           "heating": "Користувацький обігрівач"
         },
         "heatpump": "Користувацький тепловий насос",
-        "sgready": "Користувацький тепловий насос (готовий до роботи з підтримкою теплового насоса, усі)",
-        "sgready-boost": "Тепловий насос, що визначається користувачем (підтримка теплового насоса, підвищення потужності)",
+        "sgready": "Користувацький тепловий насос (sg-ready через плагіни)",
+        "sgready-boost": "Користувацький тепловий насос (sg-ready-boost, застарілий)",
+        "sgready-relay": "Користувацький тепловий насос (sg-ready через реле)",
         "switchsocket": "Користувацький перемикач-розетка"
       }
     },
@@ -94,6 +95,7 @@
       "currency": "Валюта",
       "current": "Cтрум",
       "currentRange": "Струм",
+      "dimmed": "Затемнений",
       "enabled": "Ввімкнено",
       "energy": "Енергія",
       "feedinPrice": "Збірна ціна",
@@ -185,6 +187,7 @@
       "telemetry": "Телеметрія",
       "templateLoading": "Завантаження...",
       "title": "Назва",
+      "typeDeprecated": "Тип '{type}' застарів і буде видалено в майбутній версії. Будь ласка, перевірте журнал змін і повторно створіть цей пристрій.",
       "validateSave": "Перевірити та зберегти"
     },
     "grid": {
diff --git a/meter/homeassistant.go b/meter/homeassistant.go
index 21876f16..889a4921 100644
--- a/meter/homeassistant.go
+++ b/meter/homeassistant.go
@@ -1,6 +1,6 @@
 package meter
 
-//go:generate go tool decorate -f decorateHomeAssistant -b *HomeAssistant -r api.Meter -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.PhaseVoltages,Voltages,func() (float64, float64, float64, error)" -t "api.Battery,Soc,func() (float64, error)"
+//go:generate go tool decorate -f decorateHomeAssistant -b *HomeAssistant -r api.Meter -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.PhaseVoltages,Voltages,func() (float64, float64, float64, error)" -t "api.Battery,Soc,func() (float64, error)" -t "api.BatteryCapacity,Capacity,func() float64" -t "api.BatterySocLimiter,GetSocLimits,func() (float64, float64)" -t "api.BatteryPowerLimiter,GetPowerLimits,func() (float64, float64)" -t "api.BatteryController,SetBatteryMode,func(api.BatteryMode) error" -t "api.MaxACPowerGetter,MaxACPower,func() float64"
 
 import (
 	"errors"
@@ -23,7 +23,7 @@ func init() {
 
 // NewHomeAssistantFromConfig creates a HomeAssistant meter from generic config
 func NewHomeAssistantFromConfig(other map[string]any) (api.Meter, error) {
-	var cc struct {
+	cc := struct {
 		URI      string
 		Token    string
 		Power    string
@@ -31,6 +31,19 @@ func NewHomeAssistantFromConfig(other map[string]any) (api.Meter, error) {
 		Currents []string
 		Voltages []string
 		Soc      string
+
+		// pv
+		pvMaxACPower `mapstructure:",squash"`
+
+		// battery
+		batteryCapacity    `mapstructure:",squash"`
+		batterySocLimits   `mapstructure:",squash"`
+		batteryPowerLimits `mapstructure:",squash"`
+	}{
+		batterySocLimits: batterySocLimits{
+			MinSoc: 20,
+			MaxSoc: 95,
+		},
 	}
 
 	if err := util.DecodeOther(other, &cc); err != nil {
@@ -79,7 +92,11 @@ func NewHomeAssistantFromConfig(other map[string]any) (api.Meter, error) {
 		soc = func() (float64, error) { return conn.GetFloatState(cc.Soc) }
 	}
 
-	return decorateHomeAssistant(m, energy, currents, voltages, soc), nil
+	return decorateHomeAssistant(m,
+		energy, currents, voltages, soc,
+		cc.batteryCapacity.Decorator(), cc.batterySocLimits.Decorator(), cc.batteryPowerLimits.Decorator(), nil,
+		cc.pvMaxACPower.Decorator(),
+	), nil
 }
 
 var _ api.Meter = (*HomeAssistant)(nil)
diff --git a/meter/homeassistant_decorators.go b/meter/homeassistant_decorators.go
index b8397419..e023562a 100644
--- a/meter/homeassistant_decorators.go
+++ b/meter/homeassistant_decorators.go
@@ -6,12 +6,12 @@ import (
 	"github.com/evcc-io/evcc/api"
 )
 
-func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, error), phaseCurrents func() (float64, float64, float64, error), phaseVoltages func() (float64, float64, float64, error), battery func() (float64, error)) api.Meter {
+func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, error), phaseCurrents func() (float64, float64, float64, error), phaseVoltages func() (float64, float64, float64, error), battery func() (float64, error), batteryCapacity func() float64, batterySocLimiter func() (float64, float64), batteryPowerLimiter func() (float64, float64), batteryController func(api.BatteryMode) error, maxACPowerGetter func() float64) api.Meter {
 	switch {
-	case battery == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+	case battery == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
 		return base
 
-	case battery == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+	case battery == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
 		return &struct {
 			*HomeAssistant
 			api.MeterEnergy
@@ -22,7 +22,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+	case battery == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
 		return &struct {
 			*HomeAssistant
 			api.PhaseCurrents
@@ -33,7 +33,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+	case battery == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
 		return &struct {
 			*HomeAssistant
 			api.MeterEnergy
@@ -48,7 +48,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+	case battery == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
 		return &struct {
 			*HomeAssistant
 			api.PhaseVoltages
@@ -59,7 +59,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+	case battery == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
 		return &struct {
 			*HomeAssistant
 			api.MeterEnergy
@@ -74,7 +74,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+	case battery == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
 		return &struct {
 			*HomeAssistant
 			api.PhaseCurrents
@@ -89,7 +89,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+	case battery == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
 		return &struct {
 			*HomeAssistant
 			api.MeterEnergy
@@ -108,7 +108,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
 		return &struct {
 			*HomeAssistant
 			api.Battery
@@ -119,7 +119,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
 		return &struct {
 			*HomeAssistant
 			api.Battery
@@ -134,7 +134,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
 		return &struct {
 			*HomeAssistant
 			api.Battery
@@ -149,7 +149,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
 		return &struct {
 			*HomeAssistant
 			api.Battery
@@ -168,7 +168,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
 		return &struct {
 			*HomeAssistant
 			api.Battery
@@ -183,7 +183,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
 		return &struct {
 			*HomeAssistant
 			api.Battery
@@ -202,7 +202,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
 		return &struct {
 			*HomeAssistant
 			api.Battery
@@ -221,7 +221,7 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 			},
 		}
 
-	case battery != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
 		return &struct {
 			*HomeAssistant
 			api.Battery
@@ -243,6 +243,6918 @@ func decorateHomeAssistant(base *HomeAssistant, meterEnergy func() (float64, err
 				phaseVoltages: phaseVoltages,
 			},
 		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
+
+	case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil:
+		return &struct {
+			*HomeAssistant
+			api.Battery
+			api.BatteryCapacity
+			api.BatteryController
+			api.BatteryPowerLimiter
+			api.BatterySocLimiter
+			api.MaxACPowerGetter
+			api.MeterEnergy
+			api.PhaseCurrents
+			api.PhaseVoltages
+		}{
+			HomeAssistant: base,
+			Battery: &decorateHomeAssistantBatteryImpl{
+				battery: battery,
+			},
+			BatteryCapacity: &decorateHomeAssistantBatteryCapacityImpl{
+				batteryCapacity: batteryCapacity,
+			},
+			BatteryController: &decorateHomeAssistantBatteryControllerImpl{
+				batteryController: batteryController,
+			},
+			BatteryPowerLimiter: &decorateHomeAssistantBatteryPowerLimiterImpl{
+				batteryPowerLimiter: batteryPowerLimiter,
+			},
+			BatterySocLimiter: &decorateHomeAssistantBatterySocLimiterImpl{
+				batterySocLimiter: batterySocLimiter,
+			},
+			MaxACPowerGetter: &decorateHomeAssistantMaxACPowerGetterImpl{
+				maxACPowerGetter: maxACPowerGetter,
+			},
+			MeterEnergy: &decorateHomeAssistantMeterEnergyImpl{
+				meterEnergy: meterEnergy,
+			},
+			PhaseCurrents: &decorateHomeAssistantPhaseCurrentsImpl{
+				phaseCurrents: phaseCurrents,
+			},
+			PhaseVoltages: &decorateHomeAssistantPhaseVoltagesImpl{
+				phaseVoltages: phaseVoltages,
+			},
+		}
 	}
 
 	return nil
@@ -256,6 +7168,46 @@ func (impl *decorateHomeAssistantBatteryImpl) Soc() (float64, error) {
 	return impl.battery()
 }
 
+type decorateHomeAssistantBatteryCapacityImpl struct {
+	batteryCapacity func() float64
+}
+
+func (impl *decorateHomeAssistantBatteryCapacityImpl) Capacity() float64 {
+	return impl.batteryCapacity()
+}
+
+type decorateHomeAssistantBatteryControllerImpl struct {
+	batteryController func(api.BatteryMode) error
+}
+
+func (impl *decorateHomeAssistantBatteryControllerImpl) SetBatteryMode(p0 api.BatteryMode) error {
+	return impl.batteryController(p0)
+}
+
+type decorateHomeAssistantBatteryPowerLimiterImpl struct {
+	batteryPowerLimiter func() (float64, float64)
+}
+
+func (impl *decorateHomeAssistantBatteryPowerLimiterImpl) GetPowerLimits() (float64, float64) {
+	return impl.batteryPowerLimiter()
+}
+
+type decorateHomeAssistantBatterySocLimiterImpl struct {
+	batterySocLimiter func() (float64, float64)
+}
+
+func (impl *decorateHomeAssistantBatterySocLimiterImpl) GetSocLimits() (float64, float64) {
+	return impl.batterySocLimiter()
+}
+
+type decorateHomeAssistantMaxACPowerGetterImpl struct {
+	maxACPowerGetter func() float64
+}
+
+func (impl *decorateHomeAssistantMaxACPowerGetterImpl) MaxACPower() float64 {
+	return impl.maxACPowerGetter()
+}
+
 type decorateHomeAssistantMeterEnergyImpl struct {
 	meterEnergy func() (float64, error)
 }
diff --git a/server/http_config_helper.go b/server/http_config_helper.go
index 7ea912ff..ce94c980 100644
--- a/server/http_config_helper.go
+++ b/server/http_config_helper.go
@@ -27,7 +27,7 @@ const (
 )
 
 var (
-	customTypes = []string{"custom", "template", "heatpump", "switchsocket", "sgready", "sgready-boost"}
+	customTypes = []string{"custom", "template", "heatpump", "switchsocket", "sgready", "sgready-relay"}
 )
 
 type configReq struct {
@@ -110,12 +110,21 @@ func templateForConfig(class templates.Class, conf map[string]any) (templates.Te
 func filterValidTemplateParams(tmpl *templates.Template, conf map[string]any) map[string]any {
 	res := make(map[string]any)
 
+	// check if template has modbus capability
+	hasModbus := len(tmpl.ModbusChoices()) > 0
+
 	for k, v := range conf {
 		if k == "template" {
 			res[k] = v
 			continue
 		}
 
+		// preserve modbus fields if template supports modbus
+		if hasModbus && slices.Contains(templates.ModbusParams, k) {
+			res[k] = v
+			continue
+		}
+
 		if i, _ := tmpl.ParamByName(k); i >= 0 {
 			res[k] = v
 		}
@@ -328,6 +337,11 @@ func testInstance(instance any) map[string]testResult {
 		makeResult(key, val, err)
 	}
 
+	if dev, ok := instance.(api.Dimmer); ok {
+		val, err := dev.Dimmed()
+		makeResult("dimmed", val, err)
+	}
+
 	if dev, ok := instance.(api.Identifier); ok {
 		val, err := dev.Identify()
 		makeResult("identifier", val, err)
diff --git a/templates/definition/charger/ocpp-wallbox.yaml b/templates/definition/charger/ocpp-wallbox.yaml
index d603a65e..a4a96067 100644
--- a/templates/definition/charger/ocpp-wallbox.yaml
+++ b/templates/definition/charger/ocpp-wallbox.yaml
@@ -36,3 +36,4 @@ params:
   - preset: ocpp
 render: |
   {{ include "ocpp" . }}
+  profilekindrelative: true
diff --git a/templates/definition/meter/goodwe-hybrid.yaml b/templates/definition/meter/goodwe-hybrid.yaml
index f1d9013e..b866ba06 100644
--- a/templates/definition/meter/goodwe-hybrid.yaml
+++ b/templates/definition/meter/goodwe-hybrid.yaml
@@ -18,9 +18,18 @@ params:
       en: Battery number
       de: Batteriespeichernummer
     choice: [1, 2]
+    usages: ["battery"]
   - name: capacity
     advanced: true
   - name: maxacpower
+  - name: maxchargepower
+    default: 10000
+  - name: maxdischargepower
+    default: 10000
+  - name: minsoc
+    default: 10
+  - name: maxsoc
+    default: 100
 render: |
   type: custom
   {{- if eq .usage "grid" }}
@@ -213,7 +222,7 @@ render: |
                 type: writesingle
                 encoding: uint16
           - source: const
-            value: 10000 # For charge battery mode: Maximum allowed power from Grid in W 
+            value: {{ .maxchargepower }} # For charge battery mode: Maximum allowed power from Grid in W 
             set:
               source: modbus
               {{- include "modbus" . | indent 12 }}
@@ -222,4 +231,8 @@ render: |
                 type: writemultiple
                 encoding: uint16
   capacity: {{ .capacity }} # kWh
+  maxchargepower: {{ .maxchargepower }} # W
+  maxdischargepower: {{ .maxdischargepower }} # W
+  minsoc: {{ .minsoc }} # %
+  maxsoc: {{ .maxsoc }} # %
   {{- end }}
diff --git a/templates/definition/meter/homeassistant.yaml b/templates/definition/meter/homeassistant.yaml
index 76f9e1b9..2d0baaf9 100644
--- a/templates/definition/meter/homeassistant.yaml
+++ b/templates/definition/meter/homeassistant.yaml
@@ -103,6 +103,12 @@ params:
     help:
       en: Entity ID for battery state of charge in percent
       de: Entitäts-ID für Batterieladestand in Prozent
+  - name: capacity
+  - name: minsoc
+  - name: maxsoc
+  - name: maxchargepower
+  - name: maxdischargepower
+  - name: maxacpower
 render: |
   type: homeassistant
   uri: {{ .uri }}
@@ -117,4 +123,10 @@ render: |
     - {{ .voltageL1 }}
     - {{ .voltageL2 }}
     - {{ .voltageL3 }}
+  maxacpower: {{ .maxacpower }} # W
   soc: {{ .soc }}
+  capacity: {{ .capacity }} # kWh
+  maxchargepower: {{ .maxchargepower }} # W
+  maxdischargepower: {{ .maxdischargepower }} # W
+  minsoc: {{ .minsoc }} # %
+  maxsoc: {{ .maxsoc }} # %
diff --git a/templates/definition/meter/sungrow-hybrid.yaml b/templates/definition/meter/sungrow-hybrid.yaml
index 2ac79640..a28f1978 100644
--- a/templates/definition/meter/sungrow-hybrid.yaml
+++ b/templates/definition/meter/sungrow-hybrid.yaml
@@ -20,6 +20,10 @@ params:
   - name: capacity
     advanced: true
   - name: maxacpower
+  - name: minsoc
+    advanced: true
+  - name: maxsoc
+    advanced: true
   - name: maxchargepower
     help:
       en: Maximum charge power for forced charging of the battery in watts. (0 to automatically set the value of the maximum BDC rated power)
@@ -292,4 +296,6 @@ render: |
                 decode: uint16
         {{- end }}
   capacity: {{ .capacity }} # kWh
+  minsoc: {{ .minsoc }} # %
+  maxsoc: {{ .maxsoc }} # %
   {{- end }}
diff --git a/templates/definition/tariff/elering.yaml b/templates/definition/tariff/elering.yaml
index f3bc3d6e..99e4336e 100644
--- a/templates/definition/tariff/elering.yaml
+++ b/templates/definition/tariff/elering.yaml
@@ -4,6 +4,8 @@ products:
   - brand: Nordpool
     description:
       generic: "Elering"
+requirements:
+  evcc: ["skiptest"]
 group: price
 countries: ["EE", "LT", "LV", "FI"]
 params:
diff --git a/util/templates/template_modbus.go b/util/templates/template_modbus.go
index 36b76636..5d4c81aa 100644
--- a/util/templates/template_modbus.go
+++ b/util/templates/template_modbus.go
@@ -74,19 +74,19 @@ func (t *Template) ModbusValues(renderMode int, values map[string]any) {
 			var defaultValue string
 
 			switch p.Name {
-			case ModbusParamNameId:
+			case ModbusParamId:
 				if modbusParam.ID != 0 {
 					defaultValue = strconv.Itoa(modbusParam.ID)
 				}
-			case ModbusParamNamePort:
+			case ModbusParamPort:
 				if modbusParam.Port != 0 {
 					defaultValue = strconv.Itoa(modbusParam.Port)
 				}
-			case ModbusParamNameBaudrate:
+			case ModbusParamBaudrate:
 				if modbusParam.Baudrate != 0 {
 					defaultValue = strconv.Itoa(modbusParam.Baudrate)
 				}
-			case ModbusParamNameComset:
+			case ModbusParamComset:
 				if modbusParam.Comset != "" {
 					defaultValue = modbusParam.Comset
 				}
diff --git a/util/templates/types.go b/util/templates/types.go
index ffa6c1bd..c88ace85 100644
--- a/util/templates/types.go
+++ b/util/templates/types.go
@@ -25,14 +25,14 @@ const (
 	ModbusKeyTCPIP       = "tcpip"
 	ModbusKeyUDP         = "udp"
 
-	ModbusParamNameId       = "id"
-	ModbusParamNameDevice   = "device"
-	ModbusParamNameBaudrate = "baudrate"
-	ModbusParamNameComset   = "comset"
-	ModbusParamNameURI      = "uri"
-	ModbusParamNameHost     = "host"
-	ModbusParamNamePort     = "port"
-	ModbusParamNameRTU      = "rtu"
+	ModbusParamId       = "id"
+	ModbusParamDevice   = "device"
+	ModbusParamBaudrate = "baudrate"
+	ModbusParamComset   = "comset"
+	ModbusParamURI      = "uri"
+	ModbusParamHost     = "host"
+	ModbusParamPort     = "port"
+	ModbusParamRTU      = "rtu"
 )
 
 const (
@@ -41,7 +41,19 @@ const (
 	RenderModeInstance
 )
 
-var ValidModbusChoices = []string{ModbusChoiceRS485, ModbusChoiceTCPIP, ModbusChoiceUDP}
+var (
+	ValidModbusChoices = []string{ModbusChoiceRS485, ModbusChoiceTCPIP, ModbusChoiceUDP}
+
+	// ModbusParams contains all field names used by modbus templates
+	ModbusParams = []string{
+		ModbusParamId, ModbusParamDevice, ModbusParamBaudrate, ModbusParamComset,
+		ModbusParamURI, ModbusParamHost, ModbusParamPort, ModbusParamRTU,
+	}
+
+	ModbusConnectionTypes = []string{
+		ModbusKeyTCPIP, ModbusKeyUDP, ModbusKeyRS485Serial, ModbusKeyRS485TCPIP,
+	}
+)
 
 const (
 	CapabilityISO151182      = "iso151182"       // ISO 15118-2 support
@@ -63,12 +75,10 @@ const (
 
 var ValidRequirements = []string{RequirementEEBUS, RequirementMQTT, RequirementSponsorship, RequirementSkipTest}
 
-var predefinedTemplateProperties = []string{
-	"type", "template", "name",
-	ModbusParamNameId, ModbusParamNameDevice, ModbusParamNameBaudrate, ModbusParamNameComset,
-	ModbusParamNameURI, ModbusParamNameHost, ModbusParamNamePort, ModbusParamNameRTU,
-	ModbusKeyTCPIP, ModbusKeyUDP, ModbusKeyRS485Serial, ModbusKeyRS485TCPIP,
-}
+var predefinedTemplateProperties = append(
+	[]string{"type", "template", "name"},
+	append(ModbusParams, ModbusConnectionTypes...)...,
+)
 
 // TextLanguage contains language-specific texts
 type TextLanguage struct {
diff --git a/vehicle/skoda/params.go b/vehicle/skoda/params.go
index ada3cacf..0e0d1bda 100644
--- a/vehicle/skoda/params.go
+++ b/vehicle/skoda/params.go
@@ -12,7 +12,7 @@ const (
 
 // Skoda native api
 var AuthParams = url.Values{
-	"response_type": {"code id_token"},
+	"response_type": {"code"},
 	"client_id":     {"7f045eee-7003-4379-9968-9355ed2adb06@apps_vw-dilab_com"},
 	"redirect_uri":  {"myskoda://redirect/login/"},
 	"scope":         {"address badge birthdate cars driversLicense dealers email mileage mbb nationalIdentifier openid phone profession profile vin"},
diff --git a/vehicle/skoda/tokenrefreshservice/endpoint.go b/vehicle/skoda/tokenrefreshservice/endpoint.go
index ecc406ff..93debe76 100644
--- a/vehicle/skoda/tokenrefreshservice/endpoint.go
+++ b/vehicle/skoda/tokenrefreshservice/endpoint.go
@@ -45,7 +45,7 @@ func New(log *util.Logger, q url.Values) *Service {
 }
 
 func (v *Service) Exchange(q url.Values) (*vag.Token, error) {
-	if err := urlvalues.Require(q, "id_token", "code"); err != nil {
+	if err := urlvalues.Require(q, "code"); err != nil {
 		return nil, err
 	}
 



Test patch:
diff --git a/core/planner/planner_test.go b/core/planner/planner_test.go
index 93cc78a3..b2f28d2d 100644
--- a/core/planner/planner_test.go
+++ b/core/planner/planner_test.go
@@ -29,6 +29,14 @@ func rates(prices []float64, start time.Time, slotDuration time.Duration) api.Ra
 	return res
 }
 
+// func dumpRates(rr api.Rates) string {
+// 	var b []byte
+// 	for _, r := range rr {
+// 		b = fmt.Appendf(b, "%+v\n", r)
+// 	}
+// 	return string(b)
+// }
+
 // TODO start before start of rates
 
 func TestPlan(t *testing.T) {
@@ -286,6 +294,7 @@ func TestPrecondition(t *testing.T) {
 		},
 	}, plan, "expected last slot")
 
+	// NOTE: with 15min slots we no longer expect late start of the slot
 	plan = p.Plan(2*time.Hour, time.Hour, clock.Now().Add(4*time.Hour))
 	assert.Equal(t, api.Rates{
 		{
@@ -300,19 +309,28 @@ func TestPrecondition(t *testing.T) {
 		},
 	}, plan, "expected two slots")
 
-	// plan = p.Plan(time.Hour, 30*time.Minute, clock.Now().Add(4*time.Hour))
-	// assert.Equal(t, api.Rates{
-	// 	{
-	// 		Start: clock.Now().Add(30 * time.Minute),
-	// 		End:   clock.Now().Add(time.Hour),
-	// 		Value: 1,
-	// 	},
-	// 	{
-	// 		Start: clock.Now().Add(210 * time.Minute),
-	// 		End:   clock.Now().Add(4 * time.Hour),
-	// 		Value: 4,
-	// 	},
-	// }, plan, "expected short early and split late slot")
+	plan = p.Plan(time.Hour, 30*time.Minute, clock.Now().Add(4*time.Hour))
+	assert.Equal(t, api.Rates{
+		{
+			Start: clock.Now(),
+			End:   clock.Now().Add(30 * time.Minute),
+			Value: 1,
+		},
+		{
+			Start: clock.Now().Add(210 * time.Minute), // 3.5h
+			End:   clock.Now().Add(4 * time.Hour),     // 4.0h
+			Value: 4,
+		},
+	}, plan, "expected short early and split late slot")
+
+	plan = p.Plan(time.Hour, 24*time.Hour, clock.Now().Add(4*time.Hour))
+	assert.Equal(t, api.Rates{
+		{
+			Start: clock.Now().Add(3 * time.Hour),
+			End:   clock.Now().Add(4 * time.Hour),
+			Value: 4,
+		},
+	}, plan, "all precondition")
 }
 
 func TestContinuousPlanNoTariff(t *testing.T) {
diff --git a/tests/config-loadpoint.spec.ts b/tests/config-loadpoint.spec.ts
index db20e261..1ba858fc 100644
--- a/tests/config-loadpoint.spec.ts
+++ b/tests/config-loadpoint.spec.ts
@@ -572,8 +572,12 @@ test.describe("heating loadpoint", async () => {
     await expectModalVisible(modal);
     await modal.getByLabel("Manufacturer").selectOption("User-defined heater");
     await modal.getByLabel("Manufacturer").selectOption("User-defined heat pump");
-    await modal.getByLabel("Manufacturer").selectOption("User-defined heat pump (sg-ready, all)");
-    await modal.getByLabel("Manufacturer").selectOption("User-defined heat pump (sg-ready, boost)");
+    await modal
+      .getByLabel("Manufacturer")
+      .selectOption("User-defined heat pump (sg-ready via plugins)");
+    await modal
+      .getByLabel("Manufacturer")
+      .selectOption("User-defined heat pump (sg-ready via relays)");
     await modal.getByLabel("Manufacturer").selectOption("User-defined switch socket");
     await modal.getByLabel("Manufacturer").selectOption("User-defined heat pump");
 
diff --git a/tests/config-modbus-fields.spec.ts b/tests/config-modbus-fields.spec.ts
new file mode 100644
index 00000000..63b30cb2
--- /dev/null
+++ b/tests/config-modbus-fields.spec.ts
@@ -0,0 +1,57 @@
+import { test, expect, type Page, type Locator } from "@playwright/test";
+import { start, stop, baseUrl } from "./evcc";
+import { expectModalVisible, enableExperimental } from "./utils";
+
+const CONFIG_MODBUS_FIELDS = "config-modbus-fields.sql";
+
+test.use({ baseURL: baseUrl() });
+
+test.beforeAll(async () => {
+  await start(undefined, CONFIG_MODBUS_FIELDS);
+});
+
+test.afterAll(async () => {
+  await stop();
+});
+
+async function openMeterModal(page: Page, title: string): Promise<Locator> {
+  await page.goto("/#/config");
+  await enableExperimental(page, true);
+  await page
+    .getByTestId("pv")
+    .filter({ hasText: title })
+    .getByRole("button", { name: "edit" })
+    .click();
+  const modal = page.getByTestId("meter-modal");
+  await expectModalVisible(modal);
+  return modal;
+}
+
+test.describe("modbus fields", async () => {
+  test("tcpip", async ({ page }) => {
+    const modal = await openMeterModal(page, "TCP Test");
+    await expect(page.getByLabel("Network")).toBeChecked();
+    await expect(page.getByLabel("TCP")).toBeChecked();
+    await expect(modal.getByLabel("IP address or hostname")).toHaveValue("192.168.1.10");
+    await expect(modal.getByLabel("Port", { exact: true })).toHaveValue("5020");
+    await expect(modal.getByLabel("Modbus ID")).toHaveValue("10");
+  });
+
+  test("rs485tcpip", async ({ page }) => {
+    const modal = await openMeterModal(page, "RTU/IP Test");
+    await expect(page.getByLabel("Network")).toBeChecked();
+    await expect(page.getByLabel("RTU")).toBeChecked();
+    await expect(modal.getByLabel("IP address or hostname")).toHaveValue("192.168.1.20");
+    await expect(modal.getByLabel("Port", { exact: true })).toHaveValue("8899");
+    await expect(modal.getByLabel("Modbus ID")).toHaveValue("20");
+  });
+
+  test("rs485serial", async ({ page }) => {
+    const modal = await openMeterModal(page, "Serial Test");
+    await expect(page.getByLabel("Serial / USB")).toBeChecked();
+    await expect(modal.getByLabel("Device name")).toHaveValue("/dev/ttyUSB5");
+    await expect(modal.getByLabel("Baud rate")).toHaveValue("19200");
+    await expect(modal.getByLabel("ComSet")).toHaveValue("8E1");
+    await expect(modal.getByLabel("Modbus ID")).toHaveValue("30");
+  });
+});
diff --git a/tests/config-modbus-fields.sql b/tests/config-modbus-fields.sql
new file mode 100644
index 00000000..4f597bfe
--- /dev/null
+++ b/tests/config-modbus-fields.sql
@@ -0,0 +1,24 @@
+BEGIN;
+
+CREATE TABLE `configs` (
+    `id` integer PRIMARY KEY AUTOINCREMENT
+  , `class` integer
+  , `type` text
+  , `title` text
+  , `icon` text
+  , `product` text
+  , `value` text
+);
+CREATE TABLE `settings` (
+    `key` text
+  , `value` text
+  , PRIMARY KEY(`key`)
+);
+
+INSERT INTO configs(id, class, type, title, icon, product, value) VALUES(1, 2, 'template', 'TCP Test', '', 'SunSpec Inverter', '{"host":"192.168.1.10","id":10,"modbus":"tcpip","port":5020,"template":"sunspec-inverter","usage":"pv"}');
+INSERT INTO configs(id, class, type, title, icon, product, value) VALUES(2, 2, 'template', 'RTU/IP Test', '', 'SunSpec Inverter', '{"host":"192.168.1.20","id":20,"modbus":"rs485tcpip","port":8899,"template":"sunspec-inverter","usage":"pv"}');
+INSERT INTO configs(id, class, type, title, icon, product, value) VALUES(3, 2, 'template', 'Serial Test', '', 'SunSpec Inverter', '{"baudrate":19200,"comset":"8E1","device":"/dev/ttyUSB5","id":30,"modbus":"rs485serial","template":"sunspec-inverter","usage":"pv"}');
+
+INSERT INTO settings("key", value) VALUES('pvMeters', 'db:1,db:2,db:3');
+
+COMMIT;