Rules IF ELSE ELSEIF and AND OR Support - stodev-com-br/tasmota GitHub Wiki
This feature is not included in precompiled binaries.
To use it you must compile your build. Add the following to user_config_override.h:
#define USE_EXPRESSION // Add support for expression evaluation in rules (+3k2 code, +64 bytes mem)
#define SUPPORT_IF_STATEMENT // Add support for IF statement in rules (+4k2 code, -332 bytes mem)
- Support IF, ELSEIF, ELSE
- Support for
<comparison>and<logical expression>as condition - Support for executing multiple commands
- Support for nested IF statements
- Available free RAM is the only limit for logical operators, parenthesis, and nested IF statements.
Note: All the commands executed within an IF block are performed via Backlog
<if-statement>
IF (<logical-expression>) <statement-list> {ELSEIF (<logical-expression>) <statement-list>} [ELSE <statement-list>] ENDIF
<logical-expression>
<comparison-expression>-
(<comparison-expression>|<logical-expression>){{AND|OR}<logical-expression>} -
(<logical-expression>){AND|OR}<logical expression>}
<comparison-expression>
-
<expression>{=|<|>|||==|<=|>=|!=}<expression>
<statement-list>
-
<statement>{;<statement>}
<statement>
- {
<Tasmota-command>|<if-statement>}
IF statement supports 3 formats:
IF (<condition>) <statement-list> ENDIFIF (<condition>) <statement-list> ELSE <statement-list> ENDIFIF (<condition>) <statement-list> [ELSEIF (<condition>) <statement-list> ] ELSE <statement-list> ENDIF
<condition> is a logical expression, for example:
-
VAR1>=10 -
Multiple comparison expressions with logical operator
ANDorORbetween them.ANDhas higher priority thanOR. For example:
UPTIME>100 AND MEM1==1 OR MEM2==1
Parenthesis can be used to change the priority of logical expression. For example:
UPTIME>100 AND (MEM1==1 OR MEM2==1) -
The following variables can be used in
<condition>:Symbol Description VAR<x> variable (<x> = 1..MAX_RULE_VARS, e.g.,VAR2)MEM<x> persistent variable (<x> = 1..MAX_RULE_MEMS, e.g.,MEM3)TIME minutes past midnight UPTIME uptime minutes UTCTIME UTC time, UNIX timestamp, seconds since 01/01/1970 LOCALTIME local time, UNIX timestamp SUNRISE current sunrise time (minutes past midnight) SUNSET current sunset time (minutes past midnight)
<statement-list>
- A Tasmota command (e.g.,
LedPower on) - Another IF statement (
IF ... ENDIF) - Multiple Tasmota commands or IF statements separated by
;. For example:
Power1 off; LedPower on; IF (Mem1==0) Var1 Var1+1; Mem1 1 ENDIF; Delay 10; Power1 on
Backlogis implied and is not required (saves rule set buffer space).
Rule used to control pressure cooker with a Sonoff S31. Once it is finished cooking, shut off the power immediately.
Rule1
on system#boot do var1 0 endon
on energy#power>100 do if (var1!=1) ruletimer1 0;var1 1 endif endon
on tele-energy#power<50 do if (var1==1) var1 2;ruletimer1 600 endif endon
on rules#timer=1 do backlog var1 0;power off endon