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

              Lädt...
              X