Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Somfy Izymo io not showing status while opening / closing #56

Open
0BanZai0 opened this issue Sep 9, 2024 · 13 comments
Open

Somfy Izymo io not showing status while opening / closing #56

0BanZai0 opened this issue Sep 9, 2024 · 13 comments
Assignees

Comments

@0BanZai0
Copy link

0BanZai0 commented Sep 9, 2024

Hi, I'm successfully using my_velux for roller shutters with somfy io motors.
Unfortunately on one window I have to use an conventional motor coupled to an Somfy Izymo io transmitter (https://shop.somfy.de/unterputz-empfanger-rollladen-io.html).
With this component I can control the movement of the shutter, but unfortunately I can't see the status of the shutter while moving (opening / closing).

@pawlizio pawlizio self-assigned this Sep 10, 2024
@pawlizio
Copy link
Owner

Well, the status (opening / closing) is set, when the API submits some useful data. In order to evaluate this I would need a log extract of the pyvlx library.

Please enable the logging on your configuration.yaml as follows:

logger:
  default: warn
  logs:
    pyvlx: debug

...and submit the relevant log entries at the time when you send the command and your cover is moving.

Just to let you know: This library as well as pyvlx are just developed by HA community and we do not have any support from Velux. That means, if the API does not provide useful data, we cannot change this.

@0BanZai0
Copy link
Author

Thanks Paul / Dankeschön 😀

I absolutely love your and the community's contribution here.

I'll try to extract the log as soon as possible!
I'm moving in the new home in the next week and hope that I'll have internet by then.
On my other issue you'll read what problem I had already without an internet connection.

@0BanZai0
Copy link
Author

Well, the status (opening / closing) is set, when the API submits some useful data. In order to evaluate this I would need a log extract of the pyvlx library.

Please enable the logging on your configuration.yaml as follows:

logger:
  default: warn
  logs:
    pyvlx: debug

...and submit the relevant log entries at the time when you send the command and your cover is moving.

Just to let you know: This library as well as pyvlx are just developed by HA community and we do not have any support from Velux. That means, if the API does not provide useful data, we cannot change this.

Hi @pawlizio - I'm trying to make some sense out of the debug log file right now. Herefore I have one question ahead.
I have some heartbeat settings in the device configuration of my KLF 200. From my general understanding the heartbeat will check all my velux devices for their current state within the "Heartbeat interval". This is quite cluttering for the debug log.
I'm facing some latency issues between pressing my switch and having the cover reacting.

I have the following settings for the gateway:
image

Question: Is my configuration correct? Is there some performance improvement to be expected when changing something? To what cost ? ;)

Now to the log when moving my Somfy Izymo when setting a new target position:

