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:

  • Hi df2qy,


    hat es seitens von Kostal noch eine Lösungsansatz oder weitere Infos zu dem Problem gegeben oder läuft die Kommunikation nun über die Portumleitung?


    LG

  • Hallo AngryHippo,


    bei mir läuft das inzwischen auf einem Raspberry Pi 1, der sich über ein kurzes USB-Kabel direkt aus der Fritzbox mit Strom versorgt und mit einem kurzen LAN-Kabel die Daten umleitet. Den Start der Portweiterleitung erledige ich nach einem Neustart immer noch händisch, das kommt aber nur selten vor.


    Von Kostal gab es leider auch keine weiteren Lösungsansätze.


    Bei der Weiterleitung der Daten vom CMI zu den anderen Geräten von TA über CAN ist mir noch aufgefallen, dass einige Werte nicht richtig übertragen werden. Nach Rücksprache mit TA habe ich herausgefunden, dass die Daten über CAN nur mit 16 Bit übertragen werden, sodass der Zahlenbereich begrenzt ist. Das Problem habe ich gelöst, indem ich die Werte im CMI erst runterskaliere (z.B. geteilt durch 10) und dann in der Steuerung wieder zurückskaliere (z.B. mal 10). Das Problem ist bei mir aufgetreten bei der Netzfrequenz und der Spannung an einem String, wenn sie über ca. 300 V liegt. Interessanterweise können im Simulator CAN-Werte eingegeben werden, die dann in der Praxis nicht gehen, daher war der Fehler nicht ganz so leicht zu finden.


    VG

  • Hallo zusammen,

    das Thema hat sich weitestgehend erledigt, weil man in der neusten Version der CMI Firmware von Technische Alternative den Modbus-Port einstellen kann. Die Einstellung ist unter "Ethernet" zu finden und gilt für alle Modbus-TCP-Eingänge. Um Daten vom Plenticore zu übernehmen muss man also nur noch den Modbus-Port auf 1502 umstellen und die Eingänge wie beschrieben konfigurieren. Als IP-Adresse muss dann natürlich die vom Plenticore eingegeben werden.


    Dass der Modbus-Port eine globale Einstellung ist, finde ich nicht so gelungen, es kann ja auch passieren, dass man nicht nur Daten mit einem Plenticore austauschen will. Der Port gehört zur IP-Adresse. Aber vielleicht kommt das ja in einer späteren Firmware-Version noch.


    Viele Grüße

    DF2QY

  • Hallo DF2QY,


    ich mache seit einigen Jahren einiges mit dem CMI, UVR16x2k, RSM610 und Verbindung zu Smartfox-Pro über Modbus TCP/IP, schalte in meinem Schema die PV-Überschuss-Verwertung für die 2 5-kW-Heizstäbe ein/aus. Weiters visualisiere ich im Schema alle Werte aus dem Smartfox Pro.

    Interessanterweise ist der Port 1502, welchen Kostal für den Plenticore benützt in der Standardliste nicht angeführt.

    Es ist offenbar ein freier Port. Warum die den Standardport 502 nicht verwenden, verstehe ich nicht.


    Bei der PV-Überschuss-Verwertung für Wärmepumpe oder Heizstab nützt dir aber primär die PV-Leistung nicht sehr viel, da brauchst du den Überschuss-Wert am Einspeisepunkt.


    https://de.wikipedia.org/wiki/…er_standardisierten_Ports


    502 TCP UDP asa-appl-proto, Protocol inoffiziell
    502 TCP UDP Modbus, Protocol inoffiziell


    LG



    Karl

  • Hallo Karl,


    stimmt, der Port 502 ist der Standardport für Modbus-TCP, der Port 1502 nicht. Laut Kostal können Sie den Port 502 nicht nehmen, weil darüber die Kommunikation mit dem Smart Energy Meter läuft. Das ist meiner Ansicht nach aber Quatsch, denn das Smart Energy Meter hat ja eine andere IP-Adresse, sodass sich das nicht stören würde, wenn der Plenticore den Modbus-Server auch auf 502 laufen lassen würde. Aber egal, in den meisten Fällen dürfte sich das Problem ja seit dem letzten Update fürs CMI erledigt haben.


    Den Überschuss bekomme ich übrigens auch aus dem Plenticore, denn er gibt auch die Daten weiter, die er sich vom Smart Energy Meter holt. Ich verwende derzeit aber nur die PV-Leistung, um die Rollos bei viel Sonne für eine Verschattung anzusteuern (Befehle werden per CAN-BC2 an KNX gesendet) und um möglichst viele Werte vom Haus in einem einzigen Anzeigesystem (dem CMI) zu haben.


    Viele Grüße

    DF2QY

  • Hallo Karl,


    ich habe den Smart Energy Meter von Kostal, ich glaube das ist der EM300, da bin ich mir aber nicht sicher. Der ist über RS485 an den Plenticore angeschlossen.


    Die Visualisierung mache ich über ein Schema mit mehreren Seiten, sowohl auf dem CMI als auch direkt auf der UVR16x2 . Allerdings ist das bei mir noch nicht ganz fertig, ich muss bei Gelegenheit noch mal aufräumen... ;-)


    Viele Grüße

    DF2QY

  • ...