Modbus TCP um einen Solaredege WR auszulesen

Hallo zusammen

Ich experimentiere gerade ein wenig mit Node Blue in Verbindung mit Modbus.
Ich möchte gerne alle relevanten Daten aus dem Wechselrichter auslesen und in der homegear-ui anzeigen.

Ich habe also den Modbus Node eingebunden und einfach mal die ID 40084 zum auslesen angebunden.

Im Log kann ich sehen das da was kommt.

10/18/20 10:11:28.805 Sending Modbus packet: 00020000000601039C41006D
10/18/20 10:11:28.940 Modbus packet received: 0002000000DD0103DA6E5300010041536F6C61724564676520000000000000000000000000000000000000000000005345344B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303030332E3232353100000000000000374531323944333800000000000000000000000000000000000000000000000000010067003200FC005200540055FFFE0F970F8C0FB2091C08E908EAFFFF10B8FFFF1387FFFE16A5FFFFF0BAFFFFE33AFFFE007C0A66000016AFFFFC1D3AFFFF10F9FFFF80000C5380008000FFFE00040000FFFF

Ich wollte der Einfachheit halber erst mal einen Debug Node anbinden um zu sehen was da ankommt.
Doch leider gibt der mir nichts aus.

Idealerweise möchte ich am Ende nur den reinen Leistungswert sehen.
In diesem Fall lag der bei ca 296 W

Hat jemand eine Idee dazu ?

Danke im Voraus

Nachtrag : Homegear ist Version 0.8.0-3085
Node-Blue 1.0.6

Gruß

Stefan

Schausst du dir beim Debug-Node auch das “complete message object” an?
Default siehst du nur payload und ich weiß nicht ob der modbus-node da was ausgibt.

Ich habe es mit beiden Varianten ausprobiert.
Leider kein Erfolg

Ok, aber aus dem Modbus-Node muss ja was rauskommen. Wie sieht denn dein Flow aus und welche Einstellungen hast du im Node gemacht?

Was sagt das flow-error-log?

image

10/18/20 11:52:21.580 Node-BLUE (4091): Node 30635a83.a4c346: Error reading from Modbus holding registers 40001 to 40109: Response has invalid transaction ID. - Disconnecting…

An das Error Log habe ich gar nicht gedacht

Das hat alles mit iobroker schon mal funktioniert.
Aber den will ich eigentlich nicht mehr nutzen

Ich habe leider den modbus-node noch nie im Einsatz gehabt. Vielleicht kann @sathya helfen…

Node Blue scheint die Antwort nicht zu passen.

Na mal sehen was Sathya dazu sagt, eilt ja nicht unbedingt.

1 Like

Hallo @Interceptor43,

die Fehlermeldung “has invalid transaction ID” kommt, wenn die ersten zwei Byte der Anfrage und der Antwort nicht übereinstimmen, in deinem ersten Beispiel also 0002. Da stimmen die Bytes überein. Kam an der Stelle ebenfalls eine Fehlermeldung? Bzw. kannst du mir noch einmal Anfrage- und Antwortpaket (wie oben) und dazugehörige Fehlermeldung posten? Dann sollten wir dem Problem auf die Schliche kommen.

Viele Grüße

Sathya

Das kommt aktuell im flow log :

10/30/20 12:57:00.060 Sending Modbus packet: 006F0000000601039C41006D
10/30/20 12:57:00.099 Modbus packet received: 006F000000DD0103DA6E5300010041536F6C61724564676520000000000000000000000000000000000000000000005345344B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303030332E32323531000000000000003745313239443338000000000000000000000000000000000000000000000000000100670032012D006400640064FFFE10000FFF100A094D093D0931FFFF1658FFFF138AFFFE1BE2FFFFEF52FFFFE0C1FFFE007CA45E00001E4DFFFC1D3EFFFF16AFFFFF80000D3D80008000FFFE00040000FFFF

Im flow.err steht nur das drin :

