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.
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.
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.
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
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.
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.
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).
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).