A voir
 

Script Google + Google agenda + Box Domotique

 
calendrier
calendrier
calendrier

 
Présentation
 

Catégorie:
 
Prix:
 
Durée:
 
Mise en place
 
 
 
 
 


 
Utilisation
 
 
 
 
 


 
Utilité
 
 
 
 
 


 
Cout
 
 
 
 
 


 
Note Globale
 
 
 
 
 
4.5/ 5


Note des Lecteurs
Aucun vote

 

Pour


Pilotage de sa maison à partir de son calendrier Google. WAF, et super facile à mettre en place.

Contre


avoir un compte Google ?


Apercu

A plusieurs reprises je vous ai proposé des tutoriaux pour joindre votre calendrier Google à votre box de domotique, notamment pour savoir si vous êtes en congés, ou au travail, et donc lancer les scénarios en conséquence. Aujourd’hui je vous propose d’aller encore plus loin, grâce à un tutorial réalisé par Pierre: piloter entièrement votre [...]

33
Posté le 26 novembre 2012 par

 
Tutorial Complet
 
 

A plusieurs reprises je vous ai proposé des tutoriaux pour joindre votre calendrier Google à votre box de domotique, notamment pour savoir si vous êtes en congés, ou au travail, et donc lancer les scénarios en conséquence. Aujourd’hui je vous propose d’aller encore plus loin, grâce à un tutorial réalisé par Pierre: piloter entièrement votre maison depuis votre calendrier Google. Cela va être possible grâce aux scripts Google, qui peuvent être hébergés et exécutés depuis votre espace Google Drive. Une fonctionnalité que je ne connaissais pas du tout ! Les scripts autorisés sur le Google Drive peuvent vraiment être très puissants, tout en étant très simples à mettre en oeuvre. Voyons voir un exemple avec notre box eedomus.

 

I. Mise en place du script

 

L’API de la box eedomus va nous être très utile, car il n’y a pas besoin de connaitre l’adresse IP de la machine, elle fait appel directement au serveur de Connected Object.

La cinématique de fonctionnement du script est la suivante :

  1.  Lecture des évènements de l’agenda d’un calendrier spécifique (à définir dans le script)
  2. Vérification de l’évènement pour voir s’il correspond à un évènement prédéfini
  3. Appel de l’API eedomus

Pour commencer, il faut donc créer le script dans Google Drive: Créer => Plus => Script

 

 

Copiez/collez le code suivant dans le script créé :

 

function Calendrier()

{

var DateDebut = new Date();

var DateFin = new Date();

var resultat;

var API_Periph;

var API_Valeur;

DateDebut.setTime(DateFin.getTime() – (5*60*1000)); //20 minutes de moins que DateFin

var Cal = CalendarApp.getCalendarsByName(‘Domotique‘)[0];

var Events = Cal.getEvents(DateDebut, DateFin);

/*API des périphériques EEDOMUS

Volet roulant séjour : xxxx

Volet roulant cuisine : xxxx

Notifications : xxx

*/

for (i in Events)

{

var Titre = Events.getTitle(); // On récupère le titre de l’événement

var Description = Events.getDescription(); // On récupère la description de l’événement

var Error = null; // On initialise le retour d’erreur à null

if (Description.indexOf(« Action réalisée le ») == -1) // Si la description de l’événement contient « Action réalisée le » alors aucune action

{

switch(Titre)

{

case « Ouvrir volets » :

Error = Error || AppelAPI(« xxxx« , »100« ); // Ouverture volet roulant séjour

Error = Error || AppelAPI(« xxxx« , »100« ); // Ouverture volet roulant cuisine

Error = Error || AppelAPI(« xxxx« , »12« ); // Notification ouverture volets

break;

case « Fermer volets » :

Error = Error || AppelAPI(« xxxx« , »0« ); // Fermeture volet roulant séjour

//Error = Error || AppelAPI(« xxxx« , »100« ); // Fermeture volet roulant cuisine

Error = Error || AppelAPI(« xxxx« , »11« ); // Notification fermeture volets

break;

}

var Maintenant = new Date();

if (Error == false)

{

Events.setDescription(« Action réalisée le  » + Maintenant.toLocaleString()); // Inscrit « Action réalisée le » + date dans le descriptif de l’événement pour éviter qu’il ne se reproduise

}

else if (Error == true)

{

if (Description.indexOf(« Erreur lors de l’appel d’une API eedomus ») < 0)

{

Events.setDescription(« Erreur lors de l’appel d’une API eedomus le  » + Maintenant.toLocaleString()); // Inscrit « Erreur lors de l’appel d’une API » + date dans le descriptif de l’événement pour éviter qu’il ne se reproduise

// envoi d’un mail de rapport d’erreur

MailApp.sendEmail(« xxxxxxx@gmail.com« , « Erreur du script domotique », « Une erreur s’est produite lors à la réalisation de l’événement [" + Titre + "]« );

}

}

}

}

}

