From 4c156f715e79cbb04d8afcfaf16910bf91ac89b6 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 17 Apr 2022 11:02:38 +0200 Subject: [PATCH] Refactor Sonoff SPM power on state --- tasmota/xdrv_86_esp32_sonoff_spm.ino | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tasmota/xdrv_86_esp32_sonoff_spm.ino b/tasmota/xdrv_86_esp32_sonoff_spm.ino index c2dedfd41..152d35886 100644 --- a/tasmota/xdrv_86_esp32_sonoff_spm.ino +++ b/tasmota/xdrv_86_esp32_sonoff_spm.ino @@ -1802,6 +1802,13 @@ void SSPMEvery100ms(void) { break; case SPM_SCAN_COMPLETE: // Scan sequence finished +#ifndef SSPM_SIMULATE + if (Sspm->power_on_state) { + TasmotaGlobal.power = Sspm->power_on_state; + Sspm->power_on_state = 0; // Reset power on state solving re-scan + SetPowerOnState(); // Set power on state now that all relays have been detected + } +#endif TasmotaGlobal.discovery_counter = 1; // Force TasDiscovery() Sspm->allow_updates = 1; // Enable requests from 100mSec loop Sspm->get_energy_relay = 0; @@ -1875,14 +1882,18 @@ void SSPMEvery100ms(void) { bool SSPMSetDevicePower(void) { power_t new_power = XdrvMailbox.index; if (new_power != Sspm->old_power) { + uint32_t relay_count = 0; for (uint32_t i = 0; i < TasmotaGlobal.devices_present; i++) { uint32_t new_state = (new_power >> i) &1; if (new_state != ((Sspm->old_power >> i) &1)) { SSPMSendSetRelay(i, new_state); - Sspm->no_send_key = 10; // Disable buttons for 10 * 0.1 second + relay_count++; } } Sspm->old_power = new_power; + if (relay_count) { + Sspm->no_send_key = relay_count *10; // Disable button response for relay_count * 10 * 0.1 second + } } return true; }