Script: Calendrier Google et box domotique

Je vous ai présenté il y a peu de temps deux guides pour utiliser votre calendrier Google avec votre box domotique eedomus ou Zibase.

Une fonction vraiment très pratique pour des personnes ayant des emplois du temps très variables, ce qui nécessite de modifier la configuration de l’agenda sur la box (eedomus) ou les scénarios (Zibase).

C’est par exemple mon cas: travaillant en informatique, il peut arriver de travailler la nuit, ou le week end, si une maintenance serveur est nécessaire. Selon mes contraintes, il m’arrive également d’aller travailler en train (le plus courant) ou en voiture (si mes horaires le demandent): là mon heure de lever ne sera pas du tout la même.

De ce fait, il peut m’être nécessaire de modifier la configuration de la box 2 ou 3 fois par semaine. Comme mon emploi du temps est entièrement géré sur Google (jours de congés, rendez vous, etc…), l’idéal serait que la box puisse le consulter et gérer les scénarios en conséquence.

Comme nous l’avons vu dans les deux guides précédents, c’est possible. Mais le flux xml de l’agenda Google étant relativement compliqué, cela nécessite de passer par des scripts extérieurs, qui doivent être hébergés sur un serveur. Ce dernier point n’est pas donné à tout le monde.

Aujourd’hui je vous propose donc un service en ligne que vous pourrez utiliser gratuitement: le script est hébergé sur mon serveur, et vous pourrez l’appeler quand vous le souhaitez. Je vous explique le principe.

 

I. Pré requis

 

Il vous faut bien sûr un agenda Google. Si vous n’avez pas d’agenda Google, vous pouvez en créer un gratuitement ici.

Pour ma part, j’ai un calendrier Google réservé à mes congés. Les congés sont indiqués dans l’entête de la journée (un congé marqué de telle heure à telle heure ne fonctionnera pas):

 

 

Note: pour éviter tout problème, utilisez des mots simples, sans espace ni caractère accentué. Par exemple comme ici: cp, ferie, weekend, etc…

Pour récupérer les informations de votre calendrier, vous aurez besoin de son adresse privée.

Pour cela, rendez vous dans les paramètres de votre calendrier Google. Tout en bas, vous trouverez une icône XML, dans la partie adresse URL privée:

 

 

Faites un clic droit sur cette icône, et récupérez l’adresse. Cette adresse est l’adresse de votre calendrier, mais codée de façon à ce qu’elle ne soit pas publique, de ce genre:

http://www.google.com/calendar/feeds/qsnmyourtcndaoeh6mt3663ing%40group.calendar.google.com/private-1ac30ee2598467tfb4807d7096dc6/basic

Il faudra récupérer la partie en rouge ici, située entre “feeds/” et “/basic”.

Nous pouvons maintenant passer à la configuration sur la box.

 

II. Utilisation du script

 

Le script que je vous met à disposition est très simple.

Il faudra appeler cette adresse:

 

https://www.maison-et-domotique.com/scripts/agenda.php

 

Et passer certains paramètres:

 

?cal=id_calendrier&decode=correspondances&defaut=valeur_par_defaut

  • id_calendrier: il s’agit de l’adresse du calendrier, récupérée précédemment (partie en rouge).
  • correspondances: pour chaque mot trouvé dans le calendrier, on va y affecter une valeur numérique. Par exemple “0,travail,1,cp,2,weekend,3,ferie”. Si dans le calendrier le script trouve “cp”, il remontera “1”.
  • valeur_par_defaut: il s’agit de la valeur que devra prendre le script s’il ne trouve rien dans le calendrier. Pour ma part j’utilise “0”: en effet, je ne fais figurer dans mon calendrier que mes jours de congés, il serait idiot de devoir mentionner tous les jours de travail. Donc si le script ne trouve rien dans mon calendrier, il considère que c’est “0”, donc un jour de travail.

Vous voyez le principe ? Au final, on obtient par exemple une adresse de ce type:

 

https://www.maison-et-domotique.com/scripts/agenda.php?cal=qsnmyou79cndaoeh783663ing%40group.calendar.google.com/private-1ac30ee2598467tfb4807d7096dc6&decode=0,travail,1,maison,3,conges&defaut=0

 

Pour vérifier que tout fonctionne bien, une fois que vous aurez renseigné l’adresse avec vos propres arguments,  il suffit de taper l’adresse web de ce fichier dans votre navigateur web. Vous devriez obtenir quelque chose de ce genre:

 

<?xml version="1.0" encoding="utf8" ?>
<calendrier>
<aujourdhui>0</aujourdhui>
<demain>2</demain>
</calendrier>

 

On a donc ici un fichier xml parfaitement exploitable par l’eedomus ou la Zibase (et peut être d’autres systèmes)

On y voit l’état du jour, mais également l’état du lendemain.

 

III. Configuration de la box

 

 

[tabgroup][tab title=”Eedomus”]Sur la box eedomus, il suffit de créer deux capteurs HTTP pour l’état du jour et l’état du lendemain:

 

 

