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
Ankündigung
Einklappen
Keine Ankündigung bisher.
Kostal Plenticore WR per MODBUS TCP LBS auslesen
Einklappen
X
-
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
)
- Likes 1
Einen Kommentar schreiben:
- Eingänge sollten selbsterkärend sein: in Trigger (z.B. minütlich), dazu die IP.
-
Teaser (noch nicht alle Werte verknüpft, aber so ist der aktuelle Plan):
Bildschirmfoto 2020-12-30 um 11.46.46.pngAngehängte Dateien
Einen Kommentar schreiben:
-
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
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 %
- Likes 1
Einen Kommentar schreiben:
-
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($modbusID, 100, 80);
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($modbusID, 252, 26);
echo "Aktueller Wert Powermeter: ".roundFloat($recData,252-252)."W<br>";
$recData = $modbus->readMultipleRegisters($modbusID, 320, 8);
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:
-
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:
-
Du musst den von mir modifizierten LBS und die neue Library nehmen.Zitat von fehling Beitrag anzeigenWie kann ich den ModBus TCP Master Read LBS mehrfach betreiben, wenn die Ports unterschiedlich sind?
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:
-
Hallo,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.
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:
-
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:
-
???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:
-
Was möchtest du denn noch verrechnen? Die Werte können, da ohne Skalierungsfaktor, direkt weiter verwendet werden😉Wie verrechnest du den ausgelesenen Werte? Z.B. 108 oder 116.
Einen Kommentar schreiben:
-
Moin,
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.Zitat von fehling Beitrag anzeigenE12: Function to use (Currently only FC3 Read_Multiple_Registers is implemented) --> was ist das? hier habe ich nichts verändert.
Gruß
Torsten
Einen Kommentar schreiben:
-
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:
-
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
- Likes 1
Einen Kommentar schreiben:
-
Kurzes Update:
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.Da könnte man sicherlich sehen, woran es hakt
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:


Einen Kommentar schreiben: