This is an old revision of the document!


Protocole pour webservice Calaos

La centrale propose une protocole de communication grâce à des requêtes HTTP. Les données échangés sont au format JSON.

Le Calaos Network propose également ce type de service, en particulier pour les applications clientes et l'authentification des utilisateurs.

Détails des requêtes

Les requêtes se font en HTTPS soit sur la centrale directement, soit sur le Calaos Network. Les requêtes sur le Calaos Network se font grâce à l'url suivante:

https://www.calaos.fr/calaos_network/api.php

Les requêtes sur la centrale se font grâce à l'url suivante:

https://ip_centrale/api.php

Effectuer des tests

Il est possible d'effectuer des requêtes de tests grâce à l'outil Wget en ligne de commande.

Exemple

Les données à envoyer sont au format JSON dans le fichier query.json et le résultat se retrouvera dans result.json.

wget --no-check-certificate --post-file query.json --output-document result.json https://addresse_ip/api.php

API Calaos Network

get_ip

Cette commande permet le login et la récupération de l'adresse IP de la centrale.

Exemple

Données JSON à envoyer:

{
    "cn_user": "mail@example.com",
    "cn_pass": "the_password",
    "action": "get_ip"
}

Réponse:

{
    "private_ip": "192.168.50.50",
    "cn_user": "mail@example.com",
    "at_home": true,
    "public_ip": "50.50.50.50"
}

La réponse contient 2 adresses IP, l'adresse privée, qui correspond à l'adresse IP de la centrale sur le réseau local, et l'adresse publique, qui correspond à l'adresse IP public ou il faudra se connecter à la centrale. A l'extérieur, uniquement le port HTTPS 443 est normalement ouvert.

Calaos Network nous donne également le paramètre at_home qui est un booléen qui définit si on est dans le même réseau que la centrale ou à l'extérieur.

API de la centrale

get_home

Cette commande permet de récupérer la configuration complète de la maison.

Exemple

Données JSON à envoyer:

{
    "cn_user": "mail@example.com",
    "cn_pass": "the_password",
    "action": "get_home"
}

Réponse:

{
  "home": [
      {
          "type": "salon",
          "hits": "0",
          "name": "Salon",
          "items": {
              "inputs": [
                  {
                      "visible": "false",
                      "var_type": "bool",
                      "id": "input_0",
                      "hits": "0",
                      "name": "Interrupteur",
                      "type": "WIDigitalBP",
                      "state": "false"
                  },
                  {
                      "visible": "",
                      "var_type": "string",
                      "id": "input_1",
                      "hits": "0",
                      "name": "Caméra 1",
                      "type": "CamInput",
                      "state": ""
                  },
                  {
                      "visible": "",
                      "var_type": "string",
                      "id": "input_2",
                      "hits": "0",
                      "name": "lecteur pull-house",
                      "type": "AudioInput",
                      "state": ""
                  }
              ],
              "outputs": [
                  {
                      "id": "output_0",
                      "hits": "0",
                      "name": "Lumière",
                      "gtype": "light",
                      "state": "false",
                      "type": "WODigital",
                      "visible": "true",
                      "var_type": "bool"
                  },
                  {
                      "id": "output_1",
                      "hits": "0",
                      "name": "Volet",
                      "state": "stop -2.14748e 09",
                      "type": "WOVoletSmart",
                      "visible": "true",
                      "var_type": "string"
                  },
                  {
                      "id": "output_2",
                      "hits": "0",
                      "name": "Caméra 1",
                      "state": "",
                      "type": "CamOutput",
                      "visible": "",
                      "var_type": "string"
                  },
                  {
                      "id": "output_3",
                      "hits": "0",
                      "name": "lecteur pull-house",
                      "state": "",
                      "type": "AudioOutput",
                      "visible": "",
                      "var_type": "string"
                  }
              ]
          }
      }
  ],
  "cameras": [
      {
          "url_lowres": "https://127.0.0.1/camera.php?camera_id=0&width=300&height=225",
          "name": "Caméra 1",
          "ptz": "false",
          "url_highres": "https://127.0.0.1/camera.php?camera_id=0&width=640&height=480"
      }
  ],
  "audio": [
      {
          "player_id": 0,
          "volume": "0",
          "time_elapsed": "0",
          "cover_url": "https://127.0.0.1/music.php?player_id=0",
          "current_track": {
              "title": "?",
              "duration": "0",
              "artist": "?",
              "album": "?",
              "coverart": "1"
          },
          "status": "error",
          "name": "lecteur pull-house",
          "playlist": "true",
          "database": "true"
      }
  ]
}

La réponse nous donne 3 tableaux principaux qui reflètent la configuration de la maison [“home”], la liste des caméras [“camera”] et enfin la liste des zones de musique [“audio”]. Toutes les informations sont du même type que ce qui est renvoyé par le protocole TCP.

get_state

Cette commande permet de récupérer l’état d'une ou plusieurs entrée/sorties. Les paramètres comprennent les ID des entrées/sorties, tels qu'on le trouve dans le protocole TCP.

Exemple

Données JSON à envoyer:

{
    "cn_user": "mail@example.com",
    "cn_pass": "the_password",
    "action": "get_state",
    "inputs": ["input_0"],
    "outputs": ["output_0", "output_1"]
}

Réponse: {

  "inputs": {
      "input_0": "false"
  },
  "outputs": {
      "output_0": "false",
      "output_1": "stop 0"
  }

}

La réponse contient la liste des entrées/sorties demandée avec les états.