nougad
(nougad)
January 21, 2020, 11:56pm
29
Yes, as I mentioned the KIX 300 has HomeKit support which I didn’t tried. Above Connecting Velux Active KIX 300 mentioned HomeKit simulators/bridges which probably work completely local.
The API I use is the cloud-based-Netatmo-like-API which is also used in the Velux APP.
And then again there is the KLF200 which has absolutely nothing to do with the KLX 200 (neither netatmo cloud nor homekit API)
Thanks for the clarifications, @nougad ! I will certainly continue to follow this conversation.
tcrnek
(Tomica Crnek)
January 30, 2020, 8:44am
31
Hi guys,
I see that Velux Active now supports Google Home / Assistant since few months ago.
With winter coming and the days getting shorter we are spending increasingly more time indoors, meaning we need to make our spaces work for us. We still want access to daylight and fresh air via our roof windows, but we want our homes to be warm and...
I have configured it with my KIX300 and it works, it is still buggy, but I believe that they will fix this with future versions.
So, here is the question; does this mean that they opened some api? Would it be possible now to use this for OH-KIX300 binding?
Jnm
(Jnm)
February 19, 2020, 8:50am
32
This is wonderful! Thanks a lot @nougad for your work and @Polo for your help, I can now store the sensor values and build graphs
brusch
(Bernhard Rusch)
March 19, 2020, 9:55am
33
@nougad here’s the traffic for windows:
#################################################
Open window to 47%
POST https://app.velux-active.com/syncapi/v1/setstate [m:auto]{
"app_version": "1106200",
"home": {
"id": "YOUR_HOME_ID",
"modules": [
{
"bridge": "BRIDGE_MAC_ADDRESS",
"hash_target_position": "...",
"id": "YOUR_WINDOW_ID",
"nonce": 0,
"sign_key_id": "VERY_SECRET_KEY_FOR_END_2_END",
"target_position": 47,
"timestamp": 1584558106
}
],
"timezone": "Europe/Vienna"
}
}
#################################################
Close Window
POST https://app.velux-active.com/syncapi/v1/setstate
{
"app_version": "1106200",
"home": {
"id": "YOUR_HOME_ID",
"modules": [
{
"bridge": "BRIDGE_MAC_ADDRESS",
"id": "YOUR_WINDOW_ID",
"target_position": 0
}
],
"timezone": "Europe/Vienna"
}
}
#################################################
Open Window completely (100%)
https://app.velux-active.com/syncapi/v1/setstate
{
"app_version": "1106200",
"home": {
"id": "YOUR_HOME_ID",
"modules": [
{
"bridge": "BRIDGE_MAC_ADDRESS",
"hash_target_position": "...",
"id": "YOUR_WINDOW_ID",
"nonce": 0,
"sign_key_id": "VERY_SECRET_KEY_FOR_END_2_END",
"target_position": 100,
"timestamp": 1584558276
}
],
"timezone": "Europe/Vienna"
}
}
#################################################
Stop all movements currently going on
POST https://app.velux-active.com/syncapi/v1/setstate
{
"app_version": "1106200",
"home": {
"id": "YOUR_HOME_ID",
"modules": [
{
"id": "BRIDGE_MAC_ADDRESS",
"stop_movements": "all"
}
],
"timezone": "Europe/Vienna"
}
}
#################################################
1 Like
brusch
(Bernhard Rusch)
March 23, 2020, 8:49pm
34
Found a much better way of how to interact with KIX-300, the answer is HomeKit.
It has several advantages over the reverse engineered solution used by velux-cli
:
easier to setup
future proof as it uses a standard protocol to interact with the KIX-300
works locally, no cloud
works with windows as well
get all values from sensors
So this is what I did:
install https://github.com/jlusiardi/homekit_python#installation
create pairing file
run discovery (within the same network!)
run pairing (you find the pairing code of the KIX-300 on the backside of the gateway) - use ``velux` as alias
list accessories with python3 -m homekit.get_accessories -f pairing.json -a velux
get characteristics or put characteristics
Basically it’s just following the instructions from the link above
Example how to open a window (11.10
is the characteristic id you get from list accessories):
python3 -m homekit.put_characteristic -f pairing.json -a velux -c 11.10 50
Have fun!
3 Likes
jenskn83
(Jens)
April 2, 2020, 3:26pm
35
Hi Bernhard
I just implemented your homekit solution. It works perfectly!! Thanks so much!
Is there a nice way to link the python commands directly to openhab?
Kind regards
Jens
noemu
(Rafael Jarosch)
April 5, 2020, 2:53pm
36
did you implemented an binding module?
jenskn83
(Jens)
April 9, 2020, 9:19pm
37
Hi Rafael,
i just followed the steps described by Bernhard. The commands via console work fine so far.
But I’m not sure how to make items and things from the python commands.
Kind regards
Jens
noemu
(Rafael Jarosch)
April 12, 2020, 4:38pm
38
hi,
i’ve created following protoype. (i didn’t test the UP/DOWN/STOP commands for the blinds, could be that they are inverted and that the stop command doesn’t work at all). Using a slider for the blinds works pretty well.
you need to adjust the id’s (e.g. 5.10) and the path to the paring file (this file need’s to be owned by the openhab user, (not the openhabian user))
velux.things
Thing exec:command:velux [command="python3 -m homekit.get_characteristic -f /openhab/conf/homekit.json -a velux -c 5.10 -c 5.13 -c 5.17 -c 2.10 -c 3.10 -c 4.10", interval=30, timeout=20]
velux.items
String VeluxExec "velux status update" {channel="exec:command:velux:output"}
Number Flur_temperatur "Temperature [%.1f °C]" <temperature>
Number Flur_Co2 "CO2 [%.1f]"
Number Flur_luftfeuchtigkeit "Luftfeuchtigkeit [%d]"
Number Flur_luftquali "Luft Qualität [%d]"
Number Flur_lux "Lux [%d]"
Group veluxshutters <rollershutter>
Rollershutter Galerie_Rolladen (veluxshutters)
Rollershutter Badezimmer_Rolladen (veluxshutters)
Rollershutter Galerie_Fenster <window> (veluxshutters)
velux.rules
rule "velux item update"
when
Item VeluxExec changed
then
val jsonstate = triggeringItem.state.toString
//logInfo("Received Json", jsonstate)
val temp = transform("JSONPATH", "$['5.10']['value']", jsonstate)
Flur_temperatur.postUpdate(temp)
val co = transform("JSONPATH", "$['5.17']['value']", jsonstate)
Flur_Co2.postUpdate(co)
val humidity = transform("JSONPATH", "$['5.13']['value']", jsonstate)
Flur_luftfeuchtigkeit.postUpdate(humidity)
val prozent = Integer::parseInt(transform("JSONPATH", "$['3.10']['value']", jsonstate).toString())
Galerie_Rolladen.postUpdate(100 - prozent)
prozent = Integer::parseInt(transform("JSONPATH", "$['4.10']['value']", jsonstate).toString())
Badezimmer_Rolladen.postUpdate(100 - prozent)
prozent = Integer::parseInt(transform("JSONPATH", "$['2.10']['value']", jsonstate).toString())
Galerie_Fenster.postUpdate(100 - prozent)
end
rule "shutters command"
when
Member of veluxshutters received command
then
logInfo("shutters", triggeringItem.name + ": " + triggeringItem.state.toString + " - " + receivedCommand)
var String veluxShutter
switch (triggeringItem) {
case Galerie_Rolladen: veluxShutter = '3.11'
case Badezimmer_Rolladen: veluxShutter = '4.11'
case Galerie_Fenster: veluxShutter = '2.11'
}
var int position
if (receivedCommand == UP) {
position = 0
} else if (receivedCommand == DOWN) {
position = 100
} else if (receivedCommand == STOP) {
val StringBuilder readCommand = new StringBuilder
readCommand.append("python3@@-m@@homekit.get_characteristic@@-f@@/openhab/conf/homekit.json@@-a@@velux@@-c@@" + veluxShutter)
val String result = executeCommandLine(readCommand.toString, 10000)
position = transform("JSONPATH", "$.['" + veluxShutter + "'].value", result)
} else if (receivedCommand instanceof Number) {
position = 100 - receivedCommand.intValue
}
logInfo("shutters", "moving " + veluxShutter + " to " + position)
val StringBuilder myCommand = new StringBuilder
myCommand.append("python3@@-m@@homekit.put_characteristic@@-f@@/openhab/conf/homekit.json@@-a@@velux@@-c@@" + veluxShutter + "@@" + position)
logInfo("shutters", myCommand.toString, 1000)
val String Answer = executeCommandLine(myCommand.toString, 10000)
logInfo("shutters", "Result:" + Answer)
end
1 Like
chris0815
(Christian Fiksel)
April 14, 2020, 6:31pm
39
hi all,
i did already something with openhub and it went so far so good.
But with this i have a problem in creating the “pairing file”.
what information are needed and where can i find it?
I followd the link and installed the homekit_pyton and i can discover the bridge.
But thats it…
thanks for support
chris
chris0815
(Christian Fiksel)
May 3, 2020, 9:35am
40
hi all,
i found a good step by step guide
no it is working perfect for me
thanks
chris
1 Like
hbow
(Hubert Bower)
November 7, 2020, 3:21pm
41
I have extracted the client_id and client_secret from the VELUX active 1.5.0.7 APK using JADX. Those two information are returned by some methods, located all in the same class file.
# client_id: 5931426da127d981e76bdd3f
# client_secret: 6ae2d89d15e767ae5c56b456b452d319
# mgtkey: f3748d873c62f30ef6f7b61b7e725ac6
How to get your oauth2 token?
$ curl --location --request POST 'https://app.velux-active.com/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'client_id=5931426da127d981e76bdd3f' \
--data-urlencode 'client_secret=6ae2d89d15e767ae5c56b456b452d319' \
--data-urlencode 'username=my@email.com' \
--data-urlencode 'password=mypassw' \
--data-urlencode 'app_version=1108002' \
--data-urlencode 'user_prefix=velux'
laursen
(Jacob Laursen)
November 22, 2020, 8:13pm
42
Hi Hubert,
Thanks for extracting and sharing that. Now working for me. To get token:
curl -d “grant_type=password&client_id=5931426da127d981e76bdd3f&client_secret=6ae2d89d15e767ae5c56b456b452d319&username=my@email.com &password=mypassw&user_prefix=velux” https://app.velux-active.com/oauth2/token
As documented here:
# Velux Protocol
The Velux API is mostly compatible with the [Netatmo API](https://dev.netatmo.com/en-US/resources/technical/introduction) (swagger can be found [here](https://cbornet.github.io/netatmo-swagger-decl/)) but all Velux relevant calls are in a second API (`/syncapi/v1/setstate`).
## Initial login
Request:
```
curl -d "grant_type=password&client_id=${CLIENT_ID}&client_secret=${CLIENT_SECRET}&username=${USERNAME}&password=${PASSWORD}&user_prefix=velux" https://app.velux-active.com/oauth2/token
```
Response:
```
{
"access_token": "...",
"refresh_token": "...",
"scope": [
"all_scopes"
This file has been truncated. show original
Did anyone succeed in setting state for Departure Switch (NXD)?
Tried:
curl -s -H “Content-Type: application/json; charset=utf-8” -H “Authorization: Bearer mytoken” -X POST -d “${JSON}” “https://app.velux-active.com/syncapi/v1/setstate ”
with $JSON set to:
{
“home”: {
“id”: “myhomeid”,
“modules”: [
{
“id”: “xx:xx:xx:xx:xx:xx”,
“locked”: true
}
]
}
}
But get this response:
{“error”:{“code”:21,“message”:“cannot set property locked for module xx:xx:xx:xx:xx:xx”}}
Best regards,
Jacob Laursen
laursen
(Jacob Laursen)
January 18, 2021, 9:20pm
43
@nougad - I may have somehow missed it, but how do you create a request for locking or unlocking your home?
/Jacob
Hi. Thank you very much for all info present in this thread.
I was able to install and run as openhabian the Homekit python version suggested by Bernhard and to define Things/Items as suggested by Rafael.
When I run the command as openhab I get below error:
/usr/bin/python3: Error while finding module specification for ‘homekit.get_characteristic’ (ModuleNotFoundError: No module named ‘homekit’)
The same command executed by openhabian work smoothly.
Python modules owner and group looks fine.
I have tried to move Homekit python site-packages in PATH to /usr/lib/bin but without success.
I have googled the error but without success (I’m not a python programmer nor a linux/raspberry expert).
Could you please give me some suggestions?
Release = Raspbian GNU/Linux 10 (buster)
Kernel = Linux 5.10.11-v7+
Platform = Raspberry Pi 3 Model B Plus Rev 1.3
Thank you in advance for your help.
Pierpaolo
Hi again. I’m going to answer myself
To install homekit for openhab user the command is: sudo -u openhab pip3 install --user homekit[IP]
Probably also this command should work but I have not tested it: pip3 install --system homekit[IP]
To be honest I’m not able to understand if this can create problems on the raspberry installation or if it is ok.
Bye.
Pierpaolo
ZTHawk
(ZTHawk)
October 29, 2021, 12:22pm
46
I have created a small instruction to patch the APK file and get all required info to interact with windows and unlock your home.
The app is only required once to get the all the keys.
Btw:
I was able to generate and exchange all other keys via web API except for the HashSignKey which seems to be generated when the app connects directly to the gateway. I could log that exchange with wireshark (~9 requests and responses between app + local gateway) but data seems to be encoded/encrypted.
But having all the keys allows to create own APIs (eg Node-RED).
Maybe this is useful to some people, like everything here was for me.
1 Like
sloth0815
(Jonas Böhringer)
June 14, 2022, 5:56am
47
Hi there, I have an OpenHAB setup with a KLF200 to control my windows and rollershutters. It works fine apart from the KLF 200 being a pain to work with (login via its own WI-FI only!). However, whenever I need to restart the OpenHAB service the KLF200 refuses any incoming connection and I have to keep unplugging it completely several times for long periods of time until it hopefully starts working agains. This seems totally random and sometimes takes days.
As this is not acceptable I was hoping the KLX300 could be a solution. Will there be a binding for OpenHAB eventually? I am also happy to tinker with copy-pasting code to make it work. Thanks!
hmerk
(Hans-Jörg Merk)
June 14, 2022, 6:33am
48
Newer KLF200 devices work reliable only over LAN access. The internal WiFi access point should be disabled automatically 10 minutes after power connection. This has been added to the latest Pull Request documentation.
My setup is running fine for 2 month now.