From c0eb28dae9eea71954ce838112948c51254e4cb3 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 16 Aug 2024 11:53:58 +0200 Subject: [PATCH] Harden shutter timeouts --- .../tasmota_xdrv_driver/xdrv_27_esp32_shutter.ino | 12 ++++++++++++ tasmota/tasmota_xdrv_driver/xdrv_27_shutter.ino | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/tasmota/tasmota_xdrv_driver/xdrv_27_esp32_shutter.ino b/tasmota/tasmota_xdrv_driver/xdrv_27_esp32_shutter.ino index 1841098f0..95a1272dc 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_27_esp32_shutter.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_27_esp32_shutter.ino @@ -215,10 +215,16 @@ void ShutterAllowPreStartProcedure(uint8_t i) { #ifdef USE_RULES AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Delay Start? var%d <99>=<%s>, max10s?"),i + 1, rules_vars[i]); // wait for response from rules +/* uint32_t start_time = millis(); while (TimePassedSince(start_time) < 10000 && (String)rules_vars[i] == "99") { delay(1); } +*/ + uint32_t end_time = millis() + 10000; + while (!TimeReached(end_time) && (String)rules_vars[i] == "99") { + delay(1); + } #endif // USE_RULES } @@ -1383,10 +1389,16 @@ void ShutterUpdateVelocity(uint8_t i) void ShutterWaitForMotorStart(uint8_t i) { +/* uint32_t start_time = Shutter[i].last_stop_time; while (TimePassedSince(start_time) < ShutterSettings.shutter_motorstop && TimePassedSince(start_time) > 0) { loop(); } +*/ + uint32_t end_time = Shutter[i].last_stop_time + ShutterSettings.shutter_motorstop; + while (!TimeReached(end_time)) { + loop(); + } //AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Stoptime done")); } diff --git a/tasmota/tasmota_xdrv_driver/xdrv_27_shutter.ino b/tasmota/tasmota_xdrv_driver/xdrv_27_shutter.ino index 9209516ac..e019cd2e0 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_27_shutter.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_27_shutter.ino @@ -654,10 +654,16 @@ void ShutterWaitForMotorStop(uint8_t i) void ShutterWaitForMotorStart(uint8_t i) { +/* uint32_t start_time = Shutter[i].last_stop_time; while (TimePassedSince(start_time) < Settings->shutter_motorstop && TimePassedSince(start_time) > 0) { loop(); } +*/ + uint32_t end_time = Shutter[i].last_stop_time + Settings->shutter_motorstop; + while (!TimeReached(end_time)) { + loop(); + } //AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Stoptime done")); } @@ -734,10 +740,16 @@ void ShutterAllowPreStartProcedure(uint8_t i) { #ifdef USE_RULES AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Delay Start? var%d <99>=<%s>, max10s?"),i + 1, rules_vars[i]); // wait for response from rules +/* uint32_t start_time = millis(); while (TimePassedSince(start_time) < 10000 && (String)rules_vars[i] == "99") { delay(1); } +*/ + uint32_t end_time = millis() + 10000; + while (!TimeReached(end_time) && (String)rules_vars[i] == "99") { + delay(1); + } #endif // USE_RULES }