Skip to content

Commit

Permalink
add option to webif
Browse files Browse the repository at this point in the history
  • Loading branch information
markirb committed Oct 12, 2024
1 parent 89d45a6 commit 4afc91a
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 4 deletions.
7 changes: 7 additions & 0 deletions fs_src/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -790,6 +790,13 @@ <h1 id="head">Garage Door</h1>
<label>Status:</label>
<span id="state"></span>
</div>
<div class="form-control">
<label>Swap Inputs (Sensors):</label>
<label class="switch">
<input type="checkbox" id="sensor_swap">
<span class="slider round"></span>
</label>
</div>
<div class="form-control">
<label>Close Sensor:</label>
<select id="close_sensor_mode">
Expand Down
2 changes: 2 additions & 0 deletions fs_src/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,7 @@ function gdoSetConfig(c, cfg, spinner) {
move_time: moveTime,
pulse_time_ms: pulseTimeMs,
close_sensor_mode: parseInt(el(c, "close_sensor_mode").value),
sensor_swap: el(c, "sensor_swap").checked,
};
if (c.data.open_sensor_mode >= 0) {
cfg.open_sensor_mode = parseInt(el(c, "open_sensor_mode").value);
Expand Down Expand Up @@ -867,6 +868,7 @@ function updateComponent(cd) {
selectIfNotModified(el(c, "close_sensor_mode"), cd.close_sensor_mode);
setValueIfNotModified(el(c, "move_time"), cd.move_time);
setValueIfNotModified(el(c, "pulse_time_ms"), cd.pulse_time_ms);
checkIfNotModified(el(c, "sensor_swap"), cd.sensor_swap);
if (cd.open_sensor_mode >= 0) {
selectIfNotModified(el(c, "open_sensor_mode"), cd.open_sensor_mode);
} else {
Expand Down
16 changes: 12 additions & 4 deletions src/shelly_hap_garage_door_opener.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,10 +118,12 @@ StatusOr<std::string> GarageDoorOpener::GetInfoJSON() const {
"cur_state: %d, cur_state_str: %Q, "
"move_time: %d, pulse_time_ms: %d, "
"close_sensor_mode: %d, open_sensor_mode: %d, "
"out_mode: %d}",
"out_mode: %d, "
"sensor_swap: %B}",
id(), type(), cfg_->name, (int) cur_state_, StateStr(cur_state_),
cfg_->move_time_ms / 1000, cfg_->pulse_time_ms, cfg_->close_sensor_mode,
cfg_->open_sensor_mode, (out_open_ != out_close_ ? cfg_->out_mode : -1));
cfg_->open_sensor_mode, (out_open_ != out_close_ ? cfg_->out_mode : -1),
cfg->sensor_swap);
}

Status GarageDoorOpener::SetConfig(const std::string &config_json,
Expand All @@ -130,11 +132,13 @@ Status GarageDoorOpener::SetConfig(const std::string &config_json,
cfg.name = nullptr;
int move_time = -1, pulse_time_ms = -1, out_mode = -1;
int close_sensor_mode = -1, open_sensor_mode = -1;
int8_t sensor_swap = -1;
json_scanf(config_json.c_str(), config_json.size(),
"{name: %Q, move_time: %d, pulse_time_ms: %d, "
"close_sensor_mode: %d, open_sensor_mode: %d, out_mode: %d}",
"close_sensor_mode: %d, open_sensor_mode: %d, out_mode: %d, "
"sensor_swap: %B}",
&cfg.name, &move_time, &pulse_time_ms, &close_sensor_mode,
&open_sensor_mode, &out_mode);
&open_sensor_mode, &out_mode, &sensor_swap);
mgos::ScopedCPtr name_owner((void *) cfg.name);
// Validate.
if (cfg.name != nullptr && strlen(cfg.name) > 64) {
Expand All @@ -152,6 +156,10 @@ Status GarageDoorOpener::SetConfig(const std::string &config_json,
if (out_mode > 2) {
return mgos::Errorf(STATUS_INVALID_ARGUMENT, "invalid %s", "out_mode");
}
if (sensor_swap != -1 && sensor_swap != cfg_->sensor_swap) {
cfg_->sensor_swap = sensor_swap;
*restart_required = true;
}
// We don't impose a limit on pulse time.
// Apply.
if (cfg.name != nullptr && strcmp(cfg_->name, cfg.name) != 0) {
Expand Down

0 comments on commit 4afc91a

Please sign in to comment.