function AppelAPI(PeriphID, PeriphValue)

{

var Reponse;

Reponse = UrlFetchApp.fetch(« http://api.eedomus.com/set?action=periph.value&periph_id= » + PeriphID + « &value= » + PeriphValue + « &api_user=xxxxxxx&api_secret=xxxxx« );

Reponse = Reponse.getContentText();

Logger.log (Reponse);

return(Reponse.indexOf(« error_code ») >= 0);

}

 

Enregistrez ensuite le script (il faudra bien sûr remplacer les valeurs en rouge par vos propres paramètres: ID des modules, phrases à reconnaitre dans l’agenda, mais également codes API de votre box eedomus dans le bas du script).

 

 

Une fois le script copié et adapté, cliquez sur l’icône  » Exécuter « . Un fenêtre d’avertissement s’ouvre alors pour vous demander l’autorisation pour que ce script ait accès au service Google Calendar.

 

 

Cliquez sur le bouton  » Autoriser « 

Maintenant que le script est créé, il faut l’automatiser pour qu’il s’exécute selon la période que vous définirez.

Dans l’éditeur de Scripts de Google Drive, cliquez sur la petite icône en forme de montre :  » Déclencheurs du script actuel… « 

 

 

Cliquez sur le lien  » Aucun déclencheur configuré. Cliquez ici pour en ajouter un. « 

Demandez à exécuter la fonction  » Calendrier  » en  » Fonction du temps  » en choisissant le  » Minuteur  » positionné à la valeur  » Chaque minute  » par exemple.

 

 

Appuyez sur le bouton  » Enregistrer « 

Et voila, votre script va scruter votre agenda toutes les minutes et lancer des actions en fonction des événements.

 

II. Utilisation

 

L’utilisation est très simple: dans votre agenda Google, par exemple ici appelé « Domotique », il suffira de créer un évènement portant le nom d’une action à effectuer, à l’heure que vous souhaitez. Par exemple « Ouvrir les volets ».

Quand le script trouvera cet évènement, il effectuera l’action correspondant à l’évènement, définie dans le script. C’est aussi simple que ca !

On profite de tous les avantages du calendrier Google: évènement à une date précise, récurrence, déplacement simple à la souris, etc…

Exemple pour le réveil matin:

 

 

Plus besoin d’aller dans le paramétrage de la box, une simple entrée dans le calendrier suffit:

 

 

Lorsque l’action est effectuée, un commentaire est mis dans la description de l’évènement: vous pourrez vérifier à quelle heure l’action a été lancée très précisément.

A contrario, si un problème survient, vous serez averti par un message dans votre boite mail (mais on peut aussi imaginer une notification Push ou un SMS).

 

III. Conclusion

 

Grâce à l’utilisation des Google scripts, il n’est pas nécessaire de posséder un hébergeur php comme c’était le cas avec les scripts que nous avons déjà vu, car tout se fait sur les serveurs de Google. De plus l’accès aux scripts est sécurisé par votre compte Gmail, donc peu de risques de se faire pirater ses codes API eedomus. Enfin, pas de problème de surcharge serveur, les serveurs de Google en ont vu d’autres ;-)

