Solar Inverter: Kostal Plenticore Plus integration

Hi, sorry to hijack this thread but i guess someone in here will have an answer for me :blush:

My old Goodwe inverter has died and i am looking for a new alternative.
As I hated not being able to get data form the old one i am looking for something with a Local api for home assistant integration, and the Kostal Plenticore 5,5 kW hybridinverter seems like a good option.

If i buy the Kostal Plenticore 5,5 kW hybridinverter unit, do i need anything else to get useful metrics for home assistant? I do not plan to add a battery to te system (at least not yet).

I saw some mention of a smart meter… Is that necessary to get correct data? :thinking:

Where i live phase balancing is not required as the energy meter sums usage across all phases, and deducts my delivery to the grid at the given time.

Hi mate,
without the KSM you are blind.
You don’t see the consumption from home, you don’t see the difference between grid and home consumption.

It is more or less a must buy

I would work with the KSM and not a template sensor for the Netzeinspeisung.

Here is what I use:

modbus:
  - name: KSEM 
    type: tcp
    host: 192.168.178.151
    port: 502
    sensors:
    - name: netzbezug_leistung_ksem
      slave: 1
      device_class: power
      state_class: measurement
      unit_of_measurement: W
      scale: 0.1
      address: 0
      scan_interval: 10 # Defines the update interval of the sensor in seconds.
      count: 2 # Anzahl zu lesenden Register
      input_type: holding
      data_type: uint32

    - name: netzeinspeisung_leistung_ksem
      slave: 1
      device_class: power
      state_class: measurement
      unit_of_measurement: W
      scale: 0.1
      address: 2
      scan_interval: 10 # Defines the update interval of the sensor in seconds.
      count: 2 # Anzahl zu lesenden Register
      input_type: holding
      data_type: uint32

    - name: netzbezug_energie_ksem
      slave: 1
      scale: 0.0001 # wegen kWh (0.1/1000)
      precision: 3
      address: 512
      scan_interval: 60 # Defines the update interval of the sensor in seconds.
      count: 4 # Anzahl zu lesenden Register
      input_type: holding
      data_type: uint64
      device_class: energy
      state_class: total_increasing
      unit_of_measurement: kWh

    - name: netzeinspeisung_energie_ksem
      slave: 1
      scale: 0.0001 # wegen kWh (0.1/1000)
      precision: 3
      address: 516
      scan_interval: 60 # Defines the update interval of the sensor in seconds.
      count: 4 # Anzahl zu lesenden Register
      input_type: holding
      data_type: uint64
      device_class: energy
      state_class: total_increasing
      unit_of_measurement: kWh


Keep in mind: I don’t have a battery…yet :wink:

Hello dear,
is there a way to manage battery?

1 Like

Hello Palban,
not sure what you mean by manage a battery but you get many sensors to read and work with.
Also in the Energy Dashboard a battery can be included if I remember correclty.

Does this help you?

1 Like

Does anyone read the house consumption from ksem?

As far as I can tell there is only an energy counter for “from battery” not “to battery”.

Nice video, congratulations. But in my case I have a Penticore Plus with battery and additional the Kostal energy meter KEM P (without LAN) - it is not the KSEM. And I am looking for integrating resp. monitoring the “Energy into grid” into the Enegy dashborad in HA. Modbus via inverter doesnt work, yet. Can anybody help?

KEM-P has a modbus interface. You can use an RS-485 adaptor to query is serially.

Hi,

is only one inverter supported by the official integration? I have two Kostal and i’m only able the add one.

BW

Is anybody of you have trouble with the Kostal integration recently?
It was working fine for three months, but I now observe the the “AC Power” sensor is suddenly unavailable every now and then. I need to restart the integration to restore its behavior.

The interver itself is up and running, and when my solar enery dashoard is “catching up”, which means it will assign the collected kWh to the wrong hour etc. (But I assume, it would miss them complete when I do not realize this on the particular day)

Is there a way to manage/force battery charging by HA automation? Currently it’ll only charge based on settings in Kostal Plenticore “Service menu” → “battery settings”.
Would really like to have the option of automating it based on available solar and/or network feed in rate (already have an integration with Nordpool for that).

Should be possible. I do this with node red for disabling battery discharging while charging the EV.

You can write the modbus register 1034 to do so.

Can you show how you did that? Gladly with an example.
I fail to write the appropriate modbus register via NodeRed.

In Kostal Plenticore the battery management is already set to Modbus TCP.

Yes, of course:

