Depuis maintenant deux ans, nous pouvions avoir les notifications dans notre box préférée grâce à Aurélien et son article La gestion des ordures avec la domotique
La gestion des ordures par les calendrier google
En raison d’une évolution de l’API Google, nous avons probablement tous reçu un mail début octobre de la part de google nous annonçant la fin des flux XML sur les google calendar.
Par conséquent le service s’est arrêté le 18 novembre 2015. Depuis cette date, il n’est plus possible de récupérer les informations des calendriers Google via un flux XML.
Mais alors comment continuer à lire les calendriers google depuis eedomus?
Voici donc une méthode qui remplace, l’ancienne façon de récupérer les informations de nos différents calendriers Google. Elle n’est pas nouvelle puisque je me suis inspiré pour cela du tuto de Pierre sur le blog maison et domotique . Je l’ai simplement un peu adapté.
Pour cela nous allons donc utiliser un script Google, rien de bien sorcier vous allez voir. Il faut simplement surtout bien suivre le tuto à la lettre et tout se passera bien !
Pré requis :
- Avoir un compte Google.
- Avoir une box Eedomus.
Voici mes deux Agendas : Déchetterie et Sortir_Poubelle
Pour créer un calendrier, vous pouvez suivre l’article d’Aurel ici, la procedure y est très bien détaillée et en plus rien ne change, simplement à l’étape 2 revenez sur ce tuto pour continuer.
Mise en place Coté eedomus
1 Création des Etats dans l’EEDOMUS: D’abord, créez 4 états. Pour cela, il faut, comme avant un état aujourd’hui puis un état demain par calendrier. Ici 4 puisque je gère à la fois le calendrier sortir les poubelles et le calendrier de la déchetterie soit 2 x 2 calendriers.
Le principe est presque le même qu’avec l’ancienne technique, simplement, nous n’utilisons plus des capteur HTTP mais des Etats
2 Récupérer les 4 codes API (1 code API par état)
Mise en place du script sur Google
1 Se connecter à son compte Google Drive https://drive.google.com/
2 Créer un script
Clique droit -> Nouveau Fichier -> Google Apps Script
3 Nommer le script, moi je l’ai nommé Calendrier_eedomus
4 Copier/Coller le code suivant dans le script créé précédemment.
//***********************************************************************************************// // Script Google pour mise à Jour Eedomus // Script réalisé par Eedomusbox basé sur http://www.maison-et-domotique.com/12622-script-google-google-agenda-box-domotique/ // Il permet de recupérer un calendrier Poubelle/tri et un calendrier Déchèterie // Version 1.0 //***********************************************************************************************// function Calendrier() { // Définition Variable var TodayDebut = new Date(); var TodayFin = new Date(); var DemainDebut = new Date(); var DemainFin = new Date(); // Definition des dates TodayDebut.setHours(0,0,0,0); TodayFin.setTime( TodayDebut.getTime() + ((60*60*24) * 1000) ); //1 jour de plus DemainDebut = TodayFin; DemainFin.setTime( DemainDebut.getTime() + ((60*60*24) * 1000) ); //1 jour de plus // Recherche des différents calendriers et mise à jour des Périphériques Get_calendar("NOM_CALENDRIER1","AAAAA","BBBBB" ); Get_calendar('NOM_CALENDRIER2',"CCCCC","DDDDD" ); //***********************************************************************************************// // Fonction //***********************************************************************************************// //***********************************************************************************************// //Fonction Get_calendar // Var 1 = Nom du calendrier // Var 2 = Numéro du périphérique Aujourd'hui // Var 3 = Numéro du périphérique Demain //***********************************************************************************************// function Get_calendar(Fv_Cal,Fv_PeriphID1,Fv_PeriphID2) { var Cal = CalendarApp.getCalendarsByName(Fv_Cal)[0]; var EventsA = Cal.getEvents(TodayDebut, TodayFin); //Journée d'aujourd'hui var EventsD = Cal.getEvents(DemainDebut, DemainFin); // Journée de demain // Récupération des différentes journée Look_Calendar( EventsA, Fv_PeriphID1 ); Look_Calendar( EventsD, Fv_PeriphID2 ); } //***********************************************************************************************// // Fonction Look_Calendar //***********************************************************************************************// function Look_Calendar(FV_Events,Fv_PeriphID) { // S'il n'y a aucun événement c'est que c'est égale à RAS if ( FV_Events.length == 0 ) { Error = Error || AppelAPI(Fv_PeriphID , 'RAS' ); // Mise à jour Aujourd'hui } else { for (i in FV_Events) { var Titre = FV_Events[i].getTitle(); // On récupère le titre de l’événement var Description = FV_Events[i].getDescription(); // On récupère la description de l’événement var Error = null; // On initialise le retour d’erreur à null // Mise à jour de l'api Error = Error || AppelAPI(Fv_PeriphID , Titre ); // Mise à jour Aujourd'hui break; //Dans mon cas je n'ai besoin de récuperer qu'un seul évènement } } } //***********************************************************************************************// // Fonction //***********************************************************************************************// function AppelAPI(PeriphID, PeriphValue) { var Reponse; var ReponseText; Reponse = UrlFetchApp.fetch("http://api.eedomus.com/set?action=periph.value&periph_id=" + PeriphID + "&value=" + PeriphValue + "&api_user=XXXXXXX&api_secret=YYYYYYYYYYYYYYYY" ); ReponseText = Reponse.getContentText(); Logger.log (ReponseText); if (ReponseText.indexOf("error_code") >= 0) { var body = Logger.getLog(); MailApp.sendEmail("MON_MAIL@gmail.com" , " Erreur du script domotique ", " Une erreur s’est produite lors à la réalisation de l’événement [" + PeriphValue + "] "+ body); } return(ReponseText.indexOf("error_code") >= 0); } }
Les valeurs à changer sont
- 1 Le nom des calendriers (ici ils s’appellent “NOM_CALENDRIER1” et “NOM_CALENDRIER2” ) en ligne 23 et 24
- 2 Le numéro de périphériques:
AAAAA = Numéro du périphérique Aujourd’hui pour le calendrier 1 en ligne 23
BBBBB = Numéro du périphérique Demain pour le calendrier 1 en ligne 23
CCCCC = Numéro du périphérique Aujourd’hui pour le calendrier 2 en ligne 24
DDDD = Numéro du périphérique Demain pour le calendrier 2 en ligne 24
- 3 Modifier’adresse mail “MON_MAIL@gmail.com” à avertir en cas de problème en ligne 97
- 4 Remplacer les XXX et YYYY correspondants aux API user et Secret à la ligne 88
L’exécution du script
1 Une fois le script copié et adapté, cliquez sur l’icône « Exécuter » .
2 Une fenêtre d’avertissement s’ouvre pour demander l’autorisation pour que ce script ait accès aux différents services Google.
Cliquez sur Autoriser.
3 Maintenant que le script est créé, il faut l’automatiser pour qu’il s’exécute selon la période désirée.
Dans l’éditeur de Scripts de Google Drive, cliquez sur la petite icône en forme de montre : » Déclencheurs du script actuel… »
4 Cliquez sur le lien » Aucun déclencheur configuré. Cliquez ici pour en ajouter un. «
Comme vous avez pu le remarquer dans le script, nous allons chercher l’ensemble des événements sur la journée d’aujourd’hui et le lendemain.
5 Il nous suffit donc de planifier son exécution une fois par jour. (Entre 1h et 2 heures par exemple)
6 Demandez à exécuter la fonction » Calendrier » en » Fonction du temps » en choisissant le » compteur de jour » positionné à la valeur » Entre 1 h et 2h » par exemple.
7 Appuyez sur le bouton « Enregistrer »
Le script va scruter vos agendas une fois par jour et mettre à jour les différents Etats.
A savoir !
Dans cet exemple, on récupère les valeurs de deux calendriers. Cependant, vous pouvez bien sûr en utiliser autant que vous voulez, au contraire.
Il suffit, plutôt que d’ajouter une seule ligne comme ci-dessous, d’en ajouter autant que nécessaire et la customiser comme nous l’avons fait plus haut.
Get_calendar("NOM_CALENDRIER1","AAAAA","BBBBB" );
Conclusion
En conclusion, malgré l’arrêt du service XML par google pour ses calendrier assez dommageable au départ. Cette méthode particulièrement pertinente, permet de continuer à utiliser les calendriers google pour alimenter les scénarios de nos box domotique. C’est d’ailleurs un script qui est mis en oeuvre sur la box eedomus ici, mais il peut tout à fait être adapté sur une autre box.
merci, je vais tester ça ce week end. j’ai déjà interfacé l’eedomus avec les script google pour avoir l’état de mon alarme. assez puissant ces scripts
De rien, bonne config !
on place ou dans le script “Adresse URL privée ” que l on trouve dans l étape 3 ??
Salut, c’est une erreur dans la rédaction du tuto, si ton calendrier existe déjà, il faut simplement passer à la mise en place coté eedomus.
et “NOM_CALENDRIER1” correspond au nom du calendrier google utilisé?
car après j ai le code erreur TypeError: Impossible d’appeler la méthode “getEvents” de undefined. (ligne 39, fichier “”
oui, il faut remplacer NOM_CALENDRIER1 par le nom de ton calendrier Attention a bien respecter la casse ! Bonne config 😉
Merci j’avance petit à petit, les codes et moi ça fait 2
j’ai aussi cette erreur quand j’exécute le script mais ça fonctionne, j’ai maintenant ” RAS” sur mes capteurs 😉
n’y a t il pas un espace de trop ligne 23 avant les ” de AAAAAAA ?
En tout cas, merci une fois de plus pour ce tuto et la réactivité
ah oui, bien vu, en effet! je suis pas sur que l’espace change beaucoup mais test et redis nous, je corrige le code dans l’article en attendant !
j ai ça comme erreur
Une erreur s’est produite lors à la réalisation de l’événement [weekend] Fri Nov 13 10:17:27 CET 2015 INFO: {
“success”: “0”,
“body”:
{
“error_code”: “1”,
“error_msg”: “Authentification error.”
}
}
Fri Nov 13 10:17:28 CET 2015 INFO: {
“success”: “0”,
“body”:
{
“error_code”: “1”,
“error_msg”: “Authentification error.”
}
}
hum, comme ca je dirais regarde du coté de tes codes API
Non mes api sont bon j ai vérifié et plus je me connecte sur l eedomus avec
Ton API user et Secret à la ligne 88 sont surement erronés.
bon je sais quoi faire ce weekend
merci pour ton script
Je m’excuse d’avance pour ma question… :/
Je cherche à comprendre l’interet d’une telle solution à base de script google pour la gestion des ordures ?
Quel est le point bloquant, empêchant de gérer cela directement depuis la box ?
Je ne souhaite pas troller.. juste comprendre, merci 🙂
Salut, il n’y a pas de question bête !
l’intérêt est de pouvoir faire intervenir les éventements de ton calendrier perso dans tes scénarios. Il est vrai qu’il est aussi possible de gérer cela depuis la box mais le calendrier eedomus. A l’époque le calendrier eedomus n’existait pas, nous avions donc géré cela depuis google cal. Certains ne veulent pas refaire leur config d’autres comme moi, préfère passer par les google cal plutôt que le calendrier interne à la box. Question de gout. Cela dit, le calendrier google est tout de même bien plus simple à administrer. cela peut être fait depuis un mobile ou une tablette sans passer par l’eedomus, il est aussi possible de créer autant de calendrier que d’utilisation (perso, pro, poubelles, déchetterie, école…).
Voici en gros l’intérêt d’une telle solution.
OK, merci pour la réponse !
Je ne voulais surtout pas que mon message soit interprété comme du troll 😉
pour l’instant, je me contente du calendrier eedomus, mais effectivement, j’aurais p-e envie de tester google cal un de ces jours 😉
Pas de soucis, c’est pas le genre de la maison !
J’ai :
{
“success”: “0”,
“body”:
{
“error_code”: “23”,
“error_msg”: “HTTP protocol not allowed on your
account.”
}
une petite idée ?
Il semble que ton compte ne permette pas de faire des requetes http. As tu bien autorisé les actions du script à la premiere execution?
Il me semble bien avoir tout validé pourtant
Http not allowed sur la box eedomus.
Remplace avec https tout simplement
Salut,
j’ai le même problème que Tony Content :
“error_msg”: “HTTP protocol not allowed on your account.”
je vois pas ce que j’ai mal fait?
Sinon autre chose en rapport avec les calendriers: je cherche à créer un état ou un capteur http dans mon eedomus qui me retournerais la date du jour au format aaaa-mm-jj.
Merci d’avance
Merci pour ce tuto, je l’ai installé, il fonctionne nickel mais cependant il engendre tous les jours un mail avec le message : “TypeError: Impossible d’appeler la méthode “getEvents” de undefined. (ligne 39, fichier “calendrier eedomus”)”; Une idée ?? Merci !
Je viens de le mettre en place.
J’ai mis par contre https pour la maj des périphériques, car j’ai désactivé le http sur la BOX. (j’ai mis du temps à comprendre pourquoi ça marchait pas, alors que je recevais les mails avec la cause…)
Merci pour ce très bon script !
Si j’ai bien compris, cela permet de récupérer seulement 1 événement par jour, c’est bien ça ?
Que se passe t’il si on place plusieurs RDV sur la même journée ?
Merci
Je viens de poster une mise à jour de ce script sur http://forum.eedomus.com/viewtopic.php?f=50&t=3039&p=32037#p32037 afin de ne gérer qu’un seul calendrier avec plusieurs types d’événements (dont les poubelles…)
Bonjour à tous, je ne comprend pas je n’ai pas de menu script dans Google , j’ai raté une étape ?
Dans ton drive, tu n’as pas la possibilité de creer un script?
Merci pour ta réponse rapide , comme sur l’image ci-jointe, je n’ai pas les scripts.
Étrange! Je n’ai jamais rencontré ce cas! As tu un autre compte google ou as tu essayé de créer un nouveau compte pour voir si tu as l’option?
Je viens de tester avec le compte de ma femme et c’est pareil,.
On est d’accord, il ne faut pas de compte pro ?
Pas de compte pro.
Il suffit juste “d’associer plus d’applications” et de taper script dans la barre de recherche puis ajouter.
Bonjour à tous, j’ai le script qui fonctionne à merveille par contre je me retrouve avec des données à J-1, avez vous ce phénomène ?