L’état du jour sera configuré de cette façon:

 

 

Dans l’onglet valeur, je reprend les valeurs indiquées dans mon url (0,travail,1,cp,2,weekend,3,ferie). Ce sont surtout les valeurs qui sont importantes, vous pourrez mettre ce que vous voulez dans la description, qui sera le texte affiché par l’eedomus.

 

 

Même chose pour le lendemain, seul le chemin Xpatch change:

 

 

Ainsi, toutes les 360min, l’eedomus interrogera le calendrier Google pour connaitre l’état de la journée en cours et celui du lendemain (la fréquence peut être ajustée selon vos besoins):

 

 

Ces états sont bien entendu utilisables dans les scénarios, c’est d’ailleurs le but :p

 

 

[/tab][tab title=”Zibase”]

La méthode est assez simple également, je vais illustrer dans un exemple: l’ouverture des volets, au lever du soleil s’il s’agit d’un jour travaillé, ou à 9h s’il s’agit d’un jour non travaillé (week end, jour férié, ou une journée de congé posée n’importe quand).

On crée un premier scénario sur la Zibase, qui appelle le script, et qui se lancera au lever du soleil:

 

 

Au lancement du scénario, j’affecte la chaine de caractères “aujourdhui” à la variable V15, qui est une variable qui restera en mémoire (pas effacée à chaque action).

Ensuite, j’utilise l’action “Commander par HTTP”, mais pour récupérer une valeur balisée par ma variable V15.

Dans cette variable, je récupére ainsi 0 s’il s’agit d’un jour travaillé, ou 1 s’il s’agit d’un jour de congé.

 

 

Ensuite, j’utilise “Activer un périphérique” en sélectionnant mon volet, et en cochant On-Off variable, puis en indiquant ma variable V15.

Ainsi, s’il s’agit d’un jour travaillé, le volet va s’ouvrir, s’il s’agit d’un jour férié il va se fermer (comme il est normalement déjà fermé, cela n’aura donc aucune incidence).

C’est tout pour ce scénario.

On en crée ensuite un autre très très simple, qui se lancera tous les jours à 9h, et qui ouvrira le volet:

 

 

S’il a déjà été ouvert au lever du soleil, ce scénario n’aura aucune incidence. Si le volet n’avait pas été ouvert (jour férié), ce scénario va l’ouvrir à 9h.

[/tab][/tabgroup]

 

IV. Conlusion

 

Très simple, non ? A l’utilisation c’est vraiment très pratique, puisque j’utilise tous les jours mon calendrier Google: cela me permet de gérer mon emploi du temps, de le synchroniser sur mon iPhone, de le partager avec ma femme, etc…  L’utilité de l’agenda Google n’est plus à démontrer. Aujourd’hui, sans rien faire de plus, ce calendrier est également consulté par ma box domotique, qui gère alors la maison en conséquence.

Le plus utilisé sera l’état du jour en cours, mais l’état du lendemain peut être très utile également. Chez moi, cet état me permet de faire d’autres actions: par exemple quand le lendemain est une journée travaillée, je coupe les alertes vocales de mon système multiroom plus tôt histoire de ne pas être dérangé quand on est couchés. Le volet de ma porte fenêtre se ferme également plus tard si le lendemain est une journée à la maison.

Ce procédé peut être utilisé pour diverses choses. J’ai par exemple configuré un autre calendrier pour le ramassage des poubelles, car avec les jours fériés et le ramassage des déchets recyclables tous les 15 jours, je suis toujours en train de me demander quelle poubelle sortir quel jour :p Cette alerte me permet de recevoir une notification push la veille au soir, ou même une notification via mon Karotz.

 

 

On peut imaginer faire un calendrier du même genre pour les jours d’école, pour les anniversaires, un pour gérer le chauffage, etc… Même si la Zibase et l’Eddomus gèrent déjà un système de calendrier, cette méthode permet de ne gérer que son agenda perso, sans avoir d’autre action à effectuer.

Voilà, j’espère que ce petit script répondra aux besoins de chacun. N’hésitez pas à me remonter toute suggestion ou idée d’utilisation ;-)

PS: merci à Richard, qui a modifié le script d’origine pour finalement arriver à ce script générique.

 

[box_download]PS: Pour ceux qui préfèrent l’héberger eux même, les fichiers sont disponibles ici.[/box_download]

 


2 Commentaires
  1. Merci pour ton aide sur ce tuto, je vais gerer l’eclairage de mon aqua et mes futur volets électriques avec ça !!

  2. Hello, i have installed this and it works but i only see 1 event per day from my calender in the “XML” file. What have i done wrong or is it the PHP source somehow?

    Laisser un commentaire

    Ne ratez plus aucune news !

    Inscrivez vous à notre newsletter, et recevez chaque mois toute l'actualité du blog pour ne plus rien louper: actualité, guides, tutoriaux, concours !

    Merci pour votre inscription !