2024-10-27 19:21:10.696 DEBUG (MainThread) [pyvlx] SEND: <FrameCommandSendRequest node_ids="[3]" active_parameter="0" parameter="92 %" functional_parameter="fp1: 0 %, fp2: 0 %, fp3: 0 %, fp4: 0 %, fp5: 0 %, fp6: 0 %, fp7: 0 %, fp8: 0 %, fp9: 0 %, fp10: 0 %, fp11: 0 %, fp12: 0 %, fp13: 0 %, fp14: 0 %, fp15: 0 %, fp16: 0 %, " session_id="10470" originator="Originator.USER"/> 2024-10-27 19:21:10.860 DEBUG (MainThread) [pyvlx] REC: <FrameCommandSendConfirmation session_id="10470" status="CommandSendConfirmationStatus.ACCEPTED"/> 2024-10-27 19:21:10.883 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="3" state="NOT_USED" current_position="96 %" target="92 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-23 10:00:00"/> 2024-10-27 19:21:10.884 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="3" state="NOT_USED" current_position="96 %" target="92 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-23 10:00:00"/> 2024-10-27 19:21:10.884 DEBUG (MainThread) [pyvlx] Rollladen Schlafzimmer Nord position changed to: 96 % 2024-10-27 19:21:10.992 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="3" state="NOT_USED" current_position="96 %" target="92 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-23 10:00:00"/> 2024-10-27 19:21:10.992 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="3" state="NOT_USED" current_position="96 %" target="92 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-23 10:00:00"/> 2024-10-27 19:21:10.992 DEBUG (MainThread) [pyvlx] Rollladen Schlafzimmer Nord position changed to: 96 % 2024-10-27 19:21:11.099 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="3" state="NOT_USED" current_position="96 %" target="92 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-23 10:00:00"/> 2024-10-27 19:21:11.100 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="3" state="NOT_USED" current_position="96 %" target="92 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-23 10:00:00"/> 2024-10-27 19:21:11.100 DEBUG (MainThread) [pyvlx] Rollladen Schlafzimmer Nord position changed to: 96 % 2024-10-27 19:21:11.207 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="3" state="NOT_USED" current_position="96 %" target="92 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-23 10:00:00"/> 2024-10-27 19:21:11.208 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="3" state="NOT_USED" current_position="96 %" target="92 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-23 10:00:00"/> 2024-10-27 19:21:11.208 DEBUG (MainThread) [pyvlx] Rollladen Schlafzimmer Nord position changed to: 96 % 2024-10-27 19:21:11.389 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="3" state="NOT_USED" current_position="96 %" target="92 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-23 10:00:00"/> 2024-10-27 19:21:11.389 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="3" state="NOT_USED" current_position="96 %" target="92 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-23 10:00:00"/> 2024-10-27 19:21:11.389 DEBUG (MainThread) [pyvlx] Rollladen Schlafzimmer Nord position changed to: 96 % 2024-10-27 19:21:11.463 DEBUG (MainThread) [pyvlx] REC: <FrameCommandRunStatusNotification session_id="10470" status_id="1" index_id="3" node_parameter="0" parameter_value="23552"/> 2024-10-27 19:21:11.731 DEBUG (MainThread) [pyvlx] SEND: <FrameCommandSendRequest node_ids="[3]" active_parameter="0" parameter="0 %" functional_parameter="fp1: 0 %, fp2: 0 %, fp3: 0 %, fp4: 0 %, fp5: 0 %, fp6: 0 %, fp7: 0 %, fp8: 0 %, fp9: 0 %, fp10: 0 %, fp11: 0 %, fp12: 0 %, fp13: 0 %, fp14: 0 %, fp15: 0 %, fp16: 0 %, " session_id="10471" originator="Originator.USER"/> 2024-10-27 19:21:11.887 DEBUG (MainThread) [pyvlx] REC: <FrameCommandSendConfirmation session_id="10471" status="CommandSendConfirmationStatus.ACCEPTED"/> 2024-10-27 19:21:11.888 DEBUG (MainThread) [pyvlx] REC: <FrameCommandRunStatusNotification session_id="10470" status_id="1" index_id="3" node_parameter="0" parameter_value="65535"/> 2024-10-27 19:21:11.889 DEBUG (MainThread) [pyvlx] REC: <FrameSessionFinishedNotification session_id="10470"/> 2024-10-27 19:21:12.107 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="3" state="NOT_USED" current_position="46 %" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-24 04:12:16"/> 2024-10-27 19:21:12.107 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="3" state="NOT_USED" current_position="46 %" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-24 04:12:16"/> 2024-10-27 19:21:12.107 DEBUG (MainThread) [pyvlx] Rollladen Schlafzimmer Nord position changed to: 46 % 2024-10-27 19:21:12.181 DEBUG (MainThread) [pyvlx] REC: <FrameCommandRunStatusNotification session_id="10471" status_id="1" index_id="3" node_parameter="0" parameter_value="24576"/> 2024-10-27 19:21:12.851 DEBUG (MainThread) [pyvlx] REC: <FrameCommandRunStatusNotification session_id="10471" status_id="1" index_id="3" node_parameter="0" parameter_value="24576"/> 2024-10-27 19:21:12.851 DEBUG (MainThread) [pyvlx] REC: <FrameSessionFinishedNotification session_id="10471"/> 2024-10-27 19:21:12.854 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="3" state="DONE" current_position="48 %" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-24 22:24:32"/> 2024-10-27 19:21:12.854 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="3" state="DONE" current_position="48 %" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2014-05-24 22:24:32"/> 2024-10-27 19:21:12.854 DEBUG (MainThread) [pyvlx] Rollladen Schlafzimmer Nord position changed to: 48 % 2024-10-27 19:21:12.872 DEBUG (MainThread) [pyvlx] REC: <FrameActivationLogUpdatedNotification/>

Is this the right log for you?

