“Manual Override” detects false movements.
What version of Adaptive Cover are you using?
1.4.3
What version of Home Assistant are you using?
2024.8.2
Checklist
- [X] I have filled out the issue template to the best of my ability.
- [X] This issue only contains 1 issue (if you have multiple issues, open one issue for each issue).
- [X] This issue is not a duplicate issue of currently previous issues..
Describe the issue
Hello. I have configured the integration in two models of Zigbee switch for Roller blinds. In one model it works fine, but in the other specific model I can't get the “Manual Override” to work properly. I was reading a similar case (187) https://github.com/basbruss/adaptive-cover/issues/187 but I have tried several combinations both by checking the checkbox “Ignore intermediate positions during manual override (opening and closing)”. Or setting “Manual override threshold” either one or the other or both. But I can't get it to work well for these blinds. Is there anything I can do or test to try to find the problem? Thank you very much
Reproduction steps
Configuration:
(For this example both options are deactivated, but activating one or the other, the behavior is still not as expected.)
16:50: Integration is enabled. The shutter automatically goes down to the calculated position 100% => 34% The integration detects a manual override which is not correct, “Manual Override”: “Running”.
16:51: The manual reset is forced and the status “Manual Override” becomes “Not running”.
(Waiting period)
16:55: After 4 minutes without moving the blind, a false manual override is detected again. Manual Override: “Running”.
(Waiting period) 5min are waited which is the time set as “Duration of manual override”.
17:10: Wait more than 5min but Manual Override: never goes to “Not running” and the integration stops automatically controlling the blind in this state.
At 17:08 there was a quick change of state but in the same second it went back to “Running” again.
Diagnostics dump
Hello. I was testing more in depth trying to discard things and try from a simple configuration without any customization. And I have detected that the own calculations made by the integration and displayed in the “Cover Position” field, even if it doesn't move the blind, trigger the “Manual Override” mode. I will try to deepen more this weekend in the logs but I am a little lost in why this behavior if the blind does not get to move neither automatically by the integration nor manually. I just need to configure these particular blinds, the rest of the blinds are apparently working fine. Any tip or help is appreciated because I have already tried all the combinations and options that the integration allows. Thank you very much for your help.
I have the same issue with 1.4.3 and HA 2024.7.4
@SirSheik From what I can see in the provided logs your cover integration sends an additional event that differs x% from the wanted position after the position is already reached by a earlier event.
2024-08-18 16:44:06.052 DEBUG (MainThread) [custom_components.adaptive_cover.const] Wait for target: {'cover.entrada_persiana': True}
2024-08-18 16:44:06.052 DEBUG (MainThread) [custom_components.adaptive_cover.const] Updating data
2024-08-18 16:44:06.052 DEBUG (MainThread) [custom_components.adaptive_cover.const] Calculated position: 35
2024-08-18 16:44:06.053 DEBUG (MainThread) [custom_components.adaptive_cover.const] Cover state change handled
2024-08-18 16:44:06.252 DEBUG (MainThread) [custom_components.adaptive_cover] Finished fetching adaptive_cover data in 1.205 seconds (success: True)
2024-08-18 16:44:06.252 DEBUG (MainThread) [custom_components.adaptive_cover] Finished fetching adaptive_cover data in 1.214 seconds (success: True)
2024-08-18 16:44:06.253 DEBUG (MainThread) [custom_components.adaptive_cover.const] Cover state change
2024-08-18 16:44:06.253 DEBUG (MainThread) [custom_components.adaptive_cover.const] Processing state change event: StateChangedData(entity_id='cover.entrada_persiana', old_state=<state cover.entrada_persiana=open; current_position=36, backlight_mode=low, calibration=OFF, calibration_time=15.3, indicator_mode=off, last_seen=2024-08-18T16:44:05+02:00, linkquality=127, motor_reversal=OFF, moving=STOP, position=36, device_class=shutter, friendly_name=Entrada, supported_features=15 @ 2024-08-18T16:41:30.891264+02:00>, new_state=<state cover.entrada_persiana=open; current_position=35, backlight_mode=low, calibration=OFF, calibration_time=15.3, indicator_mode=off, last_seen=2024-08-18T16:44:05+02:00, linkquality=127, motor_reversal=OFF, moving=STOP, position=35, device_class=shutter, friendly_name=Entrada, supported_features=15 @ 2024-08-18T16:41:30.891264+02:00>)
2024-08-18 16:44:06.253 DEBUG (MainThread) [custom_components.adaptive_cover.const] Position 35 reached for cover.entrada_persiana
2024-08-18 16:44:06.253 DEBUG (MainThread) [custom_components.adaptive_cover.const] Wait for target: {'cover.entrada_persiana': False}
2024-08-18 16:44:06.253 DEBUG (MainThread) [custom_components.adaptive_cover.const] Updating data
2024-08-18 16:44:06.253 DEBUG (MainThread) [custom_components.adaptive_cover.const] Calculated position: 35
2024-08-18 16:44:06.254 DEBUG (MainThread) [custom_components.adaptive_cover.const] Cover state change handled
2024-08-18 16:44:06.284 DEBUG (MainThread) [custom_components.adaptive_cover] Finished fetching adaptive_cover data in 0.232 seconds (success: True)
2024-08-18 16:44:06.285 DEBUG (MainThread) [custom_components.adaptive_cover.const] Cover state change
2024-08-18 16:44:06.285 DEBUG (MainThread) [custom_components.adaptive_cover.const] Processing state change event: StateChangedData(entity_id='cover.entrada_persiana', old_state=<state cover.entrada_persiana=open; current_position=35, backlight_mode=low, calibration=OFF, calibration_time=15.3, indicator_mode=off, last_seen=2024-08-18T16:44:05+02:00, linkquality=127, motor_reversal=OFF, moving=STOP, position=35, device_class=shutter, friendly_name=Entrada, supported_features=15 @ 2024-08-18T16:41:30.891264+02:00>, new_state=<state cover.entrada_persiana=closing; current_position=36, backlight_mode=low, calibration=OFF, calibration_time=15.3, indicator_mode=off, last_seen=2024-08-18T16:44:05+02:00, linkquality=127, motor_reversal=OFF, moving=DOWN, position=36, device_class=shutter, friendly_name=Entrada, supported_features=15 @ 2024-08-18T16:44:06.255618+02:00>)
2024-08-18 16:44:06.285 DEBUG (MainThread) [custom_components.adaptive_cover.const] Wait for target: {'cover.entrada_persiana': False}
2024-08-18 16:44:06.285 DEBUG (MainThread) [custom_components.adaptive_cover.const] Updating data
2024-08-18 16:44:06.285 DEBUG (MainThread) [custom_components.adaptive_cover.const] Calculated position: 35
2024-08-18 16:44:06.285 DEBUG (MainThread) [custom_components.adaptive_cover.const] Set manual control for cover.entrada_persiana, for at least 900.0 seconds, reset_allowed: False
2024-08-18 16:44:06.286 DEBUG (MainThread) [custom_components.adaptive_cover.const] Updating last updated to 2024-08-18 14:44:06.255618+00:00 for cover.entrada_persiana. Allow reset:False
2024-08-18 16:44:06.286 DEBUG (MainThread) [custom_components.adaptive_cover.const] Cover state change handled
2024-08-18 16:44:06.288 DEBUG (MainThread) [custom_components.adaptive_cover.const] Cover state change
So, in the logs, the system is waiting for the event where your cover reaches 35%, which does happen. But then, just 0.03 seconds later, there’s an event showing the cover changed to 36%. This triggers the manual override detection. Setting the manual override threshold to a larger value could help resolve this for you.
@Kejszijo Please add debug logs and diagnostics. Although it can look as similar issue, it can be something different based on the integrations/covers you use. Stating you have the same issue without that information is not enough to be able to solve your issue 😉
@SirSheik From what I can see in the provided logs your cover integration sends an additional event that differs x% from the wanted position after the position is already reached by a earlier event. [Por lo que puedo ver en los registros proporcionados, la integración de su cobertura envía un evento adicional que difiere un x% de la posición deseada después de que un evento anterior ya haya alcanzado la posición.]
2024-08-18 16:44:06.052 DEBUG (MainThread) [custom_components.adaptive_cover.const] Wait for target: {'cover.entrada_persiana': True} 2024-08-18 16:44:06.052 DEBUG (MainThread) [custom_components.adaptive_cover.const] Updating data 2024-08-18 16:44:06.052 DEBUG (MainThread) [custom_components.adaptive_cover.const] Calculated position: 35 2024-08-18 16:44:06.053 DEBUG (MainThread) [custom_components.adaptive_cover.const] Cover state change handled 2024-08-18 16:44:06.252 DEBUG (MainThread) [custom_components.adaptive_cover] Finished fetching adaptive_cover data in 1.205 seconds (success: True) 2024-08-18 16:44:06.252 DEBUG (MainThread) [custom_components.adaptive_cover] Finished fetching adaptive_cover data in 1.214 seconds (success: True) 2024-08-18 16:44:06.253 DEBUG (MainThread) [custom_components.adaptive_cover.const] Cover state change 2024-08-18 16:44:06.253 DEBUG (MainThread) [custom_components.adaptive_cover.const] Processing state change event: StateChangedData(entity_id='cover.entrada_persiana', old_state=<state cover.entrada_persiana=open; current_position=36, backlight_mode=low, calibration=OFF, calibration_time=15.3, indicator_mode=off, last_seen=2024-08-18T16:44:05+02:00, linkquality=127, motor_reversal=OFF, moving=STOP, position=36, device_class=shutter, friendly_name=Entrada, supported_features=15 @ 2024-08-18T16:41:30.891264+02:00>, new_state=<state cover.entrada_persiana=open; current_position=35, backlight_mode=low, calibration=OFF, calibration_time=15.3, indicator_mode=off, last_seen=2024-08-18T16:44:05+02:00, linkquality=127, motor_reversal=OFF, moving=STOP, position=35, device_class=shutter, friendly_name=Entrada, supported_features=15 @ 2024-08-18T16:41:30.891264+02:00>) 2024-08-18 16:44:06.253 DEBUG (MainThread) [custom_components.adaptive_cover.const] Position 35 reached for cover.entrada_persiana 2024-08-18 16:44:06.253 DEBUG (MainThread) [custom_components.adaptive_cover.const] Wait for target: {'cover.entrada_persiana': False} 2024-08-18 16:44:06.253 DEBUG (MainThread) [custom_components.adaptive_cover.const] Updating data 2024-08-18 16:44:06.253 DEBUG (MainThread) [custom_components.adaptive_cover.const] Calculated position: 35 2024-08-18 16:44:06.254 DEBUG (MainThread) [custom_components.adaptive_cover.const] Cover state change handled 2024-08-18 16:44:06.284 DEBUG (MainThread) [custom_components.adaptive_cover] Finished fetching adaptive_cover data in 0.232 seconds (success: True) 2024-08-18 16:44:06.285 DEBUG (MainThread) [custom_components.adaptive_cover.const] Cover state change 2024-08-18 16:44:06.285 DEBUG (MainThread) [custom_components.adaptive_cover.const] Processing state change event: StateChangedData(entity_id='cover.entrada_persiana', old_state=<state cover.entrada_persiana=open; current_position=35, backlight_mode=low, calibration=OFF, calibration_time=15.3, indicator_mode=off, last_seen=2024-08-18T16:44:05+02:00, linkquality=127, motor_reversal=OFF, moving=STOP, position=35, device_class=shutter, friendly_name=Entrada, supported_features=15 @ 2024-08-18T16:41:30.891264+02:00>, new_state=<state cover.entrada_persiana=closing; current_position=36, backlight_mode=low, calibration=OFF, calibration_time=15.3, indicator_mode=off, last_seen=2024-08-18T16:44:05+02:00, linkquality=127, motor_reversal=OFF, moving=DOWN, position=36, device_class=shutter, friendly_name=Entrada, supported_features=15 @ 2024-08-18T16:44:06.255618+02:00>) 2024-08-18 16:44:06.285 DEBUG (MainThread) [custom_components.adaptive_cover.const] Wait for target: {'cover.entrada_persiana': False} 2024-08-18 16:44:06.285 DEBUG (MainThread) [custom_components.adaptive_cover.const] Updating data 2024-08-18 16:44:06.285 DEBUG (MainThread) [custom_components.adaptive_cover.const] Calculated position: 35 2024-08-18 16:44:06.285 DEBUG (MainThread) [custom_components.adaptive_cover.const] Set manual control for cover.entrada_persiana, for at least 900.0 seconds, reset_allowed: False 2024-08-18 16:44:06.286 DEBUG (MainThread) [custom_components.adaptive_cover.const] Updating last updated to 2024-08-18 14:44:06.255618+00:00 for cover.entrada_persiana. Allow reset:False 2024-08-18 16:44:06.286 DEBUG (MainThread) [custom_components.adaptive_cover.const] Cover state change handled 2024-08-18 16:44:06.288 DEBUG (MainThread) [custom_components.adaptive_cover.const] Cover state changeSo, in the logs, the system is waiting for the event where your cover reaches 35%, which does happen. [Entonces, en los registros, el sistema está esperando el evento en el que su cobertura alcance el 35%, lo cual sucede.] But then, just 0.03 seconds later, there’s an event showing the cover changed to 36%. [Pero luego, solo 0,03 segundos después, hay un evento que muestra que la cobertura cambió al 36%.] This triggers the manual override detection. [Esto activa la detección de anulación manual.] Setting the manual override threshold to a larger value could help resolve this for you. [Establecer el umbral de anulación manual en un valor mayor podría ayudarle a resolver este problema.]
Hello. Yes I have also tried to set “Manual override threshold” to 10% but although the situation improves the behavior is not as expected. With this change the integration does not detect false positives of movement during automatic operation, but after a manual movement, it never leaves the “Running” state again. This afternoon if you wish I can send you again the logs with this change, since this window only receives sun in the afternoon. Thank you very much for your time and help.
Hello @basbruss
I did the change you mentioned and set the threshold to 10%.
According to the integration the calculated position should be 48%.
But as you can see the blind has not moved in 4h and is still in the initial position 95%.
This is because at some point the integration detected a false manual movement, although the blind has not moved either manually or automatically and since then has not left that state and has been like that for 1h.
I attach again the logs for a few minutes. I have deleted logs that were not from the integration to facilitate your review. home-assistant_adaptive_cover_2024-08-22T15-57-40.668Z.log
In addition to these tests I have also tried to check the option “Ignore intermediate positions during manual override (opening and closing)” too and false movements of the blind of the integration itself are still detected without moving it manually.
Can you imagine what could be happening to detect these false manual movements and worst of all, never get out of this “Running” state? Thank you very much for your time, I really appreciate your help.
Have you found a solution to this? finding the exact same thing here.
Blinds were wide open with sun glaring through the window and found manual override was turned on for 7 of 9 blinds. I pressed the reset button which made them go to their correct position, but manual override turned right back on.
It almost seems as if large changes even if triggered by the integration are triggering the manual override.
EDIT: I had to fine tune the settings on one of my blinds. Had a minimum sun elevation of 10%, but the sun was at 9% which caused the blinds to be fully open and the sun glaring straight in the window. So I made the adjustment to minimum sun elevation down to 5%. I toggled the main control switch and turned it off and back on. The integration kicked in and started to lower the blinds and I watched the manual override turn itself on.
So it is definitely detecting large changes caused by the integration and enabling manual override.
Have you found a solution to this? finding the exact same thing here.
Blinds were wide open with sun glaring through the window and found manual override was turned on for 7 of 9 blinds. I pressed the reset button which made them go to their correct position, but manual override turned right back on.
It almost seems as if large changes even if triggered by the integration are triggering the manual override.
EDIT: I had to fine tune the settings on one of my blinds. Had a minimum sun elevation of 10%, but the sun was at 9% which caused the blinds to be fully open and the sun glaring straight in the window. So I made the adjustment to minimum sun elevation down to 5%. I toggled the main control switch and turned it off and back on. The integration kicked in and started to lower the blinds and I watched the manual override turn itself on.
So it is definitely detecting large changes caused by the integration and enabling manual override.
Hello. I have not made any progress, I was reviewing the logs in depth, but with the information they show and knowing how it is implemented at the code level, I was not able to identify the problem. Finally I have been forced to disable the manual mode and implement it temporarily in Node-Red. I don't know if @basbruss could give us some light on this issue. Thank you very much for your help.
Finally I have been forced to disable the manual mode and implement it temporarily in Node-Red.
I've done the same
