Witam,
obecnie mam zintegrowane protokołem Modbus RTU dwa różne liczniki energii (EASTRON SDM120M i F&F LE-03MP) na osobnych magistralach i konwerterach USB-RS485 WAVESHARE. Wszystko stabilnie działa pod HA ale chcę uprościć strukturę i czytać je na jednej magistrali do konwertera RS485-Ethernet (Waveshare RS485 TO ETH (B)).
Licznikom skonfigurowałem takie same parametry transmisji portu szeregowego i zaadresowałem jako slave 1 i slave 2. Nie byłem pewien ustawień bitu stopu, jeden licznik ma na sztywno 2 a drugi nie ma opcji zmiany 1-2 a w manualu napisano że “1 or 2”, zrobiłem test - miałem ustawiony 1 bit stopu i działało, zmieniłem na 2 bity stopu i nie było różnicy.
Mój konfig dla osobnych magistral portu szeregowego
modbus:
# Licznik F&F LE-03MP DOM
- type: serial
baudrate: 9600
bytesize: 8
method: rtu
parity: N
port: /dev/ttyUSB0
stopbits: 2
name: hub1
sensors:
- name: U L1
unit_of_measurement: V
device_class: power
slave: 1
address: 1
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: U L2
unit_of_measurement: V
device_class: power
slave: 1
address: 2
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: U L3
unit_of_measurement: V
device_class: power
slave: 1
address: 3
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: I L1
unit_of_measurement: A
device_class: power
slave: 1
address: 4
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: I L2
unit_of_measurement: A
device_class: power
slave: 1
address: 5
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: I L3
unit_of_measurement: A
device_class: power
slave: 1
address: 6
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: P L1
unit_of_measurement: kW
device_class: power
slave: 1
address: 7
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
- name: P L2
unit_of_measurement: kW
device_class: power
slave: 1
address: 8
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
- name: P L3
unit_of_measurement: kW
device_class: power
slave: 1
address: 9
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
- name: P L1-3
unit_of_measurement: kW
device_class: power
slave: 1
address: 10
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
- name: f
unit_of_measurement: Hz
device_class: power
slave: 1
address: 15
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: Pc
unit_of_measurement: kWh
device_class: power
slave: 1
address: 20
input_type: input
count: 2
data_type: int
precision: 2
scale: 0.01
- name: cos f L1
unit_of_measurement: N
device_class: power
slave: 1
address: 30
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
- name: cos f L2
unit_of_measurement: N
device_class: power
slave: 1
address: 31
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
- name: cos f L3
unit_of_measurement: N
device_class: power
slave: 1
address: 32
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
# Licznik SDM120M Pompa Ciepła
- type: serial
baudrate: 9600
port: /dev/ttyUSB2
bytesize: 8
method: rtu
parity: N
stopbits: 2
name: hub2
sensors:
- name: U PC
unit_of_measurement: V
device_class: power
slave: 2
address: 0
input_type: input
count: 2
data_type: float
precision: 2
- name: I PC
unit_of_measurement: A
device_class: power
slave: 2
address: 6
input_type: input
count: 2
data_type: float
precision: 2
- name: P PC
unit_of_measurement: kW
device_class: power
slave: 2
address: 12
input_type: input
count: 2
data_type: float
precision: 3
scale: 0.001
- name: Pc PC
unit_of_measurement: kWh
device_class: power
slave: 2
address: 72
input_type: input
count: 2
data_type: float
precision: 2
offset: 7813.05
#7813,05 kWh 01.10.2019-27.05.2022
Liczniki połączyłem szeregowo wspólną magistralą zapiętą do konwertera RS485 Ethernet.
Konfiguracja konwertera:
Trzeba ustawić sieć (statycznie lub DHCP), tryb TCP Serwer i port -Modbus zazwyczaj korzysta z portu 502, oraz port szeregowy czyli parametry transmisji jak w licznikach.
Protokół Modbus RTU jaki mają zaimplementowany liczniki różni się od Modbus TCP jakim chciałbym się połączyć z HA, ale akurat ten konwerter ma opcję konwersji RTU na TCP w opcjach konfiguracji “Modbus TCP to RTU”. Gdyby takiej opcji nie było to dla konwersji protokołu Modbus z RTU na TCP w konfiguracji HA należy zastosować:
- type: rtuovertcp
Po planowanych zmianach wszystko zadziałało beż żadnych problemów, encje pozostały bez zmian z zachowaniem historii i statystyk.
Konfiguracja po zmianach z osobnych magistral na wspólną i transmisję przez Ethernet wygląda następująco:
modbus:
# Licznik F&F LE-03MP DOM
# - type: serial
# baudrate: 9600
# bytesize: 8
# method: rtu
# parity: N
# port: /dev/ttyUSB0
# stopbits: 2
- type: tcp
host: XXX.XXX.XXX.XXX
port: 502
# name: hub1
sensors:
- name: U L1
unit_of_measurement: V
device_class: power
slave: 1
address: 1
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: U L2
unit_of_measurement: V
device_class: power
slave: 1
address: 2
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: U L3
unit_of_measurement: V
device_class: power
slave: 1
address: 3
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: I L1
unit_of_measurement: A
device_class: power
slave: 1
address: 4
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: I L2
unit_of_measurement: A
device_class: power
slave: 1
address: 5
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: I L3
unit_of_measurement: A
device_class: power
slave: 1
address: 6
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: P L1
unit_of_measurement: kW
device_class: power
slave: 1
address: 7
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
- name: P L2
unit_of_measurement: kW
device_class: power
slave: 1
address: 8
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
- name: P L3
unit_of_measurement: kW
device_class: power
slave: 1
address: 9
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
- name: P L1-3
unit_of_measurement: kW
device_class: power
slave: 1
address: 10
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
- name: f
unit_of_measurement: Hz
device_class: power
slave: 1
address: 15
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.01
- name: Pc
unit_of_measurement: kWh
device_class: power
slave: 1
address: 20
input_type: input
count: 2
data_type: int
precision: 2
scale: 0.01
- name: cos f L1
unit_of_measurement: N
device_class: power
slave: 1
address: 30
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
- name: cos f L2
unit_of_measurement: N
device_class: power
slave: 1
address: 31
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
- name: cos f L3
unit_of_measurement: N
device_class: power
slave: 1
address: 32
input_type: input
count: 1
data_type: int
precision: 2
scale: 0.001
# Licznik SDM120M Pompa Ciepła
# - type: serial
# baudrate: 9600
# port: /dev/ttyUSB2
# bytesize: 8
# method: rtu
# parity: N
# stopbits: 2
# name: hub2
# sensors:
- name: U PC
unit_of_measurement: V
device_class: power
slave: 2
address: 0
input_type: input
count: 2
data_type: float
precision: 2
- name: I PC
unit_of_measurement: A
device_class: power
slave: 2
address: 6
input_type: input
count: 2
data_type: float
precision: 2
- name: P PC
unit_of_measurement: kW
device_class: power
slave: 2
address: 12
input_type: input
count: 2
data_type: float
precision: 3
scale: 0.001
- name: Pc PC
unit_of_measurement: kWh
device_class: power
slave: 2
address: 72
input_type: input
count: 2
data_type: float
precision: 2
offset: 7813.05
#7813,05 kWh 01.10.2019-27.05.2022
EDIT:
Wszystko działa - do zamknięcia