Kostal Plenticore per Modbus TCP mit CMI von Technische Alternative verbinden

  • Hallo zusammen,


    im Folgenden möchte ich eine Lösung für diese Aufgabe präsentieren: Werte aus einem Kostal Plenticore plus Wechselrichter mit dem CMI (Control and Monitoring Interface) der Firma Technische Alternative auslesen, zum Loggen, Anzeigen und Auswerten der PV-Daten. Auch die Steuerung einer Wärmepumpe oder eines Heizstabes je nach verfügbarer PV-Leistung wären hierüber möglich.


    Problem: Kostal ModbusTCP auf Port 1502, CMI auf Port 502, beide nicht veränderbar. :roll:


    Lösung: Netzwerkinterne Portumleitung mit SSH von Port 502 auf Port 1502.


    Eine Beschreibung der Datenpunkte, die ausgelesen werden können, findet man bei Kostal im Downloadbereich, das Dokument heißt "PIKO IQ / PLENTICORE plus - Interface description - KOSTAL MODBUS (TCP) & SunSpec" bzw. "ba_kostal_interface_modbus-tcp_sunspec.pdf":

    https://www.kostal-solar-elect…ce_modbus-tcp_sunspec.pdf


    Leider wird zur Portumleitung eine weiteres Gerät im Netzwerk benötigt. Das kann ein Linux-Rechner sein, ein RasperryPI müsste hierfür in jeder Version völlig ausreichend sein. Getestet auf einem Laptop unter Linux Mint 19.2 Cinnamon. Ein sowieso vorhandenes NAS mit Linux würde sich auch anbieten.


    Befehl für Portweiterleitung im Terminal unter Linux (SSH-Server muss installiert sein!):

    sudo ssh BENUTZERNAME@localhost -L *:502:IP-Adresse-Plenticore:1502

    BENUTZERNAME ist der Name eines Benutzers auf dem Linux-Rechner, vorzugsweise der, der gerade angemeldet ist.

    IP-Adresse-Plenticore ist die IP-Adresse des Plenticore Wechselrichters.

    Einen SSH-Server installiert man z.B. mit diesem Befehl: sudo apt-get install openssh-server

    (Ganz wichtig ist das Sternchen vor dem ersten Doppelpunkt, denn damit wird der SSH-Tunnel auch für andere Geräte im Netzwerk (hier das CMI) sichtbar.)


    Einstellungen im CMI unter Einstellungen->Eingänge->Mobus Master->Analog:

    IP: IP-Adresse des Rechners, auf dem der obige SSH-Befehl eingegeben wurde. (NICHT Adresse des Wechselrichters!)

    Gerät: 71 (sofern die Unit-ID im Plenticore nicht verändert wurde)

    Funktion: 03-read holding register

    Adresse: Siehe Dokument von Kostal zum Modbus-Protokoll. Für eingespeiste Leistung z.B. 172.

    Datentyp: Je nach oben gewählter Adresse, bei Leistung meist 32-bit floating point.

    Byte-Reihenfolge: BE word-swapped (zumindest bei 32-bit float Werten)

    Intervall: Nach Bedarf einstellen, z.B. 10s.

    Timeout: Nach Bedarf einstellen, z.B. 5 min.

    Eingangswert: Bei funktionierender Verbindung wird hier ein Wert angezeigt, der allerdings mit dem tatsächlichen Wert nicht viel zu tun hat. Der richtige Wert wird ganz unten unter "aktueller Wert" angezeigt. Nicht verwirren lassen!

    Faktor: 1 (Wenn es keinen guten Grund gibt hier etwas anderes einzutragen.)

    Einheit: Wie im Dokument von Kostal beschrieben, bei Leistung also "Leistung W".

    Wert bei Timeout: Nach Bedarf einstellen, z.B. "Benutzerdefiniert".

    Ausgabewert: Nach Bedarf einstellen, z.B. 0 (wird nur bei Timeout ausgegeben).

    aktueller Wert: S.o., tatsächlich empfangener Wert. Wird erst nach einiger Wartezeit und Neuaufrufen der Seite für diesen Eingangswert angezeigt. Vor dem Neuaufrufen auf "Speichern" drücken!


    Der SSH-Server leitet damit die Anfrage vom CMI auf Port 502 an den Wechselrichter auf Port 1502 weiter und die Antwort auf umgekehrtem Wege zurück zum CMI. Modbus TCP / Sunspec muss im Wechselrichter natürlich aktiviert sein.

    Der Linux-Rechner mit dem SSH-Server muss im Netzwerk den Wechselrichter auf Port 1502 sehen können und vom CMI auf Port 502 gesehen werden. Die Ports dürfen nicht von irgendeiner Firewall geblockt sein. Wenn alle Geräte in einem Netzwerk, z.B. hinter einer Fritzbox sind, sollte das kein Problem sein.


    Die Werte im CMI können dann als Ausgänge wieder auf den CAN-Bus gegeben und dort z.B. in einer UVR16x2 verarbeitet werden.


    Der SSH-Befehl oben sollte vorzugsweise noch beim Start des Rechners automatisch ausgeführt werden, vielleicht kann ja noch jemand ergänzen, wie man das z.B. auf einem RasperryPI einrichten würde.

    Ganz toll wäre natürlich, wenn die Fritzbox die Portumleitung erledigen würde, dazu müsste man auf der Fritzbox den SSH-Server installieren (was gehen sollte) oder vielleicht in der Routingtabelle eine interne Portumleitung eintragen, Stichwort ar7.cfg. Ob das klappt kann ich aber nicht sagen, vielleicht hat ja jemand Lust das auszuprobieren.

    Noch toller wäre, wenn TA oder Kostal den Port für Modbus einstellbar machen würden, der Support von TA hat das aber leider schon abgelehnt, Anfrage an Kostal läuft. Das zusätzliche Gerät verursacht natürlich einen zusätzlichen Stromverbrauch und damit eigentlich völlig sinnlos zusätzlichen CO2-Ausstoß...


    Die hier beschriebene Vorgehensweise klappt vermutlich auch mit dem Kostal Piko IQ.


    Viel Erfolg!


    P.S.: Vielen Dank an die Kollegen und Mitarbeiter vom Fachbereich Elektrotechnik und Informatik der FH Münster, die mir bei der Lösung geholfen haben! :danke: