During live testing with a gate and a garage door, both devices stayed in an unknown state for a long time after a Home Assistant restart. The initial node snapshot can contain an unknown current position for these device types, so pyvlx depends on later state updates to recover the actual position.
The heartbeat already sends GW_STATUS_REQUEST_REQ calls for all nodes when heartbeat_load_all_states=True. However, NodeUpdater.process_frame_status_request_notification() currently applies position data from GW_STATUS_REQUEST_NTF only for Blind and DualRollerShutter. Generic OpeningDevice types such as Gate and GarageDoor are not updated from the main parameter (MP, NodeParameter(0)) in the status request response.
As a result, even if the KLF200 returns a concrete position for the gate or garage door in the status request notification, pyvlx ignores it. The HA entity can therefore remain unknown until a later house monitor / node state position notification arrives, often only after movement or another gateway update.
Suggested fix:
For OpeningDevice instances that are not handled by the specialized Blind / DualRollerShutter branches, read NodeParameter(0) from FrameStatusRequestNotification.parameter_data and update node.position when the value is concrete. This should ignore UNKNOWN / IGNORE values and include a regression test with a Gate or GarageDoor starting at UNKNOWN and recovering its position from a status request notification.
During live testing with a gate and a garage door, both devices stayed in an unknown state for a long time after a Home Assistant restart. The initial node snapshot can contain an unknown current position for these device types, so pyvlx depends on later state updates to recover the actual position.
The heartbeat already sends GW_STATUS_REQUEST_REQ calls for all nodes when heartbeat_load_all_states=True. However, NodeUpdater.process_frame_status_request_notification() currently applies position data from GW_STATUS_REQUEST_NTF only for Blind and DualRollerShutter. Generic OpeningDevice types such as Gate and GarageDoor are not updated from the main parameter (MP, NodeParameter(0)) in the status request response.
As a result, even if the KLF200 returns a concrete position for the gate or garage door in the status request notification, pyvlx ignores it. The HA entity can therefore remain unknown until a later house monitor / node state position notification arrives, often only after movement or another gateway update.
Suggested fix:
For OpeningDevice instances that are not handled by the specialized Blind / DualRollerShutter branches, read NodeParameter(0) from FrameStatusRequestNotification.parameter_data and update node.position when the value is concrete. This should ignore UNKNOWN / IGNORE values and include a regression test with a Gate or GarageDoor starting at UNKNOWN and recovering its position from a status request notification.