[velux] New OpenHAB2 binding - feedback welcome!

Oops! The jar is HERE

please try changing “silent” to “short”

@Chiuaua79 I was pretty convinced that the “short” was a bug in the binding, so in the latest build of the JAR file (see above post) I already corrected it so that it should correctly respond to the keyword “silent” as intended. Please let me know.

Update (for Speed Freaks): the latest version of the JAR (see link two posts above this) includes some changes to make the UI update much faster in the case that actuators change their position.

Background:

  • The KLF provides two position values of actuators – namely CurrentPosition (the actual physical position) and TargetPosition (the intended future position).
  • It also provides a State parameter that can have seven possible values (not moving, movement error, received move command, waiting to move, moving, movement done, unknown)

In earlier versions the binding would always only display the CurrentPosition, but in the newest version I have changed the behaviour as follows


  1. If State is one of the motion values (e.g. “received move command, waiting to move, moving”) then the OH UI will display the TargetPosition
  2. If State is anything else (e.g. not moving, movement error, movement done, unknown), then the OH UI will display the CurrentPosition

This makes the UI response much more snappy than before.

=> Do you have feedback about this change?

Notes:

  1. The OH UI will display the new position before the actuator has physically reached that final position.
  2. If the movement fails, (or the movement is stopped before the target position is reached), then after the OH refresh period, the UI will display the final actual CurrentPosition.

Hello Andrew,

the approach sounds good to me: But, what happens, if the window is blocked? I assume that it will show
the final destination position, and, recognizing the block, it will jump back to the current position.

This should happen especially if it is raining in case of roof windows. Looking on the weather forecast, tomorrow
afternoon could be a good timeframe for testing :wink:

Thanks for this idea
 it might really speedup the response of the binding!

Regards,
Guenther

The new behaviour applies to the GW_NODE_STATE_POSITION_CHANGED_NTF and GW_NODE_INFORMATION_NTF messages, so if there is a notification of another position, it will take a) the new target position if the state is moving or b) the new current position if the state is stopped.

I am not sure what the sequence of NTF messages is in the case of rain, (it did not rain here today), but after it has stopped, then the regular GW_GET_NODE_INFORMATION_REQ requests will have a GW_NODE_INFORMATION_NTF response that should return the final stopped position. However please let me know after it rains :slight_smile:

Hi @AndrewFG. Changing “silent” to “short” did the trick :smiley:. I have not yet tried the updated binding (trying to prevent manual updates). Maybe I’ll give it a try on my playground server later this week.

Krgds,
Cor

Hi, just a qestion

Have I missed something or it is not possible to detect if a Windows is opened manually?

Br

Err. What do you mean by “manually” ??

I have the same question my children often open the veluxes in their bedrooms manually. on the velux remote it shows an error that the window is manually operated. It would be great to get an alert via a rule eg using telegram to show they have done this. I’ve had wet floors because they left them open when it rained.

What do you mean by manual? For Velux roof windows, you would have to physically detach the drive chains


Nö you dont habe to detach sth.
You just need to pull the bar at the upper Part of the Windows : See https://images.app.goo.gl/G7WTVHv2GugWyJS46

Oh. That’s interesting. My windows are too high to reach, so I can’t try it. Which means that if you want me to fix it, then you need to give me the information. You say that when the windows are in manual, there is some error message on the remote. So we need to see if there is some similar error information embedded in the GW_NODE_STATE_POSITION_CHANGED_NTF and/or GW_NODE_INFORMATION_NTF messages from the KLF. Can you please turn on log TRACE and let me have some of (both of) these messages (when the window is manually opened). TIA.

Hi Andrew - so I’ve done some testing with trace running.

Firstly I can’t see anything in the log when I manually open the Velux window. I assume something must trigger because if I then try and close using the physical remote I get a message on the remote screen showing Manually operated. Although that may be only when it sends a command.

So next I tried sending a command (Open Dennis_velux to position 28) to a window that was already opened manually. Here is the log:

