velux-cli/velux-protocol.md

9.4 KiB

Velux Protocol

The Velux API is mostly compatible with the Netatmo API (swagger can be found here) 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

SwitchHomeSchedule

SynchomeSchedule

UpdateHomePlace

Netatmo calls not working with velux

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"