Dobry wieczór, nie marnując czasu wziąłem się za integracje następnego urządzenia z HA.
Licznik mam połączony przez serwer TCP, jest to drugie urządzenie więc ustawiłem slave ID na 2 i jest komunikacja, posiłkuje się tabelą rejestru:
Znalazłem też inne adresy rejestru ale żadne nie działają należycie, mimo tego, że pojawiają się aktywne encje w rejestrze, to nie są to dane które odpowiadają rzeczywistym, dla przykładu ss:
Tylko w Voltage phase 1, jest coś co może przypominać poprawną wartość jeśli przesuniemy przecinek.
moja konfiguracja w yaml:
Gdzie robię błędy?
Zgodnie z tabelą modbusową licznika zmienne są zadeklarowane jako float'y. Ty masz zdefiniowane je w HA różnie, głównie jako uint. Adresy rejestrów częściowo dziesiętnie, gdzie indziej szesnastkowo. Nie jestem biegły w HA, ale sprawdziłbym odczyty licznika przed integracją najpierw w jakimś zewnętrznym narzędziu, np.: https://modbus.pl/modbus-rtu-and-tcp-ip-master-application/
To adresy które udało mi się odczytać, wszystko powyżej ma illegall data address, aż do 8200 lub nawet 16400 - jakieś adresy znalezione w sieci które faktycznie coś pokazują, jak z nich wyłuskać to co mnie interesuje?
I jeżeli zacznę od np. 8190 czytać adresy, to nie pokaże mi nic, to samo jeśli zmienię długość czytanych adresów na więcej niż 60, również nic nie pokazuje.
Zmień "Data Format" na Float albo Float Swapped (zależy który będzie działał) i pokaż odczyt rejestrów 8200-8240 ponownie.
Znalazłem taką instrukcję i tu są inne adresu do odczytu
Ja stworzyłem sobie moduł do odczytu licznika DDSU666 za pomocą ESP8622 oraz konwertera RS232 na RS485. Działa dobrze i wysyła mim dane do Domoticza po MQTT.
Jak masz mieć dane z dwóch bajtów to zwykle musisz je połączyć i stworzyć liczbę np: B1*256+B2 albo na odwrót. Zależy od licznika. Dobrze mieć też instrukcję do niego z opisem.
Prawdopodobnie tak:
modbus:
- name: "Licznik"
type: tcp
host: "192.168.1.100"
port: 502
sensors:
- name: "Uab"
slave: 1
address: 0x150AH
input_type: input
data_type: float32
scan_interval: 10
- name: "Ubc"
slave: 1
address: 0x150CH
input_type: input
data_type: float32
scan_interval: 10
- name: "Uca"
slave: 1
address: 0x150EH
input_type: input
data_type: float32
scan_interval: 10
Zamień adresy hexadecymalne na dziesiętne (150A hex = 5368 dec) albo w deklaracji zmiennych w yaml wywal h z adresu (0x to już znaczy szesnastkowo, więc zapis powinien być address: 0x150A).
Poza tym nie pokazałeś odczytu rejestrów 8200-8240 według pierwszej tabeli modbus dla urządzenia bezpośrednio z konwertera?
Po licznych próbach, dzięki manualowi od @steel_rat udało się zintegrować licznik do "pewnego stopnia"
- name: modbus_hub
type: tcp
host: 192.168.18.200
port: 502
sensors:
- name: Międzyfazowe L1-L2
unit_of_measurement: V
address: 0x150A
scale: 1
slave: 2
data_type: float32
- name: Międzyfazowe L2-L3
unit_of_measurement: V
address: 0x150C
scale: 1
slave: 2
data_type: float32
- name: Międzyfazowe L3-L1
unit_of_measurement: V
address: 0x150E
scale: 1
slave: 2
data_type: float32
- name: Napięcie L1
unit_of_measurement: V
address: 0x1510
scale: 1
slave: 2
data_type: float32
- name: Napięcie L2
unit_of_measurement: V
address: 0x1512
scale: 1
slave: 2
data_type: float32
- name: Napięcie L3
unit_of_measurement: V
address: 0x1514
scale: 1
slave: 2
data_type: float32
- name: Ia Prąd L1
address: 0x1516
slave: 2
unit_of_measurement: "A"
data_type: float32
- name: Ib Prąd L2
address: 0x1518
slave: 2
unit_of_measurement: "A"
data_type: float32
- name: Ic Prąd L3
address: 0x151A
slave: 2
unit_of_measurement: "A"
data_type: float32
- name: Combined active power, Unit kW
unit_of_measurement: "kW"
address: 0x151C
slave: 2
data_type: float32
- name: A-L1 phase active power, Unit kW
unit_of_measurement: "kW"
address: 0x151E
slave: 2
data_type: float32
- name: B-L2 phase active power, Unit kW
unit_of_measurement: "kW"
address: 0x1520
slave: 2
data_type: float32
- name: C-L3 phase active power, Unit kW
unit_of_measurement: "kW"
address: 0x1522
slave: 2
data_type: float32
- name: Combined reactive power, Unit kvar
address: 0x1524
slave: 2
unit_of_measurement: "kvar"
data_type: float32
- name: A phase reactive power, Unit kvar
address: 0x1526
slave: 2
unit_of_measurement: "kvar"
data_type: float32
- name: B phase reactive power, Unit kvar
address: 0x1528
slave: 2
unit_of_measurement: "kvar"
data_type: float32
- name: C phase reactive power, Unit kvar
address: 0x152A
slave: 2
unit_of_measurement: "kvar"
data_type: float32
- name: Combined power factor
address: 0x1534
slave: 2
unit_of_measurement: "W"
data_type: float32
- name: A phase power factor
address: 0x1536
slave: 2
unit_of_measurement: "W"
data_type: float32
- name: B phase power factor
address: 0x1538
slave: 2
unit_of_measurement: "W"
data_type: float32
- name: C phase power factor
address: 0x153A
slave: 2
unit_of_measurement: "W"
data_type: float32
- name: positive total active energy(kWh)
address: 0x101E
slave: 2
unit_of_measurement: "kWh"
data_type: float32
- name: positive A active energy
address: 0x1020
slave: 2
unit_of_measurement: "kWh"
data_type: float32
- name: positive B active energy(kWh)
address: 0x1022
slave: 2
unit_of_measurement: "kWh"
data_type: float32
- name: positive C active energy(kWh)
address: 0x1024
slave: 2
unit_of_measurement: "kWh"
data_type: float32
- name: negative total active energy(kWh)
address: 0x1028
slave: 2
unit_of_measurement: "kWh"
data_type: float32
- name: negative A active energy(kWh)
address: 0x102A
slave: 2
unit_of_measurement: "kWh"
data_type: float32
- name: negative B active energy(kWh)
address: 0x1102C
slave: 2
unit_of_measurement: "kWh"
data_type: float32
- name: negative C active energy(kWh)
address: 0x102E
slave: 2
unit_of_measurement: "kWh"
data_type: float32
- name: Częstotliwość
address: 0x154E
slave: 2
unit_of_measurement: "Hz"
data_type: float32
Tak oto wygląda mój kod w modbus.yaml, generalnie skopiowane adresy z manuala jeden po drugim.
Zastanawia mnie tylko, dlaczego np. pokazuje zużycie tylko dla L1 - 586kWh i liczy to jako całościowe, L2 niedostępne a L3 pokazuje 0. W rzeczywistości zużycie to ok. 1120kWh.
W manualu natknąłem się na info:
Czy to może oznaczać, że licznik jest źle skonfigurowany z menu samego licznika?
Czy te 586kWh jest naliczone od momentu kiedy licznik jest podpięty pod modbus?
Pod tymi rejestrami masz całkowity stan licznika jak i poszczególne fazy.
101EH ImpEp (current)positive total active energy(kWh) float 2 R
1020H ImpEpA (current)positive A active energy(kWh) float 2 R
1022H ImpEpB (current)positive B active energy(kWh) float 2 R
1024H ImpEpC (current)positive C active energy(kWh) float 2 R
1028H ExpEp (current)negative total active energy(kWh) float 2 R
102AH ExpEp A (current)negative A active energy(kWh) float 2 R
102CH ExpEp B (current)negative B active energy(kWh) float 2 R
102EH ExpEp C (current)negative C active energy(kWh) float 2 R
Miałem błąd w kodzie z "102CH ExpEp B (current)negative B active energy(kWh) float 2 R" - dlatego ta encja była niedostępna.
Zrobiłem okno poglądowe z wszystkimi statystykami energii wyprodukowanej (u mnie 0 ponieważ nie ma PV) oraz energii zużytej z sieci. Całkowite fizyczne wskazanie licznika to 1120kWh, natomiast po modbus pokazuje tylko 593kWh i tylko na L1. Czy orientuje się ktoś od czego to zależne?
Dodatkowo mam jeszcze pytanie odnośnie obecnego zużycia mocy, poniżej screen a na nim kolejno: A Phase power factor, kolejno B i C - czy to zużycie samego licznika? Kafelki poniżej to Phase active power, wyświetlają się z minusem ponieważ jak rozumiem ta energia jest pobierana z sieci?
Dla mnie negative to energia oddana do sieci.
Jak ty masz w ogóle podłączony ten licznik, trzema czy czterema przewodami.
Ten licznik bezpośrednio czy przez przekładniki podłączone. Możliwe że musisz jeszcze wartość przemnożyć przez nie.
Możesz mieć też na odwrót przekładnik podłączony wtedy będzie też moc ujemna podana.
Mam podłączony według schematu czterema żyłami przewodu WLZ w sieci TNC, bez przekładników.
Udało mi się finalnie z tym licznikiem, więc piszę ostatniego posta podsumowującego dla potomnych.
Wartość zużycia (energia pobrana z sieci) kWh była błędna, ponieważ licznik liczył był podłączony pod modbus w chwili gdy miał już ponad 500kWh a liczył następne kWh dopiero od momentu podłączenia go pod magistralę, dzisiaj byłem na budowie, przywróciłem według instrukcji ustawienia fabryczne włącznie z wyczyszczeniem pamięci licznika i teraz jest pełna synchronizacja energii pobranej z sieci.
Bardzo ważne jest, i tutaj nie wiem czy przypadkiem przy ustawianiu adresu slave dla urządzenia, nie zmieniłem innych parametrów licznika - aby parametr Ct był ustawiony poprawnie, zakres jest bardzo szeroki od 1 do 9999 i jeżeli pomiar prądu podpięty jest bezpośrednio to powinien on wynosić 1.
Następnym ważnym parametrem jest nEt - n.34 to trójfazowe czteroprzewodowe a n.33 to trójfazowe trzyprzewodowe.
Należy pilnować aby parametry konfiguracji dostępne w manualu były poprawnie ustawione z pozycji licznika.
Teraz mam pełny odczyt w poprawny sposób, a jeśli chodzi o moc pobieraną, to nawet na liczniku te wartości są pokazywane jako ujemne, bezpośrednio na liczniku w W, a poprzez modbus w kW, można sobie to przeskalować.
Tak czy owak, czy istnieje jakiś template aby pominąć wyświetlany "-" przy aktualnym poborze mocy?
A przyjście z sieci na pewno masz od dołu licznika?
A przyjście z sieci na pewno masz od dołu licznika?
Bingo. Zgubiła mnie rutyna przy podłączaniu, faktycznie było pomylone wejście-wyjście na liczniku.
Całość działa poprawnie, dziękuję @steel_rat za pomoc.
@gregorski
Cześć, mam pytanie, również dodaje ten licznik do HA. Prawie wszystko działa ale mam problem z wyświetleniem całkowitej pobranej energii dla poszczególnych faz, całkowita i faza A wskazują to samo, B i C wskazuj zero. Na próbę łapiąc się brzytwy również zresetowałem licznik ale bez zmian. Czy u Ciebie jest tak samo?
- name: Całkowita pobrana eneria
address: 0x101E
slave: 1
unit_of_measurement: "kWh"
data_type: float32
- name: Pobrana eneria L1
address: 0x1020
slave: 1
unit_of_measurement: "kWh"
data_type: float32
- name: Pobrana eneria L2
address: 0x1022
slave: 1
unit_of_measurement: "kWh"
data_type: float32
- name: Pobrana eneria L3
address: 0x1024
slave: 1
unit_of_measurement: "kWh"
data_type: float32
Cześć, mimo że adresy fizycznie istnieją to pobór całkowity nie jest rozdzielony na poszczególne fazy. Mi wystarczy info o całkowitej pobranej energii. Pewnie można stworzyć w HA jakiegoś pomocnika który na podstawie napięcia i natężenia prądu policzy ci kWh na każdej z faz osobno, jeśli tak bardzo ci na tym zależy.


























