Ankündigung

Einklappen
Keine Ankündigung bisher.

Kostal Plenticore WR per MODBUS TCP LBS auslesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • bluegaspode
    antwortet
    Ach was soll der Geiz - das Downloadportal ist ja super einfach im Upload:
    Habe die Version jetzt doch schon direkt veröffentlicht:
    https://service.knx-user-forum.de/?c...ad&id=19002360

    Einen Kommentar schreiben:


  • bluegaspode
    antwortet
    OK - hier ist eine erste Version:

    Erstmal noch auf Github fürs schnelle manuelle installieren: https://github.com/bluegaspode/edomi...main/19002360_

    Ich schreibe später noch etwas Doku und räume auch noch Code auf, da ist noch einiges wild aus anderen Plugins reinkopiert.
    Wenn ich zufrieden bin und erstes Feedback habe, dass es auch bei anderen funktioniert, mache ich dann einen offiziellen Download draus.

    Wenn ihr den Baustein installiert, seht ihr die Ausgänge wie im Screenshot oben.
    • Eingänge sollten selbsterkärend sein: in Trigger (z.B. minütlich), dazu die IP.
      Auf LogLevel 8 wird derzeit sehr viel geloggt, sonst nicht.
    • Inverter Status Text ist noch nicht verknüpft, das Mapping muss ich noch ergänzen. Die Statuscodes sind in der Kostal Doku auf Seite 12 (https://www.photovoltaikforum.com/co...p-sunspec-pdf/)
    • Logging auf Level 8 schreibt euch alle Felder ins Log, damit erspart ihr euch das initiale Verknüpfen mit Ausgangsboxen, um erstmal ein Gefühl für die Daten zu bekommen.
      ACHTUNG: wenn ihr den Baustein jede Minute aufruft, kommen da ganz schnell sehr große Logs bei raus - also später unbedingt wieder ein niedrigeres Log-Level!

    Grüße
    und viel Spaß (hier ist gerade sehr schönes Wintersonnenwetter )

    Einen Kommentar schreiben:


  • bluegaspode
    antwortet
    Teaser (noch nicht alle Werte verknüpft, aber so ist der aktuelle Plan):

    Bildschirmfoto 2020-12-30 um 11.46.46.png
    Angehängte Dateien

    Einen Kommentar schreiben:


  • bluegaspode
    antwortet
    Ja - bin schon recht weit, habe gestern in der Nacht noch etwas durchgezogen
    Mache das ähnlich wie im Beispiel - 100 Werte holen und dann die richtigen rauspicken.

    Bin gerade schon am Formatieren der Ausgangswerte (und festlegen, welche alle in welcher Reihenfolge angeboten werden).

    Bei zwei Feldern bin ich noch unsicher:
    die Weboberfläche zeigt:
    - die Leistung des Inverters
    - den Grid Feed-In

    Ich weiß noch nicht auf welche Felder das mappt (oder ob der zweite nur berechnet ist).
    Zur Verfügung stehen in der Doku:
    • 172 Total AC active power Float
    • 575 Inverter Generation Power (actual) W S16
    und ich weiß noch nicht, welches ich nehme.

    Bei der Batterie weiß ich auch noch nicht, welche Werte ich nehmen soll / welche wichtig sind.
    Aktuell gucke ich auf
    • 582 Actual battery charge/discharge power W S16
    • 210 Act. state of charge %

    Einen Kommentar schreiben:


  • philipp900
    antwortet
    Vielleicht hilft dir das auch noch weiter.
    Habe ich mal auf die Schnelle gemacht:

    PHP-Code:
    <?php
    $host 
    "192.168.x.x";
    $port "1502";
    $modbusID "71";

    require_once(
    "/usr/local/edomi/main/include/php/Phpmodbus/ModbusMaster.php");
    set_time_limit(10);

    date_default_timezone_set('Europe/Berlin');

    $modbus = new ModbusMaster($host"TCP"$port);

    $recData $modbus->readMultipleRegisters($modbusID10080);

    echo 
    "Aktuelle Ertrag: ".roundFloat($recData,100-100)."W<br>";
    echo 
    "Aktueller Verbrauch aus Netz: ".roundFloat($recData,108-100)."W<br>";
    echo 
    "Aktueller Verbrauch aus PV: ".roundFloat($recData,116-100)."W<br>";

    $recData $modbus->readMultipleRegisters($modbusID25226);
    echo 
    "Aktueller Wert Powermeter: ".roundFloat($recData,252-252)."W<br>";

    $recData $modbus->readMultipleRegisters($modbusID3208);
    echo 
    "Tagesertrag: ".roundFloat($recData,322-320)."Wh<br>";

    $request = array(
    array(
    108,2,2),
    array(
    116,2,2),
    array(
    252,2,2),
    array(
    322,2,2));

    unset(
    $modbus);

    function 
    roundFloat($array$index) {
    return 
    round(getfloat($array$index));
    }

    function 
    getfloat($array$index) {
    return 
    real2float(($array[2*$index+2]<<24) | ($array[2*$index+3]<<16) | ($array[2*$index]<<8) | $array[2*$index+1]);
    }

    function 
    real2float($value) {
    // get unsigned long
    $ulong pack("L"$value);
    // set float
    $float unpack("f"$ulong);

    return 
    $float[1];
    }
    ?>

    Einen Kommentar schreiben:


  • bluegaspode
    antwortet
    Ich habe seit ein paar Tagen auch den Kostal Plenticore.
    Werde mal gucken, ob ich ein dedizierten Logikbaustein schreibe, der alle Werte ordentlich zur Verfügung stellt. Mit einzelnen Bausteinen die immer nur 4 Werte auslesen können ist mir das viel zu aufwändig in der Pflege

    Drückt die Daumen ... (und danke für die Vorarbeit / Recherce... das erleichtert einiges!)

    Einen Kommentar schreiben:


  • philipp900
    antwortet
    Zitat von fehling Beitrag anzeigen
    Wie kann ich den ModBus TCP Master Read LBS mehrfach betreiben, wenn die Ports unterschiedlich sind?
    Du musst den von mir modifizierten LBS und die neue Library nehmen.
    Damit kann man den Port am LBS angeben und mehrfach mit verschiedenen Ports verwenden.
    Ich habe den Autor bereits informiert, dass er den LBS im Downloadbereich updaten soll.
    Bis dahin kannst du die Version von meiner Dropbox verwenden.

    Einen Kommentar schreiben:


  • fehling
    antwortet
    Wie kann ich so mehrere ModBus LBSe parallel betreiben?

    Hätte da auch noch eine Wärmepumpe, aus der ich per Modbus Daten ziehen will. Und die hat wiederum einen anderen Port.
    Hallo,
    nachdem das Auslesen eines Kostal Plexicore WR problemlos klappt (nach Änderung des Ports in der PHP), würde ich gerne die Wärmepumpe per ModBus auslesen/ggf. Werte schreiben.

    Wie kann ich den ModBus TCP Master Read LBS mehrfach betreiben, wenn die Ports unterschiedlich sind?

    Gruß,
    F.

    Einen Kommentar schreiben:


  • philipp900
    antwortet
    Das sind eigentlich alles float Werte. Die vielen Stellen können höchstens nach dem Komma sein.
    Hast du meine Version probiert?

    So sieht das bei mir aus. Alle Werte in W bzw. Wh.

    modbus.PNG

    Einen Kommentar schreiben:


  • fehling
    antwortet
    ohne Skalierungsfaktor
    ???

    Der WR gibt bsw. bei 108 "Home own consumption from grid W " einen 10- oder 11-stelligen Wert (weiß nicht mehr genau) zurück. Da mein Haus Strom nicht im Gigawattbereich verbraucht, nehme ich an diesen erst verrechnen/kürzen zu müssen.

    F.

    Einen Kommentar schreiben:


  • Torstenvoigt
    antwortet
    Wie verrechnest du den ausgelesenen Werte? Z.B. 108 oder 116.
    Was möchtest du denn noch verrechnen? Die Werte können, da ohne Skalierungsfaktor, direkt weiter verwendet werden😉

    Einen Kommentar schreiben:


  • Torstenvoigt
    antwortet
    Moin,

    Zitat von fehling Beitrag anzeigen
    E12: Function to use (Currently only FC3 Read_Multiple_Registers is implemented) --> was ist das? hier habe ich nichts verändert.
    Das ist der FunctionCode, damit bestimmst du im Prinzip, ob du ein Register lesen oder schreiben willst und ob es ein 16-Bit oder ein 1-Bit-Register ist. In dem LBS ist aber nur FC3 implementiert, also nur das Lesen von 16-Bit-Registern.

    Gruß
    Torsten

    Einen Kommentar schreiben:


  • fehling
    antwortet
    Hallo Philipp,

    schön, dass es dich hier weiter gebracht hat.

    Wie verrechnest du den ausgelesenen Werte? Z.B. 108 oder 116.

    Ich selbst habe hier, nachdem ich die Verbindung zustande gebracht habe, noch nicht weitergemacht.

    Gruß,
    F.

    Einen Kommentar schreiben:


  • philipp900
    antwortet
    Danke für deine Analyse.
    Damit war die Einbindung meines Wechselrichters recht unproblematisch.
    Ich habe auch gleich die Library und den LBS korrigiert, damit auch der Port angepasst und keine Fehler im Zusammenhang mit PHP7 ausgegeben werden.
    Library nach "/usr/local/edomi/main/include/php/Phpmodbus/" entpacken.
    https://www.dropbox.com/s/bbubmord3c...0Read.zip?dl=0

    E3 auf 1502
    E5 auf 71
    E9 auf die Adresse (dec) aus dem PDF von Kostal
    E10 muss auf den Wert in Spalte N, also 2 bei den meisten Werten gesetzt werden

    Einen Kommentar schreiben:


  • fehling
    antwortet
    Kurzes Update:

    Da könnte man sicherlich sehen, woran es hakt
    Im Logfile ist mir aufgefallen, dass ein Connection Error vorliegt und der ModBusReader-LBS sich über den Default-Port "502" verbinden wollte. Im LBS hatte ich aber "1502" gesetzt. Diese Variable wird aber wohl nicht in die ModbusMaster.PHP übernommen.

    Also dort direkt den Wert ersetzt. Seitdem tut's!

    Frage, die sich mir aber stellt:

    Wie kann ich so mehrere ModBus LBSe parallel betreiben? Hätte da auch noch eine Wärmepumpe, aus der ich per Modbus Daten ziehen will. Und die hat wiederum einen anderen Port.

    F.

    Einen Kommentar schreiben:

Lädt...
X