10/30/20 12:53:58.112 Node-BLUE (4091): Error in file Node-BLUE/NodeBlueClient.cpp line 989 in function void Homegear::NodeBlue::NodeBlueClient::queueOutput(const string&, uint32_t, Flows::PVariable, bool): locale::facet::_S_create_c_locale name not valid

Hallo @Interceptor43,

die Fehlermeldung kommt durch den Debug-Knoten, weil die Locale en_US.UTF-8 fehlt. Das empfangene Paket sieht soweit gut aus. Funktioniert die Ausgabe von Strings im Debugknoten grundsätzlich? Falls nein, installier mal die Locale en_US.UTF-8 mit dpkg-reconfigure locales. Im Anschluss einmal Homegear neustarten, dann sollte die Debugausgabe in jedem Fall funktionieren.

Der ursprüngliche Fehler scheint jetzt nicht wieder aufgetreten zu sein, oder?

Du bist nicht der erste mit dem Locale-Fehler. Der Code ist jetzt angepasst, so dass die Locale keine Voraussetzung mehr ist.

Viele Grüße

Sathya

Nein der ursprüngliche Fehler ist nun weg.

Mit der Umstellung von locales taucht der von mir übermittelte Fehler auch nicht mehr auf.

Allerdings sehe ich im Debug Knoten immer noch nichts.

Ist denn die Konfiguration des Modbus so richtig wie ich das oben dargestellt habe ?

Zeigt der Modbus Node normalerweise an das er verbunden ist, sowie z.B. der MQTT Node ?

Gruß

Stefan

Zeigt der Modbus Node normalerweise an das er verbunden ist, sowie z.B. der MQTT Node ?

Nein, aber das ist im Grunde genommen ein Bug. Das Log zeigt aber ja Antworten, von daher ist er verbunden.

Ist denn die Konfiguration des Modbus so richtig wie ich das oben dargestellt habe ?

Hättest du das Datenblatt für mich?

Siehe Anhangsunspec-implementation-technical-note-de.zip (411.0 KB)

Noch ein Nachtrag:

006F0000000601039C41006D

Dieses Paket besagt: Lese die Holding-Register beginnend ab 40001 und insgesamt 109 Register.

006F000000DD0103DA6E5300010041536F6C61724564676520000000000000000000000000000000000000000000005345344B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303030332E32323531000000000000003745313239443338000000000000000000000000000000000000000000000000000100670032012D006400640064FFFE10000FFF100A094D093D0931FFFF1658FFFF138AFFFE1BE2FFFFEF52FFFFE0C1FFFE007CA45E00001E4DFFFC1D3EFFFF16AFFFFF80000D3D80008000FFFE00040000FFFF

Dieses ist die Antwort. Sieht ebenfalls gut aus. Es sei vielleicht noch erwähnt, dass nur Wertänderungen ausgegeben werden - sonst würden zu viele Daten generiert.

Viele Grüße

Sathya

Das habe ich ja so konfiguriert das er in FC3 diese Register auslesen soll.

An den Debug habe ich nur den Wert für die aktuelle Leistung angebunden

Bei der Konfiguration des Modbus HREG 40084 angegeben
Beim Index habe ich 0 und 1 ausprobiert

40000 wäre schon einmal korrekt (Teilweise beginnen die Indizes mit 0, Teilweise mit 1 - das ist bei Modbus etwas verwirrend).

Index ist 40083 und Type ist int. Auch hier ist ein Versatz um 1, da die Indizes im Datenblatt mit 1 und nicht mit 0 beginnen (übertragen werden muss aber 40083).

Ok habe ich mal angepasst, zeigt aber immer noch nix im Debug.

HReg Name 40083 Index 0 Count 1 ??? Type INT im Rest keine Haken

Wofür ist das Count ?

Gleich ist eh Schluss mit dem Testen da die Leistung nur noch 52 W betrifft.
Der Wechselrichter dürfte gleich runter fahren

Index 0? Trag da mal 40083 ein. Name kannst du selbst festlegen. Count ist die Anzahl der Register, die der Wert überspannt. In diesem Fall 1 (entspricht “Größe” im Datenblatt).