Ankündigung

Einklappen
Keine Ankündigung bisher.

Einbindung Shelly ProEM50 (ModbusTCP oder ShellyPlugin)

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

    Einbindung Shelly ProEM50 (ModbusTCP oder ShellyPlugin)

    Hallo zusammen,
    hat schon jemand einen Shelly ProEM50 eingebunden. Dieser sollte ja per Modbus TCP eingebunden werden können als auch über das Shelly Plugin und MQTT. Aber all dies gelingt mir nicht. Am liebsten würde ich es per Modbus einbinden, da ich das schon nutze und dann weniger Plugins im Einsatz habe.

    Habe hierzu folgende Einstellungen gemacht:
    plugins.yaml
    Code:
    modbus_shelly1_fast:
        plugin_name: modbus_tcp
        host: xxx.xxx.xxx.xxx
        port: 502
        webif_pagelength: 100
        instance: modbus_shelly1_fast
        cycle: 15​
    und dann bei den Items
    Code:
    ZAEHLER:
        KLIMA:
            # Die Klimaanlage ist übern Shelly gefuehrt
            # Dieser kann per MModbus ausgelesen werden
            # Adressen
            # 32005 float (Big Endian) Voltage, V (Meter 1)
            # 32007 float (Big Endian) Current, A (Meter 1)
            # 32009 float (Big Endian) Active power, W (Meter 1)
            # 32025 float (Big Endian) Voltage, V (Meter 2)
            # 32027 float (Big Endian) Current, A (Meter 2)
            # 32029 float (Big Endian) Active Power, W (Meter 2)
            # 32312 float (Big Endian) Total active energy - perpetual count, Wh (Meter 1)
            # 32332 float (Big Endian) Total active energy - perpetual count, Wh (Meter 2)
            MODBUS_TCP:
                EM0_CURRENT:
                    name: Current Klima DG/DS
                    type: num
                    cache: 'True'
                    database: init
                    eval: (sh..RAW() * 1)
                    eval_trigger:
                      - .RAW
                    RAW:
                        type: num
                        name: Current Klima DG/DS
                        modBusObjectType@modbus_shelly1_fast: InputRegister
                        modBusDirection@modbus_shelly1_fast: read
                        modBusAddress@modbus_shelly1_fast: 32007
                        modBusDataType@modbus_shelly1_fast: float32
                        modBusFactor@modbus_shelly1_fast: 1​
    Ich erhalte aber immer die Meldung:
    Code:
    2024-06-13  22:47:19 ERROR    plugins.modbus_tcp  modbus_shelly1_fast@: read error: Exception Response(132, 4, IllegalAddress) InputRegister.32007.1 (address.slaveUnit) regCount:2
    Habe schon viel probiert. Adresse um 1 oder zwei erhöht und erniedrigt, HoldingRegister anstatt InputRegister. Aber es will einfach nicht klappen. Ich weiss aber, dass Daten kommen, da ich mit einem SimplyModbus Testtool die Adresse lesen kann.

    2024-06-13 22_51_35-XnView Classic - [_ Zwischenablage-1].jpg

    Seht ihr den Fehler oder hat gar einer so einen Shelly per Modbus eingebunden? Wie sieht dann eure config aus?

    Danke euch!

    #2
    Ich habe von Modbus keine Ahnung aber mir fällt ins Auge das in der Fehlermeldung oben "...InputRegister.32007.1 (address.slaveUnit)..." steht. Wenn das bedeutet, das slaveUnit dort 1 ist und bei Deinem Abfragetool SlaveID 0 ist dann frage ich mich, ob das richtig ist. Aber vielleicht können die Leute die sich schon tiefer eingeabeitet haben was dazu sagen...

    Kommentar


      #3
      Gut beobachtet.
      Aber ich habe in dem testtool auch schonmal eine 1 eingegeben. Das ging auch.
      Im Gegenzug habe ich bei smarthomeng auch mal eine 0 als Slave eingetragen. Das ging aber auch dann nicht.
      Werde das aber gern nochmal testen.

      Kann denn das plugin aus dem Input Register lesen und benutzt dabei auch den funktionscode 4? Hat das einer am laufen und greift ins analoge InputRegister?

      Kommentar


        #4
        Guten Morgen,
        Vielleicht den Offstet abziehen?

        32005-30001=2004 es wird Register 2004 gelesen ...

        Kommentar


          #5
          Hey ivande, das war die Lösung. Ich habe nun die Modbus Adressen in meiner config um die 30001 (Offset) verringert und schon geht es.
          Danke für den Hinweis.

          Anbei die neue item.yaml
          Code:
          ZAEHLER:
              KLIMA_DG:
                  # Die Klimaanlage ist übern Shelly gefuehrt
                  # Dieser kann per MModbus ausgelesen werden
                  # Adressen
                  # 32005    float (Big Endian)    Voltage, V (Meter 1)
                  # 32007    float (Big Endian)    Current, A (Meter 1)
                  # 32009    float (Big Endian)    Active power, W (Meter 1)
                  # 32025    float (Big Endian)    Voltage, V (Meter 2)
                  # 32027    float (Big Endian)    Current, A (Meter 2)
                  # 32029    float (Big Endian)    Active Power, W (Meter 2)
                  # 32312    float (Big Endian)    Total active energy - perpetual count, Wh (Meter 1)
                  # 32332    float (Big Endian)    Total active energy - perpetual count, Wh (Meter 2)
                  MODBUS_TCP:
                      VOLTAGE:
                          name: Voltage Klima DG/DS
                          type: num
                          cache: 'True'
                          eval: (sh..RAW() * 1)
                          eval_trigger:
                            - .RAW
                          RAW:
                              # Adresse 32005, davon muss aber durch den ObjectType "InputRegister" der Offset 30001 abgezogen werden
                              type: num
                              name: Voltage Klima DG/DS
                              modBusObjectType@modbus_shelly1_fast: InputRegister
                              modBusDirection@modbus_shelly1_fast: read
                              modBusAddress@modbus_shelly1_fast: 2004
                              modBusDataType@modbus_shelly1_fast: float32
                              modBusFactor@modbus_shelly1_fast: 1
                      CURRENT:
                          name: Current Klima DG/DS
                          type: num
                          cache: 'True'
                          database: init
                          database_maxage: 7
                          eval: (sh..RAW() * 1)
                          eval_trigger:
                            - .RAW
                          RAW:
                              # Adresse 32007, davon muss aber durch den ObjectType "InputRegister" der Offset 30001 abgezogen werden
                              type: num
                              name: Current Klima DG/DS
                              modBusObjectType@modbus_shelly1_fast: InputRegister
                              modBusDirection@modbus_shelly1_fast: read
                              modBusAddress@modbus_shelly1_fast: 2006
                              modBusDataType@modbus_shelly1_fast: float32
                              modBusFactor@modbus_shelly1_fast: 1
                      POWER:
                          name: Power Klima DG/DS
                          type: num
                          cache: 'True'
                          database: init
                          database_maxage: 7
                          eval: (sh..RAW() * 1)
                          eval_trigger:
                            - .RAW
                          RAW:
                              # Adresse 32009, davon muss aber durch den ObjectType "InputRegister" der Offset 30001 abgezogen werden
                              type: num
                              name: Power Klima DG/DS
                              modBusObjectType@modbus_shelly1_fast: InputRegister
                              modBusDirection@modbus_shelly1_fast: read
                              modBusAddress@modbus_shelly1_fast: 2008
                              modBusDataType@modbus_shelly1_fast: float32
                              modBusFactor@modbus_shelly1_fast: 1
                      ENERGY:
                          name: Energy Klima DG/DS
                          type: num
                          cache: 'True'
                          eval: (sh..RAW() * 1)
                          eval_trigger:
                            - .RAW
                          RAW:
                              # Adresse 32312, davon muss aber durch den ObjectType "InputRegister" der Offset 30001 abgezogen werden
                              type: num
                              name: Energy Klima DG/DS
                              modBusObjectType@modbus_shelly1_fast: InputRegister
                              modBusDirection@modbus_shelly1_fast: read
                              modBusAddress@modbus_shelly1_fast: 2311
                              modBusDataType@modbus_shelly1_fast: float32
                              modBusFactor@modbus_shelly1_fast: 1
                  COMPRESSOR_ON:
                      name: Kompressor ist an
                      type: bool
                      cache: 'True'
                      database: init
                      database_maxage: 7
                      eval: True if (sh.ZAEHLER.KLIMA_DG.MODBUS_TCP.POWER() > 100) else False
                      eval_trigger:
                        - ZAEHLER.KLIMA_DG.MODBUS_TCP.POWER​

          Kommentar

          Lädt...
          X