Rule w Tasmota, problem z MQTT

Witam
Mam problem z automatyką lokalną ‘Rule’ na Esp8266 z Tasmota 13.1.0
Moje rule

Backlog
Rule1
ON Switch2#state=1 do publish stat/%topic%/PIR2 ON endon on Switch2#state=0 do Publish stat/%topic%/PIR2 OFF endon; rule1 1; SwitchTopic 0; SwitchMode2 2; mem1=90; mem2=10; mem3=300; mem16=1; Restart 1

Rule2 
ON System#Boot do backlog POWER1 ON; Channel1 50; POWER2 ON; Channel2 50; POWER3 ON; Channel3 50; var1=mem1; var2=mem2; var3=mem3; var15=0.5*var1; var16=mem16 ENDON 
ON Switch2#state=1 DO Backlog POWER1 ON; Channel1 %var1%*%var16%; POWER2 ON; Channel2 %var1%*%var16%; POWER3 ON; Channel3 %var1%*%var16%; RuleTimer1 %var3%; RuleTimer2 %var3%+60; RuleTimer3 %var3%+180 ENDON ON Rules#Timer=1 DO Backlog Channel1 %var15%*%var16%; Channel2 %var15%*%var16%; Channel3 %var15%*%var16% ENDON  ON Rules#Timer=2 DO Backlog Channel1 %var2%*%var16%; Channel2 %var2%*%var16%; Channel3 %var2%*%var16% ENDON ON Rules#Timer=3 DO Backlog Channel1 0; Channel2 0; Channel3 0 ENDON
backlog Rule2 1; Restart 1

Backlog rule3 on MQTT#connected do publish2 homeassistant/binary_sensor/%macaddr%_motion/config {"name":"PIR2","state_topic":"stat/%topic%/PIR2","device_class":"motion","force_update":true,"off_delay":5,"availability_topic":"tele/%topic%/LWT","payload_available":"Online","payload_not_available":"Offline","unique_id":"%macaddr%_motion2","device":{"connections":[["mac","%macaddr%"]]}} endon; Rule3 1; Restart 1

Automatyka działa prawidłowo bez wpisanych ustawień MQTT, jak również przy skonfigurowanym MQTT i połączonym do serwera.
Problem się pojawia gdy utraci MQTT połączenie z serwerem, automatyka przestaje działać, po restarcie esp też automatyka leży.

Po restarcie przy braku połączenia MQTT z serwerem (zmieniłem IP w konfiguracji)

00:00:00.001 HDW: ESP8266EX
00:00:00.050 CFG: Wczytano z pamięci flash w F5, Licz 223
00:00:00.055 QPC: Count 1
00:00:00.161 Projekt tasmota - 222 Wersja 13.1.0(TasmoCompiler-esp8266generic)-2_7_4_9(2023-08-24T06:56:23)
00:00:00.163 I2C: BH1750 found at 0x23
00:00:00.778 WIF: Łączenie z AP1 EL1_cont_light Channel 4 BSSId 00:1D:0F:F3:90:0D w trybie 11n jak 222...
00:00:02.752 WIF: Połączony
00:00:03.009 HTP: Aktywny serwer Web 222 z adresem IP 192.168.1.222
06:55:29.003 MQT: Próba połączenia...
06:55:29.220 MQT: Nie udało się nawiązać połączenia 192.168.1.201:1883, rc -2. Spróbuj ponownie 10 sec
06:55:32.184 QPC: Reset

