Add an emulation switch toggle to the web UI
This commit is contained in:
parent
b148105423
commit
01a4a41809
|
@ -59,6 +59,12 @@ switch:
|
|||
output: true
|
||||
name: "Status obstruction"
|
||||
entity_category: diagnostic
|
||||
- platform: ratgdo
|
||||
type: emulation
|
||||
id: "${id_prefix}_emulation_enabled"
|
||||
ratgdo_id: ${id_prefix}
|
||||
name: "Emulation Mode"
|
||||
entity_category: config
|
||||
|
||||
binary_sensor:
|
||||
- platform: ratgdo
|
||||
|
|
|
@ -679,6 +679,10 @@ namespace ratgdo {
|
|||
{
|
||||
this->learn_state.subscribe([=](LearnState state) { defer("learn_state", [=] { f(state); }); });
|
||||
}
|
||||
void RATGDOComponent::subscribe_emulation_state(std::function<void(EmulationState)>&& f)
|
||||
{
|
||||
this->emulation_state.subscribe([=](EmulationState state) { defer("emulation_state", [=] { f(state); }); });
|
||||
}
|
||||
|
||||
// dry contact methods
|
||||
void RATGDOComponent::set_dry_contact_open_sensor(esphome::gpio::GPIOBinarySensor* dry_contact_open_sensor)
|
||||
|
|
|
@ -83,6 +83,7 @@ namespace ratgdo {
|
|||
observable<ButtonState> button_state { ButtonState::UNKNOWN };
|
||||
observable<MotionState> motion_state { MotionState::UNKNOWN };
|
||||
observable<LearnState> learn_state { LearnState::UNKNOWN };
|
||||
observable<EmulationState> emulation_state { EmulationState::INACTIVE };
|
||||
|
||||
OnceCallbacks<void(DoorState)> on_door_state_;
|
||||
|
||||
|
@ -172,6 +173,7 @@ namespace ratgdo {
|
|||
void subscribe_motion_state(std::function<void(MotionState)>&& f);
|
||||
void subscribe_sync_failed(std::function<void(bool)>&& f);
|
||||
void subscribe_learn_state(std::function<void(LearnState)>&& f);
|
||||
void subscribe_emulation_state(std::function<void(EmulationState)>&& f);
|
||||
|
||||
protected:
|
||||
RATGDOStore isr_store_ {};
|
||||
|
|
|
@ -76,6 +76,10 @@ namespace ratgdo {
|
|||
(UNKNOWN, 2))
|
||||
LearnState learn_state_toggle(LearnState state);
|
||||
|
||||
ENUM(EmulationState, uint8_t,
|
||||
(INACTIVE, 0),
|
||||
(ACTIVE, 1))
|
||||
|
||||
ENUM(PairedDevice, uint8_t,
|
||||
(ALL, 0),
|
||||
(REMOTE, 1),
|
||||
|
|
|
@ -13,6 +13,7 @@ SwitchType = ratgdo_ns.enum("SwitchType")
|
|||
CONF_TYPE = "type"
|
||||
TYPES = {
|
||||
"learn": SwitchType.RATGDO_LEARN,
|
||||
"emulation": SwitchType.RATGDO_EMULATION
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
namespace esphome {
|
||||
namespace ratgdo {
|
||||
using protocol::SetEnableEmulationMode;
|
||||
|
||||
static const char* const TAG = "ratgdo.switch";
|
||||
|
||||
|
@ -21,6 +22,18 @@ namespace ratgdo {
|
|||
this->parent_->subscribe_learn_state([=](LearnState state) {
|
||||
this->publish_state(state == LearnState::ACTIVE);
|
||||
});
|
||||
} else if (this->switch_type_ == SwitchType::RATGDO_EMULATION) {
|
||||
bool value = false;
|
||||
this->pref_ = global_preferences->make_preference<float>(this->get_object_id_hash());
|
||||
this->pref_.load(&value);
|
||||
this->state = value;
|
||||
this->parent_->emulation_state = value ? EmulationState::ACTIVE : EmulationState::INACTIVE;
|
||||
|
||||
this->parent_->subscribe_emulation_state([=](EmulationState state) {
|
||||
this->publish_state(state == EmulationState::ACTIVE);
|
||||
});
|
||||
|
||||
this->parent_->call_protocol(SetEnableEmulationMode { static_cast<bool>(this->state) });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,6 +45,12 @@ namespace ratgdo {
|
|||
} else {
|
||||
this->parent_->inactivate_learn();
|
||||
}
|
||||
} else if (this->switch_type_ == SwitchType::RATGDO_EMULATION) {
|
||||
this->state = state;
|
||||
this->parent_->emulation_state = state ? EmulationState::ACTIVE : EmulationState::INACTIVE;
|
||||
this->parent_->call_protocol(SetEnableEmulationMode { static_cast<bool>(state) });
|
||||
|
||||
this->pref_.save(&state);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,8 @@ namespace esphome {
|
|||
namespace ratgdo {
|
||||
|
||||
enum SwitchType {
|
||||
RATGDO_LEARN
|
||||
RATGDO_LEARN,
|
||||
RATGDO_EMULATION
|
||||
};
|
||||
|
||||
class RATGDOSwitch : public switch_::Switch, public RATGDOClient, public Component {
|
||||
|
@ -22,6 +23,7 @@ namespace ratgdo {
|
|||
|
||||
protected:
|
||||
SwitchType switch_type_;
|
||||
ESPPreferenceObject pref_;
|
||||
};
|
||||
|
||||
} // namespace ratgdo
|
||||
|
|
Loading…
Reference in New Issue