Google Script offre, entre autre, la possibilité d’accéder à votre agenda Google et d’envoyer des requêtes HTTP.
Il devient alors possible grâce à un simple script hébergé sur votre Google Drive de piloter, à intervalle régulier, votre domotique.
L’un des premiers exemple d’utilisation est la possibilité de mettre à jour une variable de votre ZiBASE afin que cette dernière puisse, par exemple, gérer votre chauffage selon le type de jour indiqué dans votre agenda (Travaillé, Congé, …). Voir l’excellent article de Richard concernant l’optimisation de son chauffage.
Pour ce faire, nous avons besoin des éléments suivants :
- Un compte Google Drive
- Un agenda Google Calendar
- L’identifiant et token de votre ZiBASE (Que vous trouverez dans le configurateur en mode Expert
1ère étape : Remplir son agenda
Insérer un événement journalier avec un nom parlant. Par exemple, j’utilise les mots (Travail, Maison ou Vacances) Travail pour demander à mon chauffage de s’activer de 6-8h et de 16-23h, Maison pour l’activer de 8-23h et Vacances pour qu’il bascule en mode Hors-Gel.
Noter l’identifiant de votre agenda (Cliquez sur la flèche indiquée, allez dans les paramètres et noté l’ID de votre agenda)
2ème étape : création du script
Connectez-vous sur Google Drive et créer un nouveau script
Si « Script » n’est pas disponible, cliquez sur « Connecter plus d’application » puis sélectionnez « Script in Google Drive »
Une fois le script créé, copier y le code ci dessous :
/** * ======================================================================================================== * Lit les événements de la journée dans le calendrier spécifié et retourne les valeurs prédéfinies * 9 si un événement nommé Vacances existe, * 5 si un évenement nommé Maison existe, * 1 Travail (valeur par défaut) * ======================================================================================================== **/ var ZIBASE = "ZiBASE00xxxx"; var TOKEN = "xxxxxxxxxx"; var CAL_ID = 'Xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com'; var MOT_CLE_JOUR_A_LA_MAISON = 'Maison'; var MOT_CLE_JOUR_EN_VACANCES = 'Vacances'; var Z_VARIABLE_AUJOURDHUI = 20; // V20 var Z_VARIABLE_DEMAIN = 21; // V21 /** * --------------------------------------------------------------------------------------------------------- * Aujourd'hui et Demain * --------------------------------------------------------------------------------------------------------- **/ function traiter() { traiterAujourdhui(); traiterDemain(); } /** * --------------------------------------------------------------------------------------------------------- * Aujourd'hui * Stocke la valeur de retour dans la variable 20 de la ZiBASE * --------------------------------------------------------------------------------------------------------- **/ function traiterAujourdhui() { var today = new Date(); envoi = UrlFetchApp.fetch("https://zibase.net/m/zapi_remote_zibase_set.php?device=" + ZIBASE + "&token="+ TOKEN + "&action=rowzibasecommand¶m1=5¶m2="+ getTypeOfADay(today) + "¶m3=1¶m4=" + Z_VARIABLE_AUJOURDHUI); }; /** * --------------------------------------------------------------------------------------------------------- * Demain * Stocke la valeur de retour dans la variable 21 de la ZiBASE * --------------------------------------------------------------------------------------------------------- **/ function traiterDemain() { var tomorrow = new Date(Number(new Date()) + 1000 * 60 * 60 * 24); envoi = UrlFetchApp.fetch("https://zibase.net/m/zapi_remote_zibase_set.php?device=" + ZIBASE + "&token="+ TOKEN + "&action=rowzibasecommand¶m1=5¶m2="+ getTypeOfADay(tomorrow) + "¶m3=1¶m4=" + Z_VARIABLE_DEMAIN); }; /** * --------------------------------------------------------------------------------------------------------- * Lit les événements de la journée dans le calendrier spécifié et returne les valeurs prédéfinies * Date : la date souhaité * Retour : 9 si un événement nommé Vacances existe, 5 si un évenement nommé Maison existe, 1 si aucun de ces événements n'a été trouvé * --------------------------------------------------------------------------------------------------------- **/ function getTypeOfADay(aDate) { var cal = CalendarApp.getCalendarById(CAL_ID); // Google Script contient un bug sur les événements journaliers. Il est donc important, avant la recherche // de basculer en TimeZone +0. var oldTimeZone = cal.getTimeZone(); cal.setTimeZone("Etc/GMT"); var eventsMaison = cal.getEventsForDay(aDate, {search: MOT_CLE_JOUR_A_LA_MAISON}); var eventsVacances = cal.getEventsForDay(aDate, {search: MOT_CLE_JOUR_EN_VACANCES}); var result = 1; // Travail if (eventsVacances.length > 0) { if (existAllDay(eventsVacances)) result = 9 // Vacances } else if (eventsMaison.length > 0) { if (existAllDay(eventsMaison)) result = 5 // Maison } cal.setTimeZone(oldTimeZone); return result; } /** * --------------------------------------------------------------------------------------------------------- * S'assure qu'un des évenement est de type "Toute la journée" * events : Tous les événement de la journée * Retour : vrai si un événement est de type toute la journée * --------------------------------------------------------------------------------------------------------- **/ function existAllDay(events) { for (var i in events) { if (events[i].isAllDayEvent()) { return true; } } return false; }
puis modifiez les paramètres
var ZIBASE = "ZiBASE00xxxx"; var TOKEN = "xxxxxxxxxx"; var CAL_ID = 'Xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com'; var MOT_CLE_JOUR_A_LA_MAISON = 'Maison'; var MOT_CLE_JOUR_EN_VACANCES = 'Vacances'; var Z_VARIABLE_AUJOURDHUI = 20; // V20 var Z_VARIABLE_DEMAIN = 21; // V21
par vos propres informations, ainsi que les variables que vous souhaitez que le script modifie. J’utilise la variable 20 pour aujourd’hui et 21 pour demain (attention, les variables supérieures à 31 ne sont pas accessible par le script).
Comme vous pouvez le constater, le script ne cherche pas le mot ‘Travail’, ce dernier est déduit du fait que nous ne trouvons ni maison, ni vacances. Cela sera donc la valeur par défaut.
3ème étape : activer et enclencher le script
Afin que le script puisse accéder à votre agenda, certaines autorisations sont nécessaire. Afin de déclencher la demande d’autorisation, il suffit d’exécuter le script manuellement la première fois.
Sélectionnez « traiter » ou « traiterAujourdhuit », « traiterDemain » puis cliquer sur le bouton play. Le script va démarrer et vous demander les autorisations nécessaires.
Une fois le script manuellement démarrer, il est nécessaire de demander son exécution automatique toutes les heures.
Et voilà, vous avez créer un script qui s’exécute toutes les heures, qui va vérifier dans votre agenda le type de journée et qui stock cette information dans une variable de votre ZiBASE.
Maintenant, à vous de jouer avec vos scénario pour exploiter correctement ces variables. Pour ce faire, je ne peux que vous conseiller de (re)lire l’article de Richard concernant l’optimisation de son chauffage.
Références : API ZiBASE : http://www.zodianet.com/zapi.html,
Google Script : http://www.google.com/script/start/
39 Comments
richard
Super ton article qui permet de s’affranchir d’un serveur web perso (NAS ou PC,..) tout en bénéficiant des services de Google.
Ma pomme/pikat
Bonjour et merci…
Je vais tester ce script car avec celui de Cédric et de ZygOm4t1k j’ai pas mal de bugs et tout ne fonctionnait pas donc j’avais laissé tomber…
François PASCAL
Super ! Je vais essayer sur une de mes Zibases. Et comme mes Zibases communiquent entre elle, cela va bien m’aider !
J’espère simplement que google ne fasse pas comme la géolocalisation qui l’a mis à dispo puis l’a enlevé dès que trop de personne l’utilise. Merci à toi et vas y, continue : on en profites tous !
RSVince 76
bonjour,
Merci pour cet excellent article…
Pour ma part suis en phase de test et j’ai une erreur à la ligne 70
« Signe ) manquant après la condition. (ligne 70, fichier « code »)
Je ne peux pas aller plus loin.
Je suis même passé par la rédaction complète du code car j’avais déjà eu le problème avec des scripts précédent qui buguaient lors d’un copier/coller.
Mais la je sèche un peu.
Quelqu’un a t’il un idée?
Merci à tous.
Bye.
Vince.
Steven
Bonjour,
Il y avait effectivement des soucis au niveau du script, les caractères spéciaux avaient été remplacés par d’autres (code html). J’ai corrigé cela (au détriment de la présentation, désolé Pascal).
@vince Il suffit donc de copier/coller le texte.
@Francois Google n’a pas encore prévu de se débarrasser des Scripts, bien au contraire. Mais effectivement, avec eux, on est jamais à l’abris.
Pascal STEPHANY
@Steven
On a mis en place un plugin pour coller les scripts dans un article pour éviter ces erreurs de code. Ce sera pour la prochaine fois 😉
Pascal
RSVince76
Bonsoir,
Pour ma part, plus d’erreur à signaler.
Merci.
Vincent
Laurent
Super la découverte de google script !
Je vais de ce pas lier ma zibase et mes google agenda…
En plus ca va surement me servir à autre chose de disposer d’un scheduler autonome externe…
Merci pour ce partage.
Ma Pomme/Pikat
Bonjour, désolé de faire mon petit boulet mais quelqu’un pourrait-il donner un exemple de scénario qui utilise ces variables ? J’ai un peu de mal ……
Merci.
spiccand
Regarde l’article de Richard décrit dans cet article.
Remplace la variable V44 par V20.
Présent ==> 5
Absent ==> 9
Travail ==> 1
Personnellement, je n’utilise qu’un seul scénario pour faire la même chose, mais je suis développeur donc créateur de scénario incompréhensible 🙂
Sinon, pour allumer ma cafetière, j’ai un scénario qui s’exécute à 7h00 si V20 = 1 (Travail) et un autre qui l’allume à 9h00 si V20 = 5 (Présent).
Ma Pomme/Pikat
Ok merci, il faut vraiment que je m’y mette à ces variables 😉
Steven Piccand
Je travaille sur un nouveau script « Rapport mensuel » qui exploit directement données de la ZiBASE sans MySQL et PHP.
https://script.google.com/macros/s/AKfycbzMgu7RK9WGANTJjild_ejI4KCKrxky9zxHBzGJG0ZTM_PDRE4s/exec
Sans paramètre, il affichera les données de ma ZiBASE, sinon (si vous n’avez pas peur) vous pouvez ajouté les paramètres suivants : ?zibaseid=XXXXX&token=XXXXXXX
Tenez moi au courant si vous êtes intéressé.
P.S. Ce script doit normalement s’exécuter le dernier jour du mois pour être pertinent.
Ma pomme/pikat
Cool le truc, ça marche nickel !!! Je suis très intéressé par ton script….
spiccand
La suite est ici : http://domotique-info.fr/2013/12/google-script-au-service-de-votre-zibase-rapport-mensuel/
Definitif
Bonjour, pour que cela fonctionne avec la Zibase faut-il avoir acheté au préalable la licence ou cela peut fonctionner sans ? Peut-on ainsi programmer l’ouverture de ses volets roulants sans licence ?
spiccand
@Definitif Ce script mais à jour une variable qui ne peut être exploitée que par un scénario. Le licence est donc obligatoire. Une Zibase sans licence permet de contrôler ses périphériques à distance mais ne permet aucune automatisation/programmation. Perso, j’ai des volets « Somfy IO », donc même ma Zibase ne peux rien faire. J’ai opté pour une télécommande Velux programmable à 40€ sur e-bay 🙂
Boinaud Eric
Bonjour,
j’ai ce type d’erreur :TypeError: Impossible d’appeler la méthode « getTimeZone » de null. (ligne 63, fichier « Code »)
une idée ?
spiccand
@Eric Le script n’arrive pas trouver l’agenda. Il faut vérifier le CAL_ID.
Boinaud Eric
Effectivement… Je me suis trompé de calendrier ! Merci, c’est ok maintenant !
Eric CHLON
Bonjour, dans le scénario Zibase (LECTURE-AGENDA) j’ai une erreur en rapport avec l’adresse de Google agenda : 16/2/2014 11:39:09 HTTP Client REQ Error: https://www.google.com/calendar/********
J’ai fais le test aussi sans les https://www.google (comme dans le script agenda de Google script). mais toujours la même erreur.
Une astuce ?
Steven Piccand
@Eric Tu confonds avec l’article de Richard 🙂
Si tu suis simplement ce tuto, tu n’auras pas besoin de NAS mais juste d’un accès à Google Drive. Dans ton cas, oublie l’article de Richard et concentre toi sur celui-ci.
L’article de Richard est excellent mais nécessite du matériel que tu ne sembles pas posséder. (Tout comme moi avec mon stupide NAS Iomega et ma LiveBox :-))
Eric CHLON
Bonjour Steven, effectivement j’ai mélangé les 2 tutoriels.
J’avais déjà commencé avec celui de Richard et après je trouve le tiens qui semble résoudre mon problème d’hébergement du script.
Je voulais s’avoir où voir le résultat de l’exécution du script de https://script.google.com ?
Dans la Zibase dans le suivi d’activité je ne vois rien.
Pour les variables V20 et V21 je vais faire le tutoriel de Richard (sauf Lecture-Agenda).
Merci
Steven Piccand
Pour voir le résultat, il te faudrait créer un scénario sur ta zibase avec comme action « AFFICHER LES VARIABLES DANS LE SUIVIS D’ACTIVITE ». Tu pourras ainsi exécuter le script Google en cliquant sur le bouton play, puis en testant ce nouveau scénario sur la Zibase qui va donc lister les variables de la zibase avec leurs valeurs. C’est pas forcément très clair quand on a pas l’habitude donc hésite pas à demander de l’aide si besoin.
Eric CHLON
Steven, Le script Google fonctionne puisque je peux récupérer les variables dans le suivi d’activités de la Zibase via le scénario que tu m’as conseillé.
Maintenant comment exploiter les variables : exemple 17/2/2014 17:42:57 Print: s00=015061 (H3AD5) et surtout les identifier.
J’ai trouver la liste de mes 31 variables : http://ip_zibase//sensors.xml.
Je suppose qu’il faut créer un scénario et utiliser les CRITERES et STIMULI.
Peux-tu me donner un exemple ?
Merci beaucoup, ça va servir aux autres aussi !
Steven Piccand
@Eric
Imaginons que je veuille allumer la lumière de la chambre à 6h30 uniquement les jours ou je travaille … 6h30 c’est un peu tôt pour le week-end 🙂
Je crée un scénario :
Stimuli : Evènement temporaire, de type réveil à 6h30
Conditions nécessaires pour prendre en considération le stimuli : Variable V20 est égale à 1
Action : Activer le périphérique : lampe de chevet sur ON.
(dans le tuto, on met 1 dans la variable V20 pour dire « Travail »)
C’est un exemple de scénario relativement simple, mais un bon début.
Eric CHLON
Bonjour Steven, merci pour ton exemple c’est plus clair maintenant. Il y a plusieurs tutoriels sur domotique-info.fr qui montre les nombreuses possibilité des variables.
J’ai reçu hier mon module Fibaro FGS221 et ma sonde THN132N.
Pascal m’avait conseillé début janvier, le module Fibaro pour ma chaudière au pellet CTU 34 Ungaro.
Maintenant en regardant les divers schémas de câblage je suis perdu.
Je voudrais être sur de ne pas envoyer de courant dans la carte ma chaudière.
Il y a un branchement possible sur une fiche RJ11 femelle (4 files),
mais quel schéma choisir dans la notice du module FGS221 ?
Si tu as une idée, merci d’avance.
Steven Piccand
@Eric
Je ne prendrais pas le risque de t’indiquer quoi que ce soit. Cela dépend de ton poêle. Le mien n’est pas du tout configurer la même chose.
Eric CHLON
Bonjour Steven, hier j’ai réussi à branche le module Fibaro FGS221 à ma chaudière (je ferais un tutoriel quand le scénario fonctionnera parfaitement).
J’ai utilisé le thermostat disponible avec la Zibase mais la température du thermostat reste identique à la sonde 19° température jour 20.5°.
J’ai supposé utilisé le thermostat et ensuite choisir les variables via les conditions (stimuli) pour faire fonctionner le script Google.
Merci d’avance.
Steven Piccand
@Eric
La température affichée par le thermostat est toujours celle de la sonde soit 19° si la sonde est à 19°.
Il faut d’abord mettre en place le thermostat et faire qu’il arrive piloter ton module FGS-221.
une fois que cela fonctionne, le script google va t’aider à non pas modifier les variables mais le calendrier qui est rattaché au thermostat. (par exemple, si c’est un jour travailler, le calendrier va être modifié pour dire d’utiliser la consigne Jours uniquement le matin et le soir. Si c’est un jour non travaillé, utilisé la consigne Jours toute la journée, …)
Eric CHLON
Steven, j’ai fais des captures d »écran pour les scénarios.
Peux-tu les vérifier ?
http://eric.chlon.free.fr/domo/Scenarios_Thermostat_Chauffage_module.pdf
mon module FGS-221 s’appelle Chaudière.
http://eric.chlon.free.fr/domo/Scenarios_Thermostat_Chauffage_sonde.pdf
http://eric.chlon.free.fr/domo/Scenarios_journee_absent.pdf
http://eric.chlon.free.fr/domo/Scenarios_journee_present.pdf
http://eric.chlon.free.fr/domo/Scenarios_journee_travail.pdf
Steven
@Eric
Il me semble que ton thermostat s’appuie sur le calendrier n° 14 alors que tes autres scénarios modifie le calendrier n° 1. Sinon, le reste me semble correcte.
Perso, je n’utilise qu’un seul scénario. Il met mon calendrier avec les heures de travail, s’arrête si je suis en mode travail, sinon met le calendrier en mode maison, s’arrête si je suis en mode maison, sinon continue et met donc le thermostat en mode Hors-gel.
Moi j’utilise 1, 5 et 9 pour travail, maison et vacances, dans ton cas, c’est 1, 2, 3, tu devras donc remplacer les actions « stopper le scénario si… »
https://dl.dropboxusercontent.com/u/13037529/Scenario_Agenda_Thermostat.pdf
Ce scénario est exécuté tout les jours à 1h00 et 3h00 et m’envoi un email pour s’assurer que tout est bon.
Courage 🙂
Eric CHLON
Steven, suite à ton message d’hier soir (avec ton scénario) le script fonctionne bien.
Autre problème le module Fibaro FGS221 envoi un OFF alors qu’il devrait envoyer un On (avec le scénario Agenda-chaudière idem au tiens).
Ma chaudière aux pellets se mets en marche avec un On du module Fibaro,
elle est en modulation (ralentie) avec un Off
Hier matin une croix rouge sur le module Fibaro impossible de l’enlever, il a fallu le réinstaller une seconde fois.
Grace à toi, j’avance bien.
Merci et bon dimanche.
Eric CHLON
Bonjour, Steven
Depuis plusieurs jours je fais des essais.
Hier, j’ai trouvé que quand j’augmente manuellement la température Jour ans le thermostat Zibase ma chaudière se mets en MARCHE. http://eric.chlon.free.fr/domo/IMG_20140301_090212.jpg
Si je diminue la température Jour ma chaudière se mets en MODULATION.
http://eric.chlon.free.fr/domo/IMG_20140301_090243.jpg
C’est déjà un bon début, mais pour l’instant c’est pas le script Google qui commande le thermostat. http://eric.chlon.free.fr/domo/Scenarios_Thermostat_Chauffage_module-01-03-2013.pdf
Hier soir à 21h, dans le thermostat aucun changement de température 17,5° ou de mode Nuit.
Dans le thermostat j’ai créer les 3 modes : Maison, Travail, Vacances avec leurs horaires mais rien ce matin. Je dois changer manuellement dans le thermostat. http://eric.chlon.free.fr/domo/Screenshot_2014-03-01-09-29-21.png
Je viens de découvrir que le script Google ne fonctionne plus, impossible de voir les variables dans le scénario Zibase (les identifiants sont bons, je l’avez déplacer quelques jours pour le stopper).
Merci d’avance.
Eric CHLON
Steven, c’est encore moi.
Le script Google n’envoi pas le bon paramètre.
Si j’écris Maison, Travail, Vacances dans mon agenda, je test et toujours le même message : 01/3/2014 11:11:05 Message sent (type:1, tag=0)(to:#2:@Android):(1 Travail, 5 Maison, 9 Vacances) Aujourd’hui le mode est 0, demain il sera -1…
Toujours les mode est 0, jamais 1 ou 5 ou 9
Encore merci
Steven
@Eric
Si je résume, le thermostat est OK, tu utilises la variables V31 pour définir le mode (jour, nuit, hors-gel, …) et le calendrier n°1.
Par contre, le script qui va lire ton agenda et mettre à jour ta variable V20? ne semble pas bon. As-tu bien suivis l’étape 3 de ce tuto ? Si oui, refait le encore une fois puis lance le scénario que tu dois encore avoir qui affiche le contenu de tout les variables. 20 devrait afficher « Print: v20=000001 (H0001) String= » si ton agenda indique que tu es au travail. Si ton agenda indique que tu es en vacances … alors dans ce cas là, je suis jaloux et je ne te réponds plus 🙂
Tiens moi au courant, on va trouver le problème.
Eric CHLON
Bonsoir Steven, j’avais pas mis mes lunettes, dans le script Google il manquait 1 chiffre dans le login Zibase.
Dans le fichier sensors.xml on peut lire :
mais je ne suis pas en vacances, j’avais juste pris 2 jours la semaine dernière.
Les vacances, c’est pour faire un essai !
Je te donne le liens de mes scénarios pour vérifier surtout la variable interne Delta V14.
http://eric.chlon.free.fr/domo/Scenarios_Thermostat_Agenda_Chauffage_03-03-2013.pdf
http://eric.chlon.free.fr/domo/Scenarios_Thermostat_Chauffage_module-03-03-2013.pdf
http://eric.chlon.free.fr/domo/Scenarios_Thermostat_Chauffage_sonde.pdf
Voir aussi le thermostat :
http://eric.chlon.free.fr/domo/Thermostat_jour.png
http://eric.chlon.free.fr/domo/Thermostat_nuit.png
en passant en jour/nuit j’ai juste un petit logo soleil en jour et un logo lune pour la nuit, la température ne change pas.
Avec la variable V12 le changement jour/nuit ne se fait pas.
Merci d’avance
Steven Piccand
@Eric
Ok, on peut donc considérer que le script Google met bien ta variable V20 à jour correctement.
Dans ton thermostat, met V25 au lieu de V20 pour le « Mode particulier ».
C’est uniquement dans ton Scenarios_Thermostat_Agenda_Chauffage que tu dois modifier le calendier 1. En partant du haut de ton scénario. La 1ère fois que tu vois « Charger un calendrier variable », tu dois cliquer sur le bouton modifier puis cocher les jours/heures au quel ton poele doit passer en mode jour. Les heures décochées représentes le passage en mode nuit. A ce stade là, tu choisis les horaires du mode « Travail ».
Ensuite si tu redescends dans ton scénario, tu retrouves la même chose soit « Charger un calendier variable ». Ce coup-ci c’est pour préciser les horaires jours/nuits » du mode « Je suis à la maison ».
A la fin du scénario, il met la variable V25 à 6 pour indiquer à ton thermostat de passer en mode « Hors-Gel ».
Une fois effectué, test ton scénario puis, tu devrais voir apparaître sur ton smartphone, dans le thermostat, le calendrier correspondant avec les mêmes plages horaires que tu as spécifié dans ton scénario.
Allez courage tu y est vraiment presque et j’avoue que c’est pas facile.
Eric CHLON
Bonsoir Steven, je crois que tout fonctionne bien maintenant.
J’attend ce soir pour voir si le jour/nuit va se faire seule.
J’ai ajouter une vanne Danfoss par la commande : ENVOYER LA CONSIGNE DE TEMPERATURE sur la variable V14, ça marche mais plus de piles.
Je voudrais s’avoir si la vanne Danfoss se pose sur le corps d’une ancienne vanne thermostatique ?
Ou sur une vanne simple (non thermostatique) ?
Encore merci,