Avec cette combinaison, vous pourrez très facilement gérer votre maison en fonction de votre calendrier Google, que ce soit pour des actions répétitives ou exceptionnelles. Si vous partez un week end, par exemple, et que vous ne voulez pas avoir froid en rentrant: hop, une entrée dans le calendrier Google dimanche à 13h pour allumer le chauffage, et c’est tout. Encore plus simple que le programmateur du chauffage :p Avec mon agenda Google synchronisé sur mon iPhone, c’est ultra simple.

Nous avons pris ici l’exemple de la box eedomus, que nous utilisons, mais ce système de script peut très bien fonctionner avec les autres box disposant d’une API, comme par exemple la Vera ou le Home Center 2 de Fibaro. Il suffira pour cela d’adapter un peu la fonction AppelAPI, ce qui n’est pas très compliqué.

Encore un grand merci à Pierre qui m’a fait découvrir ces possibilités, une fois essayé, c’est adopté !


Cédric Locqueneux

 
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.


33 commentaires


  1.  

    Très intéressant :) :) :)




  2.  
    lecameleon99

    Super, mais ça implique ouvrir l’API de sa box sur Internet, et donc dévoiler facilement ses équipements à tous ceux qui le souhaitent…

    En tout cas, pour la vera, ça implique ouvrir le port 3480, et ensuite on a ça :
    http://IPADRESS:3480/data_request?id=user_data&output_format=xml




    •  

      Non, tu n’ouvres pas l’accès à toute ta box. Tu ne pilotes que les modules dont les ID sont spécifiquement indiqués dans le script. Pour la Vera tu utiliseras les commandes set avec l’ID du module. E tu peux aussi passer par les serveurs de Micasaverde si tu ne veux veux pas avoir à ouvrir ton port. Ce n’est pas plus dangereux que de piloter sa box avec son Karotz ou une interface maison.




      •  
        lecameleon99

        Effectivement, j’ai dégainé un peu vite. Je suis en train de regarder ça.
        Selon la page http://wiki.micasaverde.com/index.php/Luup_Protocol on peux accéder à l’API de la vera avec ça
        https://///

        Le fwd_server est celui que l’on retrouve dans la page http://sta1.mios.com/locator_json.php?username=, dans le champ forwardServers

        Je suis en train de tester avec les radiateurs du script d’Antor. J’ai encore un peu de mal à agir avec les variables, car il y a 2 variables status… Je mettrais l’astuce ici quand j’aurais trouvé…




      •  
        guillaume

        Bonjour,

        Je galère pour mettre en application ton script sur la vera.
        je vois bien le système des id des modules et aussi des phrases a reconnaitre dans l agenda.
        mais je n arrive pas a trouver quelle adresse mettre a la fin du script pour qu il se connecte a ma vera lite.
        je suppose que les commandes ne sont pas les mêmes que sur l eedomus aurai tu une liste ou un tuto pour les differentes commande ?

        merci




  3.  
    lecameleon99

    En effet, j’ai vu par la suite qu’on peux aussi accéder via les serveurs de micasaverde en utilisant les identifiants utilisateur/mdp/serial.

    Je me bat un peu pour modifier une variable sur un module. Quand j’utilise le set, il me créé une nouvelle variable et ne met à jour que celle ci?!?
    J’utilise ça
    https://fwd4.mios.com////data_request?id=variableset&DeviceNum=34&Variable=Status&Value=2

    Une idée par hasard?




  4.  
    lecameleon99

    Réussi à faire quelque chose hier. Je partage.
    Au lieu de passer par la modification d’une variable, j’ai utiliser une action lua.
    Par exemple, pour la gestion d’un chauffage avec le pluggin Antor:

    https://////data_request?id=action&output_format=xml&DeviceNum=27&serviceId=urn:antor-fr:serviceId:PilotWire1&action=SetTarget&newTargetValue=3

    J’ai utilisé les pages suivantes pour trouver:
    http://wiki.micasaverde.com/index.php/Luup_Protocol
    http://wiki.micasaverde.com/index.php/Luup_Requests
    http://www.antor.fr/apps/pilot-wire-controller/




  5.  
    guillaume

    super merci pour l’article.

    Mais je suis un peu perdu pour la mise en place sur la vera.
    Et le paramétrage du script.

    Quelqu’un aurai un exemple de script pour l utiliser avec la vera et le paramétrage a faire dans la vera.

    merci d avance.




  6.  

    Ah c’est intéressant c’est ce que j’ai mis en place dans SARAH (http://encausse.wordpress.com/2012/10/27/s-a-r-a-h-tres-organisee-avec-son-agenda/).
    - Le CRON check les évènements GoogleCalendar
    - Si il y a un lien dans le champs « where » j’exécute le lien sinon je vocalise l’évènement

    Qui peut être un script pilotant la box eedomus, meteo, karotz, etc, …




  7.  
    francis

    Super cet article.
    Peut on faire la même chose avec la zibase?




  8.  
    Michael

    bonjour a tous.
    merci pour cet article tres intéressent.
    Lorsque je veux enregistrer le scripte j’ai une erreur suivante: Caractère incorrect. (ligne 15)Ignorer
    sur la ligne:
    DateDebut.setTime(DateFin.getTime() – (5*60*1000)); //20 minutes de moins que DateFin

    J’ai vérifié si pendant le copié collé il y avait eu un changement mais il semble pas.
    pouvez vous m’aider?
    merci




    •  

      Apparemment, c’est le signe moins entre getTime() et (5*60*1000)) qui pose problème , supprime le et remplace le par celui du clavier. Il y a aussi, sur la ligne juste en dessous, les simple quottes qui sont pas au bon format.




  9.  
    michael

    Bonjour a tous.
    merci Agent Smith ca marche.
    tu fais comment le signe: «
    J’ai une erreur sur la ligne suivente. Je pense que ca vien du «
    Error = Error || AppelAPI(« xxxx« , »100« ); // Ouverture volet roulant séjour




  10.  
    michael

    :-)
    ok merci c mieux comme ca. Je n’ai plus d’erreur, mais lorsque je met un evenement dans le calendrier Domotique, je n’ai pas d’action sur l’eedomus.
    Possible d’envoyer mon fichier (scripte) a une personne?




    •  
      lecameleon99

      J’ai réussi à faire marché le script avec une véra.
      Merci en tout cas pour cette astuce. C’est quand même sympa de gérer quelques actions sur un calendrier.

      Mickael, vérifie bien que ton script est autorisé à accéder à ton calendrier.
      Regarde aussi si le nom de ton évènement est bien celui que vérifie ton script. Et n’oublie pas de planifier le lancement…

      Si un doute sur le script, envoie moi un mail avec mon pseudo sur ma boite free.




  11.  
    Xavier

    Bonjour,
    Tout d’abord merci pour cette astuce, j’ai réussi à faire fonctionner le script après quelques ajustements  »sémantiques »

    Une question toutefois, étant donné que nous utilisons le numéro de device de l’EEdomus, il ne doit pas être possible de modifier une consigne de chauffage par exemple. On pourrait imaginer gérer le chauffage avec un calendrier dédié à cela ?

    Vous confirmez ?
    Merci




  12.  
    kike

    Bonne année a tous, j’ai essayé de mettre en place le script mais rien ne se passe, j’ai remplacé tous les guillemets et adapter le script pour l’ipx800 mais ca ne fonctionne pas. Est ce qu quelqu’un pourrait m’envoyer le script avec le bon orthographe. merci




  13.  
    kike

    En fait j’ai trouvé ce que j’avais fais un apel url avec http://login:password@ip mais ca ne marche pas il ne faut pas de login password avez vous une idée comment faire. merci




  14.  
    sonico-pico

    bonjour,

    Lors du déboguage j’ai cette erreur :

    TypeError: Impossible d’appeler la méthode « getEvents » de undefined. (ligne 14, fichier « Code »)Ignorer

    Voici ma ligne 14 :

    var Events = Cal.getEvents(DateDebut, DateFin);

    Quelqu’un pour m’aider ?




  15.  
    sonico-pico

    En faite le dernier script « propre » m’a l’air bogué. En effet si la valeur API pour ouvrir est de 100 pour fermer elle devrait être de 0 ???
    Je suis si déçu, moi qui pensai contrôler ma eedomus sur le calendrier.
    Personne ne veut m’envoyer son code « propre » en effaçant ses API eedomus ???




  16.  
    Pascal

    Bonour,
    Je peux t’aider un petit peu, car je controle mes volets grace a ce script que j’ai un peu amenager. ca marche tres bien, mais de temps en temps la methode getCalendar ne retourne pas le calendrier et donc la variable Cal est undefined. C’est une erreur qui n’arrive pas souvent, quelques fois par jour environ. mais ce n’est pas grave car le script s’executera la minute suivante.
    Pour que cela ne m’embete plus, j’ai entourer le getCalendar et getEvent par un try catch.
    Voici mon code:

    var Cal;
    var Events;

    try{
    Cal = CalendarApp.getCalendarsByName(calendarName)[0];
    Events = Cal.getEvents(DateDebut, DateFin);
    }
    catch(e){
    return;
    }

    Par contre si tu a tout le temps cette erreur, ce n’est pas normal. dans ce cas, verifie le nom de ton calendrier, est ce que tu l’as bien nommé: Domotique?
    ++




    •  
      sonico-pico

      Merci beaucoup pour le coup de main, mais en faite j’ai fait autrement.
      Finalement j’utilise un ancien script hébergé sur maison & domotique.
      Il ne gère que journée par journée mais c’est ce que je voulais. (emploi du temps perso beaucoup plus compliqué que celui proposé par eedomus, pourtant déjà très bien mais non compatible avec un travail de nuit de certaine semaine)
      Bonne semaine et merci encore.




  17.  

    Si comme moi, il y en a qui utilise ce script avec une vera, et que d’un coup ça ne fonctionne plus, mettez à jour votre serveur MIOS.
    http://sta1.mios.com/locator_json.php?username=USERNAME

    Et dans le script, dans la ligne de commande UrlFetchApp.fetch(), remplacer le serveur par le nouveau.




  18.  

    bonjour.
    le script a bien marché pendant quelques mois et depuis quelques jours la commande d’allumage du chauffage marche mais pas l’extinction.
    vous avez une idée.
    J’ai pensé a un décalage horaire, mais c’est pas ça. la syntaxe n’a pas changé.




  19.  
    Shad

    Très bon tuto, mais si quelqu’un a une application pour du offline sa m’interresse. J’aime pas devoir dépendre d’internet ^^.




  20.  
    William

    Super Intéressant! Possible de faire la même chose avec la Zipabox ?




  21.  
    Vincent

    HELP !!! Depuis peu de temps, le script ne fonctionne plus…
    J’ai fait aucune modification dans mon script ou sur ma Eedomus et mes « ordres » ne sont pas exécuté.

    J’ai bien la note dans l’événement m’indiquant que l’action a été réalisée mais aucun changement dans mes modules.

    Est ce que d’autres ont le même problème ? sinon j’ai revérifié le script et fait plusieurs essais sans succès. Si quelqu’un peut m’aider.

    Merci d’avance.





Laisser un commentaire