evcc-io / evcc

Sonne tanken ☀️🚘
https://evcc.io
MIT License
3.36k stars 614 forks source link

Kostal Piko BA Hybrid Inverter battery broken #3609

Closed ThiloHilpert closed 2 years ago

ThiloHilpert commented 2 years ago

Thank you for including battery support for Kostal Piko BA with version 0.92, it works in general. I checked the other issues and think this hasn't been covered yet. I played a bit in custom mode and think I have all signals now plausible. I want to inform you to maybe check it and update the template kostal-piko or create one tailored for Kostal Piko BA.

I've a Kostal Piko BA 8.0 since 11/2016 with two PV inputs in use and one battery connected (DC coupled). When I use the template or configurator it works in general but the signals (inputs and outputs) do not sum up meaningful in most cases. Charging the battery is shown like feeding in towards the grid and battery supplying power to the home is shown as PV power (and more). I had a closer look at the template and checked the used dxsEntries IDs. Below I paste a version that works well for me. I tested in all cases (except charging BEV, still waiting on it): charging/discharging battery, feeding in while charging, battery empty, battery full. The first part is the template based version (commented out), behind is my custom version (for grid, pv and battery).

I do also offer to test any newer version with my system and supply feedback. Of course I'm also open for discussions. Thank you!

my evcc.yaml, works with v0.94:

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

log: info
levels:
  cache: error

interval: 15s # control cycle interval

sponsortoken: [present]

meters:
#- type: template
#  template: kostal-piko
#  usage: grid
#  host: [my_inverter_ip]
#  name: grid1
- name: grid1
  type: custom
  power:
    source: http
    uri: http://[my_inverter_ip]/api/dxs.json?dxsEntries=83886336&dxsEntries=83886592&dxsEntries=83886848&dxsEntries=67109120 # Home_PV, Home_Bat, Home_Grid, AC_P
    jq: (.dxsEntries[0].value) + (.dxsEntries[1].value) + (.dxsEntries[2].value) - (.dxsEntries[3].value)
#- type: template
#  template: kostal-piko
#  usage: pv
#  host: [my_inverter_ip]
#  name: pv2
- name: pv2
  type: custom
  power:
    source: http
    uri: http://[my_inverter_ip]/api/dxs.json?dxsEntries=33555203&dxsEntries=33555459 # PV1_P, PV2_P
    jq: (.dxsEntries[0].value) + (.dxsEntries[1].value)
#- type: template
#  template: kostal-piko
#  usage: battery
#  host: [my_inverter_ip]
#  name: battery3
- name: battery3
  type: custom
  power:
    source: http
    uri: http://[my_inverter_ip]/api/dxs.json?dxsEntries=33556225&dxsEntries=33556226 # Bat_I, Bat_U
    jq: (.dxsEntries[0].value) * (.dxsEntries[1].value) * -1.0
  soc:
    source: http
    uri: http://[my_inverter_ip]/api/dxs.json?dxsEntries=33556229 # Bat_SoC
    jq: .dxsEntries[0].value

chargers:
- type: template
  template: abl
  id: 1
  device: /dev/ttyUSB0
  baudrate: 38400
  comset: 8E1
  modbus: rs485serial
  name: wallbox4

loadpoints:
- title: Garage
  charger: wallbox4
  mode: pv
  phases: 3
  mincurrent: 6
  maxcurrent: 16
  resetOnDisconnect: false

site:
  title: Daheim
  meters:
    grid: grid1
    pvs:
    - pv2
    batteries:
    - battery3
andig commented 2 years ago

@ThiloHilpert would you mind providing a PR containing an updated version of the template?

/cc @premultiply

thierolm commented 2 years ago

