[Modul] SMA Wechselrichter (ModBus)

Ich antworte mir mal selbst: :wink:
Die aktuell erzeugte Leistung von den Solarpanels kann über die ID 30775 ausgelesen werden.

Fehlt eigentlich nur noch die aktuell im Haus verbrauchte Leistung.
Gibt es hierzu auch eine passende Modbus Registeradresse, oder muss dafür der Home Manager angezapft werden? Weiß das jemand?

Gruß Torsten

Das würde mich auch interessieren :).

Wollte meine IPSStudio GUI noch mal neu machen bzw. erweitern und würde gerne eine Animation für die PV machen - da wäre dieser Wert interessant.

hi ich lese den wechselrichter direkt über modbus aus
bei Register
30775 Aktuelle PV-Einspeisewirkleistung über alle Außenleiter, in W
2 S32 FIX0 RO

früher hatte ich das Modul von codeking
nun habe ich aber ein Problem, und zwar zeigt der Wert wenn keine Sonne da auf 0 geht
aber nur kurz dann bring der WR einen Wert von -2147483648 was unterer anschlag der Integer entspricht
ist für die Anzeige selber nicht tragisch aber für den Trend halt blöd da man den Verlauf am Tage wegen der Skalierung nicht wirklich sehen kann
Frage kann ich der variable irgendwie mitgeben das werte unter 0 nicht sinnvoll sind
oder eben wenn ips auf der Variabe den Wert bekommt ne 0 logt
oder dem Trend sagen das er eine fixe Skalierung nehmen soll
ich habe noch nicht wirklich eine Lösung für das Problem

Das Problem besteht auch bei den anderen Leistungswerten.
Ich nutze hier ein Skript, das die Modbus Variablen ausließt und nur Werte >= 0 in eine extra Variable schreibt, die dann geloggt wird. Begrenzt wird der Wert mit:

$PVerzeugt_W = ($PVerzeugt_W > 0) ? $PVerzeugt_W : 0;

benötigt zwar die doppelte Anzahl an Variablen, andere Idee habe ich da aber auch noch nicht gefunden.

Gruß
Rainer

Das ist eine interessante Idee.

Vielleicht lässt sich damit auch ein weiteres Phänomen lösen das mich momentan beschäftigt:
Nicht alle Modus Variablen, die ich angelegt habe, werden automatisch alle 5 Sekunden aktualisiert. Ich rätsele derzeit noch, woran das liegen könnte?!?

Möglicherweise klappt es besser, wenn ich ein eigenes Skript benutze, um alle Modbus Variablen auszulesen? Magst Du vielleicht Dein Skript (oder Teile daraus) hier posten?

Besten Dank im Voraus.

So mache ich es notgedrungen auch. Der Wert -2147483648 steht bei SMA für „NaN“ (not a number).

Perfekt wäre, wenn man in der Instanz den Wert ignorieren lassen könnte.

@paresy: siehst du da eine Möglichkeit?

dafür könnte ich mich auch begeistern. Wenn das möglich ist, dann vielleicht auch ein oberes Limit. Ich kann jetzt nicht genau sagen warum, habe bei aber auch noch einen Max-Wert, der nicht überschritten werden soll.

Für @TorstenS vielleicht noch zur Erklärung: Das Skript liest nicht die Werte über ModBus, sondern nur die Variablen der ModBus Devices. aber ich habe im Gateway dann unter Expertenoptionen Datenblöcke angelegt mit den Adressen, die als Block hintereinander liegen. Somit werden z.B. die Leistungswerte alle zur selben Zeit abgefragt.
Ich habe da aber auch schon gesehen, dass wenn sich Werte hier wohl nicht ändern, mal eine Variable auch keine Aktualisierung erhält.

Ah, OK.
Besten Dank für den Tipp, werde ich auch mal probieren.

das fände ich auch gut :+1:

Ich klinke mich auch mal wieder ein - ich habe eine Frage bezüglich dem Wert 30775, ist das nicht eher die Lade-/Entladeleistung der Batterie? Das wäre ja dann nicht die Leistung die vom Dach kommt (z.B. wenn Batterie fast voll ist, dann lädt es bei mir nur noch mit 1kw Weiter, der Rest geht dann ins Netz - weiterhin ist der Verbrauch vom Haus nicht mit drin).

Habt ihr raus bekommen, welche Modbus Adresse für die aktuelle PV Leistung ist und auch wie schon angefragt für den Verbrauch im Haus?

Experimente gerade mlt dem aktuellen IPSViewDesigner rum:

Die Bilder und Schriftfarben basieren auf den Variablen und sind entsprechend Grün oder Rot. Jedoch wie man sieht, fehlen noch die Werte für den Verbrauch im Haus und für das was gerade aus der PV kommt - die Variable für Verbrauch heute errechne ich noch gerade und die Variable ist nur ein Platzhalter.

