Licznik energii KWS-303L - ujemna wartość poboru

jak w temacie

otwieram pokaż więcej zmieniła się data i godzina ujemnego odczytu

Szukam wartości ujemnych i ich nie mogę znaleźć w statystykach

w jaki sposób można to naprawić?

Chyba już przepadło - jedynie bezpośrednia edycja bazy danych.

Natomiast w kwestii samego wskazania - wydaje się, że to integracja modbus i masz w konfiguracji niewłaściwy typ danych (to na 100%, bo dla monotonicznie rosnącej dodatniej wartości powinien być unsigned, a najwyraźniej masz użyty jakiś typ signed) i prawdopodobnie za małą długość rejestru (przepełnienie przy obecnej długości nastąpi mniej więcej po takim czasie od teraz, jak upłynął dotąd od instalacji licznika, więc to kolejny potencjalny problem, który jeszcze się nie ujawnił)

sytuacja podobna do opisanej tam

1 polubienie

:+1: …dokładnie, bo było to w okolicy 32767

Moja obecna konfiguracja chyba będzie dobrze

      - name: KWS-303L Energia pobrana
        unit_of_measurement: kWh
        state_class: total_increasing
        device_class: energy
        data_type: uint16
        scale: 0.001
        precision: 2
        slave: 255
        address: 55    
