Refactor Sonoff SPM power on state

This commit is contained in:
Theo Arends 2022-04-17 11:02:38 +02:00
parent a68bcdb34b
commit 4c156f715e

View File

@ -1802,6 +1802,13 @@ void SSPMEvery100ms(void) {
break; break;
case SPM_SCAN_COMPLETE: case SPM_SCAN_COMPLETE:
// Scan sequence finished // 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() TasmotaGlobal.discovery_counter = 1; // Force TasDiscovery()
Sspm->allow_updates = 1; // Enable requests from 100mSec loop Sspm->allow_updates = 1; // Enable requests from 100mSec loop
Sspm->get_energy_relay = 0; Sspm->get_energy_relay = 0;
@ -1875,14 +1882,18 @@ void SSPMEvery100ms(void) {
bool SSPMSetDevicePower(void) { bool SSPMSetDevicePower(void) {
power_t new_power = XdrvMailbox.index; power_t new_power = XdrvMailbox.index;
if (new_power != Sspm->old_power) { if (new_power != Sspm->old_power) {
uint32_t relay_count = 0;
for (uint32_t i = 0; i < TasmotaGlobal.devices_present; i++) { for (uint32_t i = 0; i < TasmotaGlobal.devices_present; i++) {
uint32_t new_state = (new_power >> i) &1; uint32_t new_state = (new_power >> i) &1;
if (new_state != ((Sspm->old_power >> i) &1)) { if (new_state != ((Sspm->old_power >> i) &1)) {
SSPMSendSetRelay(i, new_state); SSPMSendSetRelay(i, new_state);
Sspm->no_send_key = 10; // Disable buttons for 10 * 0.1 second relay_count++;
} }
} }
Sspm->old_power = new_power; 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; return true;
} }