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ć?
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
…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.
| 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 |
| 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) |
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 |
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 ![]()
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
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.