logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

OpenBeken 1.18.288 TuyaMCU dpID 1052 zero energii MQTT na BK7231TN

ondrejm111 09 Maj 2026 07:54 672 7
Treść została przetłumaczona angielski » polski Zobacz oryginalną wersję tematu
  • #1 21899433
    ondrejm111
    Poziom 7  
    Posty: 7
    Opis:Używam inteligentnego licznika energii opartego na TuyaMCU z najnowszą kompilacją OpenBeken (1.18.288). Wiele urządzeń TuyaMCU zgłasza wartość "0" dla całkowitej energii (dpID 105/2) przez kilka sekund po cyklu zasilania lub ponownym uruchomieniu, zanim rzeczywista wartość zostanie zsynchronizowana z MCU.
    Problem: To początkowe "0" jest natychmiast publikowane w MQTT i, jeśli trwałość nie jest dostępna lub skrypty zawodzą, nadpisuje skumulowane dane dotyczące energii w Home Assistant, powodując ogromne ujemne skoki w Energy Dashboards.
    Proponowane rozwiązanie:
    Filtr wewnętrzny: Wdrożenie flagi lub ustawienia dla linkTuyaMCUOutputToChannel, które ignoruje wartości "0", jeśli poprzednia znana wartość była wyższa niż zero.
    Ulepszenia trwałości:
    Upewnienie się, że nawet w kompilacjach, w których brakuje setChannelPersistence, sterownik energii może utrzymać ostatnią znaną wartość podczas uścisku dłoni podczas uruchamiania z TuyaMCU.Consistent
    Skrypty: Upewnienie się, że funkcja addChangeHandler z logiką warunkową (np. if $CH5 < $CH10) jest obsługiwana we wszystkich kompilacjach, w tym tych z ograniczoną pamięcią.
    Informacje o urządzeniu:Kompilacja: 3 maja 2026 13:32:48 wersja 1.18.288Chip: BK7231 (T/N)
    Jaka jest dokładna marka/model licznika energii TuyaMCU (lub identyfikator produktu/modułu Tuya) i czy możesz potwierdzić, czy dzieje się tak przy każdym ponownym uruchomieniu/cyklu zasilania, czy tylko na tym konkretnym urządzeniu?
    Używam mikroinwertera WVC (wyposażonego w moduł CBU IPEX, BK7231N) z systemem OpenBeken w wersji 1.18.288. Ponieważ jest to urządzenie słoneczne, często się przełącza (każdego ranka lub przy słabym oświetleniu).
    Czy możesz opublikować odpowiednią konfigurację / skrypt OpenBeken i krótki dziennik rozruchu lub ślad MQTT pokazujący najpierw dpID 105/2 publikowanie 0, a następnie rzeczywistą całkowitą wartość energii (w tym konfigurację linkTuyaMCUOutputToChannel / addChangeHandler, jeśli istnieje)?
    startDriver TuyaMCU
    startDriver NTP
    tuyaMcu_setBaudRate 115200
    tuyaMcu_defWiFiState 4
    
    linkTuyaMCUOutputToChannel 101 1 1
    linkTuyaMCUOutputToChannel 102 2 2
    linkTuyaMCUOutputToChannel 103 2 3
    linkTuyaMCUOutputToChannel 18 2 4
    linkTuyaMCUOutputToChannel 2 2 5
    linkTuyaMCUOutputToChannel 105 2 6
    
    setChannelType 1 Toggle
    setChannelType 2 Power_div10
    setChannelType 3 Power_div10
    setChannelType 4 Temperature
    setChannelType 5 EnergyTotal_kWh_div100
    setChannelType 6 Dimmer
    
    setChannelLabel 1 "Switch"
    setChannelLabel 2 "Power DC"
    setChannelLabel 3 "Power"
    setChannelLabel 4 "Temperature"
    setChannelLabel 5 "Total energy"
    setChannelLabel 6 "Limit %"
    
    setFlag 7 1 
    setFlag 10 1 
    setFlag 21 1 
    setFlag 40 1 
    setFlag 19 1
    setFlag 35 1
    setFlag 37 1
    setFlag 51 1
    setFlag 29 1
    
    MqttClient mi_sklad_back
    ShortName mi_sklad_back


    00:00:01 - Urządzenie uruchamia się, synchronizacja NTP.
    00:00:03 - Sterownik TuyaMCU wysyła pierwszą aktualizację:
    Info:TuyaMCU:P przetwarzanie DP 105 (typ 2): Wartość 0
    Info:MQTT:P przesyła wartość 0 do mi_sklad_back/5/get retain=1 <-- TO JEST PROBLEM
    00:00:08 - TuyaMCU w końcu synchronizuje prawdziwą pamięć wewnętrzną:
    Info:TuyaMCU:P przetwarzanie DP 105 (typ 2): Wartość 15420
    Info:MQTT:P przekazanie wartości 154.20 do mi_sklad_back/5/get retain=1
    Wykres liniowy energii (kWh) z dwoma okresami wysokich wartości i spadkiem do zera około 20:00
  • #2 21899550
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14796
    Pomógł: 659
    Ocena: 12953
    Może moglibyśmy dodać prostsze rozwiązanie - dodać podstawowy "czas rozgrzewki", podczas którego wartości TuyaMCU nie są publikowane? Na przykład pierwsze 15 sekund lub coś podobnego, konfigurowalne.
    Pomogłem? Kup mi kawę.
  • #3 21899590
    ondrejm111
    Poziom 7  
    Posty: 7
    >>21899550
    Tak, konfigurowalny czas nagrzewania jest zdecydowanie lepszy. Niektóre falowniki WVC mogą potrzebować tylko 10 s, ale inne mogą potrzebować więcej czasu, aby się ustabilizować. Polecenie takie jak tuyaMcu_setWarmUpTime [seconds] byłoby idealne, aby użytkownicy mogli dostosować je w oparciu o swój konkretny sprzęt.
  • Pomocny post
    #4 21899606
    insmod
    Poziom 31  
    Posty: 1432
    Pomógł: 168
    Ocena: 455
    Hm, może przenieść linkTuyaMCUOutputToChannel dla 105 dpId na koniec i dodać delay_s 8 przed nim?
  • #5 21900018
    ondrejm111
    Poziom 7  
    Posty: 7
    >>21899606 >>21899606
    Opóźnienie linkTuyaMCUOutputToChannel 2 2 5 nie zadziałało.
    To działa: delay_s 15 startDriver MQTT

    stopDriver MQTT
    startDriver TuyaMCU
    startDriver NTP
    tuyaMcu_setBaudRate 115200
    tuyaMcu_defWiFiState 4

    setFlag 10 1
    setFlag 29 1

    MqttClient mi_sklad_back
    ShortName mi_sklad_back

    linkTuyaMCUOutputToChannel 101 1 1
    linkTuyaMCUOutputToChannel 102 2 2
    linkTuyaMCUOutputToChannel 103 2 3
    linkTuyaMCUOutputToChannel 18 2 4
    linkTuyaMCUOutputToChannel 2 2 5
    linkTuyaMCUOutputToChannel 105 2 6

    setChannelType 1 Toggle
    setChannelType 2 Power_div10
    setChannelType 3 Power_div10
    setChannelType 4 Temperatura
    setChannelType 5 EnergyTotal_kWh_div100
    setChannelType 6 Dimmer

    setChannelLabel 1 "Switch"
    setChannelLabel 2 "Zasilanie DC"
    setChannelLabel 3 "Moc"
    setChannelLabel 4 "Temperatura"
    setChannelLabel 5 "Całkowita energia"
    setChannelLabel 6 "Limit %"

    delay_s 15

    startDriver MQTT
  • #6 21900298
    ondrejm111
    Poziom 7  
    Posty: 7
    >>21900081
    Cześć wszystkim,

    Mieliście rację, startDriver MQTT rzeczywiście nie jest poprawnym poleceniem w mojej kompilacji i wyrzucało błąd w logach. Usunąłem obie linie stopDriver i startDriver z mojego autoexec.bat.

    Okazuje się, że rozwiązanie było znacznie prostsze: wystarczyło zwykłe delay_s 15 na końcu skryptu.

    Dlaczego to działa:
    Opóźnienie zapewnia wystarczającą ilość czasu na komunikację TuyaMCU z chipem Wi-Fi i wypełnienie kanałów rzeczywistymi danymi z czujników (moc, energia, temperatura), zanim system zakończy procedurę uruchamiania i zainicjuje połączenie MQTT. Zanim klient MQTT połączy się z brokerem, "zerowe" wartości w pamięci RAM zostały już zastąpione rzeczywistymi danymi z MCU.

    Oto mój uproszczony, działający autoexec.bat:
    startDriver TuyaMCU
    startDriver NTP
    tuyaMcu_setBaudRate 115200
    tuyaMcu_defWiFiState 4

    setFlag 10 1
    setFlag 29 1

    MqttClient mi_sklad_back
    ShortName mi_sklad_back

    linkTuyaMCUOutputToChannel 101 1 1
    linkTuyaMCUOutputToChannel 102 2 2
    linkTuyaMCUOutputToChannel 103 2 3
    linkTuyaMCUOutputToChannel 18 2 4
    linkTuyaMCUOutputToChannel 2 2 5
    linkTuyaMCUOutputToChannel 105 2 6

    setChannelType 1 Toggle
    setChannelType 2 Power_div10
    setChannelType 3 Power_div10
    setChannelType 4 Temperatura
    setChannelType 5 EnergyTotal_kWh_div100
    setChannelType 6 Dimmer

    setChannelLabel 1 "Switch"
    setChannelLabel 2 "Zasilanie DC"
    setChannelLabel 3 "Moc"
    setChannelLabel 4 "Temperatura"
    setChannelLabel 5 "Całkowita energia"
    setChannelLabel 6 "Limit %"

    delay_s 15
  • #7 21900316
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14796
    Pomógł: 659
    Ocena: 12953
    Delay_s 15 na końcu autoexec.bat nic nie robi. Skrypt jest uruchamiany jako oddzielny wątek, MQTT uruchamia się samodzielnie bez skryptu. Skąd czerpiesz fałszywe informacje? Wygląda na to, że jesteś wprowadzany w błąd przez ChatGPT.
    Pomogłem? Kup mi kawę.
REKLAMA