Manipuler une variable globale à votre HC2 depuis Google Script

ATTENTION : Ne fonctionne pas pour une HC2 sur un firmware 4.xx

Il peut être utile de devoir créer ou modifier une variable globale depuis une application tiers tel que Google Script.

Pour ce faire, voici le code à utiliser.

/**
 * ==============================================  
 * Création de variable globale sur la HC2
 * ==============================================
**/

var HC2_IP = "www.xxxxxx.xx:xx";
var LOGIN = "admin";
var PWD = "admin"


/**
 * ---------------------------------------------
 * Action
 * ---------------------------------------------
**/
function doIt() {
 
   var name = "MA_VARIABLE";
   var value = "1234";
 
   var vars = getAllVars();
   var found = false;
   for (var i = 0; i < vars.length; i++) {
      if (vars[i].name == name) {
         found = true;
      }
   }
 
   if (found) {
      modify(name, value);
   } else {
      add(name, value);
   }
}

/**
 * --------------------------------------------
 * Ajoute une variable globale sur la HC2 ... error 409 si elle existe déjà
 * --------------------------------------------
**/
function add(name, value) {

   var url = "http://" + HC2_IP + "/api/globalVariables";
   var data = {"name":name, "value":value};

   var options = {"headers": {"User-Agent": "MY_APP_NAME (App URL/your email address)", "Authorization": "Basic " + Utilities.base64Encode(LOGIN + ":" + PWD)}, 
      "Content-Type": "application/json",
      "method":"post",
      "payload": data
   };
 
   envoi = UrlFetchApp.fetch(url, options); 
};

/**
 * ----------------------------------------------
 * Retourne toutes les variables
 * ----------------------------------------------
**/
function getAllVars() {
 
   var url = "http://" + HC2_IP + "/api/globalVariables";
   var options = {"headers": {"User-Agent": "MY_APP_NAME (App URL/your email address)", "Authorization": "Basic " + Utilities.base64Encode(LOGIN + ":" + PWD)}, 
      "Content-Type": "application/json",
      "method":"get"
    };
 
   envoi = UrlFetchApp.fetch(url, options);
   var data = JSON.parse(envoi.getContentText());
   return data;
}

/**
 * ----------------------------------------------
 * Modifie une variable existante
 * ----------------------------------------------
**/
function modify(name, value) {
 
   var payload = "{\"name\" : \"" + name + "\", \"value\" : \"" + value + "\"}";
 
   var url = "http://" + HC2_IP + "/api/globalVariables";
   var options = {"headers": {"User-Agent": "MY_APP_NAME (App URL/your email address)", "Authorization": "Basic " + Utilities.base64Encode(LOGIN + ":" + PWD)}, 
    "Content-Type": "application/json", 
    "method":"put","payload": payload};
 
   envoi = UrlFetchApp.fetch(url, options);
}

6 commentaires sur “Manipuler une variable globale à votre HC2 depuis Google Script”

  1. Bonjour Steven,

    Bon travail.
    J’essaie d’adapter ce code pour poster une commande de scène mais je n’y arrive pas.
    PS : le code ci dessus fonctionne sur mon install.

    D’avance merci

    Fabrice

  2. Bonjour et déjà merci d’avoir répondu.
    A force de persévérance j’y suis arrivé 😉

    Je m’explique quand même car :
    – ça peut servir à d’autres
    – il y a peut être des choses inutiles dans la partie « options » que je ne maîtrise pas.

    En fait j’avais pour habitude d’utiliser une adaptation de ce script pour gérer mes volets avec ma vera Lite.
    http://www.maison-et-domotique.com/download/scripts/agenda_drive.txt

    Etant passé depuis qq jours sur HC2 j’ai tenté de le modifier mais visiblement la façon de se logger sur la HC2 ne plait pas à Drive (l’@ je pense).

    J’ai donc adapté votre script ci dessus pour l’intégrer à l’autre.

    Voici la partie nécessaire à l’envoi.

    function AppelAPI(PeriphID)

    {
    var HC2_IP = « Mon_IP:Port »;
    var LOGIN = « login »;
    var PWD = « pass »

    var url = « http:// » + HC2_IP + « /api/sceneControl?id= » + PeriphID + « &action=start »;
    var options = {« headers »: {« User-Agent »: « MY_APP_NAME (App URL/your email address) », « Authorization »: « Basic  » + Utilities.base64Encode(LOGIN + « : » + PWD)},

    }

    var Reponse;

    Reponse = UrlFetchApp.fetch(url,options);
    Reponse = Reponse.getContentText();

    Logger.log (Reponse);

    return(Reponse.indexOf( » error_code « ) >= 0);

    }

    Fabrice

  3. Par contre pas d’ https sur cette box 😦
    J’ai donc créé un compte pour ce script qui n’a accès qu’aux scènes necessaires.

    1. Fibaro a annoncé le plugin Netatmo. Vu que les API ne sont accessible qu’en HTTPS, cela voudrait dire que le support du HTTPS est pour très bientôt. Par contre, les nouveaux API de la HC2 changent un peu, il faudra juste changer vos requêtes mais rien de méchant.

Laisser un commentaire