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
Jakoś powstała wcześniejsza Twoja konfiguracja więc teraz nie rozumiesz nic z nowej konfiguracji Modbus czy po prostu Ci się nie chce?
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
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.
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
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ą
A potrzebuje tylko energie pobraną oddaną i napięcie na poszczególnych fazach. Ewentualnie ile watt leci, ale to już jakbym adresy znał
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.
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
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ć najlepiej z przykładem
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.
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ł?
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’