Ankündigung

Einklappen
Keine Ankündigung bisher.

Einbindung von Modbus TCP

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Zitat von Cannon Beitrag anzeigen

    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.

    image.png

    Kommentar


      Zitat von Cannon Beitrag anzeigen

      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.

      Kommentar


        Zitat von beckerth Beitrag anzeigen
        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

        Kommentar


          Zitat von beckerth Beitrag anzeigen
          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".

          Probier mal ...

          Kommentar


            Zitat von ooUrmeloo Beitrag anzeigen

            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 ...
            Ich habe mittlerweile auf SHNG v1.9.5 und modbus_tcp v 1.0.8 aktualisiert.
            Leider keine Besserung mit meinen Fehlermeldungen ... (s.o.)
            ​​​​​

            Kommentar


              Zitat von ooUrmeloo Beitrag anzeigen

              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 .

              Kommentar


                Zitat von Cannon Beitrag anzeigen

                Ü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
                Danke für den Hinweis. Schaue ich mir morgen mal an. Das im Develop Zweig ist noch nicht gefixed..

                Kommentar


                  Zitat von Cannon Beitrag anzeigen

                  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?

                  Kommentar


                    Zitat von Cannon Beitrag anzeigen

                    Ü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
                    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.
                    Zuletzt geändert von beckerth; 31.12.2023, 16:20.

                    Kommentar


                      Zitat von ooUrmeloo Beitrag anzeigen
                      Ist ein manuelles Update von Pymodbus "gefahrlos" möglich?




                      Selbst wenn du kannst ja wieder zurück updaten ...

                      Zitat von ooUrmeloo Beitrag anzeigen
                      Trifft das auch auf den modbus_tcp v 1.0.8 zu?
                      Kann ich nicht sagen, wie da der Stand ist.

                      Zitat von beckerth Beitrag anzeigen
                      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".

                      Kommentar


                        Zitat von Cannon Beitrag anzeigen

                        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.

                        Zitat von ooUrmeloo Beitrag anzeigen
                        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?
                        Bei mir läuft die 1.0.9 mit pymodbus 3.0.2.

                        Zitat von ooUrmeloo Beitrag anzeigen
                        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.


                        Zuletzt geändert von beckerth; 01.01.2024, 01:30.

                        Kommentar


                          Zitat von beckerth Beitrag anzeigen
                          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.

                          Kommentar


                            Zitat von beckerth Beitrag anzeigen
                            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.

                            Kommentar


                              Zitat von bmx Beitrag anzeigen
                              Deine Solaredge Fehler kann ich bestätigen:


                              Code:
                              2023-12-09 03:56:57 ERROR plugins.modbus_tcp se_inverter@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.20.68:1502): Connection unexpectedly closed 0.000308990478515625 seconds into read of 8 bytes without response from slave before it closed connection
                              2023-12-09 17:52:57 ERROR plugins.modbus_tcp se_inverter@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.20.68:1502): Connection unexpectedly closed 2.3365020751953125e-05 seconds into read of 8 bytes without response from slave before it closed connection
                              ​
                              Ich bin auf dem aktuellen develop branch unterwegs. Ich vermute das der Solaredge Wechselrichter nur eine modbus Verbindung zur Zeit erlaubt und die interne Verbindung zum zugehörigen Zähler dann schlicht gewinnt.
                              Zitat von ooUrmeloo Beitrag anzeigen
                              Hallo zusammen,

                              ich hatte eine ganze Weile den Modbus Plugin mit zwei Geräten recht stabil am laufen. Bis vor einiger Zeit lief das alles recht problemlos. Jetzt ist mir aufgefallen, dass ich immer wieder folgende Fehlermeldungen bekomme. Unterschiedlich für meine beiden Geräte, eine Paradigma Heizung und ein Solaredge Wechselrichter:
                              Code:

                              2023-12-09 13:12:18 ERROR plugins.modbus_tcp paradigma@: read error: Modbus Error: [Input/Output] Modbus Error: [Invalid Message] No response received, expected at least 8 bytes (0 received) InputRegister.40.1 (address.slaveUnit) regCount:1 2023-12-09 13:17:14 ERROR plugins.modbus_tcp solaredge@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.178.67:1502): Connection unexpectedly closed 0.007294893264770508 seconds into read of 8 bytes without response from unit before it closed connection 2023-12-09 13:27:15 ERROR plugins.modbus_tcp solaredge@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.178.67:1502): Connection unexpectedly closed 0.01136159896850586 seconds into read of 8 bytes without response from unit before it closed connection 2023-12-09 13:37:17 ERROR plugins.modbus_tcp solaredge@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.178.67:1502): Connection unexpectedly closed 0.0036919116973876953 seconds into read of 8 bytes without response from unit before it closed connection 2023-12-09 13:37:20 ERROR plugins.modbus_tcp paradigma@: read error: Modbus Error: [Input/Output] Modbus Error: [Invalid Message] No response received, expected at least 8 bytes (0 received) InputRegister.7.1 (address.slaveUnit) regCount:1 2023-12-09 13:47:18 ERROR plugins.modbus_tcp solaredge@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.178.67:1502): Connection unexpectedly closed 0.005329132080078125 seconds into read of 8 bytes without response from unit before it closed connection 2023-12-09 13:57:19 ERROR plugins.modbus_tcp solaredge@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.178.67:1502): Connection unexpectedly closed 0.001871347427368164 seconds into read of 8 bytes without response from unit before it closed connection 2023-12-09 14:07:20 ERROR plugins.modbus_tcp solaredge@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.178.67:1502): Connection unexpectedly closed 0.019519329071044922 seconds into read of 8 bytes without response from unit before it closed connection ​
                              In regelmäßigen Abständen klappt die Abfrage nicht. Aktuell habe 300s cycle Time eingestellt, d.h., beim Solaredge klappt jede zweite Abfrage nicht, bei der Paradigma in unregelmäßigen Abständen. Wenn ich die cycle Time ändere, verändern sich die Abstände der Fehler, sie bleiben aber nicht aus.

                              Wie gesagt, früher lief das besser. Ich muss aber gestehen, ich weiß nicht, was ich geändert haben könnte, was den Fehler verursacht.

                              Hat jemand von euch eine Idee??
                              Die gelegentlichen Fehler kommen bei mir jetzt auch mit ShNG Version 1.9.2 und der letzten develop Version vom Plugin.

                              Code:
                              2024-01-01  10:07:33 ERROR    pymodbus.client.tcp Connection to (192.168.177.46, 1502) failed: timed out
                              2024-01-01  10:07:33 ERROR    plugins.modbus_tcp  kostal_wr2@: could not connect to 192.168.177.46:1502
                              2024-01-01  10:07:33 ERROR    plugins.modbus_tcp  kostal_wr2@: not connected to 192.168.177.46:1502
                              ...
                              2024-01-01  12:25:10 ERROR    plugins.modbus_tcp  modbus_ernergy_meters@: read error: Modbus Error: [Input/Output] Modbus Error: [Invalid Message] No response received, expected at least 8 bytes (0 received) InputRegister.342.1 (address.slaveUnit) regCount:2
                              2024-01-01  12:25:13 ERROR    pymodbus.client.tcp Connection to (192.168.177.50, 1502) failed: timed out
                              2024-01-01  12:25:13 ERROR    plugins.modbus_tcp  modbus_ernergy_meters@: something went wrong in the poll_device function: Modbus Error: [Connection] Failed to connect[ModbusTcpClient(192.168.177.50:1502)]
                              2024-01-01  12:25:16 ERROR    plugins.modbus_tcp  modbus_ernergy_meters@: read error: Modbus Error: [Input/Output] No Response received from the remote unit/Unable to decode response InputRegister.0.1 (address.slaveUnit) regCount:2
                              2024-01-01  12:29:35 NOTICE   modules.admin.api_logs  - log_name=smarthome-warnings, logs[log_name]=[['smarthome-warnings.log', 638.2]]​​
                              Für mich auffällig: Parallel laufen die Kostalmodbus und KSEMmodbus Plugins (auch mit 5s Cycle time) und da kommen keine Fehler(Vielleicht werden diese auch nur nicht ausgegeben, muss ich mir anschauen).
                              Außerdem kommen die Fehler immer nur bei einem von zwei Wechselrichtern und von der Modbus RTU/TCP Bridge.

                              Kommentar


                                Zitat von Cannon Beitrag anzeigen

                                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.
                                Also ich habe mal eine neue virtuelle Maschine mit SmarthomeNG zum Testen installiert. Angehängt eine korrigierte Version des Plugins (Als .zip weil 21 kB das Limit von 19,5kB für Dateianhänge überschreiten 🙃). Folgende Änderungen:
                                • Vorschlag mit pyModbus==3.5.4 zu arbeiten (Änderung nicht enthalten, Anpassung in requirements.txt nötig)
                                • Itemdefinitionen mit Endian.Big und Endian.Little werden vom Plugin in Endian.BIG/LITTLE umgesetzt. Falls nicht erwünscht müsste die valid_list in der Plugin.yaml angepasst werden, soweit ich es verstehe? Hab bissl gebraucht um es zu schnallen - ShNG hat mir immer z.B. Endian.BIG durch Endian.Big überschrieben, so wie in der plugin.yaml definiert. Wenn Großbuchstaben verwendet werden sollen müssten die User die Item Definitionen anpassen da in alten Versionen nur der erste Buchstabe groß war. Man könnte auch im Plugin abfangen beides zu akzeptieren...
                                • In einer konsequtiven if/elif/else Abfrage der modbus_write Funktion hat ein "el" vor dem elif gefehlt - daher konnte float32 nicht geschrieben werden. (Ca. Zeile 358)
                                • dataDirection == 'write' hinzugefügt
                                Könntest du es Dir mal anschauen/diffen und ggf. deinen Pull Request updaten? Ich habe jetzt kurz mit einer Minimalversion getestet, werde meine Produktivumgebung aber die Tage umstellen auf das angehängte Plugin um zu sehen wie es dann läuft.
                                Angehängte Dateien

                                Kommentar

                                Lädt...
                                X