Io-homecontrol / velux - something's in the bush

I’ve gotten my hands on the KLF 200.

The basics

  1. It can be connected to wired ethernet.
  2. It will act as Wifi Access-point for 10 mins after startup (can be changed to disable/always active).
  3. It cannot connecte to another wireless network as a client.
  4. The default IP is 192.168.0.1 for wireless, for cabled network it will fetch an IP using DHCP.
  5. Connecting to http://klf200.velux/ over wireless (as stated in the manual) did not work for me. I had to access it using http://192.168.0.1/

Dry contact inputs

  1. There are 10 inputs. You need to use two inputs for each device if you want to control both up and down.
  2. For each input you can add many devices, but they will have to be of the same type (shutters/windows/blinds).
  3. For each input (up/down) you can make the products go to an absolute position (60 % open). Or you can make it do relative adjustments “open by 10 % from current position”.

Running programs

  1. Programs are created as macros by putting the KLF 200 in recording mode.
  2. With connections you can do the “programming” directly using the webinterface, this is not possible with programs.
  3. You will have to use a KLR 200, or other type of remote, to alter the positions of the devices you want to include in the program. After all windows/blinds has completed their adjustments you can save the program.
  4. You can also run a predefined program from the KLR200. However, it will not register any time-based delays. Hence a “slow wakeup” sequence on the KLR will run all at once when started from the KLF 200.
  5. Programs can be started from the KLF 200.

The not-so-good stuff

  1. I am not able to control a single device directly. It has to be done via programs or by using the dry contacts input.
  2. I am not able to read out the current position of a product.
  3. Since the programs cannot be created using the webinterface, the workaround to create a program dynamically is not an option.
  4. You can however create a connection dynamically. This do does require a relay of some sort to activate the connection later and hence the requested action later.

Some example HTTP POST calls

Authenticate

POST /api/v1/auth HTTP/1.1
Host: 192.168.0.1
Content-Type: application/json;charset=utf-8
Content-Length: 51
Connection: close
{"action":"login","params":{"password":"velux123"}}

Run a program

POST /api/v1/scenes HTTP/1.1
Host: 192.168.0.1
Content-Type: application/json;charset=utf-8
Authorization: Bearer bBbpXgBfTlw9LQwytyH5Cw==
Content-Length: 34
Connection: keep-alive
{"action":"run","params":{"id":2}}

Identify a product

POST /api/v1/products HTTP/1.1
Host: 192.168.0.1
Content-Type: application/json;charset=utf-8
Authorization: Bearer bBbpXgBfTlw9LQwytyH5Cw==
Content-Length: 50
Connection: close
{"action":"identify","params":{"id":5,"time":254}}

Conclusion
I believe (hope) there there are undocumented API-calls under the /api/v1/products that will make it possible to control a device directly. I’ve done some guesswork/bruteforce, but without any success so far.
I have also opened up the device to have a look at the inside. There are no obvious way (at least for me) to extract the firmware. The unit is however firmware-upgradeable via the webinterface. So when anyone get their hands on the firmware it might give us a few clues.

2 Likes