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

googleagenda1

 

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 :

googleagenda2

 

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.

googleagenda3

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 :

googleagenda4

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 :

googleagenda5

ou bien comme condition « si » :

googleagenda6

 

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 :

googleagenda7

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 :

googleagenda8

 

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

 

 

Domoteek

Passioné domotique

Vous aimerez aussi...

42 réponses

  1. Thieumy dit :

    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…

  2. domoteek dit :

    De quel script parles-tu ? Tu as un lien ?

  3. Domoteek dit :

    Le problème est que ce script fait appel a l’API eedomus, mais pour l’instant il n’ya pas d’api zipabox.

  4. Domoteek dit :

    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 😉

  5. 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 🙂

  6. domoteek dit :

    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

  7. Bapt dit :

    Ne peut-on pas héberger les scripts sur Google Drive ?

  8. domoteek dit :

    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…

  9. qseb dit :

    Salut
    je serais très intéressé par ta version Google Apps Scripts…
    Merci d’avance et bravo pour ton tuto 🙂

  10. Fabien dit :

    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!

  11. Thomas dit :

    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

    • Thomas dit :

      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…

    • domoteek dit :

      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 !

      • domoteek dit :

        Si ça ne marche toujours pas je vous uploaderais mon script avec la version google drive !

        • Thomas dit :

          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

          • domoteek dit :

            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 !

    • domoteek dit :

      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 !

      • Thomas dit :

        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

        • Thomas dit :

          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 😉

          • domoteek dit :

            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 !

      • Thomas dit :

        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)

        • Thomas dit :

          Ok c’est bon!
          J’ai modifié quelques petits trucs et ça fonctionne 😉
          Merci!!

          • Thomas dit :

            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?

          • domoteek dit :

            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 ! !

          • Thomas dit :

            Avec plaisir!
            Je ne suis pas pressé, j’attendrai ton tuto 😉
            Merci encore!

          • domoteek dit :

            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

          • Thomas dit :

            Merci! Je regarde ça dès demain

          • Thomas dit :

            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!

  12. domoteek dit :

    Est-ce que si tu tapes l’adresse manuellement ça fonctionne ? Est ce que ton capteur se met à jour ?

    • Thomas dit :

      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?

      • domoteek dit :

        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 !

        • Thomas dit :

          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.

          • Thomas dit :

            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 😉

          • domoteek dit :

            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 !

  13. MARTIN Robert dit :

    Bonjour est ce que ce script fonctionne toujours car je n’arrive pas à voir de changement de ma variable

  1. 6 juin 2013

    […] Aujourd’hui je vous propose un nouveau guide, qui vous permettra de pouvoir auto héberger vos scripts sur le Raspberry. En effet, comme nous avons pu le voir précédemment, (et comme nous aurons à le voir bientôt!!) nous avons parfois l’utilité d’avoir à héberger des scripts PHP, comme par exemple, avec cette soluce : « Éteindre ou allumer ses PC depuis la zipa » ou encore « Déclenchement de règle depuis le calendrier Google » . […]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

J’accepte les conditions et la politique de confidentialité

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.