06:56:28.157 RSL: STATE = {"Time":"2023-10-17T06:56:28","Uptime":"0T00:01:04","UptimeSec":64,"Vcc":2.293,"Heap":28,"SleepMode":"Dynamic","Sleep":10,"LoadAvg":99,"MqttCount":0,"POWER1":"ON","Channel1":90,"POWER2":"ON","Channel2":90,"POWER3":"ON","Channel3":90,"Color":"E5E5E5","Wifi":{"AP":1,"SSId":"EL1_cont_light","BSSId":"00:1D:0F:F3:90:0D","Channel":4,"Mode":"11n","RSSI":100,"Signal":-48,"LinkCount":1,"Downtime":"0T00:00:03"}}
06:56:28.193 RSL: SENSOR = {"Time":"2023-10-17T06:56:28","Switch2":"OFF","BH1750":{"Illuminance":427}}
06:56:32.007 MQT: Próba połączenia...

po symulacji ruchu

06:57:37.191 RUL: SWITCH2#STATE=1 performs "publish stat/tasmota_F76FBF/PIR2 ON"
06:57:37.194 RSL: PIR2 = ON
06:57:37.220 RUL: SWITCH2#STATE=1 performs "Backlog POWER1 ON; Channel1 *; POWER2 ON; Channel2 *; POWER3 ON; Channel3 *; RuleTimer1 ; RuleTimer2 +60; RuleTimer3 +180"
06:57:37.239 RSL: RESULT = {"POWER1":"ON"}
06:57:37.241 RSL: POWER1 = ON
06:57:37.441 RSL: RESULT = {"Channel1":90}
06:57:37.642 RSL: RESULT = {"POWER2":"ON"}
06:57:37.644 RSL: POWER2 = ON
06:57:37.847 RSL: RESULT = {"Channel2":90}
06:57:38.050 RSL: RESULT = {"POWER3":"ON"}
06:57:38.052 RSL: POWER3 = ON
06:57:38.146 RUL: SWITCH2#STATE=0 performs "Publish stat/tasmota_F76FBF/PIR2 OFF"
06:57:38.150 RSL: PIR2 = OFF
06:57:38.357 RSL: RESULT = {"Channel3":90}
06:57:38.562 RSL: RESULT = {"T1":0,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
06:57:38.768 RSL: RESULT = {"T1":0,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
06:57:38.977 RSL: RESULT = {"T1":0,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}

Proszę o pomoc w rozwiązaniu problemu.
Pozdrawiam

1 polubienie

Myślę, że będę w stanie Ci pomóc ale nie wiem czy zrozumiem co zachodzi podczas próby połączenie z brokerem MQTT. Czy prawidłowo wnioskuję, że próba uruchomienia Rule3 restartuje ESP? Może na początek daj komendę Rule3 0 i pokaż logi.

Dzięki za zainteresowanie

07:18:44.094 CMD: rule3 0
07:18:44.100 RSL: RESULT = {"Rule3":{"State":"OFF","Once":"OFF","StopOnError":"OFF","Length":377,"Free":134,"Rules":"on MQTT#connected do publish2 homeassistant/binary_sensor/%macaddr%_motion/config {\"name\":\"PIR2\",\"state_topic\":\"stat/%topic%/PIR2\",\"device_class\":\"motion\",\"force_update\":true,\"off_delay\":5,\"availability_topic\":\"tele/%topic%/LWT\",\"payload_available\":\"Online\",\"payload_not_available\":\"Offline\",\"unique_id\":\"%macaddr%_motion2\",\"device\":{\"connections\":[[\"mac\",\"%macaddr%\"]]}} endon"}}

Bardziej miałem na myśli logi z pracy modułu po uruchomieniu ESP i pracy PIR.

Nie, zachowanie po restarcie wkleiłem w poście, wygląda na to że w ogóle nie uruchamia rule

Rule3 nie zadziała dopóki nie pojawi się wyzwalacz, a ten ustawiłeś na MQTT#connected. Czyli do póki nie połączy się do brokera MQTT, to nie opublikuje komunikatu JSON.

Zdaje sobie z tego sprawę ale to niema wpływu na pozostałe rule a przynajmniej nie powinno, bo rule1 i rule2 ma działać zawsze, i działa gdy niema wpisanego adresu serwera MQTT

To jeszcze taki eksperyment jak wyłączysz Rule1 i Rule2 a zostanie włączona tylko Rule3. Czy wówczas autoprezentacja czujnika w HA zadziała prawidłowo?

Backlog Rule1 0; Rule2 0; Rule3 1

07:40:16.122 CMD: Backlog Rule1 0; Rule2 0; Rule3 1
07:40:16.195 MQT: stat/tasmota_F76FBF/RESULT = {"Rule1":{"State":"OFF","Once":"OFF","StopOnError":"OFF","Length":114,"Free":397,"Rules":"on Switch2#state=1 do publish stat/%topic%/PIR2 ON endon on Switch2#state=0 do Publish stat/%topic%/PIR2 OFF endon"}}
07:40:16.401 RUL: Rule2 on System#Boot do backlog POWER1 ON; Channel1 50; POWER2 ON; Channel2 50; POWER3 ON; Channel3 50; var1=mem1; var2=mem2; var3=mem3; var15=0.5*var1; var16=mem16 ENDON  ON Switch2#state=1 DO Backlog POWER1 ON; Channel1 %var1%*%var16%; POWER2 ON; Channel2 %var1%*%var16%; POWER3 ON; Channel3 %var1%*%var16%; RuleTimer1 %var3%; RuleTimer2 %var3%+60; RuleTimer3 %var3%+180 ENDON ON Rules#Timer=1 DO Backlog Channel1 %var15%*%var16%; Channel2 %var15%*%var16%; Channel3 %var15%*%var16% ENDON  ON Rules#Timer=2 DO
07:40:16.440 RUL: Rule2 +Backlog Channel1 %var2%*%var16%; Channel2 %var2%*%var16%; Channel3 %var2%*%var16% ENDON ON Rules#Timer=3 DO Backlog Channel1 0; Channel2 0; Channel3 0 ENDON
07:40:16.459 MQT: stat/tasmota_F76FBF/RESULT = {"Rule2":{"State":"OFF","Once":"OFF","StopOnError":"OFF","Length":661,"Free":221,"Rules":"on System#Boot do backlog POWER1 ON; Channel1 50; POWER2 ON; Channel2 50; POWER3 ON; Channel3 50; var1=mem1; var2=mem2; var3=mem3; var15=0.5*var1; var16=mem16 ENDON  ON Switch2#state=1 DO Backlog POWER1 ON; Channel1 %var1%*%var16%; POWER2 ON; Channel2 %var1%*%var16%; POWER3 ON; Channel3 %var1%*%var16%; RuleTimer1 %var3%; RuleTimer2 %var3%+60; RuleTimer3 %var3%+180 ENDON ON Rules#Timer=1 DO Backlog Channel1 %var15%*%var16%; Channel2 %var15%*%var16%; Channel3 %var15%*%var16% ENDON  ON Rules#Timer=2 DO Backlog Channel1 %var2%*%var16%; Channel2 %var2%*%var16%; Channel3 %var2%*%var16% ENDON ON Rules#Timer=3 DO Backlog Channel1 0; Channel2 0; Channel3 0 ENDON"}}
07:40:16.611 MQT: stat/tasmota_F76FBF/RESULT = {"Rule3":{"State":"ON","Once":"OFF","StopOnError":"OFF","Length":377,"Free":134,"Rules":"on MQTT#connected do publish2 homeassistant/binary_sensor/%macaddr%_motion/config {\"name\":\"PIR2\",\"state_topic\":\"stat/%topic%/PIR2\",\"device_class\":\"motion\",\"force_update\":true,\"off_delay\":5,\"availability_topic\":\"tele/%topic%/LWT\",\"payload_available\":\"Online\",\"payload_not_available\":\"Offline\",\"unique_id\":\"%macaddr%_motion2\",\"device\":{\"connections\":[[\"mac\",\"%macaddr%\"]]}} endon"}}

Cytat
Automatyka działa prawidłowo bez wpisanych ustawień MQTT, jak również przy skonfigurowanym MQTT i połączonym do serwera.
Problem się pojawia gdy utraci MQTT połączenie z serwerem, automatyka przestaje działać, po restarcie esp też automatyka leży.


nie działa rule - nie prawidłowy adres symuluje brak połączenia

działa rule

działa rule - prawidłowy adres

Znalazłem, jeszcze kawa nie działała jak czytałem za pierwszym razem:

Nie wiem dlaczego po połączeniu z brokerem MQTT dajesz komendę do restartu układu. Sam sobie zrobiłeś pętlę.

EDIT:
Wpisywanie komend znalezionych w internecie bez zrozumienia jak działają daje ten skutek.

Tu ładnie wszystko opisałem:

wywaliłem ten reset i jest tak

00:00:00.001 HDW: ESP8266EX
00:00:00.050 CFG: Wczytano z pamięci flash w F7, Licz 253
00:00:00.055 QPC: Count 1
00:00:00.161 Projekt tasmota - 222 Wersja 13.1.0(TasmoCompiler-esp8266generic)-2_7_4_9(2023-08-24T06:56:23)
00:00:00.163 I2C: BH1750 found at 0x23
00:00:00.781 WIF: Łączenie z AP1 EL1_cont_light Channel 4 BSSId 00:1D:0F:F3:90:0D w trybie 11n jak 222...
00:00:02.758 WIF: Połączony
00:00:03.008 HTP: Aktywny serwer Web 222 z adresem IP 192.168.1.222
07:54:29.007 MQT: Próba połączenia...
07:54:29.218 MQT: Nie udało się nawiązać połączenia 192.168.1.201:1883, rc -2. Spróbuj ponownie 10 sec
07:54:31.220 QPC: Reset
07:54:40.005 MQT: Próba połączenia...
07:54:40.217 MQT: Nie udało się nawiązać połączenia 192.168.1.201:1883, rc -2. Spróbuj ponownie 20 sec
07:54:48.158 RUL: SWITCH2#STATE=1 performs "publish stat/tasmota_F76FBF/PIR2 ON"
07:54:48.161 RSL: PIR2 = ON
07:54:48.186 RUL: SWITCH2#STATE=1 performs "Backlog POWER1 ON; Channel1 *; POWER2 ON; Channel2 *; POWER3 ON; Channel3 *; RuleTimer1 ; RuleTimer2 +60; RuleTimer3 +180"
07:54:48.207 RSL: RESULT = {"POWER1":"ON"}
07:54:48.209 RSL: POWER1 = ON
07:54:48.412 RSL: RESULT = {"Channel1":50}
07:54:48.602 RUL: SWITCH2#STATE=0 performs "Publish stat/tasmota_F76FBF/PIR2 OFF"
07:54:48.605 RSL: PIR2 = OFF
07:54:48.809 RSL: RESULT = {"POWER2":"ON"}
07:54:48.811 RSL: POWER2 = ON
07:54:49.017 RSL: RESULT = {"Channel2":50}
07:54:49.228 RSL: RESULT = {"POWER3":"ON"}
07:54:49.230 RSL: POWER3 = ON
07:54:49.439 RSL: RESULT = {"Channel3":50}
07:54:49.650 RSL: RESULT = {"T1":0,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
07:54:49.852 RSL: RESULT = {"T1":0,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
07:54:50.064 RSL: RESULT = {"T1":0,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}

Czyli jak? Dobrze czy źle, bo logi ucinasz w trakcie pracy… liczę, że opiszesz jak działa ta automatyzacja zapisana w rule, albo przynajmniej wskażesz źródła, z których pochodzi kod.

nadal nie działa prawidłowo po wywaleniu resetu
logi po restarcie i symulacji ruchu

00:00:00.001 HDW: ESP8266EX
00:00:00.050 CFG: Wczytano z pamięci flash w F6, Licz 254
00:00:00.056 QPC: Count 1
00:00:00.161 Projekt tasmota - 222 Wersja 13.1.0(TasmoCompiler-esp8266generic)-2_7_4_9(2023-08-24T06:56:23)
00:00:00.164 I2C: BH1750 found at 0x23
00:00:00.778 WIF: Łączenie z AP1 EL1_cont_light Channel 4 BSSId 00:1D:0F:F3:90:0D w trybie 11n jak 222...
00:00:01.754 WIF: Połączony
00:00:02.011 HTP: Aktywny serwer Web 222 z adresem IP 192.168.1.222
08:00:17.001 MQT: Próba połączenia...
08:00:17.215 MQT: Nie udało się nawiązać połączenia 192.168.1.201:1883, rc -2. Spróbuj ponownie 10 sec
08:00:20.218 QPC: Reset
08:00:28.005 MQT: Próba połączenia...
08:00:28.222 MQT: Nie udało się nawiązać połączenia 192.168.1.201:1883, rc -2. Spróbuj ponownie 20 sec
08:00:33.392 RUL: SWITCH2#STATE=1 performs "publish stat/tasmota_F76FBF/PIR2 ON"
08:00:33.396 RSL: PIR2 = ON
08:00:33.420 RUL: SWITCH2#STATE=1 performs "Backlog POWER1 ON; Channel1 *; POWER2 ON; Channel2 *; POWER3 ON; Channel3 *; RuleTimer1 ; RuleTimer2 +60; RuleTimer3 +180"
08:00:33.444 RSL: RESULT = {"POWER1":"ON"}
08:00:33.446 RSL: POWER1 = ON
08:00:33.645 RSL: RESULT = {"Channel1":50}
08:00:33.855 RSL: RESULT = {"POWER2":"ON"}
08:00:33.856 RSL: POWER2 = ON
08:00:34.112 RSL: RESULT = {"Channel2":50}
08:00:34.315 RSL: RESULT = {"POWER3":"ON"}
08:00:34.316 RSL: POWER3 = ON
08:00:34.400 RUL: SWITCH2#STATE=0 performs "Publish stat/tasmota_F76FBF/PIR2 OFF"
08:00:34.404 RSL: PIR2 = OFF
08:00:34.613 RSL: RESULT = {"Channel3":50}
08:00:34.825 RSL: RESULT = {"T1":0,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
08:00:35.033 RSL: RESULT = {"T1":0,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
08:00:35.244 RSL: RESULT = {"T1":0,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
08:00:49.007 MQT: Próba połączenia...
08:00:49.221 MQT: Nie udało się nawiązać połączenia 192.168.1.201:1883, rc -2. Spróbuj ponownie 30 sec

chyba znalazłem problem tylko jeszcze nie wiem jak go naprawić

08:16:12.945 CMD: mem
08:16:12.954 RSL: RESULT = {"Mem1":"90.000","Mem2":"10.000","Mem3":"300.000","Mem4":"","Mem5":"","Mem6":"","Mem7":"","Mem8":"","Mem9":"","Mem10":"","Mem11":"","Mem12":"","Mem13":"","Mem14":"","Mem15":"","Mem16":"1.000"}
08:16:19.065 CMD: var
08:16:19.074 RSL: RESULT = {"Var1":"","Var2":"","Var3":"","Var4":"","Var5":"","Var6":"","Var7":"","Var8":"","Var9":"","Var10":"","Var11":"","Var12":"","Var13":"","Var14":"","Var15":"","Var16":""}
08:16:30.008 MQT: Próba połączenia...

Nie zrozumiałeś co robią komendy wpisywane kolejno po kluczowym Backlog, to daje taki efekt jakbyś wpisywał kolejno każdą komendę przedzieloną średnikiem; po kolei w konsoli urządzenia. Wnioskuję, że przepisałeś skądś te zapisy i dlatego kod tych reguł jest z błędami. Zawiera komendy restartu, jeśli postarasz się zrozumieć jak to wszystko działa, to sam poprawisz kod.


Powtórzę, komenda Backlog umożliwia wpisywanie komend (przedzielonych średnikiem) ciurkiem jak leci. Zaczynasz zestaw reguł wpisem Rule1, zestawów może być 3. Taki zestaw może zawierać kilka reguł zaczynających się od ON i kończących ENDON.
Podstawową komendą włączającą dany zestaw reguł jest Rule1 1 (są też inne opcje).

Jeśli w regule zapiszesz komendę restart 1 (czyli zawrzesz ją przed ENDON), to każde uruchomienie tej reguły powoduje restart ESP. Kolejny błąd - w Twoim kodzie, w rule1, brakuje zapisy kończącego regułę czyli endon.

P.S.
Wielkość liter w komendach tasmota nie ma znaczenia. Zamiennie można używać za OFF - 0 (zero), a za ON - 1 (jeden).

Ok,
przyjmuje “reprymendę” na klatę i poczytam, sprawdzę też dokładnie składnie, ale to dopiero po południu bo teraz zbieram się zaraz do okulisty
Dzięki za zainteresowani i pomoc, zamelduje się jak będę po

Wpiszę uporządkowany kod, tak aby było łatwiej wrócić do tematu.

#pierwszy zestaw reguł
Rule1
ON Switch2#state=1 DO publish stat/%topic%/PIR2 ON ENDON
ON Switch2#state=0 do Publish stat/%topic%/PIR2 OFF ENDON

#drugi zestaw reguł
Rule2 
ON System#Boot do backlog POWER1 ON; Channel1 50; POWER2 ON; Channel2 50; POWER3 ON; Channel3 50; var1=mem1; var2=mem2; var3=mem3; var15=0.5*var1; var16=mem16 ENDON 
ON Switch2#state=1 DO Backlog POWER1 ON; Channel1 %var1%*%var16%; POWER2 ON; Channel2 %var1%*%var16%; POWER3 ON; Channel3 %var1%*%var16%; RuleTimer1 %var3%; RuleTimer2 %var3%+60; RuleTimer3 %var3%+180 ENDON
ON Rules#Timer=1 DO Backlog Channel1 %var15%*%var16%; Channel2 %var15%*%var16%; Channel3 %var15%*%var16% ENDON
ON Rules#Timer=2 DO Backlog Channel1 %var2%*%var16%; Channel2 %var2%*%var16%; Channel3 %var2%*%var16% ENDON
ON Rules#Timer=3 DO Backlog Channel1 0; Channel2 0; Channel3 0 ENDON

#trzeci zestaw reguł
Rule3
ON MQTT#connected do publish2 homeassistant/binary_sensor/%macaddr%_motion/config {"name":"PIR2","state_topic":"stat/%topic%/PIR2","device_class":"motion","force_update":true,"off_delay":5,"availability_topic":"tele/%topic%/LWT","payload_available":"Online","payload_not_available":"Offline","unique_id":"%macaddr%_motion2","device":{"connections":[["mac","%macaddr%"]]}} ENDON


#zestaw komend po backlog włącza reguły i wprowadza zmiany ustawień w ESP, końcowy restart
Backlog Rule1 1; Rule2 1; Rule3 1; SwitchTopic 0; SwitchMode2 2; mem1=90; mem2=10; mem3=300; mem16=1; Restart 1

P.S.
Nie sprawdzałem działania logiki z zestawu Rule2

Jednak ciężko się cokolwiek robi na pc z zaklejonym okiem.
Problemem był z wyzwalaczem System#Boot w Rule2 który czekał aż wifi i mqtt się połączą.

Zastosowałem Power1#Boot i zostawiłem domyślne ustawienia ale nie wiem czy to jest dobrze.

Jestem w trakcie testów