Zibi_007 wrote: Wed May 28, 2025 7:19 pm
Ad. 1. Jest to cały czas takie samo gniazdko/licznik (_TZ3000_5f43h46b::TS011F).
Ad. 2. Dodane jako kolejne urządzenie (wcześniej może być czujnik ruchu, termometr).
Ad. 3. Patrz ad. 1.
Edit: Skasowało mi cały (długi) post, to teraz będzie krótko

Sprawdziłem przed chwilą na czystym sofcie 0.8.8 i dodałem jako pierwsze urządzenie. Efekt? Puste pola licznika. Nie pomogło nic, ani wyłączenie gniazdka z prądu, ani reset bramki, ani ponowne parowanie. Pomogły komendy z konsoli. Wykluczyłem defekt konkretnego egzemplarza gniazdka, bo przetestowałem to na czterech różnych. Efekt zawsze taki sam
W załączniku logi z parowania.
OK, już wszystko wiem - GitHub to jednak potężne narzędzie - można prześledzić los każdej linii kodu.
Twój model licznika doprowadził mnie do deskryptora
Z2S_DEVICE_DESC_TUYA_RELAY_ELECTRICITY_METER_2, który w trakcie inicjalizacji tworzy obiekt
Z2S_ElectricityMeter z parametrem
active_query = true. Przypomniało mi to historię powstania tego parametru - też pewnie pamiętasz, że ten model licznika nie wysyłał żadnych danych sam z siebie, jak również nie reagował na polecenie
configure-reporting, więc dodałem ten parametr żeby kod bramki aktywnie odpytywał licznik co 30 sekund.
A teraz spójrz na to:
Code: Select all
virtual void readValuesFromDevice() {
2 months ago 0.7.0 return; //rest is invalid for now
if (_gateway && Zigbee.started()) {
Dwa miesiące temu, w wersji 0.7.0 dodałem tę jedną linijkę kodu na samym początku procedury
readValuesFromDevice() czyniąc ją bezużyteczną, podobnie jak ów parametr
active_query.
Stało się tak dlatego, że począwszy właśnie od wersji
0.7.0 bramka otrzymała tę funkcjonalność
timeout/
keepalive/
refresh dla liczników elektrycznych połączoną z mechanizmem odświeżania stanu (
ping).
W związku z powyższym tamten kod stał się bezużyteczny bo dublowałby i zakłócał pracę powyższego mechanizmu, więc go wyłączyłem.
Wychodzi na to, że nie napisałem o tym wyraźnie i wprost a jednocześnie nikt nie zgłosił wcześniej problemu i tak oto kończy się ta historia.
W telnet powinieneś ustawić dla tego licznika parametr
refresh na np. 30 sekund i odzyskasz oryginalną funkcjonalność a ja postaram się w najbliższym czasie tak zmodyfikować kod, żeby dla tego modelu był on ustawiony domyślnie.