Script Google + Google agenda + Box Domotique
Pour
Contre
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 [...]
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 :
- Lecture des évènements de l’agenda d’un calendrier spécifique (à définir dans le script)
- Vérification de l’évènement pour voir s’il correspond à un évènement prédéfini
- 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é !



































Très intéressant :) :) :)
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.
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é…
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
j ai peut être avancer un peu.
l’adresse pour ce connecter a la vera devrai ressembler a quelque choses comme ça :http[s]://///
avec le que l ont trouve ou lecameleon99 la dit
http://sta1.mios.com/locator_json.php?username=
par contre si je me trompe pas maintenant c est les commandes qui ne sont pas bonne.
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?
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/
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.
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, …
Super cet article.
Peut on faire la même chose avec la zibase?
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.
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
Meme chose, remplace les « et les » par des « .
le signe « est le meme que << (plus petit que)?
Non, ce sont des guillemets, mais qui s’affichent différemment selon l’environnement. Le blog les a en effet malheureusement ajustés à sa sauce :/
:-)
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?
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.
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
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
Le script propre est dispo ici: http://www.maison-et-domotique.com/download/scripts/agenda_drive.txt
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
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 ?
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 ???
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?
++
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.
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.
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é.
Avec quelle box?
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 ^^.
Super Intéressant! Possible de faire la même chose avec la Zipabox ?
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.