@pawlizio
Copy link
Owner

Well, the API provide the FrameNodeStatePositionChangedNotification, which is basically used to set opening/closing state, but other conditions are not given.

Currently this opening or closing is set under following conditions, see here:

if (position.position > target.position <= Parameter.MAX) and (
                    (frame.state == OperatingState.EXECUTING)
                    or frame.remaining_time > 0

In your case the API provide the following info:
state="NOT_USED" current_position="96 %" target="92 %" ... remaining_time="0"

so neither the state nor the remaining_time is useful to determine that a movement is ongoing and how long it will take, only the info that the target and current_position are different.

@0BanZai0
Copy link
Author

Thanks for your fast analysis!
That's unfortunate... so there would be just one fallback condition to determine that it is moving. The case if "current_position"<>"target".
I'm wondering if there might be some information about the motor / controller somewhere in the messages available to use as a condition...

I believe the "node id" is the respective motor / client within the velux gateway?

Could you please give me a hint to my previous post if the heartbeat configuration is correct like this?

THANKS :)

@pawlizio
Copy link
Owner

pawlizio commented Oct 27, 2024

...well, can you check the node_type of this node, probably you will find this log after a reboot of HA, when pyvlx is loading and the node are loading with their node_type. If this is a very special node_type, it could be possible to define another condition for this.
...the basic intention for the heartbeat is that the connection to the KLF200 keeps alive, so the socket keeps open... reporting of state changes i.e. if you use a remote (I assume you mean a remote switch, not a HA switch) is basically realized by the house_status_monitor. However house_status_monitor does not provide instant feedback, but only after some time, depending on the device type. There are more details about this intervalls in the API spec
. However the feedback of functional parameter (like tilt of blinds) are not reported by this house_status_monitor, so user started to extend the heartbeat and included additional node status request for some node_types. Therefore the intervall was no longer only used to keep the connection to KLF200 alive, but now also this is used as a poll intervall to get the states about specific device_types. So if you activate "Load all states on Heartbeat" there will be poll requests for all nodes to get their states on each heartbeat. The invervall (in seconds) defines how fast the heart beats, so in which intervall this cycle is repeated.

@0BanZai0
Copy link
Author

Thanks again for your help.
I'm using PTM215 Zigbee switches via Z2M in HA to control my covers. Sometimes I use the somfy remotes because they just work without the delays and they are able to send the stop command :)

So I should better keep the heartbeat and settings as is right now?

@pawlizio
Copy link
Owner

pawlizio commented Oct 27, 2024 via email

@0BanZai0
Copy link
Author

Yeah sometimes even timeouts. But could also be an issue with the range of my KLF200. I'm using a second KLF200 as a range extender since yesterday, it got a little bit better.

The heartbeat is on default (30s).
I have 16 devices (6 rollers, 9 shutters, 1 window).

Do you know of any way to monitor if my signals arrive at the shutter?

@pawlizio
Copy link
Owner

You should compare the time distance between the command_send confirmation frame and the actual cover movement. Normally the commands are executed quite real-time.

@0BanZai0
Copy link
Author

Well, looks quite fast. Maybe the motor is the slow part here...
I've also switched to a Heartbeat Interval of 600 (ms i believe)...

