HC2 de Fibaro et calendrier Google

21

Il y a plusieurs mois je vous ai proposé un script pour utiliser votre calendrier Google avec votre box domotique eedomus ou Zibase. Script que vous pouviez utiliser en ligne depuis le site, ou héberger directement chez vous.

Suite à ma migration sur le Home Center 2 de Fibaro, j’ai donc cherché à reproduire la même fonction, qui m’est très utile.

Pour rappel, cette fonction peut être 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, HC2).

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 est que la box puisse le consulter et gérer les scénarios en conséquence.

Comme nous l’avons vu auparavant, c’est possible. J’ai donc mis à jour mon petit script pour qu’il puisse fournir un résultat en Json et donc être utilisé plus facilement avec le HC2 de Fibaro, le xml étant un peu plus difficile à interpréter pour elle.

 

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:

 

http://maison-et-domotique.com/scripts/agenda.php

 

Et passer certains paramètres:

 

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

 

  • 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.
  • json: par défaut, le script renvoi un résultat en xml. Si on le veut en json, plus simple à exploiter sur la FibaroBox, il suffit d’ajouter ce paramètre json=1

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

 

http://maison-et-domotique.com/scripts/agenda.php?cal=rtderfhgj_qsnmmourtcndaonh6mt3g63ing%40group.calendar.google.com/private-1ac150ee21588467d3fb4807d7096dc6&decode=0,travail,1,cp,2,weekend,3,ferie&defaut=0&json=1

 

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:

 

{« aujourdhui »: « 0 », »aujourdhui_text »: « travail », »demain »: « 0 », »demain_text »: « travail »}

 

On a donc ici un fichier json parfaitement exploitable par le HC2.

On y voit l’état du jour, mais également l’état du lendemain (en valeur et libellés).

 

III. Configuration de la box

 

On va commencer par créer 4 variables sur la box, via le menu « Panneaux », puis « Variables ». Ce sont des variables normales, pas des variables prédéfinies.

 

demain aujourdhui

 

Aujourdhui: contiendra la valeur du jour (0,1,2…) passé en paramètre de l’URL vue plus haut

Aujourdhui_Text: contiendra le libellé plus explicite, qu’on utilisera juste sur l’interface pour que ce soit plus parlant

idem pour Demain et Demain_Text.

Les variables xx_Text sont là si on souhaite les utiliser dans autre chose, pour plus de clarté, mais elles ne sont pas obligatoires pour notre utilisation.

 

Maintenant nous allons créer un périphérique virtuel. La présentation pourra être adaptée selon vos besoins. Pour ma part je lui ai mis deux « labels » qui contiendront l’état du jour et du lendemain, puis un bouton qui lancera le script de mise à jour:

 

config1

 

Pour les labels, c’est très simple, j’ai juste donné un nom pour l’état du jour et du lendemain:

 

labels

 

C’est le bouton suivant qui va être chargé de compléter les labels et les variables créées plus haut:

 

bouton

 

Le script se présente de cette facon:

 

HC2 = Net.FHttp(« maison-et-domotique.com »)

response = HC2:GET(« /scripts/agenda.php?cal=votreadressedecalendrier&decode=0,travail,1,cp,2,weekend,3,ferie&defaut=0&json=1″)

 

response = json.decode(response)

 

fibaro:setGlobal(« Aujourdhui », response.aujourdhui)

fibaro:setGlobal(« Aujourdhui_Text », response.aujourdhui_text)

fibaro:setGlobal(« Demain », response.demain)

fibaro:setGlobal(« Demain_Text », response.demain_text)

 

fibaro:log(« Aujourd hui : « ..fibaro:getGlobalValue(« Aujourdhui_Text »).. » Demain : « ..fibaro:getGlobalValue(« Demain_Text »))

 

fibaro:call(89, »setProperty », »ui.Label1.value »,response.aujourdhui_text)

fibaro:call(89, »setProperty », »ui.Label2.value »,response.demain_text)

 

Pour éviter les problèmes de mise en page du blog, vous pouvez télécharger le script Lua ici.

Il faudra bien sûr l’adapter à vos besoins: adresse de votre calendrier, valeurs pour le décodage (travail = 0, etc…) et nom des labels si vous les avez changés.

Egalement, si vous hébergez le script php sur votre propre serveur, il faudra bien sûr remplacer « maison-et-domotique » par l’adresse de votre serveur. Une fois tout cela complété, enregistrez la configuration.

A partir de là, si vous cliquez sur le bouton « mise à jour » du nouveau module virtuel, les états de chaque jour vont se mettre à jour:

 

module

 

Les variables créées au début seront également mises à jour.

Dernière étape, on va créer une scène qui va se charger de lancer la récupération des données. On aurait pu simplement mettre le script précédent dans le « Main Loop » du module, mais celui ci est lancé toutes les secondes, ce qui à mon avis risque de surcharger la box pour rien. Ce n’est pas judicieux de l’utiliser ici. Dans mon cas, je souhaite simplement récupérer une fois par jour l’état du jour et du lendemain, le script n’a donc besoin d’être lancé qu’une seule fois, par exemple tous les jours à 1h du matin .

 