020-11-12 10:56:25.465 [TRACE] [.velux.internal.handler.VeluxHandler] - handleCommand(velux:window:7680cbd2:Dennis_Velux:position,28) initiated by Thread[safeCall-9636,5,main].
2020-11-12 10:56:25.467 [TRACE] [.internal.handler.VeluxBridgeHandler] - handleCommand(Thread[safeCall-9636,5,main]): command 28 on channel velux:window:7680cbd2:Dennis_Velux:position will be scheduled.
2020-11-12 10:56:25.469 [DEBUG] [.internal.handler.VeluxBridgeHandler] - handleCommand(velux:window:7680cbd2:Dennis_Velux:position,28) called.
2020-11-12 10:56:25.472 [TRACE] [.internal.handler.VeluxBridgeHandler] - handleCommand.scheduled(Thread[OH-velux-71,5,main]) Start work with calling handleCommandScheduled().
2020-11-12 10:56:25.472 [TRACE] [.internal.handler.VeluxBridgeHandler] - handleCommand(Thread[safeCall-9636,5,main]) done.
2020-11-12 10:56:25.478 [TRACE] [.velux.internal.handler.VeluxHandler] - handleCommand() done.
2020-11-12 10:56:25.473 [TRACE] [.internal.handler.VeluxBridgeHandler] - handleCommandScheduled(Thread[OH-velux-71,5,main]): command 28 on channel velux:window:7680cbd2:Dennis_Velux:position.
2020-11-12 10:56:25.481 [DEBUG] [.internal.handler.VeluxBridgeHandler] - handleCommandScheduled(velux:window:7680cbd2:Dennis_Velux:position,28) called.
2020-11-12 10:56:25.487 [TRACE] [binding.velux.internal.VeluxItemType] - getByThingAndChannel(velux:window,position) returns enum velux:window/position.
2020-11-12 10:56:25.488 [TRACE] [nternal.things.VeluxExistingProducts] - isDirty() returns false.
2020-11-12 10:56:25.489 [TRACE] [.internal.handler.VeluxBridgeHandler] - handleCommandScheduled(): working on item velux:window:7680cbd2:Dennis_Velux:position (type velux:window/position) with COMMAND 28.
2020-11-12 10:56:25.491 [DEBUG] [rnal.handler.ChannelActuatorPosition] - handleCommand(velux:window:7680cbd2:Dennis_Velux:position,position,28,org.openhab.binding.velux.internal.handler.VeluxBridgeHandler@4db670) called.
2020-11-12 10:56:25.493 [TRACE] [nternal.things.VeluxExistingProducts] - getNoMembers() returns 18.
2020-11-12 10:56:25.494 [TRACE] [rnal.handler.ChannelActuatorPosition] - handleCommand(): there are some existing products.
2020-11-12 10:56:25.496 [TRACE] [rnal.handler.ChannelActuatorPosition] - handleCommand(): found command of type PercentType.
2020-11-12 10:56:25.497 [TRACE] [rnal.handler.ChannelActuatorPosition] - handleCommand(): found command to set level to 28.
2020-11-12 10:56:25.506 [TRACE] [internal.things.VeluxProductPosition] - VeluxProductPosition(28 as PercentType) created.
2020-11-12 10:56:25.507 [DEBUG] [rnal.handler.ChannelActuatorPosition] - handleCommand(): sending command with target level 28.
2020-11-12 10:56:25.509 [TRACE] [.bridge.VeluxBridgeRunProductCommand] - sendCommand(nodeId=1,value=28) called.
2020-11-12 10:56:25.511 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeAPI() called.
2020-11-12 10:56:25.513 [DEBUG] [rnal.bridge.slip.SCrunProductCommand] - setNodeAndMainParameter(1) called.
2020-11-12 10:56:25.514 [TRACE] [ng.velux.internal.bridge.VeluxBridge] - bridgeCommunicate(Send Command to Actuator) called.
2020-11-12 10:56:25.515 [TRACE] [ng.velux.internal.bridge.VeluxBridge] - isAuthenticated() returns true.
2020-11-12 10:56:25.517 [TRACE] [ng.velux.internal.bridge.VeluxBridge] - bridgeCommunicate(Send Command to Actuator,authenticated) called.
2020-11-12 10:56:25.518 [TRACE] [ng.velux.internal.bridge.VeluxBridge] - isAuthenticated() returns true.
2020-11-12 10:56:25.524 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(BCP: Send Command to Actuator,authenticated) called.
2020-11-12 10:56:25.534 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(Send Command to Actuator,authenticated) called.
2020-11-12 10:56:25.535 [DEBUG] [rnal.bridge.slip.SCrunProductCommand] - getRequestCommand() returns 0x300.
2020-11-12 10:56:25.538 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes(): ntfSessionID=1107.
2020-11-12 10:56:25.539 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes(): reqCommandOriginator=8.
2020-11-12 10:56:25.541 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes(): reqPriorityLevel=5.
2020-11-12 10:56:25.542 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes(): reqParameterActive=0.
2020-11-12 10:56:25.544 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes(): reqFPI1=0.
2020-11-12 10:56:25.545 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes(): reqFPI2=0.
2020-11-12 10:56:25.547 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes(): reqMainParameter=14336.
2020-11-12 10:56:25.549 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes(): reqIndexArrayCount=1.
2020-11-12 10:56:25.551 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes(): reqIndexArray01=1.
2020-11-12 10:56:25.552 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes(): reqPriorityLevelLock=0.
2020-11-12 10:56:25.554 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes(): reqPL03=0.
2020-11-12 10:56:25.555 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes(): reqPL47=0.
2020-11-12 10:56:25.557 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes(): reqLockTime=0.
2020-11-12 10:56:25.561 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - getRequestDataAsArrayOfBytes() data is 04 53 08 05 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00.
2020-11-12 10:56:25.564 [DEBUG] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(GW_COMMAND_SEND_REQ,authenticated) initiated by Thread[OH-velux-71,5,main].
2020-11-12 10:56:25.566 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): working on request GW_COMMAND_SEND_REQ with 66 bytes of data.
2020-11-12 10:56:25.568 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - SlipEncoding(constructor) for command 0x300 with data size 66 called.
2020-11-12 10:56:25.573 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - SlipEncoding(constructor) successfully initialized, storing bytes: 00 45 03 00 04 53 08 05 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24.
2020-11-12 10:56:25.578 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): transportEncoding=00 45 03 00 04 53 08 05 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24.
2020-11-12 10:56:25.581 [TRACE] [ternal.bridge.slip.utils.SlipRFC1055] - encode() for data size 71 called.
2020-11-12 10:56:25.587 [TRACE] [ternal.bridge.slip.utils.SlipRFC1055] - encode() provides transfer encoding: C0 00 45 03 00 04 53 08 05 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 C0.
2020-11-12 10:56:25.590 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): sending 73 bytes.
2020-11-12 10:56:25.593 [TRACE] [x.internal.bridge.slip.io.Connection] - io() called.
2020-11-12 10:56:25.597 [TRACE] [x.internal.bridge.slip.io.Connection] - io(): sending packet with 73 bytes: C0 00 45 03 00 04 53 08 05 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 C0
2020-11-12 10:56:25.600 [TRACE] [nternal.bridge.slip.io.SSLconnection] - send() called, writing 73 bytes.
2020-11-12 10:56:25.606 [TRACE] [nternal.bridge.slip.io.SSLconnection] - send() finished after having send 73 bytes: C0 00 45 03 00 04 53 08 05 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 C0 
2020-11-12 10:56:25.608 [TRACE] [x.internal.bridge.slip.io.Connection] - io(): wait time 500 msecs.
2020-11-12 10:56:26.113 [TRACE] [x.internal.bridge.slip.io.Connection] - io(): receiving bytes.
2020-11-12 10:56:26.120 [TRACE] [nternal.bridge.slip.io.SSLconnection] - receive() called.
2020-11-12 10:56:26.122 [TRACE] [nternal.bridge.slip.io.SSLconnection] - receive() finished after having read 10 bytes: C0 00 06 03 01 04 53 01 52 C0 
2020-11-12 10:56:26.124 [TRACE] [x.internal.bridge.slip.io.Connection] - io(): received packet with 10 bytes: C0 00 06 03 01 04 53 01 52 C0
2020-11-12 10:56:26.125 [TRACE] [x.internal.bridge.slip.io.Connection] - io() finished.
2020-11-12 10:56:26.127 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): received packet C0 00 06 03 01 04 53 01 52 C0.
2020-11-12 10:56:26.129 [TRACE] [ternal.bridge.slip.utils.SlipRFC1055] - decode() for packet size 10 called.
2020-11-12 10:56:26.131 [TRACE] [ternal.bridge.slip.utils.SlipRFC1055] - decode() provides payload: 00 06 03 01 04 53 01 52.
2020-11-12 10:56:26.133 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - SlipEncoding(constructor) called for decoding a packet with size 8.
2020-11-12 10:56:26.135 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - getCommand() returns 0x301 .
2020-11-12 10:56:26.137 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - getData() returns 3 bytes: 04 53 01.
2020-11-12 10:56:26.139 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - SlipEncoding(constructor) successfully initialized with command 0x301 and data 04 53 01.
2020-11-12 10:56:26.140 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - getCommand() returns 0x301 .
2020-11-12 10:56:26.142 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - getData() returns 3 bytes: 04 53 01.
2020-11-12 10:56:26.144 [DEBUG] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): working on response GW_COMMAND_SEND_CFM with 3 bytes of data.
2020-11-12 10:56:26.146 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): passes back command 0x301 and data 04 53 01.
2020-11-12 10:56:26.148 [DEBUG] [rnal.bridge.slip.SCrunProductCommand] - setResponse(GW_COMMAND_SEND_CFM with 3 bytes of data) called.
2020-11-12 10:56:26.149 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - setResponse(): handling response GW_COMMAND_SEND_CFM (0x301).
2020-11-12 10:56:26.151 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - isLengthValid() called for GW_COMMAND_SEND_CFM (0x301) with 3 bytes of data.
2020-11-12 10:56:26.153 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - isLengthValid() returns true.
2020-11-12 10:56:26.154 [DEBUG] [rnal.bridge.slip.SCrunProductCommand] - setResponse(): returned status: OK - Command is accepted.
2020-11-12 10:56:26.156 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - check4matchingSessionID() called for requestNodeID 1107 and responseNodeID 1107.
2020-11-12 10:56:26.157 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - check4matchingAnyID() called for requestSessionID 1107 and responseSessionID 1107.
2020-11-12 10:56:26.159 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - check4matchingAnyID() returns true.
2020-11-12 10:56:26.161 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - setResponse(): skipping wait for more packets as sequential processing is not enforced.
2020-11-12 10:56:26.162 [TRACE] [rnal.bridge.slip.SCrunProductCommand] - setResponse(): finished=true,success=true.
2020-11-12 10:56:26.164 [DEBUG] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(GW_COMMAND_SEND_REQ) returns success.
2020-11-12 10:56:26.165 [DEBUG] [.bridge.VeluxBridgeRunProductCommand] - sendCommand() finished successfully.
2020-11-12 10:56:26.167 [TRACE] [rnal.handler.ChannelActuatorPosition] - handleCommand(): The new shutter level will be send through the home monitoring events.
2020-11-12 10:56:26.168 [TRACE] [nternal.things.VeluxExistingProducts] - getNoMembers() returns 18.
2020-11-12 10:56:26.170 [TRACE] [rnal.handler.ChannelActuatorPosition] - handleCommand(): position of actuators are updated.

