From deaba8471d0adfe5d387bb4c64aad8b234669244 Mon Sep 17 00:00:00 2001 From: cybermaus Date: Thu, 13 Oct 2022 14:59:51 +0200 Subject: [PATCH] Update xdrv_10_rules.ino Enhance %timerN% rule variables to also work for timers with SunRise/SunSet configuration --- tasmota/tasmota_xdrv_driver/xdrv_10_rules.ino | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tasmota/tasmota_xdrv_driver/xdrv_10_rules.ino b/tasmota/tasmota_xdrv_driver/xdrv_10_rules.ino index 3aeb88b76..123fdead1 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_10_rules.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_10_rules.ino @@ -1459,6 +1459,18 @@ bool findNextVariableValue(char * &pVarname, float &value) uint32_t index = sVarName.substring(5).toInt(); if (index > 0 && index <= MAX_TIMERS) { value = Settings->timer[index -1].time; +#if defined(USE_SUNRISE) + // Correct %timerN% values for sunrise/sunset timers + if (Settings->timer[index -1].mode == 1 || Settings->timer[index -1].mode == 2) { + // in this context, time variable itself is merely an offset, with <720 being negative + value += -720 + SunMinutes(Settings->timer[index -1].mode -1); + } + if (Settings->timer[index -1].mode == 2) { + // To aid rule comparative statements, sunset past midnight (high lattitudes) is expressed past 24h00 + // So sunset at 00h45 is at 24h45 + if (value<360) { value += 1440; } + } +#endif // USE_SUNRISE } #if defined(USE_SUNRISE) } else if (sVarName.equals(F("SUNRISE"))) {