SolarEdge Inverter,Mod-Bus Zähler u.Batterie - verschiedene Daten Typen auslesen

Begonnen von cocojambo, 23 Juli 2018, 17:01:27

Vorheriges Thema - Nächstes Thema

cocojambo

Ich habe einen Solaredge Wave SE5000H Inverter, 2 Mod-Bus Zähler und eine LG RESU 10kw Batterie bei mir installiert.
Ich habe mir alle Beiträge im Forum und auch bei Wiki durchgelesen und danach auch einige Werte auslesen können.
Das Problem:
Die Werte der einzelnen Adressen müßen alle verschieden ausgelesen werden und dann teilweise mit Hilfe eines Scale-Faktor in "wirkliche" Werte umgerechnet werden.
Dabei bin ich auf String[32], Unit16, Unit32, Unit64, Float32, Uint, Uint16[8] Daten-Typen im Sunspec-Protokoll gestossen.
Leider weiß ich nicht wie diese verschiedenen Werte erst mal überhaupt auszulesen sind, geschweige denn wie sie umgewandelt werden können.
Kann mir irgendjemand sagen, wo ich Muster Configs oder eine verständliche Erklärung zum Auslesen und zur Verarbeitung dieser Daten finde? oder vielleicht mal mal einer seine Definitionen hier einstellen, damit ich mir diese mal unverbindlich ansehen kann?

Gruß aus Köln
Norbert
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

StefanStrobel

Hallo Norbert,

die Kodierung der Typen wirst Du ausprobieren müssen.
Da gibt es mehrere Varianten.
Für eine 32Bit Float kannst Du verschiedene unpack codes testen, z.B. F< oder f> und in beiden Fällen kann die Register- oder Byte-Reihenfolge verschieden sein. Dafür gibt es die Attribute -revRegs und -bswapRegs.
Erläuterungen findest Du im Wiki oder in den alten Posts im Forum.

Gruß
   Stefan

cocojambo

Hallo Stefan,
ich habe jetzt stundenlang alle Kombinationen probiert, aber es kommen sämtliche Werte von 4 - 30 Stellen positiv und negativ und mit und ohne ettlichen Kommastellen heraus, die auch bei jeder Abfrage weit von gut und böse liegen oder sich garnicht ändern.
In der Erläuterung zu den Batterie Abfragen habe ich folgenden anderen Hinweis gefunden. Ich zitiere hier den Hinweis wörtlich aus einem anderen Board:

ZitatDie Werte müssen mit 3(read Holding Register 4x) und "32-Bit unsigned" + Haken bei "2 Register für 32-Bit" ausgelesen werden. Bei Float32-Werten demensprechend "32-Bit Floating-Point".

Kann man damit etwas anfangen? um weiter zu kommen?

Gruß aus Köln
Norbert
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

StefanStrobel

Hallo,

Bist Du sicher, dass Du die richtigen Registeradresssen verwendest?
Hast Du mal +1 und -1 bei den Adressen getestet?
Wie sieht denn Deine Komfiguration genau aus?
Hast Du den Thread zum SolarEdge10k gelesen? Hat Dein Inverter wirklich eine andere Register-Belegung?

Gruß
   Stefan

cocojambo

Hallo,

danke für deine so späte Antwort (21:38 Uhr)

ich habe ja einige Adressen die mit Uinit64 angegeben sind die ich auch auslesen kann und die Werte stimmen und ändern sich auch.
Ich werde aber mal morgen die Adressen +1 und -1 auslesen und sehen was dort rauskommt.
Den Thread zu SolarEdge 10K habe ich gelesen und auch die Adressen übernommen. Das funktioniert auch. Da gibt es aber keine Float32 Werte, sonst hätte ich das ganz gut übernehmen können.
Meine Config werde morgen mal hier reinstellen, damit du und auch andere einen Blick drauf werfen können.

Bis dahin........gute Nacht
Gruß
Norbert
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

StefanStrobel

Hallo Norbert,

ich habe gerade gesehen, dass in meinem ersten Post ein Tippfehler war. Die relevanten Unpack codes sind natürlich "f" und "f>", eher kein "F". Siehe http://perldoc.perl.org/functions/pack.html. Beides mal mit und ohne revRegs.

Wenn Du nicht weiter kommst, wäre auch ein Log-Auszug mit verbose 5 hilfreich, bei dem ich auch die rohe Hex-Darstellung der Übertragung sehe.

Gruss
   Stefan

cocojambo

Hallo Stefan,

ich habe mir den Link mit der Perl pack Dokumentation angesehen und auch die Hex Werte mit verbose5.
Nachdem ich dann ein bischen rumprobiert habe hatte ich eingermassen vernünftige Werte. Ich habe es mit nur"unpack f" ohne ">" mit "bswapRegs 1" und mit "len 2" dann zum laufen bekommen. Mit zwei Adressen habe ich es probiert und so sieht jetzt das Ergebniss aus:

attr SolarEdge obj-h57708-len 2
attr SolarEdge obj-h57708-reading durch.Batterie Temperatur_57708
attr SolarEdge obj-h57708-bswapRegs 1
attr SolarEdge obj-h57708-expr {sprintf("%.2f",$val)}
attr SolarEdge obj-h57708-unpack f
attr SolarEdge obj-h57712-len 2
attr SolarEdge obj-h57712-reading Batterie Spannung_57712
attr SolarEdge obj-h57712-bswapRegs 1
attr SolarEdge obj-h57712-unpack f
attr SolarEdge obj-h57712-expr {sprintf("%.2f",$val)}


Durchschnitts Temeratur und Spannung der Batterie kommen so schon hin. Im LOg sieht man dann das:

2018-07-26 16:40:28   durch.Batterie Temperatur_57708 26.60
2018-07-26 16:40:29   Batterie Spannung_57712 424.90


Da kann man ja mit arbeiten. Jetzt werde ich auch alle anderen Werte nach diesem Schema auslesen.
Ohne deine Hilfe und deine tollen Tips hätte ich mich wahrscheinlich "tot" gesucht. Wenn ich trotzdem noch eine Frage habe, melde ich mich noch mal.

Eine Frage noch: Was bewirkt eigendlich das ">" hinter dem "f" oder auch dem "s"

Gruß aus Köln
Norbert
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

StefanStrobel

Schön dass es jetzt klappt.

aus der Pack-Referenz (http://perldoc.perl.org/functions/pack.html):

        >   sSiIlLqQ   Force big-endian byte-order on the type.
                jJfFdDpP   (The "big end" touches the construct.)
        <   sSiIlLqQ   Force little-endian byte-order on the type.
                jJfFdDpP   (The "little end" touches the construct.)

es geht also um die Reihenfolge der Bytes :-)

Leider macht da fast jeder Hersteller etwas anderes und man muss es ausprobieren.

Gruss
   Stefan