A minute or so later the binding does a check of all the Products and it still shows at 100

2020-11-12 11:01:46.130 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): handling response GW_GET_NODE_INFORMATION_NTF (0x210).
2020-11-12 11:01:46.132 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - isLengthValid() called for GW_GET_NODE_INFORMATION_NTF (0x210) with 124 bytes of data.
2020-11-12 11:01:46.133 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - isLengthValid() returns true.
2020-11-12 11:01:46.134 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfNodeID=1.
2020-11-12 11:01:46.136 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfOrder=1.
2020-11-12 11:01:46.137 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfPlacement=0.
2020-11-12 11:01:46.138 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfName=Dennis_Velux.
2020-11-12 11:01:46.139 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfVelocity=1.
2020-11-12 11:01:46.140 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfNodeTypeSubType=257 (SLIDER_WINDOW).
2020-11-12 11:01:46.142 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): derived product description=Window opener.
2020-11-12 11:01:46.143 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfProductGroup=769.
2020-11-12 11:01:46.144 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfProductType=1.
2020-11-12 11:01:46.145 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfNodeVariation=0.
2020-11-12 11:01:46.146 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfPowerMode=0.
2020-11-12 11:01:46.147 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfBuildNumber=2.
2020-11-12 11:01:46.148 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfSerialNumber=[86, 24, 94, 90, 10, 41, 8, 9].
2020-11-12 11:01:46.149 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfState=128.
2020-11-12 11:01:46.151 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfCurrentPosition=51200.
2020-11-12 11:01:46.152 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfTarget=14336.
2020-11-12 11:01:46.153 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfFP1CurrentPosition=63487.
2020-11-12 11:01:46.154 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfFP2CurrentPosition=63487.
2020-11-12 11:01:46.155 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfFP3CurrentPosition=63487.
2020-11-12 11:01:46.156 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfFP4CurrentPosition=63487.
2020-11-12 11:01:46.157 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfRemainingTime=20229.
2020-11-12 11:01:46.158 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfTimeStamp=1325774144.
2020-11-12 11:01:46.159 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfNbrOfAlias=1.
2020-11-12 11:01:46.161 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfAliasOne=-670846436.
2020-11-12 11:01:46.162 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfAliasTwo=0.
2020-11-12 11:01:46.163 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfAliasThree=0.
2020-11-12 11:01:46.164 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfAliasFour=0.
2020-11-12 11:01:46.165 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfAliasFive=0.
2020-11-12 11:01:46.166 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - check4matchingNodeID() called for requestNodeID 1 and responseNodeID 1.
2020-11-12 11:01:46.167 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - check4matchingAnyID() called for requestNodeID 1 and responseNodeID 1.
2020-11-12 11:01:46.168 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - check4matchingAnyID() returns true.
2020-11-12 11:01:46.170 [TRACE] [g.velux.internal.things.VeluxProduct] - VeluxProduct(v2,name=Dennis_Velux) created.
2020-11-12 11:01:46.171 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): finished=true,success=true.
2020-11-12 11:01:46.172 [DEBUG] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(GW_GET_NODE_INFORMATION_REQ) returns success.
2020-11-12 11:01:46.173 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - getProduct(): returning product Product "Dennis_Velux" / SLIDER_WINDOW (bridgeIndex=1,serial=56:18:5E:5A:0A:29:08:09,position=C800).
2020-11-12 11:01:46.175 [TRACE] [internal.things.VeluxProductPosition] - VeluxProductPosition(constructur with 51200 as veluxPosition) called.
2020-11-12 11:01:46.176 [TRACE] [internal.things.VeluxProductPosition] - VeluxProductPosition() created with percent-type 100.
2020-11-12 11:01:46.177 [TRACE] [rnal.handler.ChannelActuatorPosition] - handleRefresh(): found actuator at level 100.
2020-11-12 11:01:46.178 [TRACE] [rnal.handler.ChannelActuatorPosition] - handleRefresh() returns 100.
2020-11-12 11:01:46.179 [DEBUG] [.internal.handler.VeluxBridgeHandler] - handleCommandScheduled(): updating channel velux:window:7680cbd2:Dennis_Velux:position to 100

