Google Script : Google Calendar vers la Home Center

Ce script a pour but de rechercher des événements journaliers typés (“Maison”, “Vacances”, “Travail”) et d’activer un bouton virtuel de la Home Center par rapport au type de journées trouvée.

/**
 * ========================================================================================================
 * Lit les événements de la journée dans le calendrier spécifié et presse sur les boutons du VD 
 * Bouton 2 = Aujourd'hui Travail
 * Bouton 3 = Aujourd'hui Maison
 * Bouton 4 = Aujourd'hui Vacances
 * Bouton 6 = Demain Travail
 * Bouton 7 = Demain Maison
 * Bouton 8 = Demain Vacances
 * ========================================================================================================
**/

var HC2_IP = "www.xxxxx.xxx";
var LOGIN = "admin";
var PWD = "admin"
var VD = 101
var CAL_ID = '2xxxxxxxxxxxxxxxxxxx@group.calendar.google.com';

var MOT_CLE_JOUR_A_LA_MAISON = 'Maison';
var MOT_CLE_JOUR_EN_VACANCES = 'Vacances';

var INDEX_AUJOURDHUI = 2; 
var INDEX_DEMAIN = 6; 


/**
 * ---------------------------------------------------------------------------------------------------------
 * Aujourd'hui et Demain
 * ---------------------------------------------------------------------------------------------------------
**/
function traiter() {
 traiterAujourdhui();
 traiterDemain();
}

/**
 * ---------------------------------------------------------------------------------------------------------
 * Aujourd'hui
 * Stocke la valeur de retour dans la variable 20 de la ZiBASE
 * ---------------------------------------------------------------------------------------------------------
**/
function traiterAujourdhui() {
 var today = new Date();
 url = "http://"+HC2_IP + "/api/callAction?deviceID="+VD+"&name=pressButton&arg1=" + (INDEX_AUJOURDHUI + getTypeOfADay(today))
 var options = {"headers": {
 "User-Agent": "MY_APP_NAME (App URL/your email address)",
 "Authorization": "Basic " + Utilities.base64Encode(LOGIN + ":" + PWD)
 }}
 
 envoi = UrlFetchApp.fetch(url, options)
};


/**
 * ---------------------------------------------------------------------------------------------------------
 * Demain
 * Stocke la valeur de retour dans la variable 21 de la ZiBASE
 * ---------------------------------------------------------------------------------------------------------
**/
function traiterDemain() {
 var tomorrow = new Date(Number(new Date()) + 1000 * 60 * 60 * 24);
 url = "http://"+HC2_IP + "/api/callAction?deviceID="+VD+"&name=pressButton&arg1=" + (INDEX_DEMAIN + getTypeOfADay(tomorrow))
 var options = {"headers": {
 "User-Agent": "MY_APP_NAME (App URL/your email address)",
 "Authorization": "Basic " + Utilities.base64Encode(LOGIN + ":" + PWD)
 }}
 
 envoi = UrlFetchApp.fetch(url, options); 

 url = "http://"+HC2_IP + "/api/callAction?deviceID="+VD+"&name=pressButton&arg1=12"
 envoi = UrlFetchApp.fetch(url, options) 
};


/**
 * ---------------------------------------------------------------------------------------------------------
 * Lit les événements de la journée dans le calendrier spécifié et returne les valeurs prédéfinies
 * Date : la date souhaité
 * Retour : 3 si un événement nommé Vacances existe, 2 si un évenement nommé Maison existe, 1 si aucun de ces événements n'a été trouvé
 * ---------------------------------------------------------------------------------------------------------
**/
function getTypeOfADay(aDate) {

 var cal = CalendarApp.getCalendarById(CAL_ID);
 
 // Google Script contient un bug sur les événements journaliers. Il est donc important, avant la recherche
 // de basculer en TimeZone +0.
 var oldTimeZone = cal.getTimeZone();
 cal.setTimeZone("Etc/GMT");
 
 var eventsMaison = cal.getEventsForDay(aDate, {search: MOT_CLE_JOUR_A_LA_MAISON});
 var eventsVacances = cal.getEventsForDay(aDate, {search: MOT_CLE_JOUR_EN_VACANCES});
 
 var result = 1; // Travail
 if (eventsVacances.length > 0) {
 if (existAllDay(eventsVacances)) result = 3 // Vacances 
 } else if (eventsMaison.length > 0) {
 if (existAllDay(eventsMaison)) result = 2 // Maison
 }
 
 cal.setTimeZone(oldTimeZone);
 return result;
 
}

/**
 * ---------------------------------------------------------------------------------------------------------
 * S'assure qu'un des évenement est de type "Toute la journée"
 * events : Tous les événement de la journée
 * Retour : vrai si un événement est de type toute la journée
 * ---------------------------------------------------------------------------------------------------------
**/
function existAllDay(events) {
 for (var i in events) {
 if (events[i].isAllDayEvent()) {
 return true;
 }
 } 
 return false;
}

2 thoughts on “Google Script : Google Calendar vers la Home Center”

  1. Bonjour.
    Merci pour cette explication très complète.
    Comment pourrai-je utiliser tasker pour faire une tache simple (exemple passer en mode vibreur) les jours ou “travail” est noté dans mon agenda google?
    Je pense que c’est avec “cal.getEventsForDay” mais je ne comprend pas trop comment ça fonctionne.
    Par avance merci.

Laisser un commentaire

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Changer )

Twitter picture

You are commenting using your Twitter account. Log Out / Changer )

Facebook photo

You are commenting using your Facebook account. Log Out / Changer )

Google+ photo

You are commenting using your Google+ account. Log Out / Changer )

Connecting to %s