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?
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.