@ThiloHilpert
Soweit ich das sehe, berücksicht das aktuelle kostal-piko Template die Home-Battery Leistung NICHT (siehe Gegenüberstellung unten und https://github.com/evcc-io/evcc/blob/76358b3e302ad8598cef827ea121e98ce5e4a255/templates/definition/meter/kostal-piko.yaml#L16 ).

Gibt denn der Wert von dxsEntries=83886592 immer auch das richtige Vorzeichen beim Laden mit, oder nur beim Entladen. Wenn Ersteres gilt, kannst du mal schauen, ob du die battery Konfiguration auch auf dxsEntries=83886592 sinnvoll umstellen kannst?

Klasse wäre, wenn du uns Json Ausgaben ALLER relevanten dxsEntries (Obermenge aus Template und deiner Custom-Config) in verschiedenen evcc Zuständen hier zur Verfügung stellen könntest.

grid deine custom config: dxsEntries=83886336 Home_PV + dxsEntries=83886592 Home_Bat + dxsEntries=83886848 Home_Grid + dxsEntries=67109120 AC_P -

evcc template config: dxsEntries=83886336 # PV Eigenverbrauch + dxsEntries=83886848 # Netzbezug + dxsEntries=67109120 # PV AC Ausgang -

ThiloHilpert commented 2 years ago

@ThiloHilpert would you mind providing a PR containing an updated version of the template?

/cc @premultiply @andig: I have to admit, that I haven't fully understood the template format, especially the framing and conditions. I thought with supplying some input we could come "together".

ThiloHilpert commented 2 years ago

@thierolm: Ja, beim grid hat Home_Bat gefehlt, dadurch hat die Summe nicht gepasst. Ich kann leider überhaupt nicht einschätzen, ob für nicht-BA (Kostal Piko ohne BA) Nutzer die entsprechende Anpassung des Template funktioniert oder ob es dann dort nicht passt. Daher die Idee das Template ggf. zu kopieren und damit für Kostal Piko BA speziell anzupassen (einschließlich Anpassung des configure Skripts). Weitere Probleme waren (für meine Kostal Piko BA Config):

Ich fange an, für die unterschiedlichen Betriebszustande die JSON Rohausgaben zu sammeln und stelle sie hier rein. Die Abfrage ist wie folgt (das sollten alle wichtigen IDs sein): http://[my_inverter_ip]/api/dxs.json?dxsEntries=67109120&dxsEntries=33555203&dxsEntries=33555459&dxsEntries=33556225&dxsEntries=33556226&dxsEntries=33556229&dxsEntries=83886336&dxsEntries=83886592&dxsEntries=83886848&dxsEntries=83887872&dxsEntries=33556238&dxsEntries=33556230

Beschreibung der IDs 67109120 AC_P 33555203 PV1_P 33555459 PV2_P 33556225 Bat_I 33556226 Bat_U 33556229 Bat_SOC 83886336 Home_PV 83886592 Home_Bat 83886848 Home_Grid 83887872 Home_Tot 33556238 Bat_Charging 33556230 Bat_Charge/Discharge

Ich habe auch eine Excel Datei erstellt, die das dekodiert, zumindest für mich... Messwerte.xlsx

Zustände

ThiloHilpert commented 2 years ago

@thierolm: Jetzt habe ich (bis auf Akku leer in der Nacht) alle Varianten zusammen.

thierolm commented 2 years ago

Top , schau ich mir übers WE an. Laut https://github.com/evcc-io/evcc/issues/643#issuecomment-773399893 müsste das Batterie Vorzeichen noch gedreht werden. Können wir zusammen über die Custom Konfig die notwendigen Template Änderungen vorab testen? Würde dir jq Vorschläge schicken die du dann testen kannst. Wenn alles OK übernehmen wir das ins Piko Template.

thierolm commented 2 years ago

Meter Configs zum Testen:

meters:

- name: grid1
  type: custom
  power:
    source: http
    uri: http://xxx.xxx.xxx.xxx/api/dxs.json?dxsEntries=83886336&dxsEntries=83886848&dxsEntries=83886592&dxsEntries=67109120 # Home PV Power + Home Grid Power + Home Bat Power - PV/Bat Inverter Power
    #   | ----------------------------- Home PV W -------- | + | --------------------------- Home Grid W -------- | + | --------------------------- Home Bat W --------- | - | --------------------------- PV/BAT Inv W ------- |               
    jq: (.dxsEntries[] | select(.dxsId==83886336) | .value ) + (.dxsEntries[] | select(.dxsId==83886848) | .value ) + (.dxsEntries[] | select(.dxsId==83886592) | .value ) - (.dxsEntries[] | select(.dxsId==67109120) | .value )

- name: pv2
  type: custom
  power:
    source: http
    uri: http://xxx.xxx.xxx.xxx/api/dxs.json?dxsEntries=33555203&dxsEntries=33555459 # PV1 Power + PV2 Power
    #   | ----------------------------- PV1 W ------------ | + | ----------------------------- PV2 W ------------ |               
    jq: (.dxsEntries[] | select(.dxsId==33555203) | .value ) + (.dxsEntries[] | select(.dxsId==33555459) | .value )

- name: battery3
  type: custom
  power:
    source: http
    uri: http://xxx.xxx.xxx.xxx/api/dxs.json?dxsEntries=33556225&dxsEntries=33556226 # Battery Current A * Battery Voltage
    #   -1 * | ----------------------------- Bat A ------------ | * | ----------------------------- Bat V ------------ |               
    jq: -1 * (.dxsEntries[] | select(.dxsId==33556225) | .value ) * (.dxsEntries[] | select(.dxsId==33556226) | .value )
  soc:
    source: http
    uri: http://xxx.xxx.xxx.xxx/api/dxs.json?dxsEntries=33556229 # Battery SOC
    #   | ----------------------------- Bat SOC% --------- |    
    jq: (.dxsEntries[] | select(.dxsId==33556229) | .value )
thierolm commented 2 years ago

@myraumhafen könntest du bitte die Meter Konfigs mit deinem Piko auch einmal testen?

ThiloHilpert commented 2 years ago

@thierolm: Ich war ein paar Tage unterwegs, gerade jetzt erst aufgespielt. Ich habe in meine bestehende Konfig die Bereiche von Dir übernommen. Funktioniert. Inhaltlich ist es nach meinem Verständnis identisch, nur ein Wert wird in anderer Reihenfolge gelesen und ausgewertet und Du arbeitest mit der "select" Funktion und ich bin direkt über die "dxsEntries[xx]" gegangen. Ich habe jetzt noch nicht alle Varianten/Zustände des Systems durch, gehe aber fest davon aus, dass es wie zuvor bei mir funktioniert. Zur allgemeinen Info: unsere Anlage ist von 11/2016, 7.7kWp, Kostal Piko BA 8.0 Hybridwechselrichter (3-phasig), Kostal Akku 7.2kWh mit LiFePO4 Sony Zellen (DC-gekoppelt), Notstrom Ausrüstung (vom Netz freischalten und nach ca. 15s netzbildend neu startend). @myraumhafen: Was für einen Wechselrichter hast Du? Kostal Piko ohne "BA", nehme ich an? Habe gerade Deinen Post vom 6. Mai gesehen, dann hast Du vermutlich eine ähnlich Anlage, auch Piko BA mit Li-Batterie.

thierolm commented 2 years ago

@ThiloHilpert Template PR ist gestellt. Kurze Frage: Liefern die Meter mit der Konfiguration oben auch durchgängig Werte? (Bspw. liefern die beiden PV dxsIds nachts auch den value 0?) Ich stelle mir die Frage, ob wir die Abfrage auf NULL Werte evtl. noch brauchen oder nicht (| if . == null then 0 else . end) ...

ThiloHilpert commented 2 years ago

@thierolm: Danke, dann bin ich auf das nächste Update gespannt, werde es dann damit versuchen. Ich habe noch nie eine ungültige/unsinnige Antwort auf die JSON Abfragen gesehen. Manchmal antwortet der WR gar nicht bzw. das Netzwerk "hängt". Wenn aber eine Antwort kommt, dann sind alle Werte gültig. Siehe oben meine Abfragen in diversen Zuständen bzw. einen mit 0 PV hier rein kopiert. Die beiden PV IDs sind fett markiert. Liefern beide "saubere" 0. Ich nutze die JSON Abfragen schon recht lange für meine Hausautomation mit FHEM und da gab es auch noch nie "leere" Antworten.

PV zero, Bat discharging, no grid in {"dxsEntries":[{"dxsId":67109120,"value":1103.568115},{"dxsId":33555203,"value":0.000000},{"dxsId":33555459,"value":0.000000},{"dxsId":33556225,"value":-3.970000},{"dxsId":33556226,"value":311.500000},{"dxsId":33556229,"value":61.000000},{"dxsId":83886336,"value":0.213841},{"dxsId":83886592,"value":1076.927246},{"dxsId":83886848,"value":0.000000},{"dxsId":83887872,"value":1077.141113},{"dxsId":33556238,"value":3.970000},{"dxsId":33556230,"value":1}],"session":{"sessionId":0,"roleId":0},"status":{"code":0}}

Manchmal habe ich Verbindungsprobleme vom EVCC RasPi zum WR, das WLAN in der Garage ist etwas wackelig. Da gibt es dann solche Fehlermeldungen, aber das ist ja ein anderes Thema und gibt auch keine Probleme bei mir: grid meter: Get \"http://192.168.x.y/api/dxs.json?dxsEntries=83886336&dxsEntries=83886848&dxsEntries=83886592&dxsEntries=67109120\": dial tcp 192.168.x.y:80: connect: network is unreachable battery meter 0: Get \"http://192.168.x.y/api/dxs.json?dxsEntries=33556225&dxsEntries=33556226\": dial tcp 192.168.x.y:80: connect: network is unreachable pv meter 0: Get \"http://192.168.x.y/api/dxs.json?dxsEntries=33555203&dxsEntries=33555459\": dial tcp 192.168.x.y:80: connect: network is unreachable

Close und "answer" mache ich dann, wenn ich das template bei mir getestet habe.

ThiloHilpert commented 2 years ago

@thierolm, @andig: Vielen Dank für die schnelle Anpassung und die neue Version. Habe die 0.95 gerade installiert und bin wieder auf die Standard Config zurück gegangen (siehe unten), bisher sieht es gut aus. Die Änderungen in der kostal-piko.yaml passen auch zu dem was ich getestet habe.

meters:
- type: template
  template: kostal-piko
  usage: grid
  host: 192.168.x.y
  name: grid1
- type: template
  template: kostal-piko
  usage: pv
  host: 192.168.x.y
  name: pv2
- type: template
  template: kostal-piko
  usage: battery
  host: 192.168.x.y
  name: battery3
andig commented 2 years ago

Folgefehler in https://github.com/evcc-io/evcc/discussions/3666#discussioncomment-3022217. @thierolm könntest Du dir das evtl anschauen? Bei PV sind jetzt komplett andere IDs drin, das scheint nicht zu funktionieren.