Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Ist ja erstmal egal, welches Gerät das ist. Wenn Simply Modbus wirklich 100%ig sicher immer die richtigen Werte liefert, dann hast du natürlich recht, dann kann es das Gerät nicht sein.
Bisher habe ich das immer so beobachtet.
Ab einem bestimmten Zeitpunkt vertauscht modbus_tcp plötzlich die Werte.
Frag ich im Anschluss per Simply Modbus ab, kommen die Werte richtig zurück…
Ist ja erstmal egal, welches Gerät das ist. Wenn Simply Modbus wirklich 100%ig sicher immer die richtigen Werte liefert, dann hast du natürlich recht, dann kann es das Gerät nicht sein.
Du könntest versuchen in __init__.py in Zeile 447 den read abzubrechen, wenn die Anzahl der gelesenen Register falsch ist. Da der Fehler bei darauffolgenden reads dann aufrecht bleibt, denke ich, dass dies noch nicht zu einer verbesserung führt?
Code:
if (len(result.registers) != registerCount):
self.logger.error("count of read registers is incorrect regCount:{0} len(result.registers):{1}".format(registerCount, len(result.registers)))
return None
Kann ich gerne machen! Werde berichten, sobald ich Ergebnisse hab.
obwohl hier nur zwei 16bit Werte gelesen werden sollten kommen 62 Werte an? Nach diesem seltsamen read stimmen die Werte nicht mehr. Welche Version von pymodbus ist bei dir installiert?
Version 3.1.3
Ich kann mir das auch nicht erklären. OK, es können schon mal falsche Werte gelesen werden, aber wieso bleibt dass dann konstant falsch?
Das geht mir auch nicht ein…
obwohl hier nur zwei 16bit Werte gelesen werden sollten kommen 62 Werte an? Nach diesem seltsamen read stimmen die Werte nicht mehr. Welche Version von pymodbus ist bei dir installiert?
Du könntest versuchen in __init__.py in Zeile 447 den read abzubrechen, wenn die Anzahl der gelesenen Register falsch ist. Da der Fehler bei darauffolgenden reads dann aufrecht bleibt, denke ich, dass dies noch nicht zu einer verbesserung führt?
Code:
if (len(result.registers) != registerCount):
self.logger.error("count of read registers is incorrect regCount:{0} len(result.registers):{1}".format(registerCount, len(result.registers)))
return None
du könntest im plugin __init__.py die Zeile 456 ändern, damit im log auch die Registerwerte in Hex angezeigt werden:
Code:
self.logger.debug("read {0}.{1}.{2} (address.slaveUnit) regCount:{3} registers:{4}".format(objectType, address, slaveUnit, registerCount, ' '.join(str(hex(e)) for e in result.registers)))
Hab ich hinzugefügt.
Soll ich später dann wenn der Fehler wieder aufgetreten ist die Log-Einträge posten? Aktuell funktioniert noch alles...
du könntest im plugin __init__.py die Zeile 456 ändern, damit im log auch die Registerwerte in Hex angezeigt werden:
Code:
self.logger.debug("read {0}.{1}.{2} (address.slaveUnit) regCount:{3} registers:{4}".format(objectType, address, slaveUnit, registerCount, ' '.join(str(hex(e)) for e in result.registers)))
Ja, da bin ich mir sicher. Da es gerade passt, machen wir ein ganz aktuelles Beispiel:
image.png Werte sind wieder vertauscht. Der Wert bei Import (Address 72) entspricht eigentlich dem von TotalPower (Address 52). Der Akku wird gerade mit ca. 3,3 kW geladen.
Ich habe daraufhin SmarthomeNG neu gestartet, da die Werte nach einem Restart dann plötzlich wieder passen:
image.png
Diese Werte sind jetzt wieder plausibel. Zu diesem Zeitpunkt wird jetzt noch mit 1,6 kW geladen. Meine Frau hatte gerade die Waschmaschine eingeschaltet ;-)
Ich werd vll. mal parallel noch versuchen, ein Script zu schreiben, welches ebenfalls via pymodbus die Werte periodisch holt. Eventuell liegt es ja an dem Modul selbst...
da scheint in der tat etwas durcheinander zu geraten, komisch allerdings dass es zeitweise dann alles passt. Ist das sicher, dass zeitweise die angezeigten Werte passen??
Ich muss erst mal die gut gesammelten Infos studieren, vielleicht können wir mit einen zusätzlichen Log-Eintrag im Plugin die empfangenen Bytes anzeigen lassen um den Problem auf die Schliche zu kommen.
Wenn ich das Plugin richtig verstehe, frägt es die Register der einzelnen Items doch nacheinander ab und speichert den zurückgelieferten Wert am Item. Korrekt?
Wenn dem so ist, kann ich mir nicht vorstellen, dass mit dem "decoding" zu tun hat, weil ja dann der Einzelwert an sich falsch sein müsste.
Diese sind jedoch definitiv vertauscht.
Ein Timing-Problem kann ich deshalb auch ausschließen.
Ich geh nochmals zu Klarstellung auf das gepostet Beispiel ein.
Register
Item
Werte modbus_tcp
Werte Simply Modbus
72
Import (importierte kWh)
141.15728
338.518005
74
Export (exportierte kWh)
338.50698
230.188995
52
TotalPower (momentane Leistung in W)
230.18400
nicht abgefragt
Wie gesagt wurden die die "Simply Modus" Werte kurz nach den "modbus_tcp" Werten abgefragt, weil dies ja manuell erfolgt ist.
Da es sich ja um den Zähler eines Speichers handelt, ist ja logisch, dass dort mehr Energie importiert als exportiert wurde, sprich die Werte von "Simply Modus" sind tendenziell richtig (auch wenn man am Zähler selbst schaut).
Die 141.15728 bei " modbus_tcp Import" entsprechen eigentlich der momentanen Leistung, sprich zu diesem Zeitpunkt flossen rund 141 Watt in Richtung Speicher. Dies ist auch logisch, da der Akku voll war und nur noch noch minimal geladen wurde. Ein negatives Vorzeichen würde bedeuten, dass der Akku entladen wird.
Für mich sieht es folglich nach wie vor so aus, dass modbus_tcp aus irgendwelchen Gründen die Werte vertauscht. Wenn jetzt alle Register nah beeinander liegen würden, wär das noch irgendwie besser nachvollziehbar. Aber dadurch, dass das Register für "TotalPower" doch weit von den anderen beiden entfernt liegt, hab ich keine Idee, an was das liegen könnte...
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Einen Kommentar schreiben: