adaptive-cover icon indicating copy to clipboard operation
adaptive-cover copied to clipboard

“Manual Override” detects false movements.

Open SirSheik opened this issue 1 year ago • 9 comments

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.) Image 072

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”. Image 067

16:51: The manual reset is forced and the status “Manual Override” becomes “Not running”. Image 068

(Waiting period) 16:55: After 4 minutes without moving the blind, a false manual override is detected again. Manual Override: “Running”. Image 069

(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. Image 071

Diagnostics dump

home-assistant_adaptive_cover_2024-08-18T15-12-02.917Z.log

SirSheik avatar Aug 18 '24 15:08 SirSheik

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.

SirSheik avatar Aug 20 '24 09:08 SirSheik

I have the same issue with 1.4.3 and HA 2024.7.4

Kejszijo avatar Aug 21 '24 08:08 Kejszijo

@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.

basbruss avatar Aug 22 '24 11:08 basbruss

@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 😉

basbruss avatar Aug 22 '24 11:08 basbruss

@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 change

So, 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.

SirSheik avatar Aug 22 '24 12:08 SirSheik

Hello @basbruss I did the change you mentioned and set the threshold to 10%. Image 127

According to the integration the calculated position should be 48%. Image 132 Image 133

But as you can see the blind has not moved in 4h and is still in the initial position 95%. Image 131

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. Image 134

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.

SirSheik avatar Aug 22 '24 16:08 SirSheik

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.

image

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.

MRobi1 avatar Oct 01 '24 20:10 MRobi1

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.

image

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.

SirSheik avatar Oct 02 '24 07:10 SirSheik

Finally I have been forced to disable the manual mode and implement it temporarily in Node-Red.

I've done the same

MRobi1 avatar Oct 04 '24 17:10 MRobi1