From 0c5f67709a0677cfaae44553fb00bee3db960da3 Mon Sep 17 00:00:00 2001 From: barbudor Date: Fri, 25 Mar 2022 22:28:05 +0100 Subject: [PATCH] fix %timerx% variable for negative values --- tasmota/xdrv_10_rules.ino | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tasmota/xdrv_10_rules.ino b/tasmota/xdrv_10_rules.ino index 2b26107a7..53774d999 100644 --- a/tasmota/xdrv_10_rules.ino +++ b/tasmota/xdrv_10_rules.ino @@ -477,7 +477,11 @@ bool RulesRuleMatch(uint8_t rule_set, String &event, String &rule, bool stop_all if ((index > 0) && (index <= MAX_TIMERS)) { snprintf_P(stemp, sizeof(stemp), PSTR("%%TIMER%d%%"), index); if (rule_param.startsWith(stemp)) { - rule_param = String(Settings->timer[index -1].time); + int32_t timer = Settings->timer[index -1].time; + if (Settings->timer[index -1].mode && (timer >= 12*60)) { + timer = -(timer - (12*60)); + } + rule_param = String(timer); } } } @@ -796,7 +800,11 @@ bool RuleSetProcess(uint8_t rule_set, String &event_saved) #if defined(USE_TIMERS) for (uint32_t i = 0; i < MAX_TIMERS; i++) { snprintf_P(stemp, sizeof(stemp), PSTR("%%TIMER%d%%"), i +1); - RulesVarReplace(commands, stemp, String(Settings->timer[i].time)); + int32_t timer = Settings->timer[i].time; + if (Settings->timer[i].mode && (timer >= 12*60)) { + timer = -(timer - 12*60); + } + RulesVarReplace(commands, stemp, String(timer)); } #if defined(USE_SUNRISE) RulesVarReplace(commands, F("%SUNRISE%"), String(SunMinutes(0)));