diff --git a/CHANGELOG.md b/CHANGELOG.md index 996670410..ae935ce79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file. ## [2022.1.4] ### Added +- Rule variables %timer1% to %timer16% (#14619) ### Changed - Version display from 2022.01.3 to 2022.1.4 diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 90b15f23b..9dbf1ea82 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -129,6 +129,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo - Tasmota favicon to webbrowser tab [#14322](https://github.com/arendst/Tasmota/issues/14322) - Support for BME688 with latest Bosch-Sensor-API library [#14513](https://github.com/arendst/Tasmota/issues/14513) - Rule variable %color% [#14572](https://github.com/arendst/Tasmota/issues/14572) +- Rule variables %timer1% to %timer16% [#14619](https://github.com/arendst/Tasmota/issues/14619) - Support for MQ analog sensor for air quality by Francesco Adriani [#14581](https://github.com/arendst/Tasmota/issues/14581) - ESP32 single binary firmware [#14239](https://github.com/arendst/Tasmota/issues/14239) - ESP32 disable serial console when 3 (ESP32) or 2 (Other models) serial interfaces are requested [#14487](https://github.com/arendst/Tasmota/issues/14487) diff --git a/tasmota/xdrv_10_rules.ino b/tasmota/xdrv_10_rules.ino index b08cf4c60..5774ade6a 100644 --- a/tasmota/xdrv_10_rules.ino +++ b/tasmota/xdrv_10_rules.ino @@ -464,22 +464,24 @@ bool RulesRuleMatch(uint8_t rule_set, String &event, String &rule, bool stop_all if (rule_param.startsWith(F("%TIMESTAMP%"))) { rule_param = GetDateAndTime(DT_LOCAL).c_str(); } -#if defined(USE_TIMERS) && defined(USE_SUNRISE) +#if defined(USE_TIMERS) + if (rule_param.startsWith(F("%TIMER"))) { + uint32_t index = rule_param.substring(6).toInt(); + 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); + } + } + } +#if defined(USE_SUNRISE) if (rule_param.startsWith(F("%SUNRISE%"))) { rule_param = String(SunMinutes(0)); } if (rule_param.startsWith(F("%SUNSET%"))) { rule_param = String(SunMinutes(1)); } -#endif // USE_TIMERS and USE_SUNRISE -#if defined(USE_TIMERS) - for (uint32_t i = 0; i < MAX_TIMERS; i++) { - snprintf_P(stemp, sizeof(stemp), PSTR("%%TIMER%d%%"), i +1); - if (rule_param.startsWith(stemp)) { - rule_param = String(Settings->timer[i].time); - break; - } - } +#endif // USE_SUNRISE #endif // USE_TIMERS #if defined(USE_LIGHT) char scolor[LIGHT_COLOR_SIZE]; @@ -784,15 +786,15 @@ bool RuleSetProcess(uint8_t rule_set, String &event_saved) snprintf_P(stemp, sizeof(stemp), PSTR("%06X"), ESP_getChipId()); RulesVarReplace(commands, F("%DEVICEID%"), stemp); RulesVarReplace(commands, F("%MACADDR%"), NetworkUniqueId()); -#if defined(USE_TIMERS) && defined(USE_SUNRISE) - RulesVarReplace(commands, F("%SUNRISE%"), String(SunMinutes(0))); - RulesVarReplace(commands, F("%SUNSET%"), String(SunMinutes(1))); -#endif // USE_TIMERS and USE_SUNRISE #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)); } +#if defined(USE_SUNRISE) + RulesVarReplace(commands, F("%SUNRISE%"), String(SunMinutes(0))); + RulesVarReplace(commands, F("%SUNSET%"), String(SunMinutes(1))); +#endif // USE_SUNRISE #endif // USE_TIMERS #if defined(USE_LIGHT) char scolor[LIGHT_COLOR_SIZE]; @@ -1420,18 +1422,18 @@ bool findNextVariableValue(char * &pVarname, float &value) value = UtcTime(); } else if (sVarName.equals(F("LOCALTIME"))) { value = LocalTime(); -#if defined(USE_TIMERS) && defined(USE_SUNRISE) +#if defined(USE_TIMERS) + } else if (sVarName.startsWith(F("TIMER"))) { + uint32_t index = sVarName.substring(5).toInt(); + if (index > 0 && index <= MAX_TIMERS) { + value = Settings->timer[index -1].time; + } +#if defined(USE_SUNRISE) } else if (sVarName.equals(F("SUNRISE"))) { value = SunMinutes(0); } else if (sVarName.equals(F("SUNSET"))) { value = SunMinutes(1); -#endif -#if defined(USE_TIMERS) - } else if (sVarName.startsWith(F("TIMER"))) { - int index = sVarName.substring(5).toInt(); - if (index > 0 && index <= MAX_TIMERS) { - value = Settings->timer[index-1].time; - } +#endif // USE_SUNRISE #endif // USE_TIMERS // #ifdef USE_ZIGBEE // // } else if (sVarName.equals(F("ZBDEVICE"))) {