So to me it does not look like the binding is checking whether the windows is manually operated? Its not a big deal but good if it could be picked up in a future release.

Thanks
Julian

Hmm. It is hard to tell. The log seems to indicate that it returns an actuator state of 128 which is undocumented, so it might indicate the error. However because of the way Java converts unsigned byte numbers to signed numbers, I am not really sure if this isn’t just an artifact of the code, and would therfore like to see the raw byte data. => Can you please try again with the trace, but this time include the full respective data packet (it will be 124 pairs of hex digits like [00 11 22 33 
 FF]).

2020-11-12 11:01:46.149 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfState=128.

bit thick here but how do I get the data packet?

You probably got it already; but just didn’t include it in your post. The second log in your post starts with timestamp 11:01:46.130 so its incoming data packet would have been received and logged a couple of seconds prior to that. The respective entry would look similar to the following entry (taken from the first log in your post), except it would have 124 pairs of numbers instead of 8


2020-11-12 10:56:26.131 [TRACE] [ternal.bridge.slip.utils.SlipRFC1055] - decode() provides payload: 00 06 03 01 04 53 01 52.

So here you go this is all the log for a Window that is manually open. This time though the NTF state is 5 which is the same as the other windows which are not manually operated. I will send a command to close the Velux and see if it gives a different state.

  1:14.385 [TRACE] [.internal.handler.VeluxBridgeHandler] - handleCommandScheduled(Thread[OH-velux-68,5,main]): command REFRESH on channel velux:window:7680cbd2:Dennis_Velux:position.
    2020-11-12 17:31:14.386 [DEBUG] [.internal.handler.VeluxBridgeHandler] - handleCommandScheduled(velux:window:7680cbd2:Dennis_Velux:position,REFRESH) called.
    2020-11-12 17:31:14.388 [TRACE] [binding.velux.internal.VeluxItemType] - getByThingAndChannel(velux:window,position) returns enum velux:window/position.
    2020-11-12 17:31:14.389 [TRACE] [nternal.things.VeluxExistingProducts] - isDirty() returns false.
    2020-11-12 17:31:14.390 [TRACE] [.internal.handler.VeluxBridgeHandler] - handleCommandScheduled(): work on refresh.
    2020-11-12 17:31:14.391 [TRACE] [.internal.handler.VeluxBridgeHandler] - handleCommandScheduled(): refreshing item velux:window:7680cbd2:Dennis_Velux:position (type velux:window/position).
    2020-11-12 17:31:14.392 [DEBUG] [rnal.handler.ChannelActuatorPosition] - handleRefresh(velux:window:7680cbd2:Dennis_Velux:position,position,org.openhab.binding.velux.internal.handler.VeluxBridgeHandler@4db670) called.
    2020-11-12 17:31:14.393 [TRACE] [nternal.things.VeluxExistingProducts] - getNoMembers() returns 18.
    2020-11-12 17:31:14.395 [TRACE] [rnal.handler.ChannelActuatorPosition] - handleRefresh(): there are some existing products.
    2020-11-12 17:31:14.396 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeAPI() called.
    2020-11-12 17:31:14.397 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setProductId(1) called.
    2020-11-12 17:31:14.398 [TRACE] [ng.velux.internal.bridge.VeluxBridge] - bridgeCommunicate(Retrieve Product) called.
    2020-11-12 17:31:14.399 [TRACE] [ng.velux.internal.bridge.VeluxBridge] - isAuthenticated() returns true.
    2020-11-12 17:31:14.401 [TRACE] [ng.velux.internal.bridge.VeluxBridge] - bridgeCommunicate(Retrieve Product,authenticated) called.
    2020-11-12 17:31:14.403 [TRACE] [ng.velux.internal.bridge.VeluxBridge] - isAuthenticated() returns true.
    2020-11-12 17:31:14.404 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(BCP: Retrieve Product,authenticated) called.
    2020-11-12 17:31:14.405 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(Retrieve Product,authenticated) called.
    2020-11-12 17:31:14.407 [DEBUG] [ux.internal.bridge.slip.SCgetProduct] - getRequestCommand() returns GW_GET_NODE_INFORMATION_REQ (0x200).
    2020-11-12 17:31:14.408 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - getRequestDataAsArrayOfBytes() returns data for retrieving node with id 1.
    2020-11-12 17:31:14.410 [DEBUG] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(GW_GET_NODE_INFORMATION_REQ,authenticated) initiated by Thread[OH-velux-68,5,main].
    2020-11-12 17:31:14.412 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): working on request GW_GET_NODE_INFORMATION_REQ with 1 bytes of data.
    2020-11-12 17:31:14.413 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - SlipEncoding(constructor) for command 0x200 with data size 1 called.
    2020-11-12 17:31:14.415 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - SlipEncoding(constructor) successfully initialized, storing bytes: 00 04 02 00 01 07.
    2020-11-12 17:31:14.416 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): transportEncoding=00 04 02 00 01 07.
    2020-11-12 17:31:14.418 [TRACE] [ternal.bridge.slip.utils.SlipRFC1055] - encode() for data size 6 called.
    2020-11-12 17:31:14.419 [TRACE] [ternal.bridge.slip.utils.SlipRFC1055] - encode() provides transfer encoding: C0 00 04 02 00 01 07 C0.
    2020-11-12 17:31:14.421 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): sending 8 bytes.
    2020-11-12 17:31:14.422 [TRACE] [x.internal.bridge.slip.io.Connection] - io() called.
    2020-11-12 17:31:14.424 [TRACE] [x.internal.bridge.slip.io.Connection] - io(): sending packet with 8 bytes: C0 00 04 02 00 01 07 C0
    2020-11-12 17:31:14.425 [TRACE] [nternal.bridge.slip.io.SSLconnection] - send() called, writing 8 bytes.
    2020-11-12 17:31:14.428 [TRACE] [nternal.bridge.slip.io.SSLconnection] - send() finished after having send 8 bytes: C0 00 04 02 00 01 07 C0 
    2020-11-12 17:31:14.429 [TRACE] [x.internal.bridge.slip.io.Connection] - io(): wait time 500 msecs.
    2020-11-12 17:31:14.931 [TRACE] [x.internal.bridge.slip.io.Connection] - io(): receiving bytes.
    2020-11-12 17:31:14.933 [TRACE] [nternal.bridge.slip.io.SSLconnection] - receive() called.
    2020-11-12 17:31:14.937 [TRACE] [nternal.bridge.slip.io.SSLconnection] - receive() finished after having read 9 bytes: C0 00 05 02 01 00 01 07 C0 
    2020-11-12 17:31:14.939 [TRACE] [x.internal.bridge.slip.io.Connection] - io(): received packet with 9 bytes: C0 00 05 02 01 00 01 07 C0
    2020-11-12 17:31:14.943 [TRACE] [x.internal.bridge.slip.io.Connection] - io() finished.
    2020-11-12 17:31:14.945 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): received packet C0 00 05 02 01 00 01 07 C0.
    2020-11-12 17:31:14.948 [TRACE] [ternal.bridge.slip.utils.SlipRFC1055] - decode() for packet size 9 called.
    2020-11-12 17:31:14.950 [TRACE] [ternal.bridge.slip.utils.SlipRFC1055] - decode() provides payload: 00 05 02 01 00 01 07.
    2020-11-12 17:31:14.954 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - SlipEncoding(constructor) called for decoding a packet with size 7.
    2020-11-12 17:31:14.956 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - getCommand() returns 0x201 .
    2020-11-12 17:31:14.959 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - getData() returns 2 bytes: 00 01.
    2020-11-12 17:31:14.961 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - SlipEncoding(constructor) successfully initialized with command 0x201 and data 00 01.
    2020-11-12 17:31:14.964 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - getCommand() returns 0x201 .
    2020-11-12 17:31:14.966 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - getData() returns 2 bytes: 00 01.
    2020-11-12 17:31:14.969 [DEBUG] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): working on response GW_GET_NODE_INFORMATION_CFM with 2 bytes of data.
    2020-11-12 17:31:14.972 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): passes back command 0x201 and data 00 01.
    2020-11-12 17:31:14.975 [DEBUG] [ux.internal.bridge.slip.SCgetProduct] - setResponse(GW_GET_NODE_INFORMATION_CFM with 2 bytes of data) called.
    2020-11-12 17:31:14.978 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): handling response GW_GET_NODE_INFORMATION_CFM (0x201).
    2020-11-12 17:31:14.985 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - isLengthValid() called for GW_GET_NODE_INFORMATION_CFM (0x201) with 2 bytes of data.
    2020-11-12 17:31:14.988 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - isLengthValid() returns true.
    2020-11-12 17:31:14.991 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): returned status: OK - Request accepted.
    2020-11-12 17:31:14.994 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - check4matchingNodeID() called for requestNodeID 1 and responseNodeID 1.
    2020-11-12 17:31:14.996 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - check4matchingAnyID() called for requestNodeID 1 and responseNodeID 1.
    2020-11-12 17:31:14.999 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - check4matchingAnyID() returns true.
    2020-11-12 17:31:15.002 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): finished=false,success=false.
    2020-11-12 17:31:15.004 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): initiating receive-only.
    2020-11-12 17:31:15.006 [TRACE] [x.internal.bridge.slip.io.Connection] - io() called.
    2020-11-12 17:31:15.009 [TRACE] [x.internal.bridge.slip.io.Connection] - io(): receiving bytes.
    2020-11-12 17:31:15.011 [TRACE] [nternal.bridge.slip.io.SSLconnection] - receive() called.
    2020-11-12 17:31:15.015 [TRACE] [nternal.bridge.slip.io.SSLconnection] - receive() finished after having read 131 bytes: C0 00 7F 02 10 01 00 01 00 44 65 6E 6E 69 73 5F 56 65 6C 75 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 01 03 01 00 00 02 56 18 5E 5A 0A 29 08 09 05 C8 00 C8 00 F7 FF F7 FF F7 FF F7 FF 00 00 4F 06 10 8A 01 D8 03 B2 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 C0 
    2020-11-12 17:31:15.018 [TRACE] [x.internal.bridge.slip.io.Connection] - io(): received packet with 131 bytes: C0 00 7F 02 10 01 00 01 00 44 65 6E 6E 69 73 5F 56 65 6C 75 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 01 03 01 00 00 02 56 18 5E 5A 0A 29 08 09 05 C8 00 C8 00 F7 FF F7 FF F7 FF F7 FF 00 00 4F 06 10 8A 01 D8 03 B2 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 C0
    2020-11-12 17:31:15.019 [TRACE] [x.internal.bridge.slip.io.Connection] - io() finished.
    2020-11-12 17:31:15.022 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): received packet C0 00 7F 02 10 01 00 01 00 44 65 6E 6E 69 73 5F 56 65 6C 75 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 01 03 01 00 00 02 56 18 5E 5A 0A 29 08 09 05 C8 00 C8 00 F7 FF F7 FF F7 FF F7 FF 00 00 4F 06 10 8A 01 D8 03 B2 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 C0.
    2020-11-12 17:31:15.024 [TRACE] [ternal.bridge.slip.utils.SlipRFC1055] - decode() for packet size 131 called.
    2020-11-12 17:31:15.026 [TRACE] [ternal.bridge.slip.utils.SlipRFC1055] - decode() provides payload: 00 7F 02 10 01 00 01 00 44 65 6E 6E 69 73 5F 56 65 6C 75 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 01 03 01 00 00 02 56 18 5E 5A 0A 29 08 09 05 C8 00 C8 00 F7 FF F7 FF F7 FF F7 FF 00 00 4F 06 10 8A 01 D8 03 B2 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90.
    2020-11-12 17:31:15.028 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - SlipEncoding(constructor) called for decoding a packet with size 129.
    2020-11-12 17:31:15.029 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - getCommand() returns 0x210 .
    2020-11-12 17:31:15.032 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - getData() returns 124 bytes: 01 00 01 00 44 65 6E 6E 69 73 5F 56 65 6C 75 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 01 03 01 00 00 02 56 18 5E 5A 0A 29 08 09 05 C8 00 C8 00 F7 FF F7 FF F7 FF F7 FF 00 00 4F 06 10 8A 01 D8 03 B2 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00.
    2020-11-12 17:31:15.035 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - SlipEncoding(constructor) successfully initialized with command 0x210 and data 01 00 01 00 44 65 6E 6E 69 73 5F 56 65 6C 75 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 01 03 01 00 00 02 56 18 5E 5A 0A 29 08 09 05 C8 00 C8 00 F7 FF F7 FF F7 FF F7 FF 00 00 4F 06 10 8A 01 D8 03 B2 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00.
    2020-11-12 17:31:15.037 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - getCommand() returns 0x210 .
    2020-11-12 17:31:15.039 [TRACE] [ernal.bridge.slip.utils.SlipEncoding] - getData() returns 124 bytes: 01 00 01 00 44 65 6E 6E 69 73 5F 56 65 6C 75 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 01 03 01 00 00 02 56 18 5E 5A 0A 29 08 09 05 C8 00 C8 00 F7 FF F7 FF F7 FF F7 FF 00 00 4F 06 10 8A 01 D8 03 B2 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00.
    2020-11-12 17:31:15.041 [DEBUG] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): working on response GW_GET_NODE_INFORMATION_NTF with 124 bytes of data.
    2020-11-12 17:31:15.044 [TRACE] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(): passes back command 0x210 and data 01 00 01 00 44 65 6E 6E 69 73 5F 56 65 6C 75 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 01 03 01 00 00 02 56 18 5E 5A 0A 29 08 09 05 C8 00 C8 00 F7 FF F7 FF F7 FF F7 FF 00 00 4F 06 10 8A 01 D8 03 B2 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00.
    2020-11-12 17:31:15.045 [DEBUG] [ux.internal.bridge.slip.SCgetProduct] - setResponse(GW_GET_NODE_INFORMATION_NTF with 124 bytes of data) called.
    2020-11-12 17:31:15.047 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): handling response GW_GET_NODE_INFORMATION_NTF (0x210).
    2020-11-12 17:31:15.048 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - isLengthValid() called for GW_GET_NODE_INFORMATION_NTF (0x210) with 124 bytes of data.
    2020-11-12 17:31:15.050 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - isLengthValid() returns true.
    2020-11-12 17:31:15.051 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfNodeID=1.
    2020-11-12 17:31:15.052 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfOrder=1.
    2020-11-12 17:31:15.054 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfPlacement=0.
    2020-11-12 17:31:15.055 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfName=Dennis_Velux.
    2020-11-12 17:31:15.057 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfVelocity=1.
    2020-11-12 17:31:15.058 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfNodeTypeSubType=257 (SLIDER_WINDOW).
    2020-11-12 17:31:15.060 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): derived product description=Window opener.
    2020-11-12 17:31:15.061 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfProductGroup=769.
    2020-11-12 17:31:15.063 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfProductType=1.
    2020-11-12 17:31:15.064 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfNodeVariation=0.
    2020-11-12 17:31:15.065 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfPowerMode=0.
    2020-11-12 17:31:15.067 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfBuildNumber=2.
    2020-11-12 17:31:15.068 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfSerialNumber=[86, 24, 94, 90, 10, 41, 8, 9].
    2020-11-12 17:31:15.070 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfState=5.
    2020-11-12 17:31:15.071 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfCurrentPosition=51200.
    2020-11-12 17:31:15.072 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfTarget=51200.
    2020-11-12 17:31:15.074 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfFP1CurrentPosition=63487.
    2020-11-12 17:31:15.075 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfFP2CurrentPosition=63487.
    2020-11-12 17:31:15.077 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfFP3CurrentPosition=63487.
    2020-11-12 17:31:15.078 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfFP4CurrentPosition=63487.
    2020-11-12 17:31:15.079 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfRemainingTime=20230.
    2020-11-12 17:31:15.081 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfTimeStamp=1325797514.
    2020-11-12 17:31:15.082 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfNbrOfAlias=1.
    2020-11-12 17:31:15.084 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfAliasOne=-670846436.
    2020-11-12 17:31:15.085 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfAliasTwo=0.
    2020-11-12 17:31:15.086 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfAliasThree=0.
    2020-11-12 17:31:15.088 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfAliasFour=0.
    2020-11-12 17:31:15.089 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): ntfAliasFive=0.
    2020-11-12 17:31:15.091 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - check4matchingNodeID() called for requestNodeID 1 and responseNodeID 1.
    2020-11-12 17:31:15.092 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - check4matchingAnyID() called for requestNodeID 1 and responseNodeID 1.
    2020-11-12 17:31:15.094 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - check4matchingAnyID() returns true.
    2020-11-12 17:31:15.096 [TRACE] [g.velux.internal.things.VeluxProduct] - VeluxProduct(v2,name=Dennis_Velux) created.
    2020-11-12 17:31:15.097 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - setResponse(): finished=true,success=true.
    2020-11-12 17:31:15.099 [DEBUG] [internal.bridge.slip.SlipVeluxBridge] - bridgeDirectCommunicate(GW_GET_NODE_INFORMATION_REQ) returns success.
    2020-11-12 17:31:15.100 [TRACE] [ux.internal.bridge.slip.SCgetProduct] - getProduct(): returning product Product "Dennis_Velux" / SLIDER_WINDOW (bridgeIndex=1,serial=56:18:5E:5A:0A:29:08:09,position=C800).
    2020-11-12 17:31:15.102 [TRACE] [internal.things.VeluxProductPosition] - VeluxProductPosition(constructur with 51200 as veluxPosition) called.
    2020-11-12 17:31:15.103 [TRACE] [internal.things.VeluxProductPosition] - VeluxProductPosition() created with percent-type 100.
    2020-11-12 17:31:15.105 [TRACE] [rnal.handler.ChannelActuatorPosition] - handleRefresh(): found actuator at level 100.
    2020-11-12 17:31:15.106 [TRACE] [rnal.handler.ChannelActuatorPosition] - handleRefresh() returns 100.
    2020-11-12 17:31:15.107 [DEBUG] [.internal.handler.VeluxBridgeHandler] - handleCommandScheduled(): updating channel velux:window:7680cbd2:Dennis_Velux:position to 100.

Hi I had a look at the API

https://github.com/PLCHome/velux-klf200-api/blob/master/technical%20specification%20for%20klf%20200%20api.pdf

It details
velux1

Then for StatusReply it says:

velux2

So hopefully we can pickup the Manually operated code!

Julian, I have the API of course, many thanks, but I don’t want to write something hypothetically based just on the documentation. So I hope you can send me the respective logs that show what happens in reality.

I suspect that the window electronics have no way to discover if you have done something manually until it tries (and fails) to do something itself. So you probably do indeed need to (try to) send a command.