469 lines
9.4 KiB
Markdown
469 lines
9.4 KiB
Markdown
# 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"
|
|
],
|
|
"expires_in": 10800,
|
|
"expire_in": 10800
|
|
}
|
|
```
|
|
|
|
Available scopes:
|
|
|
|
* `all_scopes`
|
|
* `access_velux`
|
|
* `read_velux`
|
|
* `write_velux`
|
|
* most likely more
|
|
|
|
Available device types:
|
|
|
|
* NXO - RollerShutter
|
|
* NXG - Bridge
|
|
* NXD - Depature switch
|
|
* NXS - Sensor
|
|
|
|
## Refresh token
|
|
|
|
Request:
|
|
|
|
```
|
|
curl -d "grant_type=refresh_token&refresh_token=${REFRESH_TOKEN}&client_id=${CLIENT_ID}&client_secret=${CLIENT_SECRET}" https://app.velux-active.com/oauth2/token
|
|
```
|
|
|
|
Response:
|
|
|
|
```
|
|
{
|
|
"access_token": "...",
|
|
"refresh_token": "...",
|
|
"scope": [
|
|
"all_scopes"
|
|
],
|
|
"expires_in": 10800,
|
|
"expire_in": 10800
|
|
}
|
|
```
|
|
|
|
## GetUser
|
|
|
|
Request:
|
|
|
|
```
|
|
curl -d "access_token=${YOUR_TOKEN}" https://app.velux-active.com/api/getuser
|
|
```
|
|
|
|
Response:
|
|
|
|
```
|
|
{
|
|
"body": {
|
|
"_id": "${ID}",
|
|
"not_associable": false,
|
|
"mail": "${EMAIL}",
|
|
"account_validation": {
|
|
"validated_mail": true,
|
|
"validation_date": 1662521387
|
|
},
|
|
"fb_chatbot_available": true,
|
|
"app_telemetry": true,
|
|
"administrative": {
|
|
"unit": 0,
|
|
"windunit": 0,
|
|
"pressureunit": 0,
|
|
"feel_like_algo": 0,
|
|
"reg_locale": "en-GB",
|
|
"lang": "en"
|
|
}
|
|
},
|
|
"status": "ok",
|
|
"time_exec": 0.020205020904541,
|
|
"time_server": 1571429393
|
|
}
|
|
```
|
|
|
|
## GetHomeData
|
|
|
|
Request:
|
|
|
|
```
|
|
curl -v -X POST -d "access_token=${YOUR_TOKEN}" https://app.velux-active.com/api/gethomedata
|
|
```
|
|
|
|
Response:
|
|
|
|
```
|
|
{
|
|
"body": {
|
|
"homes": [
|
|
{
|
|
"id": "${HOMEID}",
|
|
"name": "${HOMENAME}",
|
|
"share_info": false,
|
|
"gone_after": 14400,
|
|
"smart_notifs": true,
|
|
"notify_movements": "empty",
|
|
"record_movements": "empty",
|
|
"notify_unknowns": "empty",
|
|
"record_alarms": "always",
|
|
"record_animals": true,
|
|
"notify_animals": true,
|
|
"events_ttl": "never",
|
|
"persons": [],
|
|
"record_humans": "empty",
|
|
"notify_humans": "empty",
|
|
"presence_record_humans": "record_and_notify",
|
|
"presence_record_vehicles": "record_and_notify",
|
|
"presence_record_animals": "record",
|
|
"presence_record_alarms": "record",
|
|
"presence_record_movements": "record",
|
|
"presence_notify_from": 0,
|
|
"presence_notify_to": 86399,
|
|
"presence_enable_notify_from_to": "empty",
|
|
"place": {
|
|
"altitude": 42,
|
|
"city": "Berlin",
|
|
"country": "DE",
|
|
"location": [
|
|
13.3,
|
|
52.5
|
|
],
|
|
"timezone": "Europe/Berlin",
|
|
"trust_location": true
|
|
},
|
|
"cameras": [],
|
|
"smokedetectors": [],
|
|
"admin_access_code": [
|
|
"....."
|
|
]
|
|
}
|
|
],
|
|
"user": {
|
|
"reg_locale": "en-GB",
|
|
"lang": "en",
|
|
"country": "DE",
|
|
"mail": "${EMAIL}",
|
|
"fb_chatbot_available": true,
|
|
"app_telemetry": true
|
|
},
|
|
"global_info": {
|
|
"show_tags": true
|
|
}
|
|
},
|
|
"status": "ok",
|
|
"time_exec": 0.013638019561768,
|
|
"time_server": 1561413743
|
|
}
|
|
```
|
|
|
|
## HomesData
|
|
|
|
Request:
|
|
|
|
```
|
|
curl -v -X POST -d "access_token=${YOUR_TOKEN}&gateway_types=[NXG]" https://app.velux-active.com/api/homesdata
|
|
```
|
|
|
|
## HomeStatus
|
|
|
|
Request:
|
|
|
|
```
|
|
curl -v -X POST -d "access_token=${YOUR_TOKEN}&home_id=${HOMEID}" https://app.velux-active.com/api/homestatus
|
|
```
|
|
|
|
alias for `/syncapi/v1/homestatus`
|
|
|
|
## GetHomeUsers
|
|
|
|
Request:
|
|
|
|
```
|
|
curl -v -X POST -d "access_token=${YOUR_TOKEN}&home_id=${HOMEID}" https://app.netatmo.net/api/gethomeusers
|
|
```
|
|
|
|
## SetState
|
|
|
|
```
|
|
curl -s -H "Content-Type: application/json; charset=utf-8" -H "Authorization: Bearer $YOUR_TOKEN" -X POST -d "${JSON}" "https://app.velux-active.com/syncapi/v1/setstate"
|
|
```
|
|
|
|
### Shutter position
|
|
|
|
```
|
|
{
|
|
"home": {
|
|
"id": "${HOMEID}",
|
|
"modules": [
|
|
{
|
|
"bridge": "${BRIDGE}",
|
|
"id": "${MODULEID}",
|
|
"target_position": 100
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
### Retrieve Key
|
|
|
|
```
|
|
{
|
|
"home": {
|
|
"id": "${HOMEID}",
|
|
"modules": [
|
|
{
|
|
"id": "${BRIDGE}",
|
|
"retrieve_key": true
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
### Stop Movements
|
|
|
|
```
|
|
{
|
|
"home": {
|
|
"id": "${HOMEID}",
|
|
"modules": [
|
|
{
|
|
"id": "${BRIDGE}",
|
|
"stop_movements": "all"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
### WakeUp
|
|
|
|
```
|
|
{
|
|
"home": {
|
|
"id": "${HOMEID}",
|
|
"modules": [
|
|
{
|
|
"id": "${BRIDGE}",
|
|
"scenario": "wake_up"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
### BedTime
|
|
|
|
```
|
|
{
|
|
"home": {
|
|
"id": "${HOMEID}",
|
|
"modules": [
|
|
{
|
|
"id": "${BRIDGE}",
|
|
"scenario": "bedtime"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
### Identity
|
|
|
|
Make device blink
|
|
|
|
```
|
|
{
|
|
"home": {
|
|
"id": "${HOMEID}",
|
|
"modules": [
|
|
{
|
|
"id": "${BRIDGE}",
|
|
"identify": true
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
## GetMeasure
|
|
|
|
sensors: https://dev.netatmo.com/resources/technical/reference/common/getmeasure
|
|
|
|
all values:
|
|
|
|
```
|
|
curl -v -X POST -d "access_token=${YOUR_TOKEN}&device_id=${BRIDGE}&module_id=${DEV1}&scale=30min&type=Temperature,CO2,Humidity,Pressure,Noise,Rain,WindStrength,WindAngle,Guststrength,GustAngle,Sp_Temperature,BoilerOn,BoilerOff,min_temp,max_temp,min_hum,max_hum,min_pressure,max_pressure,min_noise,max_noise,sum_rain,sum_boiler_on,sum_boiler_off" https://app.velux-active.com/api/getmeasure
|
|
```
|
|
|
|
only works for Humidity, CO2:
|
|
|
|
```
|
|
curl -v -X POST -d "access_token=${YOUR_TOKEN}&device_id=${BRIDGE}&module_id=${DEV1}&scale=30min&type=CO2,Humidity&date_begin=1561834800" https://app.velux-active.com/api/getmeasure
|
|
```
|
|
|
|
and when used without a module for Pressure:
|
|
|
|
```
|
|
curl -v -X POST -d "access_token=${YOUR_TOKEN}&device_id=${BRIDGE}&scale=30min&type=Pressure&date_begin=1561834800" https://app.velux-active.com/api/getmeasure
|
|
```
|
|
|
|
## Other Calls
|
|
|
|
### SetPersonsAway
|
|
|
|
Request:
|
|
|
|
```
|
|
curl -v -X POST -d "access_token=${YOUR_TOKEN}&home_id=${HOMEID}" https://app.velux-active.com/api/setpersonsaway
|
|
```
|
|
|
|
not sure what it does
|
|
|
|
### AddPushContext
|
|
|
|
https://app.velux-active.com/api/addpushcontext
|
|
|
|
### CheckSession
|
|
|
|
https://app.velux-active.com/api/checksession
|
|
|
|
### CreateNewhomeSchedule
|
|
|
|
https://app.velux-active.com/api/createnewhomeschedule
|
|
|
|
### GenerateHomeAdminAccesscode
|
|
|
|
https://app.velux-active.com/api/generatehomeadminaccesscode
|
|
|
|
### GetAlgorithmsActivity
|
|
|
|
https://app.velux-active.com/api/getalgorithmsactivity
|
|
|
|
## GetConfigs
|
|
|
|
Request:
|
|
|
|
```
|
|
curl -v -X POST -d "access_token=${YOUR_TOKEN}&home_id=${HOMEID}" https://app.netatmo.net/syncapi/v1/getconfigs
|
|
```
|
|
|
|
### GetNotificationSettings
|
|
|
|
https://app.velux-active.com/api/getnotificationsettings
|
|
|
|
## GetScenarios
|
|
|
|
Request:
|
|
|
|
```
|
|
curl -v -X POST -d "access_token=${YOUR_TOKEN}&home_id=${HOMEID}" https://app.netatmo.net/syncapi/v1/getscenarios
|
|
```
|
|
|
|
### MailNotificationConfiguration
|
|
|
|
https://app.velux-active.com/api/mailnotificationconfiguration
|
|
|
|
### ModifyUser
|
|
|
|
https://app.velux-active.com/api/modifyuser
|
|
|
|
### RemoveAccessTokens
|
|
|
|
https://app.velux-active.com/api/removeaccesstokens
|
|
|
|
### RemoveUserAccessToHome
|
|
|
|
https://app.velux-active.com/api/removeuseraccesstohome
|
|
|
|
### SendMailApproveMail
|
|
|
|
https://app.velux-active.com/api/sendmailapprovemail
|
|
|
|
### SetConfigs
|
|
|
|
https://app.velux-active.com/syncapi/v1/setconfigs
|
|
|
|
### SetNotificationSettings
|
|
|
|
https://app.velux-active.com/api/setnotificationsettings
|
|
|
|
### SetScenarios
|
|
|
|
* https://app.velux-active.com/syncapi/v1/setscenarios
|
|
|
|
### SwitchHomeSchedule
|
|
|
|
* https://app.velux-active.com/api/switchhomeschedule
|
|
|
|
### SynchomeSchedule
|
|
|
|
* https://app.velux-active.com/api/synchomeschedule
|
|
|
|
### UpdateHomePlace
|
|
|
|
* https://app.velux-active.com/api/updatehomeplace
|
|
|
|
## Netatmo calls not working with velux
|
|
|
|
* https://app.velux-active.com/api/gethomecoachsdata
|
|
* https://app.velux-active.com/api/getstationsdata
|
|
* https://app.velux-active.com/api/getthermstate
|
|
* https://app.velux-active.com/api/devicelist
|
|
* https://app.velux-active.com/api/partnerdevices - works but empty
|
|
* https://app.velux-active.com/api/getthermostatsdata
|
|
|
|
# Settings Web UI
|
|
|
|
Parts of the APP is just a WEB UI loaded:
|
|
|
|
domain: https://settings.velux-active.com/#/
|
|
|
|
The page is empty per default because no access token is found. Set the cookie via and reload the page
|
|
|
|
```
|
|
document.cookie = "veluxactivecomaccess_token=" + encodeURIComponent(access_token)
|
|
```
|
|
|
|
Relevant routes:
|
|
|
|
```
|
|
path: "test"
|
|
path: "homecontrol/:home_id"
|
|
path: "home/:home_id"
|
|
path: "account"
|
|
path: "users/:home_id"
|
|
path: "scenario/:home_id"
|
|
path: "notifications/:home_id"
|
|
path: "actuator/:home_id/:module_id"
|
|
path: "calibration/:home_id/:module_id"
|
|
path: "activity-report/:home_id"
|
|
|
|
path: "roomcontrol/:home_id/:room_id"
|
|
path: "roomcontrol/:home_id/:room_id/advanced"
|
|
path: "roomcontrol/:home_id/:room_id/schedule/:index"
|
|
path: "location/:home_id"
|
|
path: "timezone/:home_id"
|
|
path: "test/:home_id"
|
|
path: "test/:home_id/:module_id"
|
|
path: "modify_mail"
|
|
path: "modify_password"
|
|
path: "mail_preferences"
|
|
```
|