```

była domyślna

data_type list (Optional, default: int16)

int16 
16 bit signed integer (1 register holds 1 value).

Na chwilę zmieniłem na uint32 32 bit unsigned integer (2 registers holds 1 value). i zrobiło się coś takiego(teraz nie dam rady tego usunąć 2500000kwh i licznik wskazywał jakieś kosmiczne wartości zużycia energii.

Być może potrzebny jest swap: word dla uint32

Nie wiem ile czasu używasz tego licznika, ale przepełnienie jest nieuniknione (jak już pisałem za czas zbliżony do czasu, jaki już używasz tego licznika) skoro już wartości dojechały do połowy możliwości uint16

Najlepiej byłoby sprawdzić w dokumentacji licznika.

Natomiast jeśli robisz eksperymenty, to na ich czas nazwij sobie encję inaczej (wystarczy mieć zmieniony unique_id), to unikniesz zatrucia historii encji użytkowej.


W kwestiach jak się ratować w ostateczności - można zastosować trik polegający na modyfikacji configuration.yaml w kopii ostatniego dobrego backupu i po prostu przywrócić zmodyfikowaną kopię (potrzebujesz tak naprawdę przywrócić tylko 2 rzeczy: bazę danych i konfigurację HA w YAML, więc nawet jest to możliwe wykorzystując backup cząstkowy). Dzięki temu będziesz miał możliwie minimalną dziurę w danych historycznych.

Ponieważ zazwyczaj to jest trudne by przywrócić i konfigurację i bazę i równocześnie nie dopuścić do ponownego skażenie historii, to sugeruję modyfikację backupu (ale jak się chce, to można coś wymyślić - tzn. alternatywnie możesz odłączyć rs485 i poprawić sobie konfigurację zanim przywrócisz połączenie z licznikiem)

To lipa, bo licznik wywali Ci ten sam problem przy 65.5kWh zawczasu się na to przygotuj.
Jeśli jest tak naprawdę to licznik jest g…ny

p.s.

Ktoś tą integrację robił na macanego - rejestr jest 54 uint32 (nie 55).
55 to młodsza część a 54 starsza więc chyba będzie wymagał swap:word


Zbuduj encje o innej nazwie i przetestuj aby nie psuć statystyk - będzie dobrze to podmienisz do właściwej nazwy.
Licznik ma mierzyć do 9999kWh.

Podobnie jest z innymi odczytami - niektóre są 32bitowe.

AI

Oczywiście. Przeanalizowałem przesłane zdjęcie tablicy rejestrów Modbus dla licznika KWS-303L. Poniżej znajduje się kompletne tłumaczenie najważniejszych parametrów na język polski, podzielone na sekcje zgodnie z oryginałem.

Ważna uwaga techniczna z obrazka: Wszystkie dane są traktowane jako 4-bajtowe (Double Word / Float), gdzie starszy bajt (High) znajduje się pod niższym adresem, a młodszy (Low) pod wyższym.

Parametry pomiarowe (Odczyt - Function Code 03)

Adres (Dec) Adres (Hex) Nazwa parametru Jednostka Dzielnik Uwagi
14 0x0E Napięcie V 100 Przykład: 23000 = 230.00V
17 0x11 Natężenie A 1000 Przykład: 1234 = 1.234A
25 0x19 Moc czynna W 10 Przykład: 5005 = 500.5W
33 0x21 Moc bierna Var 10
41 0x29 Moc pozorna VA 10
48 0x30 Współczynnik mocy - 1000 Cosφ (0.000 - 1.000)
51 0x33 Częstotliwość Hz 100 Przykład: 5000 = 50.00Hz
54 0x36 Energia elektryczna kWh 100 Skumulowane zużycie
60 0x3C Temperatura °C 1 Temperatura wewnętrzna urządzenia
61 0x3D Czas pracy min 1 Licznik czasu od uruchomienia

Statusy i Alarmy (Odczyt)

Adres (Dec) Adres (Hex) Opis Wartości
62 0x3E Status alarmu Bitowo: b0: nadnapięcie, b1: podnapięcie, b2: nadprąd, b3: nadmoc, b4: nadtemperatura
63 0x3F Stan przekaźnika 0: Rozłączony (OFF), 1: Załączony (ON)

Ustawienia i Limity (Zapis/Odczyt - Function Code 03/06)

Możesz zdalnie zmieniać progi zabezpieczeń, wpisując odpowiednie wartości w poniższe rejestry.

Adres (Dec) Adres (Hex) Funkcja Jednostka Dzielnik Zakres domyślny
64 0x40 Próg nadnapięciowy V 10 1.0V - 300.0V
66 0x42 Próg podnapięciowy V 10 1.0V - 300.0V
68 0x44 Próg nadprądowy A 100 0.01A - 100.00A
70 0x46 Próg mocy (Overpower) W 10 0.1W - 30000.0W
72 0x48 Próg temperatury °C 1 1°C - 150°C
74 0x4A Timer (Wyłącznik) min 1 1 - 9999 min
81 0x51 Kierunek ekranu - - 0: Normalny, 1: Odwrócony
82 0x52 Jasność ekranu % 1 0 - 100

Komendy Specjalne (Zapis)

  • Reset energii: Aby wyzerować licznik energii (kWh), należy wysłać komendę zapisu do rejestru 76 (0x4C) z wartością resetującą wskazaną w dokumentacji (zazwyczaj wpisanie 0 lub konkretnej sekwencji bitów).

  • Reset czasu: Rejestr 78 (0x4E) służy do zerowania czasu pracy.

Wskazówka: Jeśli używasz narzędzia takiego jak Modbus Poll lub integrujesz to z własnym kodem, pamiętaj, że urządzenie na zdjęciu ma ustawiony ID (Address) = 2. Jeśli Twój licznik jest nowy, spróbuj najpierw adresu 1.

W tej tabelce po chińsku nie ma takich informacji (no chyba że coś przeoczyłem, ale przeczytałem nawet załączony zrzut ekranu). W każdym razie to chyba wystarczy.

PS jednak AI się do czegoś przydaje, a ja się tak męczyłem z tym prawie pół godziny…

To z ulotki producenta z ali…

..a wystarczyło rozwiązać rebus :rofl:

Przejrzałem klika integracji dla tego licznika na github i zawiera te same błędy - ODRADZAM STOSOWANIA - błędne adresy, typy i mnożnik ( @marek_k … 37kWh to realna wartość.. nie powinno być 370kWh? ) :

  - name: KWS-303L Energia pobrana2
    unit_of_measurement: kWh
    state_class: total_increasing
    device_class: energy
    data_type: uint32
    scale: 0.01
    precision: 2
    slave: 255
    address: 54    

a gdy dodałem swap: word wynik encji 24 836 833,28 kWh

Czyli swap word nie.
Swoją drogą teoria o tym, że to będzie potrzebne powstała na etapie, gdy czytałeś z rejestru 55, a my nie widzieliśmy jeszcze dokumentacji (więc można było podejrzewać, że kontynuacja = traktowany jako 16-bitowy rejestr 56 zawiera zera, które potrzebujesz mieć na początku, a nie na końcu), a tymczasem z dokumentacji wyszło, że masz czytać rejestr 54 (który zawiera obecnie zera i którego kontynuacją jest 55, więc bajty są we właściwej kolejności).

ale mnożnik

    scale: 0.01

to masz teraz do bani, jeśli to zdjęcie demonstruje wyświetlacz z prawdziwym wskazaniem. Czyli dokumentacja zawiera błędy - powinieneś dzielić przez 1000 by się to zgadzało z wyświetlaczem.

Tak z innej beczki, wyświetlacz na zdjęciu wygląda jakbyś nie zerwał z niego folii transportowej.

To jakaś nowa instalacja (74h godziny)?

Praktyka jednak pokazuje, że mnożnik to 0.001. Przy takim średnim obciążeniu i tak licznik się przewinie za ok 2 lata.

Czy to jakiś problem, bo wtedy trzeba to zorganizować jakoś inaczej np. Licznik zerować o północy i zdefiniwać go jako dzienny?

Z drugej strony to nie wiem w czy wierzyć dokumentacji w (9999kWh) bo teoretycznie 32bity powinny wystarczyć do policzenia 4300MWh

1 polubienie

Dziękuję za pomoc. Wskazanie licznika to dodatkowa dodatkowa opcja. Zasadzie to licznik służy do sterowania pracą grzałki . Wspomaga ogrzewanie CWU w pochmurną pogodę wykorzystując nadwyżki z on-grid. W słoneczny dzień nie pracuje, gdyż mam oddzielną instalację do grzania CWU.