Hallo @pleibling,

das Modbus Register 30775 lasse ich alle 5 sek. auf meinen beiden Wechselrichtern (Sunny Boy und Sunny TriPower) ermitteln. Wenn ich beide Werte zusammenrechne, dann komme ich exakt auf die Leistung, die zur selben Zeit auch im Sunny Portal als die abgegebene Leistung von den PV-Modulen angezeigt wird. Passt also. :+1:
Das Einzige, was beachtet werden muss, ist die Umrechnung von @erpe (siehe weiter oben), damit abends „0“ anstatt negativer Werte angezeigt werden.

Die Lade-/Entladeleistung der Batterie ermittle ich auf dem Sunny Boy Storage über die Modbus Register 31393 (Ladeleistung) bzw. 31395 (Entladeleistung).

Übrigens, den momentanen Stromverbrauch (das war ja noch eine meiner offenen Fragen) ermittle ich nicht über ein Modbus Register, da steht der nicht drin.
Wie ich mittlerweile herausgefunden haben, kann man den ja ganz einfach selbst errechnen (ich bin manchmal halt ein Depp und sehe den Wald vor lauter Bäumen nicht… :see_no_evil:):

→ momentaner Stromverbrauch = Einspeisung von Dach + Entladeleistung der Batterie + Netzbezug - Netzeinspeisung

@erpe: Vielen Dank noch für den Hinweis mit den Datenblöcken im Expertenmodus. Seitdem ich die dort definiert habe, kommen bei mir alle Daten zuverlässig an. :smiley:

1 „Gefällt mir“

@pleibling
Dein IPSView Experiment sieht übrigens auch prima aus.
Magst Du die fertige View hier vielleicht teilen? Dann müsste ich das Rad für mich nicht komplett neu erfinden… :wink:

Cool. Werde ich mir am Wochenende anschauen. Wenn alles fertig ist, teile ich das. Weißt du wie man das macht?

Kann man das irgendwie einfach exportieren mit allen Bildern?

kann mir kurz jemand helfen
ich möchte die Variable 34300 in die Variable 52325 schreiben aber nur wenn > -20
sonst soll in Variable 52325 -20 stehen
aber irgendwas mach ich noch falsch

?php

//Dokumentation: https://www.symcon.de/service/dokumentation/konzepte/skripte/aktionsskripte/
$WertIn = GetValue(34300); // Wert aus Variable1 auslesen

if GetValue($WertIn) > -20
{$WertOut = $WertIn;}
else
{$WertOut = -20;}
endif

SetValueInteger(52325, $WertOut);

?>

ist die Modbus-Adresse denn überhaupt schreibfähig ? Ansonsten musst du sie umwandeln.

also ich kann mich drehen und wenden wie ich will, ich komme nicht an die Lade-/Entladewerte von meinem Tripower10

			31393 => [
                'name' => 'Battery Load',
                'count' => 1,
                'type' => 'U32',
                'format' => 'FIX0',
                'profile' => 'kW.Fixed',
                'archive' => 1 // archive: counter
            ],
			31395 => [
                'name' => 'Battery UnLoad',
                'count' => 1,
                'type' => 'U32',
                'format' => 'FIX0',
                'profile' => 'kW.Fixed',
                'archive' => 1 // archive: counter

das kann ich überhaupt nicht auslesen :thinking:

so nun noch etwas abgeändert
es motzt aber in linie 6 sei die variable nicht definert (das wäre die line: if (GetValue($WertIn) > -20))

<?php //Dokumentation: https://www.symcon.de/service/dokumentation/konzepte/skripte/aktionsskripte/ $WertIn = GetValue(34300); // Wert aus Variable auslesen if (GetValue($WertIn) > -20) {$WertOut = $WertIn;} else {$WertOut = -20;} SetValueInteger(48759, $WertOut); ?>

kannst du die Skripte mal bitte in Code-Tags setzen, dann kann man sie besser lesen

hi wie mach ich das?
im übrigen ich glaub ich habs nun

<?php

//Dokumentation: https://www.symcon.de/service/dokumentation/konzepte/skripte/aktionsskripte/
$WertIn = GetValueInteger(34300);  // Wert aus Variable auslesen

if ($WertIn > -20)
    {$WertOut = $WertIn;}
else
    {$WertOut = -20;}

SetValueInteger(48759, $WertOut);

?>

das bedeutet aber nicht, das die geschriebene Variable im Wechselrichter ankommt

ich muss heut abend schauen ob der alles unter -20 = -20 funktioniert
Aber das skript meldet keinen fehler mehr