Mehrere gleiche Modbus TCP Messgeräte

Hallo Experten!
Ich würde gerne mehrere gleiche Modbus TCP Server (Siemens PAC 2200) auslesen und als enitäten hinzufügen …
Mein Problem ist, dass sich eben die Sensoren wiederholen, lediglich die IP ändert sich. Der erste Zähler kann integriert werden, der zweite fehlt.
Wie müsste hier vorgegangen werden?

Vielen Dank!

Ich hab eine modbus.yaml erstellt.

- name: "PAC2200_1"
  type: tcp
  host: 10.0.0.xx1
  port: 502
  
  delay: 0
  message_wait_milliseconds: 30
  timeout: 5
    
  sensors:
    - name: “Active Power L1”
      slave: 1
      address: 25
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "W"
      device_class: "power"
      state_class: "measurement"
    - name: “Active Power L2”
      slave: 1
      address: 27
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "W"
      device_class: "power"
      state_class: "measurement"
    - name: “Active Power L3”
      slave: 1
      address: 29
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "W"
      device_class: "power"
      state_class: "measurement"
    - name: “Total active power”
      slave: 1
      address: 65
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "W"
      device_class: "power"
      state_class: "measurement"
    - name: “Voltage L1-N”
      slave: 1
      address: 1
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "V"
      device_class: "Voltage"
      state_class: "measurement"
    - name: “Voltage L2-N”
      slave: 1
      address: 3
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "V"
      device_class: "Voltage"
      state_class: "measurement"
    - name: “Voltage L3-N”
      slave: 1
      address: 5
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "V"
      device_class: "Voltage"
      state_class: "measurement"
    - name: “Current L1”
      slave: 1
      address: 13
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "A"
      device_class: "Current"
      state_class: "measurement"
    - name: “Current L2”
      slave: 1
      address: 15
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "A"
      device_class: "Current"
      state_class: "measurement"
    - name: “Current L3”
      slave: 1
      address: 17
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "A"
      device_class: "Current"
      state_class: "measurement"
    - name: “Frequency”
      slave: 1
      address: 55
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "Hz"
      device_class: "Frequency"
      state_class: "measurement"
    - name: “Power Factor cosphi”
      slave: 1
      address: 69
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: ""
      device_class: "Power_Factor"
      state_class: "measurement"
    - name: “Total Apparent Power”
      slave: 1
      address: 63
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "VA"
      device_class: "Apparent_Power"
      state_class: "measurement"
    - name: “Total Reactive Power”
      slave: 1
      address: 67
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "VAr"
      device_class: "Reactive_Power"
      state_class: "measurement"


- name: "PAC2200_2"
  type: tcp
  host: 10.0.0.xx1
  port: 502
  
  delay: 0
  message_wait_milliseconds: 30
  timeout: 5
    
  sensors:
    - name: “Active Power L1”
      slave: 1
      address: 25
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "W"
      device_class: "power"
      state_class: "measurement"
    - name: “Active Power L2”
      slave: 1
      address: 27
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "W"
      device_class: "power"
      state_class: "measurement"
    - name: “Active Power L3”
      slave: 1
      address: 29
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "W"
      device_class: "power"
      state_class: "measurement"
    - name: “Total active power”
      slave: 1
      address: 65
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "W"
      device_class: "power"
      state_class: "measurement"
    - name: “Voltage L1-N”
      slave: 1
      address: 1
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "V"
      device_class: "Voltage"
      state_class: "measurement"
    - name: “Voltage L2-N”
      slave: 1
      address: 3
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "V"
      device_class: "Voltage"
      state_class: "measurement"
    - name: “Voltage L3-N”
      slave: 1
      address: 5
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "V"
      device_class: "Voltage"
      state_class: "measurement"
    - name: “Current L1”
      slave: 1
      address: 13
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "A"
      device_class: "Current"
      state_class: "measurement"
    - name: “Current L2”
      slave: 1
      address: 15
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "A"
      device_class: "Current"
      state_class: "measurement"
    - name: “Current L3”
      slave: 1
      address: 17
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "A"
      device_class: "Current"
      state_class: "measurement"
    - name: “Frequency”
      slave: 1
      address: 55
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "Hz"
      device_class: "Frequency"
      state_class: "measurement"
    - name: “Power Factor cosphi”
      slave: 1
      address: 69
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: ""
      device_class: "Power_Factor"
      state_class: "measurement"
    - name: “Total Apparent Power”
      slave: 1
      address: 63
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "VA"
      device_class: "Apparent_Power"
      state_class: "measurement"
    - name: “Total Reactive Power”
      slave: 1
      address: 67
      input_type: holding
      data_type: float32
      offset: 0
      unit_of_measurement: "VAr"
      device_class: "Reactive_Power"
      state_class: "measurement"

füge ein Nr vor oder hinter alle “- name:” einträge der Sensoren.
also
Nr1 Active Power L1"
[ … ]
Nr2 Active Power L1"
und so weiter.

Bei der Menge an Registern würde ich dir aber völlig ungeachtet deines Problems empfehlen mit “data_type: custom” und einem “structure:” zu arbeiten.

Anstatt jedes register einzeln zu lesen.
Es gibt Limits warum es vermutlich so nicht klappt, sprich vermutlich muss man es trotzdem 1x teilen.
Aber ein

data_type: custom
structure: ">69f"

liest halt 69 register in einem Rutsch in eine Entität.
Und die kannst du dann mittels template splitten.
Sprich dinge wie state_class, unit_of_measurement, device_class werden dann nicht in der modbus read routine gemacht sondern nachdem der Modbus Lesevorgang durchgeführt wurde.

Hallo!

Sorry die späte Antwort!
Danke für deine Inputs. :grinning:
Ich konnte deinen Tipp mit “structure” noch nicht ausprobieren, werde ich aber bald … Derzeit klappen die beiden Messgeräte so ganz gut.

BG :wave: