Ankündigung

Einklappen
Keine Ankündigung bisher.

modbus_tcp Probleme

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

    modbus_tcp Probleme

    Hi,

    Ich versuche mich erstmalig an dem modbus plugin.

    Folgendes Setup:
    shng 1.10
    pymodbus 3.8.3
    python 3.11.2

    Plugin:
    Code:
    Modbus:
    plugin_name: modbus_tcp
    host: 192.168.0.63
    port: 502
    cycle: 10


    Code:
    ModbusItems:
        LWZ404:
            AussenTemp:
                type: num
                name: Aussentemperatur Sensor
                modBusObjectType: InputRegister
                modBusAddress: 7
                modBusDataType: int16
                modBusDirection: 'read'
            RaumTempTag:
                type: num
                name: Raumsoll Heizen Tag
                modBusObjectType: HoldingRegister
                modBusAddress: 1002
                modBusDataType: int16
                modBusDirection: 'read_write​'

    Mein Log liefert damit folgendes.
    Code:
    2025-10-16  09:38:14 ERROR    plugins.modbus_tcp  something went wrong in the poll_device function: ModbusClientMixin.read_input_registers() takes 2 positional arguments but 3 positional arguments (and 1 keyword-only argument) were given
    2025-10-16  09:38:25 ERROR    plugins.modbus_tcp  something went wrong in the poll_device function: ModbusClientMixin.read_input_registers() takes 2 positional arguments but 3 positional arguments (and 1 keyword-only argument) were given
    2025-10-16  09:38:35 ERROR    plugins.modbus_tcp  something went wrong in the poll_device function: ModbusClientMixin.read_input_registers() takes 2 positional arguments but 3 positional arguments (and 1 keyword-only argument) were given
    2025-10-16  09:38:46 ERROR    plugins.modbus_tcp  something went wrong in the poll_device function: ModbusClientMixin.read_input_registers() takes 2 positional arguments but 3 positional arguments (and 1 keyword-only argument) were given​
    Da ich null Plan hab, was ich mit dieser Fehlermeldung machen kann/soll bitte ich hiermit um Hilfe.

    mfg
    Markus
    Zuletzt geändert von fuxl66; Gestern, 20:24.

    #2
    Hallo Markus,
    meiner Meinung nach muss bei Aussentemp der modBusObjectType = HoldingRegister sein. Der modBusDataType sollte kein int16 (Ganzzahl) sein. Du müsstest recherchieren, welche Datentypen es mit Vorzeichen und Nachkommata gibt (float….).

    Gruß Gerald
    Zuletzt geändert von FitzGeraldo; Gestern, 13:16.

    Kommentar


      #3
      Wenn ich die Fehlermeldung richtig lese, stimmt da was im Code nicht. Die Funktion wird falsch aufgerufen, entweder passen pymodbus und das Plugin nicht zusammen oder etwas anderes stimmt nicht. Wenn du nicht Lust hast, dich mit Python und Programmierung auseinander zu setzen, wird dir jemand anders helfen müssen.

      Ich kenne mich mit dem pymodbus nicht aus, weiß aber, dass es hier einige gibt, die da vielleicht mehr drin stecken...

      Vielleicht versuchst du auch ein Update auf die aktuelle shng- und Plugin-Version, die ist nämlich schon deutlich verändert...
      Zuletzt geändert von Morg; Gestern, 13:13.

      Kommentar


        #4
        Zitat von FitzGeraldo Beitrag anzeigen
        Hallo Markus,
        meiner Meinung nach muss bei Aussentemp der modBusObjectType = HoldingRegister sein. Der modBusDataType sollte ein int16 mit Vorzeichen sein. Ansonsten müsstest du recherchieren, welche Datentypen es so mit Vorzeichen gibt.

        Gruß Gerald
        Hi und Danke für deine Antwort.

        lt. Doku meiner Heizung ist die Aussentemp ein Read Input Register. Auch QModMaster liefert nur einen Wert mit Read Input Register.
        int16 = Signed Integer (16 Bit), Werte von –32.768 bis +32.767

        Ich denke an der Item Config liegt es nicht.

        Kommentar


          #5
          Bin mir zu 99.9% sicher, dass das an der installierten Version von pymodbus liegt. Hatte vor einiger Zeit hier mal erklärt, warum der Fehler kommt (etwas weiter oben im selben Fred 1:1 die Fehlermeldung wie hier, siehe Post von Bernd / bmx ).

          /tom

          Kommentar


            #6
            Wenn ich das richtig verstehe, besagt deine Fehlermeldung, dass dein read-input Register 2 Positionsargumente erwartet, aber 3 erhält.

            Wenn dir als Aussentemperatur ein Ganzzahl reicht, dann ist ein signed int16 ok.
            Meiner Meinung nach muss es entweder ein HoldingRegister mit direction = read sein oder ein InputRegister mit direction = read_write.
            …Da du die Aussentemperatur vermutlich nur lesen willst.

            Und warum ist bei modBusDirection der Wert unterschiedlich hinterlegt (mit/ohne Apostroph)?

            Vielleicht einfach mal ausprobieren 😉

            Kommentar


              #7
              Zitat von FitzGeraldo Beitrag anzeigen
              Wenn ich das richtig verstehe, besagt deine Fehlermeldung, dass dein read-input Register 2 Positionsargumente erwartet, aber 3 erhält.

              Wenn dir als Aussentemperatur ein Ganzzahl reicht, dann ist ein signed int16 ok.
              Meiner Meinung nach muss es entweder ein HoldingRegister mit direction = read sein oder ein InputRegister mit direction = read_write.
              …Da du die Aussentemperatur vermutlich nur lesen willst.

              Und warum ist bei modBusDirection der Wert unterschiedlich hinterlegt (mit/ohne Apostroph)?

              Vielleicht einfach mal ausprobieren 😉
              Modbus Aussentemp liefert ohnehin Tempwerte * 10 also ist das Komma kein Thema. 'read-write' hab ich schon korrigiert und jeweils mit nur einem Item getestet. Ohne Erfolg. Ich bin wie Tom Bombadil geschrieben hat, ebenfalls der Meinung es liegt an meiner installierten version. Ich nutze auch die Version 1.0.10
              Soweit ich gelesen habe gibt es schon 1.0.13. Ist die in SH1.11 schon integriert oder noch generell in DEV?

              Auch den Kommentar #13 hab ich gelesen. Damit klappt es aber zwar, kommt aber diese Meldung wie von ihm erwähnt.
              Code:
              Please use "client.convert_from_registers()" or "client.convert_to_registers"
              See documentation: "https://pymodbus.readthedocs.io/en/latest/source/client.html#pymodbus.client.mixin.ModbusClientMixin.convert_from_registers"
              2025-10-16  21:41:56 WARNING  pymodbus.logging    BinaryPayloadDecoder is deprecated and will be removed in v3.9.0 !​
              Wie ich nun weiter vorgehen soll, wäre interessant.

              Kommentar


                #8
                sorry für die Irritation bei modBusObjectType… da hatte ich wohl einen Knoten im Kopf 🫣

                Kommentar


                  #9
                  Naja die SHNG Version und damit auch die von Fuxl benutzten Plugins sind nicht mehr aktuell. Wir können leider alte Releases nicht mehr pflegen. Im Prinzip kann man sich ein diff des Plugins mit Deinem Stand und dem neuen Stand machen und das dann erstmal übernehmen. Ansonsten wäre ein Upgrade schon gut...

                  Kommentar


                    #10
                    Zitat von bmx Beitrag anzeigen
                    Naja die SHNG Version und damit auch die von Fuxl benutzten Plugins sind nicht mehr aktuell. Wir können leider alte Releases nicht mehr pflegen. Im Prinzip kann man sich ein diff des Plugins mit Deinem Stand und dem neuen Stand machen und das dann erstmal übernehmen. Ansonsten wäre ein Upgrade schon gut...
                    d.h. ein Upgrade zu 1.11. löst das Problem vorerst? Verstehe ich das richtig?

                    P.S.:
                    Weil es schon eine weile her ist.....

                    Abgesehen von Service deaktivieren, reicht es folgendes auszuführen?
                    Code:
                    cd smarthome
                    git clone https://github.com/smarthomeNG/smarthome.git .
                    git clone https://github.com/smarthomeNG/plugins.git plugins​
                    Zuletzt geändert von fuxl66; Heute, 18:30.

                    Kommentar


                      #11
                      In der Theorie kannst Du mit git clone eine Kopie erstellen. Wenn es aber schon ein SmartHomeNG gibt und auch Plugins dann geht das Clone Kommando nicht. Dann musst Du ein git pull machen. Aber eigentlich gibt es dafür die Doku
                      So ein Update will auch gut überdacht werden. Erschwerend kommt bei neueren Debian Versionen dazu das eine Verwendung von virtuellen environments angesagt ist. Eine frische Installation auf einem frischen Betriebssystem wäre ideal. Dann braucht man eigentlich nur die alten Konfigurationsdateien, die Datenbank und sonstige benötigte Daten kopieren und es läuft. Aber wenn man das noch nie gemacht hat ist das auch keine Sache von 5 Minuten.

                      Kommentar

                      Lädt...
                      X