TUTO Zipabox : Déclenchement de règles grâce au calendrier Google Agenda
Bonjour,
Voilà un tutoriel pour pouvoir déclencher des règles ou actions sur la Zipabox suivant des évènements présents dans votre calendrier Google.
Durée de mise en œuvre : 1 à 2h
Le tutoriel se déclinera en plusieurs étapes :
- Fonctionnement du Script
- Création d’un capteur virtuel
- Configuration des scripts
- Hébergement des scripts
- Exécution planifiée du script
- Exécution des actions
- Explication et Modifications du script
Je me suis pour cela appuyé sur les scripts déjà écrits par http://maison-et-domotique.com/blog/book-review/eedomus-et-agenda-google/
Je les ai modifiés avec l’aide d’un domo-geek qui se reconnaîtra 😉 pour qu’ils soient utilisables avec la Zipabox.
Fonctionnement du script :
Le script mis à votre disposition à le fonctionnement suivant :
Chaque fois qu’il est exécuté, il va vérifier le contenu de l’agenda Google, et suivant le contenu basé sur des mots-clés, il va renvoyer les valeurs suivantes :
– Si rien : 0
– Si « Vacances » ou « Absent » : 1
– Si « RTT » : 2
– Si erreur de connexion au calendrier Google : 99
Il est très facile d’ajouter des Mots clés ou des actions associées en modifiant la valeur renvoyée, mais nous verrons cela à la fin du tutoriel !
Création d’un capteur virtuel :
Sur votre interface Zipabox , cliquer sur « ajouter un module », et choisissez dans la liste « Virtual meter ».
Une fois le périphérique ajouté, vous avez un nouveau périphérique virtuel de type « mesures » ajouté sur votre interface. En cliquant sur paramètres, dans l’onglet configuration vous avez 12 lignes, permettant de créer 12 capteurs de mesures différents !
Nous allons utiliser le 1er, en le nommant GOOGLE.
Notez l’URL associé à ce capteur et sauvegardez
Configuration des scripts :
Commencer par télécharger le fichier zip suivant :
https://mega.co.nz/#!LUMGTKrR!S0PGPjsi-dXytEyRvlj8am-ruuQoijHZ101Pf5sUbws
Il comporte les fichiers suivants :
- agenda.php
- GoogleAgenda.php
- GooglaAgendaEvent.php
- GooglaAgendaException.php
Seul le fichier agenda.php est à personnaliser.
Vous pouvez l’éditer avec le bloc-notes Windows, ou mieux avec notepad++ téléchargeable ici : http://download.tuxfamily.org/notepadplus/6.3.2/npp.6.3.2.Installer.exe
Vous devez modifier les deux valeurs suivantes :
- L’adresse du capteur précédemment notée
- L’adresse privée de votre calendrier Google.
$setboxvalue = 0; //Valeur par défaut si pas d'évènements
$seturlbox = "<span style="color: #ff0000">LIEN CAPTEUR ZIPATO</span>"; //insérez ici l’adresse du capteur notée précédemment
$googleagendalist = array(
"<span style="color: #ff0000">LIEN CALENDRIER GOOGLE</span>", // insérez ici l’adresse privée de votre agenda Google.
Ajout du 23/04/2013 à 23h00
ATTENTION : une petite erreur a été detectée dans le script agenda.php que j’ai publié : seul le 1er événement de la journée est pris en compte. Pour modifier ça il suffit de repérer la ligne ;
‘maxresults’ => ’1′,
cela signifie que seul le 1er événement de la journée est analysé par le script.
–>il faut changer le nombre 1 par le nombre max d’événements que vous voulez tester par jour ; j’ai mis le mien a 10 :
‘maxresults’ => ’10′,
Ainsi si j’ai moins de 10 événements dans mon calendrier dans la journée, le script fonctionnera
Pour récupérer l’adresse privée de votre agenda Google, connectez-vous à Google Agenda (ou créez un nouveau compte si vous souhaitez avoir un calendrier dédié), et allez dans les paramètres :
Allez sur l’onglet Agenda, puis cliquer sur votre Agenda dans « Mes agendas ».
Cliquer sur le bouton XML de l’adresse privée et récuperez l’adresse associée.
Vous pouvez insérer cette adresse dans le champ correspondant du script agenda.php.
Hébergement des scripts
Une fois le script agenda.php modifié, vous devez l’héberger sur un serveur web supportant le php.. J’ai par exemple utilisé le service gratuit de chez Alwaysdata https://www.alwaysdata.com/. Il est bien sur possible d’héberger vous-même ce script si vous avez votre propre serveur web ; l’utilisation d’un site pages perso de chez Free n’est pas possible car il est impossible de relire le calendrier Google par flux RSS chez Free.
Une fois votre compté créé sur le site Alwaysdata, vous pouvez déposer les 4 fichiers par ftp dans le dossier www/GoogleAgenda/ par exemple.
A cette étape, vous pouvez tester le fonctionnement du script :
Fixez la valeur que vous voulez (100 par exemple) à votre capteur en utilisant son URL : http://my.zipato.com:8080/zipatoweb/remoting/attribute/set?serial=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&value1=100.
Votre capteur doit passer à 100 sur votre interface Zipabox.
Lancer l’exécution de votre script avec une adresse de ce type :
http://votrecompte.alwaysdata.net/GoogleAgenda/agenda.php
Votre capteur devrait passer à 0 (ou à 1 suivant le contenu de votre calendrier)
Exécution du script
Pour planifier l’exécution régulière du script agenda.php, deux solutions s’offrent à vous :
1- Créer une règle sur l’interface de votre Zipabox, pour exécuter de façon régulière le script.
Cette règle ressemblera à ceci :
Le programmeur pourra être configuré pour être lancé toutes les heures ou toutes les minutes, suivant le besoin.
La requête http utilisera la méthode Get et pointera vers l’adresse testée précédemment : http://votrecompte.alwaysdata.net/GoogleAgenda/agenda.php.
2 – La deuxième solution est celle que j’ai utilisé ; il s’agit d’utiliser une tache CRON (sorte de tache planifiée exécutée directement sur le serveur de l’hébergeur) s’il propose cette possibilité bien sûr. Cela permet de se dispenser d’ajouter une tache supplémentaire sur votre interface Zipabox, déjà bien surchargée de règles surement !
Sur alwaysdata la méthode est la suivante :
– Activer la connexion SSH (désactivée par défaut à l’ouverture du compte) en vous rendant dans la rubrique « Accès distant » de votre console d’administration alwaysdata
– Une fois l’accès ssh activé, lancer une connexion avec le lien suivant : https://ssh.alwaysdata.com.
– Tapez votre login et mot de passe sur la console qui vient de se lancer
– Lancez le « gestionnaire de taches » Cron en tapant : « crontab –e »
– Pour comprendre comment paramétrer une tache CRON vous pouvez lire le wiki suivant : http://wiki.alwaysdata.com/wiki/Cron
– Vous pouvez éditer la tache créée par défaut et la modifier pour qu’elle ressemble à ceci :
« * * * * * wget http://votrecompte.alwaysdata.net/GoogleAgenda/agenda.php »
Attention à bien respecter les espaces !
La taché créée va ainsi lancer la tache toutes les 1 minutes de toutes les heures de tous les jours de tous les mois. Ceci à des fins de tests. Vous pouvez ensuite modifier la fréquence d’exécution du script :
Pour l’exécuter toutes les 10 minutes :
« */10 * * * * wget http://votrecompte.alwaysdata.net/GoogleAgenda/agenda.php »
Pour l’exécuter toutes les heures à 0 minute :
« 0 * * * * wget http://votrecompte.alwaysdata.net/GoogleAgenda/agenda.php »
Pour l’exécuter toutes les heures à 15 minutes :
« 15 * * * * wget http://votrecompte.alwaysdata.net/GoogleAgenda/agenda.php »
Pour l’exécuter toutes les 2 heures à 15 minutes :
« 15 */2 * * * wget http://votrecompte.alwaysdata.net/GoogleAgenda/agenda.php »
Exécution des actions
Il ne reste maintenant plus qu’à créer les règles que vous souhaitez, en utilisant votre capteur comme déclencheur :
ou bien comme condition « si » :
Astuce :
Si vous avez modifié le script pour qu’il vous retourne plusieurs valeurs (1,2 et 3 par exemple), au lieu d’utiliser une vérif QUAND GOOGLE =1, vous pouvez utiliser une condition « > » du style Quand GOOGLE>0.
Explication et Modifications du script
Comme nous l’avons vu au début, chaque fois qu’il est exécuté, il va vérifier le contenu de l’agenda Google, et suivant le contenu basé sur des mots-clés, il va renvoyer les valeurs suivantes :
– Si rien : 0
– Si « Vacances » ou « Absent » : 1
– Si « RTT » : 2
– Si erreur de connexion au calendrier Google : 99
En éditant le fichier agenda.php vous pouvez facilement adapter le script à votre besoin :
1) Pour ajouter ou modifier un mot clé déclenchant la valeur 1 :
Ajouter à la ligne surlignée :
|| strrpos($oAujourdhui->getTitle(), ‘NouveauMotCle’)!==false
2) Ajouter un mot clé déclenchant une autre valeur :
Ajouter le paragraphe entier suivant en remplaçant X par la valeur que vous souhaitez:
if(strrpos($oAujourdhui->getTitle(), ‘NouveauMotClé’)!==false) {
$setboxvalue = X;
break;
}
Ensuite il est facile de créer des règles suivant la valeur de votre capteur.
Ceci peut ouvrir la voie à un paramétrage plus aisé et une utilisation avancée d’un calendrier avec des fonctionnalités calendaires plus complexes de répétition, pour lancer des taches sur la Zipabox, le « scheduler » intégré de la box étant encore perfectible ! Et enfin, le top pour moi : Il devient possible d’utiliser un calendrier Google unique permettant d’avoir une vision globale de toutes vos programmations et de s’affranchir partiellement du scheduler de la box !
Un exemple simple de ce qu’on peut espérer faire :
Une limitation toutefois : il ne faut pas que deux actions aient lieu en même temps dans ce cas, car on ne pourra pas donner deux valeurs différentes au même capteur en même temps.
Dans le cas où cela arriverait, on peut envisager de créer un deuxième script agenda_2.php qui déclencherait une valeur sur un autre capteur (la deuxième valeur de notre capteur virtuel, puisqu’on en a 12 de disponibles !). On peut également créer autant de script agenda_x.php que d’actions à réaliser, et lancer une requête http pour l’action ou le capteur que l’on souhaite réaliser !
Bref les possibilités sont multiples, à vous de voir comment les utiliser suivant vos besoins !
En espérant que cet article vous ait intéressé !
Mr Domoteek
Super tuto, je mets ça en route dès le retour à la maison 😉
Une question subsidiaire, il existe une version de ces scripts utilisant l’api googlescript, publié par Eric il y a quelques semaines, sais-tu s’il est adaptable à la zipabox? le fonctionnement ne nécessiterait plus que le passage par les serveurs google…
De quel script parles-tu ? Tu as un lien ?
http://maison-et-domotique.com/blog/book-review/script-google-google-agenda-box-domotique/
Le problème est que ce script fait appel a l’API eedomus, mais pour l’instant il n’ya pas d’api zipabox.
ATTENTION : une petite erreur a été detectée dans le script agenda.php que j’ai publié : seul le 1er événement de la journée est pris en compte. Pour modifier ça il suffit de repérer la ligne ;
‘maxresults’ => ‘1’,
cela signifie que seul le 1er événement de la journée est analysé par le script.
–>il faut changer le nombre 1 par le nombre max d’événements que vous voulez tester par jour ; j’ai mis le mien a 10 :
‘maxresults’ => ’10’,
Ainsi si j’ai moins de 10 événements dans mon calendrier dans la journée, le script fonctionnera 😉
Très très bon Tuto !! Merci à toi pour ta participation !!! D’ailleurs si d’autres veulent nous rejoindre pour aider cette Zipa communauté, n’hésitez à me contactez 🙂
Lien vers nouveau pack avec correction du nobre max d’événements et correction sur le fuseau horaire :
https://mega.co.nz/#!LUMGTKrR!S0PGPjsi-dXytEyRvlj8am-ruuQoijHZ101Pf5sUbws
Ne peut-on pas héberger les scripts sur Google Drive ?
Avec un peu de retard…
Si c’est possible minatenant,! j’ai légérement modifié les scripts en conséquence. si ça voius interesse je peux les mettre a dispo…
Bonjour,
Tout d’abord merci pour ces tuto et plus particulièrement celui-ci…
Je serais également intéressé par le Google Apps Script !
Merci 😉
Je serais également intéressé par la version google apps script.
Est il possible d’en avoir une copie?
Merci d’avance!
Je serais également fortement tenté par la version google script 😉
Salut
je serais très intéressé par ta version Google Apps Scripts…
Merci d’avance et bravo pour ton tuto 🙂
Bonjour et bravo pour ton tuto !
Je serais également intéressé par la version google apps script.
Est il possible d’en avoir une copie?
Merci d’avance!
Bonjour!
Depuis quelques semaines ce script ne fonctionne plus.
J’ai un résultat « 99 » à chaque exécution (ce qui correspond à une erreur dans le script).
Qq’un a t il le même problème? Une solution?
Merci
Serait ce la raison de ce dysfonctionnement?
http://www.logosw.net/forum/read.php?3,9216
Mon problème date à peu près de cette date me semble t il…
En effet la version 3 de l’API a été mise en place et les anciennes ne fonctionnent plus ;(
Quelqu’un a t il mis à jour son script?
Bonjour,
Le script fonctionne toujours, par contre l’adresse des capteurs virtuels zipabox a été modifié pour moi, vérifier l’adresse des vôtres, et mettez à jour vos scripts en corrigeant l’adresse de base dans le script si c’est bien cela, en tout cas pour moi le problème venait de la !
Si ça ne marche toujours pas je vous uploaderais mon script avec la version google drive !
J’avais modifié les url des capteurs virtuels zipabox suite à la modification de leur api (j’avais remarqué que le apikey avait changé)
Ca a fonctionné, mais depuis le 15/11 j’ai l’erreur d’exécution du script (99).
Ca n’a pas de rapport avec la nouvelle API de google calendar donc?
Car dans ce cas je ne comprends pas ce qui cloche…
Si c’est possible d’avoir la version google drive je suis preneur! Merci
Si c’est surement en lien avec le changement de leur API, mais du coup en hébergement chez Google drive directement on accède directement au calendrier et la plus de problème d’API !
Depuis le temps que je dois le poster… le voila :
https://script.google.com/d/16UVF-EFZgJEuqDEQIwbuDi7BcBWk_2Qq3GgmTBpbaorGT6d7DaXU6GjU/edit?usp=sharing
Il suffit de faire Fichier/Créer un copie, et de paramétrer le script :
– nom du clandrier google
– renseigner les titres des evenements à surveiler
– renseigner l’adresse de votre virtual meter
Faites-moi signe si ça ne marche pas, j’essayerais de refaire un tuto plus complet !
Merci beaucoup!
Je teste dans la soirée…même si je ne comprends pas d’où provient mon soucis avec la version hébergée sur alwaysdata
J’ai jeté un coup d’oeil rapide
Pourquoi les « values » passent de 5 à 8? puis je insérer les 6 et 7?
Si tu as le temps pour un tuto rapide, je suis preneur 😉
C’est juste parceque j’utilise ces variables la uniquement, mais tu peux utiliser les 12 variables de ton virtual meter comme bon te semble, sans aucun souçi ! Et créer un 2eme script si tu as besoin de plus de 12 variables !
Pour info , l’équipe zipabox a corrigé vendredi un bug gênant empêchant toute modif et création sur les virtual devices (meter et senor), mais maintenant on peut jouer avec à nouveau !
Auparavant j’utilisais la version hébergée sur un serveur, je changeais uniquement la valeur du capteur:
exemple:
value4=1
value4=2
value4=3
etc…
Est ce que ton script fonctionne de la même manière ou utilise différents capteurs?
exemple:
value1=1
value2=1
value3=1
etc…
Pour le moment je n’arrive pas à le faire fonctionner.
Faut il exécuter les 2 scripts? (Calendrier et SetValueZipabox)
Ok c’est bon!
J’ai modifié quelques petits trucs et ça fonctionne 😉
Merci!!
Zut…en fait je me rends compte que si il n’y a pas d’évènement, le script modifie tout de même la valeur du virtual meter en utilisant a valeur la plus haute de celles pré configurées.
Comment faire pour qu’il ne modifie pas la valeur si il n’y a pas d’évènement?
Il faudrait que je refasse un tuto car le fonctionnement est un peu different du précédent…
la si tu as un événement ton virtual meter est mis a 1, s’il n’y en a pas il est mis a 0.Le script part du principe que l’événement n’est pas la et met la valeur a 0, et s’il est présent il change la valeur a 1. ceci pour les 12 variables du virtual meter (si tu en as mis 12). Je en sais pas si je suis bien clair, si tu as un peu de temps j’essaie de refaire un tuto complet et clair dans la semaine, avec des captures pour qu’on parle bien des mêmes choses ! !
Avec plaisir!
Je ne suis pas pressé, j’attendrai ton tuto 😉
Merci encore!
Allez je me suis motivé,, par contre j’avais la flemme de le faire en wordpress alors le voila en PDF :
TUTO et Lien pour utiliser google Agenda avec la Zipabox, avec hebergement du script sur Google Drive :
https://mega.co.nz/#!nBMAFDjC!PKcv8jhEc4sa5HrcYzZVIPSUiIGozV5F2BJXFTNboSY
Merci! Je regarde ça dès demain
Je n arrive pas a faire fonctionner ton script
J ai tout configure, le scripts exécute sans erreur mais la valeur de mon virtual meter n est pas modifiée, qu il y ait ou pas un événement en cours
Il va falloir que je m y plonge plus serieusement!
Est-ce que si tu tapes l’adresse manuellement ça fonctionne ? Est ce que ton capteur se met à jour ?
Oui ca fonctionne en utilisant directement l adresse du virtual meter (et en ajoutant une valeur après &value1=
A ce propos dans le tuto, il est indiqué qu il faut enlever &value1= mais je crois qu il faut laisser le & … Est ce correct?
Effectivement j’ai fait une petite erreur dans le tuto, du coup j’ai mis à jour le script pour l’adapter au tuto (c’est plus rapide comme ça !)
Tu peux le retelecharger à la même adresse, tiens moi au courant mais ça devrait être bon maintenant !
J’ai tout repris de 0 avec le nouveau tuto.
Les valeurs sont mises à 0 lors du lancement du script, mais lorsqu’un événement se produit dans le calendrier, la valeur concernée ne se met pas sur 1…je pensais pourtant avoir tout configuré correctement.
Ok c’est réglé!
En fait dans le script précédent, il suffisait qu’il y ait un mot détecté pour que la valeur se mette à jour.
Dans le script google drive il faut indiquer la phrase complète
exemple:
avant le script recherchait « ouverture »
et sur google calendar l’intitulé de l événement était « Ouverture volets »
avec le nouveau script il faut rechercher « Ouverture volets » pour que ça fonctionne, « ouverture » ne suffit pas
Merci encore pour ce super boulot!
En plus vu que c est un script google drive, j’ose imaginer qu’il sera fonctionnel pendant un bon bout de temps 😉
Super si ça fonctionne pour toi !
Effectivement il faut entrer le nom exact de l’événement désormais (j’avoue que je ne me rappleais plus le fonctionnement exact du premier !) J’espère aussi qu’il marchera longtemps car c’est hyper pratique et souple par rapport au « calendrier » de la zipabox !
Bonjour est ce que ce script fonctionne toujours car je n’arrive pas à voir de changement de ma variable
Malheureusement je n’ai plus la Zipabox pour essayer ..