Google Agenda, vos événements vers la HC2

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

Avant tout, un projet plus ambitieux est en train de voir le jour par Kriek … ICI

Dans l’attente que son projet soit terminé, voici le script Google que j’utilise afin d’envoyer mes événements sur ma HC2.

wpid-wp-1409864109526.png

/**
 * ========================================================================================================
 * [FR] Ce script va envoyer les 10 prochains rendez-vous sur votre HC2.
 * [FR] Il va créer ou modifier 10 variables Globales (Event1, Event2, ..., Event10) et les remplirs
 * [EN] This script will send the 10 next events of your google agenda on your HC2
 * [EN] It will create or modify 10 global variables (Event1, Event2, ... Event10) et set the value
 * ========================================================================================================
**/
var HC2_IP = "www.mahc2.com"; 
var LOGIN = "admin";
var PWD = "admin";
var CAL_ID = '2yyyyyyyyyyyyyyyyyyyyy@group.calendar.google.com';

var TIMEZONE = "GMT+2";
var DATE_FORMAT = "dd.MM"
var ALL_DAY = "" 
var TIME_FORMAT = "HH:mm"

/**
 * ----------------------------------------------------------------------------
 * [FR] Parcours les 10 prochaines événements (2 semaines max)
 * [FR] Et les envoi à sur la HC2
 * [EN] Browse the next 10 events and then them on the HC2 (2 weeks max)
 * ----------------------------------------------------------------------------
**/
function findAndSend() {
   var cal = CalendarApp.getCalendarById(CAL_ID);
   var now = new Date();
   var nowPlus2Weeks = new Date(now.getTime() + (14 * 24 * 60 * 60 * 1000));
   var events = cal.getEvents(now, nowPlus2Weeks);
   var index = 1;
   for (var i=0 ; i < events.length && i < 10; i++) {
      var d = getDateTime(events[i])
      send("Event"+index, d + " - " + events[i].getTitle());
      index += 1;
   }
}

/**
 * ----------------------------------------------------------------------------
 * [FR] Change le format de la date pour l'affichage
 * [EN] Change the date format for display
 * ----------------------------------------------------------------------------
**/
function getDateTime(event) {
   var dt = ""
   if (event.isAllDayEvent()) {
      dt = Utilities.formatDate(event.getStartTime(), TIMEZONE, DATE_FORMAT);
      dt += " " + ALL_DAY;
   } else {
      dt = Utilities.formatDate(event.getStartTime(), TIMEZONE, DATE_FORMAT);
      dt += " ";
      dt += Utilities.formatDate(event.getStartTime(), TIMEZONE, TIME_FORMAT);
   }
   return dt;
}

/**
 * ---------------------------------------------------------------------------------------------------------
 * [FR] Détermine si la variable doit être créée ou modifiée
 * [EN] Check of the variable must be created or modified 
 * ---------------------------------------------------------------------------------------------------------
**/
function send(name, value) {
   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);
   }
}

/**
 * ---------------------------------------------------------------------------------------------------------
 * [FR] Ajoute une variable globale sur la HC2 ... error 409 si elle existe déjà
 * [EN] Add a variable on the HC2 (Error 409 if the variable still exist) 
 * ---------------------------------------------------------------------------------------------------------**/
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)
};

/**
 * ---------------------------------------------------------------------------------------------------------
 * [FR] Retourne toutes les variables
 * [EN] Return all the 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;
}

/**
 * ---------------------------------------------------------------------------------------------------------
 * [FR] Modify une variable
 * [EN] Modify a varibale
 * ---------------------------------------------------------------------------------------------------------**/
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) 
}

wpid-wp-1409864115126.png

Ensuite d’utilise un petit module virtuel qui me permet d’afficher directement ces informations.

Google_Agenda (fichier zip)

Maintenant libre à vous de laisser courir votre imagination pour, par exemple, que votre Karotz ou SONOS vous annonce votre journée dès le lever.

Bien à vous.

2 commentaires sur “Google Agenda, vos événements vers la HC2”

  1. Non, pas besoin de le rendre public … heureusement.

    Par contre ce script ne fonctionnera plus dès que tu passeras un version 4 du firmware. En effet, ils ont changer le fonctionnement des variables globales. Néanmoins, j’ai une solution qui devrait fonctionner sur toutes les versions et qui n’utilise pas les variables globales mais rempli directement un module virtuel. Je suis en phase de tests (concluant).

Laissez une réponse à coquard Annuler la réponse.