Integracja Modbus i licznik energii SDM630

Cześć
Mam u siebie licznik energii SDM630. Podłączony jest za pomocą konwertera RS485 ->USB do Raspberry na którym postawionego mam HA. Do tej pory wszystko działało prawidłowo i mogłem odczytywać interesujące mnie wartości. Po ostatniej aktualizacji HA wypadły mi encje odpowiadające za licznik.
Ktoś może wie jak to poprawić żeby działało.

# Licznik SDM630
modbus:
  type: serial
  method: rtu
  port: /dev/ttyUSB0
  baudrate: 9600
  stopbits: 1
  bytesize: 8
  parity: N
sensor sdm:
    platform: modbus
    registers:
    - name: U L1
      unit_of_measurement: V
      slave: 1
      register: 0
      register_type: input
      count: 2
      data_type: float
      precision: 2
    - name: U L2
      unit_of_measurement: V
      slave: 1
      register: 2
      register_type: input
      count: 2
      data_type: float
      precision: 2
    - name: U L3
      unit_of_measurement: V
      slave: 1
      register: 4
      register_type: input
      count: 2
      data_type: float
      precision: 2
    - name: I L1
      unit_of_measurement: A
      slave: 1
      register: 6
      register_type: input
      count: 2
      data_type: float
      precision: 2
    - name: I L2
      unit_of_measurement: A
      slave: 1
      register: 8
      register_type: input
      count: 2
      data_type: float
      precision: 2
    - name: I L3
      unit_of_measurement: A
      slave: 1
      register: 10
      register_type: input
      count: 2
      data_type: float
      precision: 2
    - name: P L1
      unit_of_measurement: W
      slave: 1
      register: 12
      register_type: input
      count: 2
      data_type: float
      precision: 0
    - name: P L2
      unit_of_measurement: W
      slave: 1
      register: 14
      register_type: input
      count: 2
      data_type: float
      precision: 0
    - name: P L3
      unit_of_measurement: W
      slave: 1
      register: 16
      register_type: input
      count: 2
      data_type: float
      precision: 0
    - name: P
      unit_of_measurement: W
      slave: 1
      register: 52
      register_type: input
      count: 2
      data_type: float
      precision: 0
    - name: E import
      unit_of_measurement: kWh
      slave: 1
      register: 72
      register_type: input
      count: 2
      data_type: float
      precision: 2
    - name: E export
      unit_of_measurement: kWh
      slave: 1
      register: 74
      register_type: input
      count: 2
      data_type: float
      precision: 2
    - name: U L1 L2
      unit_of_measurement: V
      slave: 1
      register: 200
      register_type: input
      count: 2
      data_type: float
      precision: 2
    - name: U L2 L3
      unit_of_measurement: V
      slave: 1
      register: 202
      register_type: input
      count: 2
      data_type: float
      precision: 2
    - name: U L3 L1
      unit_of_measurement: V
      slave: 1
      register: 204
      register_type: input
      count: 2
      data_type: float
      precision: 2

Zmieniła się konfiguracja Modbus w HA, musisz dostosować wg Modbus - Home Assistant.

Ktoś wie jak to teraz poprawić żeby działało?

Jakoś powstała wcześniejsza Twoja konfiguracja więc teraz nie rozumiesz nic z nowej konfiguracji Modbus czy po prostu Ci się nie chce? :wink:
Na zachętę początek konfiguracji:

# Example configuration.yaml entry for a serial connection
modbus:
  - name: hub1
    type: serial
    baudrate: 9600
    port: /dev/ttyUSB0
    bytesize: 8
    method: rtu
    parity: N
    stopbits: 1
    sensors:
      - name: U L1
        unit_of_measurement: V
        device_class: power
        slave: 1
        address: 0
        input_type: input
        count: 2
        data_type: float
        precision: 2
2 Likes

Nie ukrywam że nie byłem autorem poprzedniej wersji a jedynie ją sobie edytowałem do swoich potrzeb. Wczoraj trochę kombinowałem ale ciągle mi wywalało błędy przy sprawdzeniu konfiguracji. Jestem prawie pewny że wpisywałem identycznie jak ten kawałek na zachętę i też wywalało błąd.

To skopiuj to co napisałem, sprawdź i pokaż jaki występuje błąd, opisy błędów są po to aby na ich podstawie stwierdzić co jest źle.

