-
Notifications
You must be signed in to change notification settings - Fork 0
/
Tasmota-WiFi-Watchdog.txt
99 lines (73 loc) · 3.19 KB
/
Tasmota-WiFi-Watchdog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Tasmota template for Prokord PSH-WS007-EU WiFi Socket:
{"NAME":"","GPIO":[0,0,320,0,0,2720,0,0,2624,32,2656,224,0,4704],"FLAG":0,"BASE":18}
1.
Compile a new firmware with #define USE_PING
Uncomment the line in my_user_config.h
#define USE_PING
2.
In console, set WifiConfig to 4 = retry other AP without rebooting.
This prevents Tasmota rebootin without WiFi connection.
https://tasmota.github.io/docs/Commands/#wi-fi
WifiConfig 4
3.
Watchdog rule
Because System#Boot triggers after Wi-Fi and MQTT (if enabled) are connected, use System#Init.
Because Time#Minute requires that time is set, use RuleTimer which won't need time and WiFi
If you have another rule using ping, define IP address in Ping#?#Success so it's eg. Ping#8.8.8.8#Success
Rule1
ON system#init DO Var1 60 ENDON
ON system#init DO Var2 1440 ENDON
ON system#init DO Var3 5 ENDON
ON system#init DO Var16 8.8.8.8 ENDON
ON system#init DO Var5 0 ENDON
ON system#init DO Power1 1 ENDON
ON system#init DO Var4 %Var3% ENDON
ON system#init DO RuleTimer1 %Var1% ENDON
ON Var4#State>%Var2% DO Var4 %Var2% ENDON
ON Rules#Timer=1 DO backlog RuleTimer1 %Var1%; Ping4 %Var16% ENDON
ON Ping#?#Success==0 DO backlog Add5 1; Power1 1 ENDON
ON Ping#?#Success>0 DO backlog Var4 %Var3%; Var5 0; Power1 1 ENDON
ON Var5#State>=%Var4% DO backlog Mult4 2; Var5 0; Mem10 %timestamp%; Power1 0; Delay 100; Power1 1 ENDON
Paste rule into Tasmota console, enable rule1 and restart.
Rule1 1
Restart 1
Config:
Var1 <seconds> - Ping test will run every <seconds> s. Four ping packets are send (ping4).
Var2 <minutes> - Maximum limit for Var4. 24 hours is 1440*60s
Var3 <minutes> - Initial value for Var4.
Var16 <IP> - IP address for ping test.
Do not edit variables:
Var4 - Required consecutive failed ping tests after the router is power cycled.
Is doubled every time power is cycled until max value %Var2% is reached.
Restored back to the initial value %Var3% after successful ping test.
Var5 - Counts consecutive failed ping tests.
Mem10 - Timestamp of the last power cycle if time is synchronized. eg. 2023-08-27T16:04:11
When the power is cycled, the power is off for 10 seconds (Delay 100).
If the power is pressed off, power is turned back when the next ping test ends.
Four ping packets are sent in each ping test. Ping test fails if all packets time out.
tasmota/tasmota_xdrv_driver/xdrv_38_ping.ino
const uint32_t Ping_timeout_ms = 1000; // default time-out of 1 second, which is enough for LAN/WIFI
const uint32_t Ping_coarse = 1000; // interval between sending packets, 1 packet every second
Example of power cycles if ping is continuously failing. One failure is about one minute.
Time eg. day 1 00:00
5 x fail, 5min
Power cycle, 00:05
10 x fail, 10min
Power cycle, day 1 00:15
20 x fail, 20min
Power cycle, day 1 00:35
40 x fail, 40min
Power cycle, day 1 01:15
80 x fail, 1h 20min
Power cycle, day 1 02:35
160 x fail, 2h 40min
Power cycle, day 1 05:15
320 x fail, 5h, 20min
Power cycle, day 1 10:35
640 x fail, 10h, 40min
Power cycle, day 1 21:15
1280 x fail, 21h, 20min
Power cycle, day 2 18:35
1440 x fail, 24h, 0min
Power cycle, day 3 18:35
...