scene

 

On sélectionne le périphérique virtuel, et on actionne son bouton, qui va déclencher le script vu précédemment.

Ainsi, plus rien à gérer, l’état des jours va s’actualiser automatiquement chaque nuit.

 

IV. Utilisation

 

Connaitre l’état du jour, c’est bien, mais en pratique à quoi cela peut il bien servir ?

Un exemple concret avec l’ouverture des volets, par exemple: quand je travaille je veux qu’ils s’ouvrent au lever du soleil, si je ne travaille pas ouverture à heure fixe à 9h.

Pour cela je vais utiliser deux scènes.

La première scène ouvre les volets au lever du soleil si je travaille:

 

travail

 

Chaque jour au lever du soleil, on regarde donc si la variable « Aujourdhui » =0 (valeur utilisée pour le travail). Si c’est le cas, on ouvre les volets (et au passage je m’envoie un petit mail pour me le confirmer, le temps du « rodage ;-) Attention à bien décocher le trigger « Aujourdhui » tout en haut au dessus de la scène, sous peine d’avoir vos volets qui s’ouvrent en pleine nuit (j’ai testé ;-)

Même type de scène pour les jours non travaillés:

 

conge

 

Cette fois on vérifie chaque jour à 9h précise si la variable « Aujourdhui » est > 0 (0 étant un jour travaillé, les autres jours fériés, congés, week end ayant des valeurs supérieures à 0). Si c’est le cas, on ouvre les volets.

Là aussi, bien penser à décocher le trigger en haut.

Enfin, pour les deux scènes, vérifiez bien qu’elles soient actives et lancées au démarrage de la box:

 

active

 

Et voilà ! Les volets vont s’ouvrir tout seuls en fonction de votre calendrier Google.

Avec du code Lua, il est sans doute possible de n’utiliser qu’une seule scène pour gérer les différents types de jours, mais comme on débute sur le HC2, on va y aller doucement ;-)

Dans le même genre, j’en utilise une autre pour me préparer la maison si je travaille:

 

reveil

 

 

Ici, si c’est un jour travaillé, alors le sèche serviettes de la salle de bain se met en route à 5h30 pour avoir le temps d’avoir une serviette chaude, m’allume la lumière du salon et de la cuisine une demie heure après, me laisse déjeuner, puis éteint les lumières automatiquement…

Bref, on peut l’utiliser pour différentes choses :D

 

V. Conlusion

 

Plutôt 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 Fibaro, 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…

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 ;-)

 

 

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

 



A propos de l'auteur