Działa. Bardzo Ci dziękuję za pomoc.
Teraz dopiero widzę że zasadnicza różnica była z zapisem:
register: 202
register_type: input

Zamiast tego pojawia się wpis:
address: 0
input_type: input

Oczywiście znika też mój wpis “sensor sdm” a pojawia się “sensors

Wklejam dla potomnych może się komuś przyda. Oczywiście można wyciągnąć więcej encji z tego licznika. Dla mnie te są wystarczające. W dokumentacji od SDM630 jest opis z adresami rejestrów które można wykorzystać.

# Licznik SDM630
modbus:
  - name: hub1
    type: serial
    baudrate: 9600
    port: /dev/ttyUSB0
    bytesize: 8
    method: rtu
    parity: N
    stopbits: 1
    sensors:
      - name: U L1
        unit_of_measurement: V
        device_class: power
        slave: 1
        address: 0
        input_type: input
        count: 2
        data_type: float
        precision: 2
      - name: U L2
        device_class: power
        unit_of_measurement: V
        slave: 1
        address: 2
        input_type: input
        count: 2
        data_type: float
        precision: 2
      - name: U L3
        unit_of_measurement: V
        device_class: power
        slave: 1
        address: 4
        input_type: input
        count: 2
        data_type: float
        precision: 2
      - name: I L1
        unit_of_measurement: A
        device_class: power
        slave: 1
        address: 6
        input_type: input
        count: 2
        data_type: float
        precision: 2
      - name: I L2
        unit_of_measurement: A
        device_class: power
        slave: 1
        address: 8
        input_type: input
        count: 2
        data_type: float
        precision: 2
      - name: I L3
        unit_of_measurement: A
        device_class: power
        slave: 1
        address: 10
        input_type: input
        count: 2
        data_type: float
        precision: 2
      - name: P L1
        unit_of_measurement: W
        device_class: power
        slave: 1
        address: 12
        input_type: input
        count: 2
        data_type: float
        precision: 0
      - name: P L2
        unit_of_measurement: W
        device_class: power
        slave: 1
        address: 14
        input_type: input
        count: 2
        data_type: float
        precision: 0
      - name: P L3
        unit_of_measurement: W
        device_class: power
        slave: 1
        address: 16
        input_type: input
        count: 2
        data_type: float
        precision: 0
      - name: P
        unit_of_measurement: W
        device_class: power
        slave: 1
        address: 52
        input_type: input
        count: 2
        data_type: float
        precision: 0
      - name: E import
        unit_of_measurement: kWh
        device_class: power
        slave: 1
        address: 72
        input_type: input
        count: 2
        data_type: float
        precision: 2
      - name: E export
        unit_of_measurement: kWh
        device_class: power
        slave: 1
        address: 74
        input_type: input
        count: 2
        data_type: float
        precision: 2
      - name: U L1 L2
        unit_of_measurement: V
        device_class: power
        slave: 1
        address: 200
        input_type: input
        count: 2
        data_type: float
        precision: 2
      - name: U L2 L3
        unit_of_measurement: V
        device_class: power
        slave: 1
        address: 202
        input_type: input
        count: 2
        data_type: float
        precision: 2
      - name: U L3 L1
        unit_of_measurement: V
        device_class: power
        slave: 1
        address: 204
        input_type: input
        count: 2
        data_type: float
        precision: 2

Hej

Koledzy gdzie znajdę rejestr adresów do SDM630?
Dziś udało mi się uruchomić te adresy od kolegi strikerbest
jednak opisy trochę mało mi mówią :slight_smile:
A potrzebuje tylko energie pobraną oddaną i napięcie na poszczególnych fazach. Ewentualnie ile watt leci, ale to już jakbym adresy znał :slight_smile:
Poratuje ktoś?

W internecie, zajęło mi to minutę: wyszukiwarka Google, fraza do wyszukania “sdm630 modbus v2 register”.
Przykładowy link do dokumentacji licznika: https://www.eastroneurope.com/images/uploads/products/protocol/SDM630_MODBUS_Protocol.pdf, niestety ale nie znalazłem żadnej dokumentacji po polsku (osobiście nie potrzebuję takiej) ale wystarczy skorzystać z Google Translatora.

1 Like

