Skip to content

Commit

Permalink
fix inverted shutter inconsistencies (#19374)
Browse files Browse the repository at this point in the history
* inverted shutter fix on overflow

* fix inverted_shutter > 9

fix on inverted shutter at esp32.
fix tilt behavior on inverted shutter

* fix tilt behavior on inverted shutter
  • Loading branch information
stefanbode committed Aug 24, 2023
1 parent 65a1a4f commit d1e8563
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 12 deletions.
17 changes: 9 additions & 8 deletions tasmota/tasmota_xdrv_driver/xdrv_27_esp32_shutter.ino
Original file line number Diff line number Diff line change
Expand Up @@ -1506,21 +1506,22 @@ void CmndShutterPosition(void)

}

// if position is either 0 or 100 reset the tilt to avoid tilt moving at the end
if (XdrvMailbox.payload == 0 && ShutterRealToPercentPosition(Shutter[index].real_position, index) > 0 ) {Shutter[index].tilt_target_pos = Shutter[index].tilt_config[4];}
if (XdrvMailbox.payload == 100 && ShutterRealToPercentPosition(Shutter[index].real_position, index) < 100) {Shutter[index].tilt_target_pos = Shutter[index].tilt_config[3];}

//override tiltposition if explicit set (shutterbutton)
if (Shutter[index].tilt_target_pos_override != -128) {
Shutter[index].tilt_target_pos = tmin(tmax( Shutter[index].tilt_config[0],Shutter[index].tilt_target_pos_override ), Shutter[index].tilt_config[1]);
Shutter[index].tilt_target_pos_override = -128;
}

int8_t target_pos_percent = (XdrvMailbox.payload < 0) ? (XdrvMailbox.payload == -99 ? ShutterRealToPercentPosition(Shutter[index].real_position, index) : 0) : ((XdrvMailbox.payload > 100) ? 100 : XdrvMailbox.payload);
target_pos_percent = ((Settings->shutter_options[index] & 1) && ((SRC_MQTT != TasmotaGlobal.last_source)
|| (SRC_SERIAL != TasmotaGlobal.last_source)
|| (SRC_WEBCOMMAND != TasmotaGlobal.last_source)
)) ? 100 - target_pos_percent : target_pos_percent;
target_pos_percent = ((ShutterSettings.shutter_options[index] & 1) && ((SRC_MQTT != TasmotaGlobal.last_source) // 1
&& (SRC_SERIAL != TasmotaGlobal.last_source) // 6
&& (SRC_WEBGUI != TasmotaGlobal.last_source) // 7
&& (SRC_WEBCOMMAND != TasmotaGlobal.last_source) // 8
)) ? 100 - target_pos_percent : target_pos_percent;

// if position is either 0 or 100 reset the tilt to avoid tilt moving at the end
if (target_pos_percent == 0 && ShutterRealToPercentPosition(Shutter[index].real_position, index) > 0 ) {Shutter[index].tilt_target_pos = Shutter[index].tilt_config[4];}
if (target_pos_percent == 100 && ShutterRealToPercentPosition(Shutter[index].real_position, index) < 100) {Shutter[index].tilt_target_pos = Shutter[index].tilt_config[3];}

if (XdrvMailbox.payload != -99) {
Shutter[index].target_position = ShutterPercentToRealPosition(target_pos_percent, index);
Expand Down
9 changes: 5 additions & 4 deletions tasmota/tasmota_xdrv_driver/xdrv_27_shutter.ino
Original file line number Diff line number Diff line change
Expand Up @@ -1328,10 +1328,6 @@ void CmndShutterPosition(void)
}
}

// if position is either 0 or 100 reset the tilt to avoid tilt moving at the end
if (XdrvMailbox.payload == 0 && ShutterRealToPercentPosition(Shutter[index].real_position, index) > 0 ) {Shutter[index].tilt_target_pos = Shutter[index].tilt_config[4];}
if (XdrvMailbox.payload == 100 && ShutterRealToPercentPosition(Shutter[index].real_position, index) < 100) {Shutter[index].tilt_target_pos = Shutter[index].tilt_config[3];}

// manual override of tiltposition
if (Shutter[index].tilt_target_pos_override != -128) {
Shutter[index].tilt_target_pos = tmin(tmax( Shutter[index].tilt_config[0],Shutter[index].tilt_target_pos_override ), Shutter[index].tilt_config[1]);
Expand All @@ -1344,6 +1340,11 @@ void CmndShutterPosition(void)
&& (SRC_WEBGUI != TasmotaGlobal.last_source)
&& (SRC_WEBCOMMAND != TasmotaGlobal.last_source)
)) ? 100 - target_pos_percent : target_pos_percent;

// if position is either 0 or 100 reset the tilt to avoid tilt moving at the end
if (target_pos_percent == 0 && ShutterRealToPercentPosition(Shutter[index].real_position, index) > 0 ) {Shutter[index].tilt_target_pos = Shutter[index].tilt_config[4];}
if (target_pos_percent == 100 && ShutterRealToPercentPosition(Shutter[index].real_position, index) < 100) {Shutter[index].tilt_target_pos = Shutter[index].tilt_config[3];}

if (XdrvMailbox.payload != -99) {
//target_pos_percent = (Settings->shutter_options[index] & 1) ? 100 - target_pos_percent : target_pos_percent;
Shutter[index].target_position = ShutterPercentToRealPosition(target_pos_percent, index);
Expand Down

0 comments on commit d1e8563

Please sign in to comment.