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;
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;
}