2024-10-27 21:20:02.981 DEBUG (MainThread) [pyvlx] SEND: <FrameCommandSendRequest node_ids="[5]" active_parameter="0" parameter="0 %" functional_parameter="fp1: 50 %, fp2: 0 %, fp3: 0 %, fp4: 0 %, fp5: 0 %, fp6: 0 %, fp7: 0 %, fp8: 0 %, fp9: 0 %, fp10: 0 %, fp11: 0 %, fp12: 0 %, fp13: 0 %, fp14: 0 %, fp15: 0 %, fp16: 0 %, " session_id="1" originator="Originator.USER"/> 2024-10-27 21:20:03.096 DEBUG (MainThread) [pyvlx] REC: <FrameCommandSendConfirmation session_id="1" status="CommandSendConfirmationStatus.ACCEPTED"/> 2024-10-27 21:20:03.120 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="5" state="NOT_USED" current_position="UNKNOWN" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-16 16:19:44"/> 2024-10-27 21:20:03.121 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="5" state="NOT_USED" current_position="UNKNOWN" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-16 16:19:44"/> 2024-10-27 21:20:03.235 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="5" state="NOT_USED" current_position="UNKNOWN" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-16 16:19:44"/> 2024-10-27 21:20:03.235 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="5" state="NOT_USED" current_position="UNKNOWN" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-16 16:19:44"/> 2024-10-27 21:20:03.434 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="5" state="NOT_USED" current_position="UNKNOWN" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-16 16:19:44"/> 2024-10-27 21:20:03.434 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="5" state="NOT_USED" current_position="UNKNOWN" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-16 16:19:44"/> 2024-10-27 21:20:03.918 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="5" state="NOT_USED" current_position="UNKNOWN" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-16 16:19:44"/> 2024-10-27 21:20:03.918 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="5" state="NOT_USED" current_position="UNKNOWN" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-16 16:19:44"/> 2024-10-27 21:20:04.853 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="5" state="NOT_USED" current_position="UNKNOWN" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-17 10:32:00"/> 2024-10-27 21:20:04.853 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="5" state="NOT_USED" current_position="UNKNOWN" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-17 10:32:00"/> 2024-10-27 21:20:05.720 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="5" state="NOT_USED" current_position="UNKNOWN" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-18 04:44:16"/> 2024-10-27 21:20:05.720 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="5" state="NOT_USED" current_position="UNKNOWN" target="0 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-18 04:44:16"/> 2024-10-27 21:20:05.797 DEBUG (MainThread) [pyvlx] REC: <FrameCommandRunStatusNotification session_id="1" status_id="1" index_id="5" node_parameter="0" parameter_value="34648"/> 2024-10-27 21:20:06.781 DEBUG (MainThread) [pyvlx] REC: <FrameCommandRunStatusNotification session_id="1" status_id="1" index_id="5" node_parameter="0" parameter_value="65535"/> 2024-10-27 21:20:06.782 DEBUG (MainThread) [pyvlx] REC: <FrameSessionFinishedNotification session_id="1"/> 2024-10-27 21:20:06.802 DEBUG (MainThread) [pyvlx] REC: <FrameActivationLogUpdatedNotification/>

@0BanZai0
Copy link
Author

0BanZai0 commented Nov 4, 2024

Hi @pawlizio - I'm still struggling with the delay on changing the tilt angle of my covers right now. With the help of MS Copilot i was able to analyze the debug log of a recent attempt to change the cover angle:

Command Sent:

2024-11-04 21:54:39.489 DEBUG (MainThread) [pyvlx] SEND: <FrameCommandSendRequest node_ids="[5]" active_parameter="0" parameter="TARGET" functional_parameter="fp1: 0 %, fp2: 0 %, fp3: 51 %, fp4: 0 %, fp5: 0 %, fp6: 0 %, fp7: 0 %, fp8: 0 %, fp9: 0 %, fp10: 0 %, fp11: 0 %, fp12: 0 %, fp13: 0 %, fp14: 0 %, fp15: 0 %, fp16: 0 %, " session_id="28" originator="Originator.USER"/>

Confirmation Received:

2024-11-04 21:54:39.508 DEBUG (MainThread) [pyvlx] REC: <FrameCommandSendConfirmation session_id="28" status="CommandSendConfirmationStatus.ACCEPTED"/>

That's 0.019 seconds after the command was sent.

Status Change Received:

2024-11-04 21:54:41.353 DEBUG (MainThread) [pyvlx] REC: <FrameCommandRunStatusNotification session_id="28" status_id="1" index_id="5" node_parameter="0" parameter_value="51200"/>

That's 1.845 seconds after the confirmation.

Session Finished:

2024-11-04 21:54:42.706 DEBUG (MainThread) [pyvlx] REC: <FrameSessionFinishedNotification session_id="28"/>

That's 1.353 seconds after the status change, a total of 3.217 seconds after the command was sent.

Final Position Changed:

2024-11-04 21:54:42.709 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="5" state="DONE" current_position="100 %" target="100 %" current_position_fp1="UNKNOWN" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="1997-12-08 15:11:12"/>

That's 3.220 seconds after the command was sent.

In summary, it takes approximately 3.220 seconds from issuing the command to receiving confirmation that the blind has reached the desired position.

This is quite a long time... or would you say this is okay?

@pawlizio
Copy link
Owner

pawlizio commented Nov 4, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants