core icon indicating copy to clipboard operation
core copied to clipboard

Velux: KLF200 does not reboot at restart

Open pergolafabio opened this issue 3 months ago • 27 comments

The problem

Hi, seems the gateway doesnt reboot anymore when restarting HA, it was working before, but when we now restart it doesnt reboot, creating the error below...

If i ping my device, and restart the HA, its stays reachable...

Seems i need to implement again this workaround.... https://www.home-assistant.io/integrations/velux/#action-veluxreboot_gateway

What version of Home Assistant Core has the issue?

2025.10.2

What was the last working version of Home Assistant Core?

No response

What type of installation are you running?

Home Assistant OS

Integration causing the issue

Velux

Link to integration documentation on our website

https://www.home-assistant.io/integrations/velux

Diagnostics information

2025-10-12 14:27:28.881 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry 192.168.0.18 for velux Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/config_entries.py", line 761, in __async_setup_with_context result = await component.async_setup_entry(hass, self) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/components/velux/init.py", line 17, in async_setup_entry await module.async_start() File "/usr/src/homeassistant/homeassistant/components/velux/init.py", line 67, in async_start await self.pyvlx.load_scenes() File "/usr/local/lib/python3.13/site-packages/pyvlx/pyvlx.py", line 119, in load_scenes await self.scenes.load() File "/usr/local/lib/python3.13/site-packages/pyvlx/scenes.py", line 56, in load await get_scene_list.do_api_call() File "/usr/local/lib/python3.13/site-packages/pyvlx/api/api_event.py", line 29, in do_api_call await self.pyvlx.check_connected() File "/usr/local/lib/python3.13/site-packages/pyvlx/pyvlx.py", line 90, in check_connected await self.connect() File "/usr/local/lib/python3.13/site-packages/pyvlx/pyvlx.py", line 58, in connect await self.connection.connect() File "/usr/local/lib/python3.13/site-packages/pyvlx/connection.py", line 114, in connect self.transport, _ = await self.loop.create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<4 lines>... ) ^ File "/usr/local/lib/python3.13/asyncio/base_events.py", line 1201, in create_connection transport, protocol = await self._create_connection_transport( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<2 lines>... ssl_shutdown_timeout=ssl_shutdown_timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.13/asyncio/base_events.py", line 1234, in _create_connection_transport await waiter ConnectionAbortedError: SSL handshake is taking longer than 60.0 seconds: aborting the connection

Example YAML snippet


Anything in the logs that might be useful for us?


Additional information

No response

pergolafabio avatar Oct 12 '25 12:10 pergolafabio

Hey there @julius2342, @deermaximum, @pawlizio, @wollew, mind taking a look at this issue as it has been labeled with an integration (velux) you are listed as a code owner for? Thanks!

Code owner commands

Code owners of velux can trigger bot actions by commenting:

  • @home-assistant close Closes the issue.
  • @home-assistant rename Awesome new title Renames the issue.
  • @home-assistant reopen Reopen the issue.
  • @home-assistant unassign velux Removes the current integration label and assignees on the issue, add the integration domain after the command.
  • @home-assistant add-label needs-more-information Add a label (needs-more-information, problem in dependency, problem in custom component) to the issue.
  • @home-assistant remove-label needs-more-information Remove a label (needs-more-information, problem in dependency, problem in custom component) on the issue.

(message by CodeOwnersMention)


velux documentation velux source (message by IssueLinks)

home-assistant[bot] avatar Oct 12 '25 12:10 home-assistant[bot]

I experience exactly the same error. I believe it might be because Python 3.13 (which HA 2025.10.2 uses) has changes to asyncio SSL handling that break the pyvlx library's connection to the KLF200.

Python 3.13 introduced stricter SSL certificate validation by adding two new, enabled by default, flags to ssl.create_default_context(): VERIFY_X509_STRICT and VERIFY_X509_PARTIAL_CHAIN.

I believe velux' self-signed certificate is failing these stricter checks. https://github.com/Julius2342/pyvlx/pull/556 might fix it but I haven't yet got time to check.

cayco avatar Oct 12 '25 15:10 cayco

To me this looks like the "standard" trouble with the KLF200 which refuses new (TLS) connections if not rebooted after disconnecting. The question is why the reboot does not happen. I cannot reproduce it with my KLF200 and 2025.10.2, so it would be interesting to see logs from both the failed connect and more importantly the logs during a reboot/shutdown of HA.

@cayco are you sure about the Python version, this doesn't sound right, at least if you're on the dockerized HA then both 2025.10.1 and 2025.10.2 should be using Python 3.13.7: Before upgrade:

# ha banner | grep Core
  Home Assistant Core:      2025.10.1
# docker exec -it homeassistant python --version
Python 3.13.7

After upgrade:

# ha banner | grep Core
  Home Assistant Core:      2025.10.2
# docker exec -it homeassistant python --version
Python 3.13.7

wollew avatar Oct 12 '25 16:10 wollew

I didn't notice the error on 2025.9 versions, I try to enable debug next week, but it seems it doesnt give any error in the log, but the klf isn't rebooting anymore for sure

pergolafabio avatar Oct 12 '25 20:10 pergolafabio

I have the same problem unfortunately, I have to manually unplug and power on the KLF200 after each restart of the HA.

sirotkaslo avatar Nov 13 '25 05:11 sirotkaslo

Can you provide debug logs of a restart cycle? For that you'd have to enable debug logging in the integration settings (three dots in the top right corner), then do the HA restart. After that please go to "Settings > System > Logs > three dots > show raw logs > download logs > select 5000 or 10.000 lines" to be downloaded.

wollew avatar Nov 13 '25 09:11 wollew

I got finally some time to check this out again. However, I can't reproduce it anymore... I upgrade to the current (2025.11.3) HA and Velux integration works.

cayco avatar Nov 23 '25 16:11 cayco

Interesting... Gonna disable my klf reboot automation tomorrow too

pergolafabio avatar Nov 23 '25 19:11 pergolafabio

Hi, sorry for a late reply, but things are working on my side as well now after the upgrade to the 25.11.3 version.

sirotkaslo avatar Nov 24 '25 12:11 sirotkaslo

was there something changed? i disabled my klf reboot automation, when i restart HA, i have a ping running to the KLF, i dont see it rebooting

pergolafabio avatar Nov 24 '25 12:11 pergolafabio

was there something changed? i disabled my klf reboot automation, when i restart HA, i have a ping running to the KLF, i dont see it rebooting

Not really, at least not intentional. The change that removed the necessity for the reboot automation happened in #115483 almost a year ago and we're still on the same library version. Still, what I said here still stands, I'd like/need to see the logs in order to find why this is happening. My current guess would be that the reboot doesn't happen because the KLF 200 is already disconnected (for what whatever reason) so the reboot command sent never arrives. But this is more or less a wild guess, for this I need the logs. You can also check and see if other commands (e.g. open/close cover) still work before one of those HA restarts that apparently do not reboot the gateway.

wollew avatar Nov 24 '25 13:11 wollew

I'm aware that now in pyvlx , my reboot automation was turned off... Here are my logs...

https://github.com/Julius2342/pyvlx/pull/556#issuecomment-3407972978

When I restart HA , there is no reboot command send , but it's not always...

pergolafabio avatar Nov 24 '25 13:11 pergolafabio

The linked log is rather short but it shows that your KLF200 does not react to a request within one second which is the timeout for the command sent:

2025-10-15 21:16:25.939 DEBUG (MainThread) [pyvlx] SEND: <FrameHouseStatusMonitorDisableRequest/>
2025-10-15 21:16:26.942 DEBUG (MainThread) [pyvlx] TCP transport closed.

So my guess is, it is already disconnected, thus there's no way to send a reboot command. This could be confirmed by having a look at the log from at least 30 seconds before that, 30 seconds being the standard heartbeat interval. However, even if we confirm this (in this case, all other commands to the KLF200 will also fail), it stays unclear why it is already disconnected, although knowing how the KLF200 behaves there is probably no way this can be fixed in the integration because new connections will not be accepted anyway.

If logs confirm my guess, then this is not HA problem but somehow connected to your gateway. It could be an issue with the network connection, a bad power supply, something else (see https://github.com/pawlizio/my_velux/issues/18#issuecomment-1336163286 as an example).

wollew avatar Nov 24 '25 14:11 wollew

dont think its related to my power supply, the KLF is working, sometimes i do see below when i restart, and sometimes i dont see the reboot command initiated, when its not initatied , on the next start, i need to power off/on the klf again below log is without the KLF reboot autmation, the reboot is fired from pyvlx itself

sometimes it initiates, sometimes it doesnt

2025-10-15 21:07:06.338 DEBUG (MainThread) [homeassistant.components.velux] Velux interface terminated 2025-10-15 21:07:06.338 DEBUG (MainThread) [pyvlx] Heartbeat stopped 2025-10-15 21:07:06.338 DEBUG (MainThread) [pyvlx] SEND: <FrameHouseStatusMonitorDisableRequest/> 2025-10-15 21:07:06.416 DEBUG (MainThread) [pyvlx] REC: <FrameHouseStatusMonitorDisableConfirmation/> 2025-10-15 21:07:06.441 DEBUG (MainThread) [pyvlx] SEND: <FrameGatewayRebootRequest/> 2025-10-15 21:07:07.394 DEBUG (MainThread) [pyvlx] REC: <FrameGatewayRebootConfirmation/> 2025-10-15 21:07:07.396 WARNING (MainThread) [pyvlx] KLF200 is rebooting 2025-10-15 21:07:07.397 DEBUG (MainThread) [pyvlx] Heartbeat was not running 2025-10-15 21:07:07.397 DEBUG (MainThread) [pyvlx] SEND: <FrameGatewayRebootRequest/> 2025-10-15 21:07:14.369 DEBUG (MainThread) [pyvlx] Socket connection to KLF 200 has been lost 2025-10-15 21:07:14.369 DEBUG (MainThread) [pyvlx] TCP transport closed. 2025-10-15 21:07:14.371 WARNING (MainThread) [py.warnings] /usr/local/lib/python3.13/site-packages/pyvlx/connection.py:105: RuntimeWarning: coroutine 'Node.after_update' was never awaited if asyncio.iscoroutine(connection_closed_cb()): 2025-10-15 21:07:17.399 DEBUG (MainThread) [pyvlx] TCP transport closed. 2025-10-15 21:07:17.401 DEBUG (MainThread) [pyvlx] TCP transport closed.

vs

2025-10-15 21:16:25.939 DEBUG (MainThread) [homeassistant.components.velux] Velux interface terminated
2025-10-15 21:16:25.939 DEBUG (MainThread) [pyvlx] Heartbeat stopped
2025-10-15 21:16:25.939 DEBUG (MainThread) [pyvlx] SEND: <FrameHouseStatusMonitorDisableRequest/>
2025-10-15 21:16:26.942 DEBUG (MainThread) [pyvlx] TCP transport closed.
2025-10-15 21:16:26.944 WARNING (MainThread) [py.warnings] /usr/local/lib/python3.13/site-packages/pyvlx/connection.py:105: RuntimeWarning: coroutine 'Node.after_update' was never awaited
  if asyncio.iscoroutine(connection_closed_cb()):

2025-10-15 21:16:26.977 DEBUG (MainThread) [pyvlx] Socket connection to KLF 200 has been lost
2025-10-15 21:16:26.977 DEBUG (MainThread) [pyvlx] TCP transport closed.

pergolafabio avatar Nov 24 '25 15:11 pergolafabio

@home-assistant rename Velux: KLF200 does not reboot at restart

wollew avatar Nov 25 '25 09:11 wollew

This could be confirmed by having a look at the log from at least 30 seconds before that

@pergolafabio: can you provide these? If not, I don't think I can be of any help.

wollew avatar Nov 25 '25 10:11 wollew

This could be confirmed by having a look at the log from at least 30 seconds before that

@pergolafabio: can you provide these? If not, I don't think I can be of any help.

there is no issue 30 secs before, the klf is working as expected, it just doesnt reboot on restart HA

pergolafabio avatar Nov 25 '25 10:11 pergolafabio

the klf is working as expected

As shown here, not really, at least not fully, because it doesn't react to a command sent to it within the specified timeout. I am not saying you're wrong but it is impossible to diagnose something that is working perfectly in my local setup without having more information.

wollew avatar Nov 25 '25 10:11 wollew

ok, what do you want me todo ? :-)

pergolafabio avatar Nov 25 '25 10:11 pergolafabio

Let's try this:

  1. disable all Velux reboot automations if still active
  2. enable debug logging for the Velux integration
  3. do "stuff" with your Velux integration (open/close a cover, toggle a light, etc.)
  4. restart HA
  5. if your KLF 200 did not reboot, download the logs of all that's happened and attach here. If it did reboot, no need to upload. You can filter for everthing that doesn't have velux or pyvlx as a string if you prefer.

TBH, I don't know what I'm looking for, but it is worth a try.

wollew avatar Nov 25 '25 12:11 wollew

well, since the log file is gone with the new HA core versions , i enabled debug, you are looking for the logs before the restart, but now this file is empty home-assistant.log.1 file ... they removed that feature ...

pergolafabio avatar Nov 25 '25 12:11 pergolafabio

See https://github.com/home-assistant/core/issues/154294#issuecomment-3526726869

wollew avatar Nov 25 '25 12:11 wollew

ok, here you go, part of the log, i restarted HA, and there is no reboot command fired, i kept a ping running, and device was still pinging...

there should be this:

2025-10-15 21:07:06.441 DEBUG (MainThread) [pyvlx] SEND: <FrameGatewayRebootRequest/>
2025-10-15 21:07:07.394 DEBUG (MainThread) [pyvlx] REC: <FrameGatewayRebootConfirmation/>
2025-10-15 21:07:07.396 WARNING (MainThread) [pyvlx] KLF200 is rebooting

but its not visible in the logs below

[36m2025-11-25 13:26:25.396 DEBUG (MainThread) [pyvlx] SEND: <FrameStatusRequestRequest session_id="46" node_ids="[1]" status_type="StatusType.REQUEST_CURRENT_POSITION" fpi1="254" fpi2="0"/>[0m
[36m2025-11-25 13:26:25.525 DEBUG (MainThread) [pyvlx] REC: <FrameStatusRequestConfirmation session_id="46" status="StatusRequestStatus.ACCEPTED"/>[0m
[36m2025-11-25 13:26:25.527 DEBUG (MainThread) [pyvlx] REC: <FrameCommandRunStatusNotification session_id="44" status_id="1" index_id="1" node_parameter="0" parameter_value="65535"/>[0m
[36m2025-11-25 13:26:25.527 DEBUG (MainThread) [pyvlx] REC: <FrameSessionFinishedNotification session_id="44"/>[0m
[36m2025-11-25 13:26:25.615 DEBUG (MainThread) [pyvlx] REC: <FrameStatusRequestNotification session_id="46" status_id="1" node_id="1" run_status="RunStatus.EXECUTION_FAILED" status_reply="StatusReply.UNKNOWN_STATUS_REPLY" status_type="StatusType.REQUEST_CURRENT_POSITION" status_count="2" parameter_data="NodeParameter.MP: 0 %, NodeParameter.FP1: 34 %, "/>[0m
[36m2025-11-25 13:26:25.617 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameStatusRequestNotification session_id="46" status_id="1" node_id="1" run_status="RunStatus.EXECUTION_FAILED" status_reply="StatusReply.UNKNOWN_STATUS_REPLY" status_type="StatusType.REQUEST_CURRENT_POSITION" status_count="2" parameter_data="NodeParameter.MP: 0 %, NodeParameter.FP1: 34 %, "/>[0m
[36m2025-11-25 13:26:25.618 DEBUG (MainThread) [pyvlx] REC: <FrameSessionFinishedNotification session_id="46"/>[0m
[36m2025-11-25 13:26:26.121 DEBUG (MainThread) [pyvlx] SEND: <FrameStatusRequestRequest session_id="47" node_ids="[2]" status_type="StatusType.REQUEST_CURRENT_POSITION" fpi1="254" fpi2="0"/>[0m
[36m2025-11-25 13:26:26.248 DEBUG (MainThread) [pyvlx] REC: <FrameStatusRequestConfirmation session_id="47" status="StatusRequestStatus.ACCEPTED"/>[0m
[36m2025-11-25 13:26:26.294 DEBUG (MainThread) [pyvlx] REC: <FrameStatusRequestNotification session_id="47" status_id="1" node_id="2" run_status="RunStatus.EXECUTION_COMPLETED" status_reply="StatusReply.COMMAND_COMPLETED_OK" status_type="StatusType.REQUEST_CURRENT_POSITION" status_count="2" parameter_data="NodeParameter.MP: 100 %, NodeParameter.FP1: 0 %, "/>[0m
[36m2025-11-25 13:26:26.294 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameStatusRequestNotification session_id="47" status_id="1" node_id="2" run_status="RunStatus.EXECUTION_COMPLETED" status_reply="StatusReply.COMMAND_COMPLETED_OK" status_type="StatusType.REQUEST_CURRENT_POSITION" status_count="2" parameter_data="NodeParameter.MP: 100 %, NodeParameter.FP1: 0 %, "/>[0m
[36m2025-11-25 13:26:26.296 DEBUG (MainThread) [pyvlx] REC: <FrameSessionFinishedNotification session_id="47"/>[0m
[36m2025-11-25 13:26:26.296 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="2" state="UNKNOWN" current_position="100 %" target="100 %" current_position_fp1="0 %" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-16 16:19:44"/>[0m
[36m2025-11-25 13:26:26.297 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="2" state="UNKNOWN" current_position="100 %" target="100 %" current_position_fp1="0 %" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-16 16:19:44"/>[0m
[36m2025-11-25 13:26:26.298 DEBUG (MainThread) [pyvlx] velux_links position changed to: 100 %[0m
[36m2025-11-25 13:26:26.798 DEBUG (MainThread) [pyvlx] SEND: <FrameStatusRequestRequest session_id="48" node_ids="[3]" status_type="StatusType.REQUEST_CURRENT_POSITION" fpi1="254" fpi2="0"/>[0m
[36m2025-11-25 13:26:26.929 DEBUG (MainThread) [pyvlx] REC: <FrameStatusRequestConfirmation session_id="48" status="StatusRequestStatus.ACCEPTED"/>[0m
[36m2025-11-25 13:26:27.005 DEBUG (MainThread) [pyvlx] REC: <FrameStatusRequestNotification session_id="48" status_id="1" node_id="3" run_status="RunStatus.EXECUTION_COMPLETED" status_reply="StatusReply.COMMAND_COMPLETED_OK" status_type="StatusType.REQUEST_CURRENT_POSITION" status_count="2" parameter_data="NodeParameter.MP: 100 %, NodeParameter.FP1: 0 %, "/>[0m
[36m2025-11-25 13:26:27.006 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameStatusRequestNotification session_id="48" status_id="1" node_id="3" run_status="RunStatus.EXECUTION_COMPLETED" status_reply="StatusReply.COMMAND_COMPLETED_OK" status_type="StatusType.REQUEST_CURRENT_POSITION" status_count="2" parameter_data="NodeParameter.MP: 100 %, NodeParameter.FP1: 0 %, "/>[0m
[36m2025-11-25 13:26:27.007 DEBUG (MainThread) [pyvlx] REC: <FrameSessionFinishedNotification session_id="48"/>[0m
[36m2025-11-25 13:26:27.009 DEBUG (MainThread) [pyvlx] REC: <FrameNodeStatePositionChangedNotification node_id="3" state="UNKNOWN" current_position="100 %" target="0 %" current_position_fp1="0 %" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-16 16:19:44"/>[0m
[36m2025-11-25 13:26:27.010 DEBUG (MainThread) [pyvlx] NodeUpdater process frame: <FrameNodeStatePositionChangedNotification node_id="3" state="UNKNOWN" current_position="100 %" target="0 %" current_position_fp1="0 %" current_position_fp2="UNKNOWN" current_position_fp3="UNKNOWN" current_position_fp4="UNKNOWN" remaining_time="0" time="2055-04-16 16:19:44"/>[0m
[36m2025-11-25 13:26:27.010 DEBUG (MainThread) [pyvlx] velux_rechts position changed to: 100 %[0m
[36m2025-11-25 13:26:27.511 DEBUG (MainThread) [pyvlx] Heartbeat: sleeping[0m
s6-rc: info: service legacy-services: stopping
[36m2025-11-25 13:26:33.018 DEBUG (MainThread) [homeassistant.components.velux] Velux interface terminated[0m
[36m2025-11-25 13:26:33.018 DEBUG (MainThread) [pyvlx] Heartbeat stopped[0m
[36m2025-11-25 13:26:33.018 DEBUG (MainThread) [pyvlx] SEND: <FrameHouseStatusMonitorDisableRequest/>[0m

[36m2025-11-25 13:26:34.030 DEBUG (MainThread) [pyvlx] TCP transport closed.[0m
[33m2025-11-25 13:26:34.031 WARNING (MainThread) [py.warnings] /usr/local/lib/python3.13/site-packages/pyvlx/connection.py:105: RuntimeWarning: coroutine 'Node.after_update' was never awaited
  if asyncio.iscoroutine(connection_closed_cb()):
[0m

Found 3 non-daemonic threads.
[12:26:50] INFO: [32mHome Assistant Core finish process exit code 0[0m
[12:26:50] INFO: [32mHome Assistant Core service shutdown[0m
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service legacy-services: starting
services-up: info: copying legacy longrun home-assistant (no readiness notification)
s6-rc: info: service legacy-services successfully started



[0m
[36m2025-11-25 13:27:09.428 DEBUG (MainThread) [pyvlx] Heartbeat __init__[0m
[36m2025-11-25 13:27:09.428 DEBUG (MainThread) [homeassistant.components.velux] Velux interface started[0m
[36m2025-11-25 13:27:09.428 DEBUG (MainThread) [pyvlx] Connecting to KLF 200[0m
[36m2025-11-25 13:27:13.721 DEBUG (MainThread) [pyvlx] Socket connection to KLF 200 opened[0m
[36m2025-11-25 13:27:13.730 DEBUG (MainThread) [pyvlx] Amount of connections since last HA start: 1[0m
[36m2025-11-25 13:27:13.735 DEBUG (MainThread) [pyvlx] SEND: <FramePasswordEnterRequest password="Dq****"/>[0m
[36m2025-11-25 13:27:13.831 DEBUG (MainThread) [pyvlx] REC: <FramePasswordEnterConfirmation status="PasswordEnterConfirmationStatus.SUCCESSFUL"/>[0m
[36m2025-11-25 13:27:13.932 DEBUG (MainThread) [pyvlx] SEND: <FrameGetVersionRequest/>[0m
[36m2025-11-25 13:27:13.947 DEBUG (MainThread) [pyvlx] REC: <FrameGetVersionConfirmation software_version="0.2.0.0.71.0" hardware_version="6" product="KLF 200"/>[0m
[36m2025-11-25 13:27:14.051 DEBUG (MainThread) [pyvlx] SEND: <FrameGetProtocolVersionRequest/>[0m
[36m2025-11-25 13:27:14.168 DEBUG (MainThread) [pyvlx] REC: <FrameGetProtocolVersionConfirmation version="3.14"/>[0m
[36m2025-11-25 13:27:14.251 DEBUG (MainThread) [pyvlx] Connected to: <DtoVersion softwareversion="0.2.0.0.71.0" hardwareversion="6" productgroup="14" producttype="3"/>,  <DtoProtocolVersion majorversion="3" minorversion="14"/>[0m
[36m2025-11-25 13:27:14.254 DEBUG (MainThread) [pyvlx] SEND: <FrameHouseStatusMonitorDisableRequest/>[0m
[36m2025-11-25 13:27:14.754 DEBUG (MainThread) [pyvlx] REC: <FrameHouseStatusMonitorDisableConfirmation/>[0m
[36m2025-11-25 13:27:14.805 DEBUG (MainThread) [pyvlx] SEND: <FrameGetStateRequest/>[0m
[36m2025-11-25 13:27:15.053 DEBUG (MainThread) [pyvlx] REC: <FrameGetStateConfirmation gateway_state="GatewayState.GATEWAY_MODE_WITH_ACTUATORS" gateway_sub_state="GatewaySubState.IDLE"/>[0m
[36m2025-11-25 13:27:15.100 DEBUG (MainThread) [pyvlx] SEND: <FrameSetUTCRequest time="2025-11-25 13:27:09"/>[0m
[31m2025-11-25 13:27:15.220 ERROR (MainThread) [custom_components.audiconnect.audi_api] Unexpected response: status=403, reason=[0m

pergolafabio avatar Nov 25 '25 12:11 pergolafabio

Nice, thanks.

This shows 2 things: One, your KLF 200 is still connected. Two, your KLF 200 does not react fast enough (i.e. within the 1 second timeout) to the request to disable "House Status Monitor". This is the command issued before the reboot command and because it fails the reboot never gets send.

I do not know the reasoning behind this one second timeout in the library for this specific request only (all the others have a higher timeout). Maybe https://github.com/Julius2342/pyvlx/pull/570 will fix this.

If you know how to do that and don't want to wait you can try to install the branch of the linked PR and see if it fixes your problem.

wollew avatar Nov 25 '25 12:11 wollew

ok, that makes sense, lets wait what Julius says, for now i have the reboot klf automation back in action, so it works now as a temp workaround

pergolafabio avatar Nov 25 '25 13:11 pergolafabio

I use an automation to restart KLF200 at HA start, and it still works. My YAML:

description: Reboots the KLF200 in order to avoid SSL Handshake issue
mode: single
triggers:
  - event: shutdown
    trigger: homeassistant
conditions: []
actions:
  - data: {}
    action: velux.reboot_gateway

frontside76 avatar Dec 10 '25 06:12 frontside76

Yes, @frontside76 , that's the old workaround ...I have je also enabled again. But it should not be enabled. Since the reboot should be initiated from pyVlx itself since year or something

pergolafabio avatar Dec 10 '25 06:12 pergolafabio