Po najnowszej aktualizacji HA do wersji 2022.04 zmieniło się data_type. Obecnie musi być wpisane: data_type: float32
Przykładowy fragment kodu w configuration.yaml

# Licznik SDM630
modbus:
  - name: hub1
    type: serial
    baudrate: 9600
    port: /dev/ttyUSB0
    bytesize: 8
    method: rtu
    parity: N
    stopbits: 1
    sensors:
      - name: U L1
        unit_of_measurement: V
        device_class: power
        slave: 1
        address: 0
        input_type: input
        count: 2
        data_type: float32
        precision: 2

Hej, prośba o podanie modelu. Jeśli masz jakiś sprawdzony i nie sprawiający problemów.

przy liczniku F&F konwerter RS485-USB za kilka zł dawał radę na krótkim kablu do testów, pomiędzy strychem a garażem już przekłamywał, wymieniłem na Waveshare i wszystko ruszyło.

Ale mam też pytanie, integruję podlicznik SDM120M i jak patrzę w dokumentację to nr rejestrów/adresów są prawie jak w SDM220 czy SDM630. Nie rozumiem dlaczego w dokumentacji adres jest np 30001 a w waszych configach jest address 0 ?? Jak doszło do tez zamiany ? Wyjaśnienie prosiłbym bardziej “analogowo” opisać :slight_smile: najlepiej z przykładem

1 Like

Popatrz na prawą stronę tabeli - “ModbusProtocol Start Address Hex”.
Po lewej to jest zapis tego samego tylko w innej konwencji - 3 z przodu mówi, że jest to input register.

Przy ostatniej aktualizacji HA 2023.2. wywalił mi się błąd związany z modbus.
Okazało się że configuration.yaml jest popsuty przez wpis o liczniku.

Component error: modbus - cannot import name 'ModbusBaseClient' from 'pymodbus.client' (/usr/local/lib/python3.10/site-packages/pymodbus/client/__init__.py)

Trafiłem na temat dotyczący tego problemu.

Niestety nie bardzo wiem co z tym fantem dalej zrobić.
Jak mogę zaaktualizować pymodbus u siebie na RPi4?

Mam właśnie to samo, przy integracji rekuperatora przez modbusa. ;(

Edit:

@strikerbest udało mi się uruchomić integracje modbusa wyłączając integracje falownika. Okazuje się, że ta integracja korzystała z modbusa ale starszej wersji bibliotek co blokowało całość. Sprawdź u siebie czy nie masz jakiejś innej integracji co to blokuje.

Po usunięciu wpisu o liczniku z sensor.yaml da się uruchomić ponownie i działa sprawnie. Jednak przez to nie działa mi integracja z licznikiem energii a to jest mi potrzebne. Może ktoś już sobie z tym poradził?

Mam dokładnie to samo. Korzystam z Integracji do DTU GitHub - ArekKubacki/Hoymiles-Plant-DTU-Pro: Hoymiles-Plant-DTU-Pro via Modbus TCP od jakiegoś czasu działa bardzo dobrze natomiast po ostatniej aktualizacji zauważyłem problem z ModBusem.

Mam połączone dwa liczniki SDM630 i korzystam z integracji na podstawie : Energy metering with Eastron SDM630 v2 Modbus - #23 by lwde - Share your Projects! - Home Assistant Community

Zauważyłem, że jeśli usunę z pliku /config/configuration.yaml :

modbus:

name: waveshare1
type: rtuovertcp
host: 192.168.x.xxx
port: 8888
sensors: modbus_sensor.yaml
To sprawdzenie konfiguracji przechodzi pozytywnie. Inaczej wyskakuje błąd : ‘str’ object has no attribute ‘get’

Ma ktoś jakiś pomysł ?

Ktoś wie co się zmieniło w Modbus w nowym wydaniu Home Assistant Core 2023.10
Po aktualizacji przestała mi działać integracja z /config/modbuss.yaml?

Panowie przy próbie instalacji wyrzuca mi taki błąd

Invalid config for ‘modbus’ at configuration.yaml, line 29: not a valid value for dictionary value ‘modbus->0->type’, got ‘tcp’,

typ ustawiłem prawidłowo

  - type: tcp
    host: 192.168.3.254
    port: 502
    name: "modbus_hub"
    sensor: !include modbus.yaml