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.
Welches Gerät versuchst du auszulesen? Ich habe hier ein paar Wechselrichter und Smartmeter mit "nativem" Modbus TCP die vertragen 1s Poll Intervall für >>100 Register. Dann habe ich noch ein altes Smartmeter mit Modbus RTU <--> Modbus TCP Bridge. Das Ding kann maximal 11 Register pro Request lesen. (Handbuch: It is possible to read maximum 11 registers (words) with a single request,).
Wenn ich die Poll Zeit unter 10s stelle fliegen mir irgendwann die gleichzeitgen SmarthomeNG Treads um die Ohren. Ich denke hier müsste man das Plugin massiv aufbohren um immer nur x Requests pro Zeiteinheit zu senden. Also bei einer Poll Zeit von 5s und 50 Registern jede Sekunde 10 Register anfordern, so dass man nach 5s die 50 Register gelesen hätte. Ich habe mich einfach auf die wichtigsten 11 Register beschränkt. 😆
Vielleicht probiere ich noch eine andere Firmware für die Modbus RTU/TCP Bridge aus um auszuschließen dass diese das Bottleneck ist. Aber eigentlich reichen die 11 Register auch.
1. Eine Paradigma Heizung mit ca. 30 Registern
2. Ein Solaredge Wechselrichter mit ca. 20 Registern
beides aber nur mit 60 sec cycle Time.
Pymodbus = 3.5.2 habe ich noch nicht versucht ... werde ich die Tage mal machen.
Ich bekomme das Plugin aber nicht zum laufen. Die Endians erkennt er gar nicht und stellt alles auf Endian.BIG um. Obwohl die korrekten Werte definiert sind. Ich habe in Struct und Item Definitionen alle Little gegen LITTLE und Big gegen BIG getauscht . Habe es auch mit "Hochkommas" versucht. Außerdem erkennt er Float32 nicht mehr beim modus write...Irgendwas haut da nicht so richtig hin.
Da ich selbst das Plugin "modbus_tcp" nicht nutze kann ich das Problem nicht nachvollziehen. Wenn es aber am pymodbus liegen sollte, dann würde ich die erst einmal die letzte 3.5er Version mal probieren. Das wäre dann die 3.5.4. Es wäre ja gut, wenn alles was pymodbus nutzt auch erst einmal auf eine Version lauffähig wäre.
Selbst wenn du kannst ja wieder zurück updaten ...
Kann ich nicht sagen, wie da der Stand ist.
Ja, da ist mit irgendeiner der 3er Version dazu gekommen. Deshalb habe ich die Mindestversion auf 3.5.2 gestellt. Da gab es mehrere Änderungen, einmal diese unit/slave-Sachen, dann die Endian-Sachen und dann auch noch was mit dem Versionsmanagement. Mit modbus 3.5.2 installiert und den Sachen aus meinem plugins sollte es aber gehen. Geht es denn dann?
Das mit den requirements funktioniert bei mir allerdings generell nicht. Ich muss alle notwendigen python-Bibliotheken immer von Hand updaten. Dazu hatte ich mal einen Thread auch hier im Forum. Da hatte ich auch was in irgendeiner Lib gepatcht. Ich erinnere mich aber nicht mehr wo. Zumindest hatte auch ich das ins Dev "hochgeladen".
Manuelles update/downgrade ist kein Problem. (pip install pymodbus==3.0.2 oder pip install pymodbus==3.5.2)
Ich bekomme das Plugin aber nicht zum laufen. Die Endians erkennt er gar nicht und stellt alles auf Endian.BIG um. Obwohl die korrekten Werte definiert sind. Ich habe in Struct und Item Definitionen alle Little gegen LITTLE und Big gegen BIG getauscht . Habe es auch mit "Hochkommas" versucht. Außerdem erkennt er Float32 nicht mehr beim modus write...Irgendwas haut da nicht so richtig hin.
Ich habe gerade das hier noch gelesen: " ... Pymodbus 3.5.2. Darunter geht nichts mehr ..."
Trifft das auch auf den modbus_tcp v 1.0.8 zu? Bei mir läuft Pymodbus 3.2.0. ... Oder habe ich da jetzt was falsch verstanden?
Könnte das evtl. meine Probleme verursachen?
Ist ein manuelles Update von Pymodbus "gefahrlos" möglich?
Ich habe mittlerweile auf SHNG v1.9.5 und modbus_tcp v 1.0.8 aktualisiert.
Leider keine Besserung mit meinen Fehlermeldungen ... (s.o.)
Welches Gerät versuchst du auszulesen? Ich habe hier ein paar Wechselrichter und Smartmeter mit "nativem" Modbus TCP die vertragen 1s Poll Intervall für >>100 Register. Dann habe ich noch ein altes Smartmeter mit Modbus RTU <--> Modbus TCP Bridge. Das Ding kann maximal 11 Register pro Request lesen. (Handbuch: It is possible to read maximum 11 registers (words) with a single request,).
Wenn ich die Poll Zeit unter 10s stelle fliegen mir irgendwann die gleichzeitgen SmarthomeNG Treads um die Ohren. Ich denke hier müsste man das Plugin massiv aufbohren um immer nur x Requests pro Zeiteinheit zu senden. Also bei einer Poll Zeit von 5s und 50 Registern jede Sekunde 10 Register anfordern, so dass man nach 5s die 50 Register gelesen hätte. Ich habe mich einfach auf die wichtigsten 11 Register beschränkt. 😆
Vielleicht probiere ich noch eine andere Firmware für die Modbus RTU/TCP Bridge aus um auszuschließen dass diese das Bottleneck ist. Aber eigentlich reichen die 11 Register auch.
Leider sind die Endian Definitionen nicht kompatibel zur vorherigen Version. Vorher war es Endian.Little / Endian.Big. In Deiner Version ist es Endian.LITTLE und Endian.BIG?
Ja, da ist mit irgendeiner der 3er Version dazu gekommen. Deshalb habe ich die Mindestversion auf 3.5.2 gestellt. Da gab es mehrere Änderungen, einmal diese unit/slave-Sachen, dann die Endian-Sachen und dann auch noch was mit dem Versionsmanagement. Mit modbus 3.5.2 installiert und den Sachen aus meinem plugins sollte es aber gehen. Geht es denn dann?
Das mit den requirements funktioniert bei mir allerdings generell nicht. Ich muss alle notwendigen python-Bibliotheken immer von Hand updaten. Dazu hatte ich mal einen Thread auch hier im Forum. Da hatte ich auch was in irgendeiner Lib gepatcht. Ich erinnere mich aber nicht mehr wo. Zumindest hatte auch ich das ins Dev "hochgeladen".
Ich habe gerade mal im Develop bei den SmartHomeNG-Plugins geschaut. Die sind noch nicht drin. Entweder stelle ich mich da zu doof dafür an oder das dauert die einzubinden, da ich da ja nicht direkt schreiben kann. Du kannst bei Bedarf aber direkt auf meinem fork bei github die Elemente laden: https://github.com/CannonRS/plugins/tree/develop
Habe Dein Version vorhin mal ausprobiert:
Mit der requirements.txt startet Smarthomeng bei mir nicht mehr. Nach entfernen der Datei und manuellem Update von Pymodbus auf 3.5.2 startet es dann. Leider sind die Endian Definitionen nicht kompatibel zur vorherigen Version. Vorher war es Endian.Little / Endian.Big. In Deiner Version ist es Endian.LITTLE und Endian.BIG?
Ich kann jetzt meine Structs alle umstellen aber die Frage ist was später verwendet wird?
Ich bin jetzt wieder zurück zur Version im Develop Branch mit kleineren Anpassungen (unit<==>slave in modbus write, Ergänzung von write only Registern) und pymodbus version 3.0.2.
Ich würde den Support der alten Pymodbus-Version entfernen. Ohnehin schleppt man dann immer mehr Ballast mit rum. Da es auch innerhalb der 3er Version zum Teil Änderungen gab, die Probleme verursachten und man nicht jede Evntualität abfragen kann. Ich habe meine requirements auf 3.5.2 umgestellt. Darunter geht nichts mehr.
Ich habe gerade das hier noch gelesen: " ... Pymodbus 3.5.2. Darunter geht nichts mehr ..."
Trifft das auch auf den modbus_tcp v 1.0.8 zu? Bei mir läuft Pymodbus 3.2.0. ... Oder habe ich da jetzt was falsch verstanden?
Könnte das evtl. meine Probleme verursachen?
Ist ein manuelles Update von Pymodbus "gefahrlos" möglich?
Ich habe gerade mal im Develop bei den SmartHomeNG-Plugins geschaut. Die sind noch nicht drin. Entweder stelle ich mich da zu doof dafür an oder das dauert die einzubinden, da ich da ja nicht direkt schreiben kann. Du kannst bei Bedarf aber direkt auf meinem fork bei github die Elemente laden: https://github.com/CannonRS/plugins/tree/develop
Danke für den Hinweis. Schaue ich mir morgen mal an. Das im Develop Zweig ist noch nicht gefixed..
Also ich benutze kein struct und auch modBusUnit nicht - ich habe aber auch mehrere Instanzen am Laufen.
M.E. musst Du bei modBusFactor (da mach ich das so) und modBusUnit (?) auch auf die Instanz verweisen, d.h. "modBusFactor@instance = 0.1".
Probier mal ...
Danke! Da habe ich wohl klassisch vor lauter Bäumen den Wald übersehen .
Ich habe jetzt übrigens ein paar mal versucht, die beiden Instanzen nur einzeln einzuschalten bzw. nur einzeln auf 60s zu stellen.
Das ging ... und jetzt geht's auch mit beiden gleichzeitig ... fragt mich nicht, wieso ...
Und irgendwie gibt's jetzt auch seltener Fehler beim Auslesen, aber immer noch ab und zu ...
Irgendwie werde ich da nicht so richtig schlau draus ...
Ich habe mittlerweile auf SHNG v1.9.5 und modbus_tcp v 1.0.8 aktualisiert.
Leider keine Besserung mit meinen Fehlermeldungen ... (s.o.)
Kann ich, wenn ich mit structs arbeite die modBusUnit im struct angeben? Oder muss ich die irgendwie in der Item Definition setzen? ShNG übernimmt die geänderte Unit ID nicht. Wenn ich die global definierte UnitID in der plugin.yaml ändere kann ich die Werte des ersten oder zweiten Gerätes auslesen. Die "Unit" Spalte im Web-IF wird nicht angezeigt. Und der modBusFactorwird bei int32 nicht eingerechnet?
Also ich benutze kein struct und auch modBusUnit nicht - ich habe aber auch mehrere Instanzen am Laufen.
M.E. musst Du bei modBusFactor (da mach ich das so) und modBusUnit (?) auch auf die Instanz verweisen, d.h. "modBusFactor@instance = 0.1".
Okay für mich. Das Plugin funktioniert so wie es aktuell ist leider nicht da es Fehler wirft wenn man auf den Bus schreibt.
Über welches Plugin schreibst du?
Ich habe gerade mal im Develop bei den SmartHomeNG-Plugins geschaut. Die sind noch nicht drin. Entweder stelle ich mich da zu doof dafür an oder das dauert die einzubinden, da ich da ja nicht direkt schreiben kann. Du kannst bei Bedarf aber direkt auf meinem fork bei github die Elemente laden: https://github.com/CannonRS/plugins/tree/develop
Naja, wenn man sich das wie bei einem KNX-Plugin vorstellt, ist das nachvollziehbar. Allerdings wäre es dann wirklich schön, wenn es entsprechende Vorlagen gesammelt gibt. Also z.B. structs für die einzelnen Modbus-Geräte.
Naja ganz so ist das ja nicht. Die Vorlagen sollten dann auch aktuell gehalten werden. Aber zumindest muss man sich nicht mehr auf ständige Modbus-Änderungen einlassen. Wobei ich hoffe, dass das Thema jetzt auch durch ist.
Wo / wie können wir die Structs sammeln? Ich stelle auch um auf das generische Plugin um. Kostal (Plenticore, KSEM) und verschiedene Smartmeter.
Ich würde den Support der alten Pymodbus-Version entfernen. Ohnehin schleppt man dann immer mehr Ballast mit rum. Da es auch innerhalb der 3er Version zum Teil Änderungen gab, die Probleme verursachten und man nicht jede Evntualität abfragen kann. Ich habe meine requirements auf 3.5.2 umgestellt. Darunter geht nichts mehr.
Okay für mich. Das Plugin funktioniert so wie es aktuell ist leider nicht da es Fehler wirft wenn man auf den Bus schreibt.
Kann ich, wenn ich mit structs arbeite die modBusUnit im struct angeben? Oder muss ich die irgendwie in der Item Definition setzen? ShNG übernimmt die geänderte Unit ID nicht. Wenn ich die global definierte UnitID in der plugin.yaml ändere kann ich die Werte des ersten oder zweiten Gerätes auslesen. Die "Unit" Spalte im Web-IF wird nicht angezeigt. Und der modBusFactorwird bei int32 nicht eingerechnet?
Bin auf dem letzten Develop Stand vom Plugin mit PyModbus 3.0.2 und Python 3.9.2.
Hm, wie alt ist denn dein SHNG bzw das Plugin? Bei mir steht da (im develop branch) statt num ein int für port und cycle drin ...?
SHNG v1.9.4-master und modbus_tcp v 1.0.8
Ich habe jetzt übrigens ein paar mal versucht, die beiden Instanzen nur einzeln einzuschalten bzw. nur einzeln auf 60s zu stellen.
Das ging ... und jetzt geht's auch mit beiden gleichzeitig ... fragt mich nicht, wieso ...
Und irgendwie gibt's jetzt auch seltener Fehler beim Auslesen, aber immer noch ab und zu ...
Irgendwie werde ich da nicht so richtig schlau draus ...
Zuletzt geändert von ooUrmeloo; 10.12.2023, 22:08.
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: