Google Script au service de votre ZiBASE

Paru sur domotique-info.fr

Google Script offre, entre autre, la possibilité d’accéder à votre agenda Google et d’envoyer des requêtes HTTP.

Il devient alors possible grâce à un simple script hébergé sur votre Google Drive de piloter, à intervalle régulier, votre domotique.

L’un des premiers exemple d’utilisation est la possibilité de mettre à jour une variable de votre ZiBASE afin que cette dernière puisse, par exemple, gérer votre chauffage selon le type de jour indiqué dans votre agenda (Travaillé, Congé, …). Voir l’excellent article de Richard concernant l’optimisation de son chauffage.

Pour ce faire, nous avons besoin des éléments suivants :

  • Un compte Google Drive
  • Un agenda Google Calendar
  • L’identifiant et token de votre ZiBASE (Que vous trouverez dans le configurateur en mode Expert

Zibase_Id

1ère étape : Remplir son agenda

Agenda

Insérer un événement journalier avec un nom parlant. Par exemple, j’utilise les mots (Travail, Maison ou Vacances) Travail pour demander à mon chauffage de s’activer de 6-8h et de 16-23h, Maison pour l’activer de 8-23h et Vacances pour qu’il bascule en mode Hors-Gel.

Noter l’identifiant de votre agenda (Cliquez sur la flèche indiquée, allez dans les paramètres et noté l’ID de votre agenda)

Agenda_idAgenda_id2

2ème étape : création du script

Connectez-vous sur Google Drive et créer un nouveau script

Script1

Si “Script” n’est pas disponible, cliquez sur “Connecter plus d’application” puis sélectionnez “Script in Google Drive”

Script2

Une fois le script créé, copier y le code ci dessous :

/**
 * ========================================================================================================
 * Lit les événements de la journée dans le calendrier spécifié et retourne les valeurs prédéfinies
 * 9 si un événement nommé Vacances existe, 
 * 5 si un évenement nommé Maison existe, 
 * 1 Travail (valeur par défaut)
 * ========================================================================================================
**/
var ZIBASE = "ZiBASE00xxxx";
var TOKEN = "xxxxxxxxxx";
var CAL_ID = 'Xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com';

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

var Z_VARIABLE_AUJOURDHUI = 20; // V20
var Z_VARIABLE_DEMAIN = 21; // V21
/**
 * ---------------------------------------------------------------------------------------------------------
 * 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();
  envoi = UrlFetchApp.fetch("https://zibase.net/m/zapi_remote_zibase_set.php?device=" + ZIBASE + "&token="+ TOKEN + 
  "&action=rowzibasecommand¶m1=5¶m2="+ getTypeOfADay(today) + "¶m3=1¶m4=" + Z_VARIABLE_AUJOURDHUI); 
};

/**
 * ---------------------------------------------------------------------------------------------------------
 * 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);
  envoi = UrlFetchApp.fetch("https://zibase.net/m/zapi_remote_zibase_set.php?device=" + ZIBASE + "&token="+ TOKEN + 
  "&action=rowzibasecommand¶m1=5¶m2="+ getTypeOfADay(tomorrow) + "¶m3=1¶m4=" + Z_VARIABLE_DEMAIN); 
};

/**
 * ---------------------------------------------------------------------------------------------------------
 * 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 : 9 si un événement nommé Vacances existe, 5 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 = 9 // Vacances 
  } else if (eventsMaison.length > 0) {
    if (existAllDay(eventsMaison)) result = 5 // 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;
}

puis modifiez les paramètres

var ZIBASE = "ZiBASE00xxxx";
var TOKEN = "xxxxxxxxxx";
var CAL_ID = 'Xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com';

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

var Z_VARIABLE_AUJOURDHUI = 20; // V20
var Z_VARIABLE_DEMAIN = 21; // V21

par vos propres informations, ainsi que les variables que vous souhaitez que le script modifie. J’utilise la variable 20 pour aujourd’hui et 21 pour demain (attention, les variables supérieures à 31 ne sont pas accessible par le script).

Comme vous pouvez le constater, le script ne cherche pas le mot ‘Travail’, ce dernier est déduit du fait que nous ne trouvons ni maison, ni vacances. Cela sera donc la valeur par défaut.

3ème étape : activer et enclencher le script

Afin que le script puisse accéder à votre agenda, certaines autorisations sont nécessaire. Afin de déclencher la demande d’autorisation, il suffit d’exécuter le script manuellement la première fois.

Activer1

Sélectionnez “traiter” ou “traiterAujourdhuit”, “traiterDemain” puis cliquer sur le bouton play. Le script va démarrer et vous demander les autorisations nécessaires.

Une fois le script manuellement démarrer, il est nécessaire de demander son exécution automatique toutes les heures.

Activer2

Et voilà, vous avez créer un script qui s’exécute toutes les heures, qui va vérifier dans votre agenda le type de journée et qui stock cette information dans une variable de votre ZiBASE.

Maintenant, à vous de jouer avec vos scénario pour exploiter correctement ces variables. Pour ce faire, je ne peux que vous conseiller de (re)lire l’article de Richard concernant l’optimisation de son chauffage.

 

Références : 
API ZiBASE : http://www.zodianet.com/zapi.html,
Google Script : http://www.google.com/script/start/

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