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[i].getTitle(); // On récupère le titre de l'événement
var Description = Events[i].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[i].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[i].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(“[email protected]“, “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é !
Merci bcp Cédric pour ce tuto qui fonctionne parfaitement ! Ca ouvre des tas de possibilités.
Bonjour, je me suis inspiré de ce script pour l’ippower 9212, ça marche nickel mais j’ai 2 ou 3 points que je ne comprends pas :
-DateDebut.setTime(DateFin.getTime() – (5*60*1000)); //20 minutes de moins que DateFin
– var Error = null et les Error = Error
– et enfin les 3 dernières lignes.
Pouvez vous m’aider ?
enfin
j’ai mis mon script actuel sur ce site pour l’ippower :
http://www.developpez.net/forums/d1468398/webmasters-developpement-web/javascript-ajax-typescript-dart/javascript/gerer-station-domotique/#post7961842il évoluera au fil du temps.
Tu n’as pas le droit de faire des calculs dans un paramètre :
var milisecondes;
milisecondes=DateFin.getTime()-(50*60*100);
DateDebut.setTime(milisecondes);