Ich habe Stunde, gar Tage damit verbracht meinen Wechselrichter auszulesen und Wert in openHAB zu bekommen. Einige User hier haben Tipps und Tricks zum Erfolg gegeben.
Angefangen an der Einstellung am Wechselrichter. Hier gibt es den Menüpunkt 485 Setting. Der Wert muss von Batterie auf VPP umgestellt werden.
(Meine Batterie wird über den CAN Anschluss am Wechselrichter angeschlossen, und so ist der 485 Port frei.)
Der Port ist ein RJ45 Anschluss, hier wird der PIN 4-5 benötigt. (hier gibt es unzählige aussagen im WWW zu finden, aber bei mir ist es definitiv 4+5)
Als Gateway habe ich ein RS232/485/422 TO POE ETH (B) waveshare genommen. Ich denke, das es auch ein günstiges Modell genommen werden kann.
Man muss sich erstmal mit dem Gateway verbinden, und die IP Adresse anpassen.
""" """
Danach konnte ich mit dem Befehl: (linux)
Code: Alles auswählen
mbpoll -a 1 -t 3 -c 125 -1 192.168.178.198
Dann gings weiter mit dem MODBUS Binding. -> Erstmal installieren.
Es wird so aufgebaut das man ein Thing erstellt:
Modbus zu tcp.
Das war relativ leicht, IP und Port vom Gateway, Id1. Rest habe ich so gelassen wie vorgegeben.
Dann ein zweites Thing, ein Poller der die Daten zieht.
Da kam ich schon im Grübel, musste lange suchen, gucken und fragen.
erstmal die Bridge einstellen, zu dem zuvor erstellten Modbus zu tcp Thing.
Pollintervall ist die Abfrage. In den Dokumenten vom Growatt habe ich etwas von Minimum 800 ms gelesen. Ich habe bei mir erstmal 3000 ms eingestellt. So ist die Abfrage alle 3 Sekunden. Ich denke das kann man je nach bedarf noch etwas optimieren. Ich Brauch den wert der Einspeisung relativ genau, damit ich damit meine E-Patrone Steuern kann....
Die ""Start"" Adresse ist für meine benötigten werte 1016.
Die "Length" habe ich erstmal mit 20 angegeben.
Das bedeutet: ich frage die Werte der addr 1016 -> 1035 ab.
( Für mich ist erstmal nur der die Addr 1022 und 1030 interessant. )
den Typ habe ich auch "input register" eingestellt.
Da die Anlage noch nicht Fertig ist, und auch einige Hardware aktuell nicht vorhanden ist, kann ich leider nur bedingt Punkte auslesen da vieles eine 0 enthält.
Nun muss man noch ein Modbus:Data thing erstellen.
Angefangen mit der Bridge, da wählt man das eben erstellte Polling Thing aus.
die Read Adresse, bei mir 1022 für den Aktuellen Bezug -> Energie zähler im Zählerschrank.
(Die Read Adresse muss in dem Bereich des Poll Things liegen also 1016 <->1035)
bei ""Read Value Type"" habe ich den Wert uint16 ausgewählt.
Den Rest habe ich so belassen.
Nach dem wir dies erstellt haben, können wir ein Channel auswählen: Value as Number
Dort dann noch in Number item erstellt. Schon kommen die ersten Werte.
Der dort angezeigte wert, muss noch durch 10 geteilt werden.
Hier habe ich dies so gelöst, das man unter Profile JS anwählt, ein Script auswählt wo folgendes enthalten ist:
Code: Alles auswählen
(function(i) {
return parseFloat(i) / 10
})(input)
Code: Alles auswählen
%.1f
Und dort sieht man dann im 3 sekunden takt eine änderung des aktuellen Stromverbrauchs. Zur Info: der wert kann nicht negativ werden, das bedeutet, das für die Einspeisung ein Thing:Data mit der Adresse 1030 erstellt werden muss...
Ich habe erstmal alles über die UI erstellt, aber hier werde ich es wohl mit den text datein lösen. Das ist glaube übersichtlicher.
Sicherlich sind hier viele fehler Enthalten, aber ich bin auch kein IT ler, versuche dennoch mein Weg zum Ziel zu erklären.
Eventuell kann man in den JS Script gleich ein "%.1f" mit einbauen...