mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 13:34:54 +01:00
Light & Switch Inverted Restore mode (#1810)
This commit is contained in:
parent
aebad04c0b
commit
0ce57e5a39
6 changed files with 32 additions and 2 deletions
|
@ -13,6 +13,8 @@ RESTORE_MODES = {
|
||||||
"RESTORE_DEFAULT_ON": GPIOSwitchRestoreMode.GPIO_SWITCH_RESTORE_DEFAULT_ON,
|
"RESTORE_DEFAULT_ON": GPIOSwitchRestoreMode.GPIO_SWITCH_RESTORE_DEFAULT_ON,
|
||||||
"ALWAYS_OFF": GPIOSwitchRestoreMode.GPIO_SWITCH_ALWAYS_OFF,
|
"ALWAYS_OFF": GPIOSwitchRestoreMode.GPIO_SWITCH_ALWAYS_OFF,
|
||||||
"ALWAYS_ON": GPIOSwitchRestoreMode.GPIO_SWITCH_ALWAYS_ON,
|
"ALWAYS_ON": GPIOSwitchRestoreMode.GPIO_SWITCH_ALWAYS_ON,
|
||||||
|
"RESTORE_INVERTED_DEFAULT_OFF": GPIOSwitchRestoreMode.GPIO_SWITCH_RESTORE_INVERTED_DEFAULT_OFF,
|
||||||
|
"RESTORE_INVERTED_DEFAULT_ON": GPIOSwitchRestoreMode.GPIO_SWITCH_RESTORE_INVERTED_DEFAULT_ON,
|
||||||
}
|
}
|
||||||
|
|
||||||
CONF_INTERLOCK_WAIT_TIME = "interlock_wait_time"
|
CONF_INTERLOCK_WAIT_TIME = "interlock_wait_time"
|
||||||
|
|
|
@ -18,6 +18,12 @@ void GPIOSwitch::setup() {
|
||||||
case GPIO_SWITCH_RESTORE_DEFAULT_ON:
|
case GPIO_SWITCH_RESTORE_DEFAULT_ON:
|
||||||
initial_state = this->get_initial_state().value_or(true);
|
initial_state = this->get_initial_state().value_or(true);
|
||||||
break;
|
break;
|
||||||
|
case GPIO_SWITCH_RESTORE_INVERTED_DEFAULT_OFF:
|
||||||
|
initial_state = !this->get_initial_state().value_or(true);
|
||||||
|
break;
|
||||||
|
case GPIO_SWITCH_RESTORE_INVERTED_DEFAULT_ON:
|
||||||
|
initial_state = !this->get_initial_state().value_or(false);
|
||||||
|
break;
|
||||||
case GPIO_SWITCH_ALWAYS_OFF:
|
case GPIO_SWITCH_ALWAYS_OFF:
|
||||||
initial_state = false;
|
initial_state = false;
|
||||||
break;
|
break;
|
||||||
|
@ -49,6 +55,12 @@ void GPIOSwitch::dump_config() {
|
||||||
case GPIO_SWITCH_RESTORE_DEFAULT_ON:
|
case GPIO_SWITCH_RESTORE_DEFAULT_ON:
|
||||||
restore_mode = "Restore (Defaults to ON)";
|
restore_mode = "Restore (Defaults to ON)";
|
||||||
break;
|
break;
|
||||||
|
case GPIO_SWITCH_RESTORE_INVERTED_DEFAULT_ON:
|
||||||
|
restore_mode = "Restore inverted (Defaults to ON)";
|
||||||
|
break;
|
||||||
|
case GPIO_SWITCH_RESTORE_INVERTED_DEFAULT_OFF:
|
||||||
|
restore_mode = "Restore inverted (Defaults to OFF)";
|
||||||
|
break;
|
||||||
case GPIO_SWITCH_ALWAYS_OFF:
|
case GPIO_SWITCH_ALWAYS_OFF:
|
||||||
restore_mode = "Always OFF";
|
restore_mode = "Always OFF";
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -11,6 +11,8 @@ enum GPIOSwitchRestoreMode {
|
||||||
GPIO_SWITCH_RESTORE_DEFAULT_ON,
|
GPIO_SWITCH_RESTORE_DEFAULT_ON,
|
||||||
GPIO_SWITCH_ALWAYS_OFF,
|
GPIO_SWITCH_ALWAYS_OFF,
|
||||||
GPIO_SWITCH_ALWAYS_ON,
|
GPIO_SWITCH_ALWAYS_ON,
|
||||||
|
GPIO_SWITCH_RESTORE_INVERTED_DEFAULT_OFF,
|
||||||
|
GPIO_SWITCH_RESTORE_INVERTED_DEFAULT_ON,
|
||||||
};
|
};
|
||||||
|
|
||||||
class GPIOSwitch : public switch_::Switch, public Component {
|
class GPIOSwitch : public switch_::Switch, public Component {
|
||||||
|
|
|
@ -46,6 +46,8 @@ RESTORE_MODES = {
|
||||||
"RESTORE_DEFAULT_ON": LightRestoreMode.LIGHT_RESTORE_DEFAULT_ON,
|
"RESTORE_DEFAULT_ON": LightRestoreMode.LIGHT_RESTORE_DEFAULT_ON,
|
||||||
"ALWAYS_OFF": LightRestoreMode.LIGHT_ALWAYS_OFF,
|
"ALWAYS_OFF": LightRestoreMode.LIGHT_ALWAYS_OFF,
|
||||||
"ALWAYS_ON": LightRestoreMode.LIGHT_ALWAYS_ON,
|
"ALWAYS_ON": LightRestoreMode.LIGHT_ALWAYS_ON,
|
||||||
|
"RESTORE_INVERTED_DEFAULT_OFF": LightRestoreMode.LIGHT_RESTORE_INVERTED_DEFAULT_OFF,
|
||||||
|
"RESTORE_INVERTED_DEFAULT_ON": LightRestoreMode.LIGHT_RESTORE_INVERTED_DEFAULT_ON,
|
||||||
}
|
}
|
||||||
|
|
||||||
LIGHT_SCHEMA = cv.MQTT_COMMAND_COMPONENT_SCHEMA.extend(
|
LIGHT_SCHEMA = cv.MQTT_COMMAND_COMPONENT_SCHEMA.extend(
|
||||||
|
|
|
@ -106,10 +106,20 @@ void LightState::setup() {
|
||||||
switch (this->restore_mode_) {
|
switch (this->restore_mode_) {
|
||||||
case LIGHT_RESTORE_DEFAULT_OFF:
|
case LIGHT_RESTORE_DEFAULT_OFF:
|
||||||
case LIGHT_RESTORE_DEFAULT_ON:
|
case LIGHT_RESTORE_DEFAULT_ON:
|
||||||
|
case LIGHT_RESTORE_INVERTED_DEFAULT_OFF:
|
||||||
|
case LIGHT_RESTORE_INVERTED_DEFAULT_ON:
|
||||||
this->rtc_ = global_preferences.make_preference<LightStateRTCState>(this->get_object_id_hash());
|
this->rtc_ = global_preferences.make_preference<LightStateRTCState>(this->get_object_id_hash());
|
||||||
// Attempt to load from preferences, else fall back to default values from struct
|
// Attempt to load from preferences, else fall back to default values
|
||||||
if (!this->rtc_.load(&recovered)) {
|
if (!this->rtc_.load(&recovered)) {
|
||||||
recovered.state = this->restore_mode_ == LIGHT_RESTORE_DEFAULT_ON;
|
recovered.state = false;
|
||||||
|
if (this->restore_mode_ == LIGHT_RESTORE_DEFAULT_ON ||
|
||||||
|
this->restore_mode_ == LIGHT_RESTORE_INVERTED_DEFAULT_ON) {
|
||||||
|
recovered.state = true;
|
||||||
|
}
|
||||||
|
} else if (this->restore_mode_ == LIGHT_RESTORE_INVERTED_DEFAULT_OFF ||
|
||||||
|
this->restore_mode_ == LIGHT_RESTORE_INVERTED_DEFAULT_ON) {
|
||||||
|
// Inverted restore state
|
||||||
|
recovered.state = !recovered.state;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LIGHT_ALWAYS_OFF:
|
case LIGHT_ALWAYS_OFF:
|
||||||
|
|
|
@ -165,6 +165,8 @@ enum LightRestoreMode {
|
||||||
LIGHT_RESTORE_DEFAULT_ON,
|
LIGHT_RESTORE_DEFAULT_ON,
|
||||||
LIGHT_ALWAYS_OFF,
|
LIGHT_ALWAYS_OFF,
|
||||||
LIGHT_ALWAYS_ON,
|
LIGHT_ALWAYS_ON,
|
||||||
|
LIGHT_RESTORE_INVERTED_DEFAULT_OFF,
|
||||||
|
LIGHT_RESTORE_INVERTED_DEFAULT_ON,
|
||||||
};
|
};
|
||||||
|
|
||||||
/** This class represents the communication layer between the front-end MQTT layer and the
|
/** This class represents the communication layer between the front-end MQTT layer and the
|
||||||
|
|
Loading…
Reference in a new issue