[{"id":"9fc0f809.f00518","type":"tab","label":"disable-battery-discharging","disabled":false,"info":""},{"id":"69d3ebb87d314db0","type":"inject","z":"9fc0f809.f00518","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":240,"wires":[[]]},{"id":"b51f2c57b46cfdf3","type":"switch","z":"9fc0f809.f00518","name":"","property":"payload","propertyType":"msg","rules":[{"t":"false"},{"t":"true"}],"checkall":"true","repair":false,"outputs":2,"x":610,"y":160,"wires":[["a824c7b1042d8991"],["269d4a791ea63c01"]]},{"id":"a824c7b1042d8991","type":"debug","z":"9fc0f809.f00518","name":"Zielladen nicht aktiv","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":900,"y":80,"wires":[]},{"id":"832e19233b7c6bdf","type":"buffer-maker","z":"9fc0f809.f00518","name":"","specification":"spec","specificationType":"ui","items":[{"name":"float","type":"floatle","length":1,"dataType":"msg","data":"payload"}],"swap1":"swap16","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","x":870,"y":240,"wires":[["a5e2af6ad2457e4a"]]},{"id":"a5e2af6ad2457e4a","type":"buffer-parser","z":"9fc0f809.f00518","name":"","data":"payload","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"uint16be","name":"data","offset":0,"length":2,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"value","resultTypeType":"return","multipleResult":true,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":490,"y":340,"wires":[["67062c1ccec57ec9"]]},{"id":"67062c1ccec57ec9","type":"modbus-write","z":"9fc0f809.f00518","name":"1034 (Ent-/Ladeleistung)","showStatusActivities":false,"showErrors":true,"showWarnings":true,"unitid":"71","dataType":"MHoldingRegisters","adr":"1034","quantity":"2","server":"a1b432331279e425","emptyMsgOnFail":false,"keepMsgProperties":false,"delayOnStart":false,"startDelayTime":"","x":810,"y":360,"wires":[["85bf2b359a49c492"],[]]},{"id":"85bf2b359a49c492","type":"debug","z":"9fc0f809.f00518","name":"Zielladen aktiv","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1020,"y":320,"wires":[]},{"id":"f93eebac120801dc","type":"debug","z":"9fc0f809.f00518","name":"error","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":530,"y":40,"wires":[]},{"id":"035fe24f0538dc43","type":"mqtt in","z":"9fc0f809.f00518","name":"","topic":"evcc/loadpoints/1/planActive","qos":"2","datatype":"auto-detect","broker":"d6c82b6abc04c385","nl":false,"rap":true,"rh":0,"inputs":0,"x":280,"y":160,"wires":[["b51f2c57b46cfdf3"]]},{"id":"269d4a791ea63c01","type":"api-current-state","z":"9fc0f809.f00518","name":"","server":"8161678f.30be58","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.scb_battery_soc","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":480,"y":240,"wires":[["adeebeb74855588a"]]},{"id":"adeebeb74855588a","type":"switch","z":"9fc0f809.f00518","name":"","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"50","vt":"str"},{"t":"lt","v":"50","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":830,"y":140,"wires":[["b32a4111c8bebdbe"],["832e19233b7c6bdf"]]},{"id":"b32a4111c8bebdbe","type":"debug","z":"9fc0f809.f00518","name":"battery SoC > 50%","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1160,"y":160,"wires":[]},{"id":"a1b432331279e425","type":"modbus-client","name":"Kostal Plenticore","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"queueLogEnabled":false,"failureLogEnabled":false,"tcpHost":"192.168.188.109","tcpPort":"1502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","serialAsciiResponseStartDelimiter":"0x3A","unit_id":"71","commandDelay":"5","clientTimeout":"1000","reconnectOnTimeout":true,"reconnectTimeout":"2000","parallelUnitIdsAllowed":false},{"id":"d6c82b6abc04c385","type":"mqtt-broker","name":"","broker":"192.168.188.15","port":"1884","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"8161678f.30be58","type":"server","name":"Home Assistant","addon":true}]

You should be able to import this in node red and adapt for your needs

1 Like

Ok, i’ve got the discharging to work for Kostal Plenticore Plus 10 with BYD HVM 13.8. It requires this script to be run every 59 seconds for discharge otherwise it resets to Kostal default.

This is not the problem im facing though.

Now, according to Plenticore if i want to charge i should just write negative value, but it wont accept it.

What am i doing wrong?

Example script that i’ve run just now that shows forcing battery to discharge works.

You have to have the setting for Battery control set to External via protocol (Modbus TCP)

Plenticore10 admin interface shows correct data.

Settings → Automations and scripts → Scripts

alias: PC10-BYDHVM discharge
sequence:
  - service: modbus.write_register
    data:
      hub: PLENTICORE10
      address: 1034
      value: 3500
      slave: 71
mode: single
icon: mdi:battery-minus-variant

(for this to work you also have to have your “PLENTICORE10” configured in configuration.yaml)

modbus:
  - name: "PLENTICORE10" 
    type: tcp
    host: [put here the ip address of your inverter]
    port: 1502

I’ve resolved this.

1 Like

Hi,

I am also looking for a possibility to disable battery discharging (to avoid battery discharge while charging my car).

I am getting the status of the battery_min_soc via modbus, but the modbus.write service is not able to change the value.
I am remembering (but only from somewhere) that changing this parameter via modbus will not function based on the technical implementation of modbus by Kostal.

The plenticore integration shows a number.scb_battery_min_soc, but HA is writing in yellow - Diese Entität ist nicht verfügbar -

Anyway I don’t know how to change this “number”-stuff, sorry I am pretty new.
Just on the way to migrate from iobroker to HA.

But as example the iobroker plenticore adapter is able to change the battery_min_soc!

Therefore technically it should be possible…

Any help or ideas?

Regards,

Gerhard

sorry, sorry…

for any reason, I don’t know why: this entity number.scb_battery_min_soc was deactivated.
Just activated - and now it is avaible and changes are functioning via action the the automation.

Sorry and regards

Gerhard

Just came here via google. Is the a simple way to force the battery to load as in “Service Menu”, “Battery Settings”, scroll down “Start loading Battery to 100%”?

This option is only visible via the installer account. The plant owner can´t see it.