Je me suis essayé à la domotique il y a quelques années avec quelques modules X10, quelques softs gratuits, etc… pour équiper la maison que j'avais en location. Puis j'ai eu la chance de pouvoir faire construire, et c'est là que mes projets domotiques ont explosé, la construction neuve me permettant de prévoir une installation complète, et intégrée à la maison. Aujourd'hui, quasiment toute mon installation repose sur le Z-Wave.

  • Lio06

    Question : est-il possible de synchroniser google calendar et outlook ? Ma boîte utilise outlook et cela m’obligerai à une nouvelle saisie de mon agenda.
    Après un recherche rapide (peut être trop), il me semble avoir compris que google ne permet plus l’échange. Des bidouilles sont possibles avec des sharewares, mais bon cela complique la chose.

  • bdliet

    avec google calendar sync vous pouvez synchroniser vos calendriers google et outlook.

  • jo38

    Bonjour Cédric,
    Peux-tu nous expliquer ton choix de passer sur le Home Center de Fibaro ? Vois-tu des différences de performance (notamment au niveau des délais de déclenchement des scénariis) par rappor à la box eedomus ?

    • Julien de Bon

      Je me pose la même question.

      • http://maison-et-domotique.com/ Cedric Locqueneux

        Il y a plusieurs raisons à ca, en fait.
        Le point qui m’a beaucoup fait hésiter: l’interface très belle, et pour enfoncer le clou, la superbe application iPad. Après tout, c’est ce qu’on utilise tous les jours pour piloter son système, l’application doit donc être agréable. A ce niveau, Fibaro a fait très fort (même si les gouts et les couleurs, ca reste personnel :)
        Mais malgré l’interface, j’hésitais à cause des fonctions qui étaient encore trop limitées. Les dernières mises à jour ont pas mal combler ce vide, avec les périphériques virtuels et la possibilité de faire des scripts en Lua. Ca ouvre tout de suite de grosses possibilités (par exemple pilotage de ma TV ou de mes ampoules Hue sans besoin de passer par des scripts php extérieurs)
        Ensuite, c’est l’une des rares box autonome: même si Fibaro venait à fermer demain (ce qui est peu probable vu leur succès), la box continuerait de fonctionner sans aucun soucis.
        Enfin, et c’est sans doute justement parce qu’elle est autonome et ne passe pas par le cloud, la réactivité est impressionnante. On appuie sur le bouton sur l’interface, la lumière s’allume. Pas de délai, c’est immédiat. En fait j’avais même oublié comme le Z-Wave pouvait être réactif, et ca c’est la petite surprise au passage que je n’avais pas prévue.

        Par rapport à mon eedomus, ce qui me manque un peu est la possibilité de personnaliser l’affichage de chaque périphérique (ici un graphique, ici une jauge, ici une valeur, etc…), et l’absence de graphiques pour la température. Nous avons un suivi pour la consommation d’électricité qui est plutôt sympa, et sur l’iPad on peut apercevoir des graphiques sur les températures. Il ne doit pas manquer grand chose pour en profiter sur le tableau de bord également.
        Bref, les dernières évolutions de cette box en font à mon avis l’une des meilleures aujourd’hui. Je dois d’ailleurs revoir mon test d’origine pour la réévaluer, car elle est assez loin du jugement que j’en avais eu à sa sortie :p

        • Julien de Bon

          Et tu as réussit à refaire tes scripts pour michamps4b.be, xbmc…?

          • http://maison-et-domotique.com/ Cedric Locqueneux

            C’est en cours de migration, petit à petit. Comme mon Nas est aussi en cours de migration, je m’occuperai de xvmc prochainement. Pour michamps4b, je vais bientôt me pencher dessus aussi, car je suis en train de tester l’éco device de Gce Electronic, qui permet de relever la téléinfo via le réseau, vu que la Fibaro n’est pas compatible avec mon module téléinfo Usb.

          • chris34

            A noter que l’interface sur Android est sensiblement différente, et moins évoluée. Espérons que ca évolue.

            Pour ma part je suis preneur d’un article décrivant comment tu as interfacé avec le freebox. J’ai bidouillé un device virtuel avec des boutons qui appelent des url type

            HC2 = Net.FHttp(« hd1.freebox.fr »);
            HC2:GET(« /pub/remote_control?code=xxx&key=1″)
            Mais ce n’est pas très satisfaisant (pas d’image sur les boutons, pas d’appui long…).

            Dis-nous comment tu as fait :)
            (ps : quelle ~#^{`#@]^$=} ce disqus)

          • http://maison-et-domotique.com/ Cedric Locqueneux

            Pour la Freebox, je vais pas tellement pouvoir aider, vu que je ne suis pas équipé. Malgré mon 18M, comme je ne suis pas dégroupé je n’ai pas droit à la TV par ADSL chez Free :(

            PS: qu’est ce qui ne te plait pas avec Disqus ? Je trouvais ca pratique et plus sympa que le truc de base ?

          • chris34

            Je n’arrive pas à me logger sur disqus avec firefox, pas grave je passé par
            ie. Donc quand tu parles de piloter la TV c’est via un
            dispositif infrarouge ?

          • http://maison-et-domotique.com/ Cedric Locqueneux

            Pour la TV, c’est en IP directement, comme j’ai une TV Samsung connectée. J’avais fait un guide ici: http://maison-et-domotique.com/books/fibaro-hc2-piloter-tv-samsung-connectee

          • Julien de Bon

            Pour ton NAS si tu passe sous xpenology tu vas pas le regretter (ça me fait penser que je devrai faire un didacticiel).
            pour XBMC voir ici: http://www.touteladomotique.com/forum/viewtopic.php?f=89&t=11918
            L’éco device est sympa car intégré dans le tableau électrique.

            Julien

        • jo38

          Merci Cédric pour ta réponse.
          Au plaisir donc de lire de nouveaux articles sur l’utilisation du Home Center 2.

  • Sébastien Brunie

    Bonsoir,
    je n’ai pas le texte qui s’affiche dans le label alors que les variables se mettent à jour..
    Quel est le problème a votre avis?
    Sébastien

    • Sébastien Brunie

      Personne n’as une idée?

    • fred

      j’ai le même soucis, je cherche…….

      • brunie

        pour ces deux lignes:

        fibaro:call(23, »setProperty », »ui.Label1.value »,response.aujourdhui_text)

        fibaro:call(23, »setProperty », »ui.Label2.value »,response.demain_text)

        le 23 correspond à l’id du module virtuel

  • leofox

    Très intéressant, merci pour les explications. Je ne suis pas encore équipé en box et regarde les différentes config possibles.
    Est ce possible de le faire avec une HC lite ou seul la HC2 est programmable ?

    • rapidonet2000

      Bonjour,
      Cédric a créé une interface entre le HC2 et Google Calendar pour y chercher des infos. Moi je recherche la possibilité d’envoyer des invitations à partir d’un HCL, dans Google Calendar, qui eux déclenchent l’envoi d’un SMS (gratuit au passage). Y a t’il déjà qq chose de ce genre ?