Aller au contenu
pinou

Google Calendar Vers Hc2/hcl

Recommended Posts

Google Calendar vers HC2/HCL

(dernière mise a jour :  23/02/15)

 

Bien que d'autres solutions permettant de piloter sa box depuis un agenda Google existent déjà  (je pense bien entendu aux formidables travaux de Kriek), je n’en ai pas trouvé qui réponde parfaitement à  mes besoins. Je vous propose donc de partager ce à  quoi je suis arrivé...

 

Le besoin : 

Le but étant de « programmer » l’ouverture/fermeture de mon portail à  date et heure fixe, de lancer une machine à  laver a telle heure, de gérer une variable indiquant si je suis en congé ou pas, etc. (voilà  ça va pas péter plus loin que ça), j’ai besoin de :

  • quelque chose de simple à  utiliser qui me permet en ajoutant un événement dans un calendrier Google de déclencher une scène ou un bouton sur ma box,
  • quelque chose de simple à  configurer,
  • et surtout sans script LUA : en fait j’ai une HC2 mais je dois également piloter une HC Lite et je veux donc une solution unique
  • (v1.2) pour certains besoin "urgents" ou il est souvent plus rapide de s'envoyer un mail que d'ajouter une entrée dans le calendrier, avoir la possibilité de traiter les mêmes commandes mais envoyées par mail cette fois ci. La commande sera traitée dans la foulée de la récéption du message, il n'y a pas de notion de scheduling dans ce cas. 

 

La solution envisagée : 

Avec la contrainte de la HC Lite, il me faut trouver une solution d’héberger « le script » ailleurs. Pas possible de l’embarquer sur la box et d’être autonome. En même temps, vu que je veux utiliser Google Calendar (pour des raison de facilité d’accès et de gestion), autant héberger mon script sur Google Drive. 

Afin d’en faciliter l’utilisation et dans le but de partager tout ce bordel, je suis passé par une spreadsheet Google qui embarque mon script. En effet, je trouve ça plus « simple » de modifier le texte d’une cellule plutôt que de toucher a des lignes de code. Ceci dit, faudra quand même se retrousser un poil les manches pour installer le tout…

 

Installation : 

1) Tout d’abord il faut récupérer la spreadsheet Google dont le lien de partage est le suivant : https://docs.google.com/spreadsheets/d/1JdygLOXaGJdJ9WL4t_UUHejao6vfYurjc_D7PybdWro/edit?usp=sharing

Copiez la dans votre Google Drive en faisant Fichier > Créer une copie... depuis la spreadsheet

(v2.0) Depuis la v2, les données ont été séparées sur 3 onglets différents :

  • Configuration : Toutes les données de configuration ont été regroupées ici
  • Commandes : Permet de définir les différentes commandes mises à  disposition
  • Data : il s'agit des données interne à  la spreadsheet, il n'y a rien a toucher ici

2) Modifiez le contenu de la premiere feuille afin de définir les différents paramètres de connexion a votre Home Center (qu’elle soit Lite ou 2) et l’ID du calendrier Google qui sera utilisé pour gérer l’activité de votre box. Donc si vous n’avez pas de calendrier dédié, c’est le moment de le créer…

(v1.2) Sélectionnez la version du firmware que vous avez 3.x ou 4.x. 

(v1.2) Vous avez la possibilité de spécifier quel label Gmail est a surveiller (cf. Gestion des mails ci dessous) ainsi que les caractères qui permettrons d'identifier le contenu utile du mail de votre signature de mail (dans le cas ou vous en utilisez une)

(v2.0) Vous avez maintenant la possibilité d'activé ou pas la prise en compte des événement du calendrier et/ou des emails

(v2.0) Dans le cas des traitements de emails, il y a la possibilité de demander un accusé de réception de la commande. En gros vous envoyez un email contenant la commande a executer et on vous répond si l'action a été traitée avec succès ou pas.

 

3) Dans la partie « Définition des commandes » il s’agit de définir les différentes ordres qui seront reconus : 

  • ID  : il s’agit de l’identifiant de la commande. A vous de le choisir. C’est cet identifiant que vous allez utiliser par la suite dans votre calendrier Google
  • Description : bon je passe sur la description de ce champs... ;)
  • Action : Différentes action sont gérées par le script : gestion de scenes, d’interrupteurs, de variateurs, de volets roulants ou de modules virtuels. En fonction de ce que vous sélectionnez, les 3 autres paramètres du tableau auront une signification bien précise. Une note dans chaque cellule est ajouté automatiquement afin de vous guider dans la saisie de la définition de votre commande
  • Module ID : En fonction du type d’action il faudra renseigner l’ID du module ou de la scene correspondante
  • Paramètre 1 et 2 : dépendent aux aussi du type d’action sélectionné (Start/stop pour une scene, on/off pour un inter, % de variation pour un dimmer, etc.)

4) Basculez dans le script associé via le menu Outils>Editeur de scripts…

5) Vous allez devoir activer les API Google nécessaires via le menu Ressources>Services avancés de Google…

Dans la fenêtre qui s’ouvre, activez Calendar API (si ce n’est pas déjà  fait), puis activez le aussi dans la Google Developpers Console (vous avez un lien dans cette même fenêtre qui vous y conduit)

6) Ajoutez un déclencheur sur votre script afin d’executer chaque minute la fonction Gcal2HC : 

- Depuis l'editeur de script, menu Ressources > Déclencheurs du projet actuel

- Dans la nouvelle fenêtre qui vous indique qu'aucun déclencheur n'est actuellement configuré, cliquez sur le lien pour en ajouter un

- Configurez votre déclencheur en sélectionnant la fonction Gcal2HC et l'événement En fonction du temps/Minuteur/Chaque minute

7) Maintenant que tout est activé et qu’une commande a été configurée, revenez dans votre spreadsheet

8) Allez dans le menu Gcal2HC tools>Tester une commande(v2.0) Une nouvelle fenêtre listant les commandes disponibles va s'ouvrir. En cliquant sur le bouton de la commande vous pouvez tester directement cette dernière. Un certain nombre d’autorisations vont vous être demandé…

9)  (v2.0) Même si vous n'avez pas encore créé d'événement ou envoyé un email, passez sur les autres menus Gcal2HC tools>Relever les événements et Gcal2HC tools>Relever les emails afin de valider les autorisations d'accès nécessaires

 

Bon à  partir de là , si vous n'utilisez pas la fonctionnalité de gestion par email vous pouvez passer au paragraphe Utilisation sinon configurez votre compte gmail comme indiqué ci-dessous …

 

(v1.2) Configuration Gmail : 

Le principe de cette fonctionnalité est simple : au lieu de saisir une commande dans la description d'un événement calendrier, on envoi tout simplement un email contenant cette description. Sur réception de l'email, la commande est analysée (comme pour les événement du calendrier) et exécutée dans la foulée. Afin de rendre ce processus simple, on ne va traiter que les messages reçus sur le compte Gmail et qui ont le label qui a été initialisé dans la partie déclarative de la spreadsheet. Les labels imbriqués sont supportés, il suffit de les séparer par un '/'. Exemple  : Domotique/ToDo

Je vous laisse le soin de créer une règle dans votre compte Gmail afin de "tagger" automatiquement les message qui vont bien avec le bon label (par exemple une règle basé sur l'expediteur, le destinataire et l'objet du message.)

C'est le contenu du message (le body) qui doit contenir la chaine texte correspondant à  la commande a executer. Dans le cas (et c'est souvent le cas sur mobile) ou vous avez une signature qui s'ajoute automatiquement a votre message, vous pouvez spécifier les caractères qui permettrons de délimiter la partie utile du message de votre signature (par exemple --) 

Attention :

  • Dès lors que le message est traité il est automatiquement déplacé dans la corbeille.
  • (v2.0) Si vous envoyez la commande HELP par email, on vous répond avec la liste des commandes disponibles. C'est ppratique lorsqu'on a beaucoup de commandes et qu'on ne se souvient plus de l'ID des commandes...

 

Utilisation : 

3 types d’utilisations sont possibles : 

1) La première, que vous connaissez déjà , consiste à  déclencher l’action directement depuis la spreadsheet (cf. étapes 7 et 8 de l’installation). Ceci permet de mettre au point une commande sans avoir à  la programmer dans son calendrier et attendre que tout se déclenche.

2) Déclenchement programmé depuis votre calendrier. Pour cela il suffit de créer un événement à  une heure précise (sans durée, donc heure de début = heure de fin). Vous mettez le titre que vous désirez (pour que ce soit parlant pour vous) et ajoutez dans le champs Description l’ID de la commande à  executer. Voilà  c’est tout, toutes les minutes le script va tourner et dès qu’un événement arrive à  échéance, la commande associée sera exécutée.

3) (v1.2) Déclenchement suite à  la réception d'un email

 

Voici quelques screenshots : 

post-1175-0-59323500-1424737291_thumb.pngpost-1175-0-73401500-1424737292_thumb.pngpost-1175-0-87317900-1424737289_thumb.pngpost-1175-0-16988000-1424737291_thumb.pngpost-1175-0-86470600-1424737293_thumb.png

 

Remarques : 

1) J’utilise l’API http pour piloter la box, donc ça n’a rien a voir avec la solution de Kriek qui est bien plus puissante et propre ! Mais bon, avec la HC Lite, je ne vois pas comment faire autrement. Peut être avec l’arrivée de la v4 (si elle arrive un jour…). Du coup obligé d'exposer la box sur le net, ça ne me plait pas trop non plus, mais bon ...

2) Je ne traite pas les événements sur la journée mais que des événement à  des instant précis

3) Je ne traite pour l’instant qu’une seule commande par événement

4) Autre limitation : si pendant une certaine période la communication avec la Home Center est coupée, les événements de cette période sont tout simplement perdus…

5) Bien entendu, il ne faut pas modifier la spreadsheet ca il y a des références à  des cellules en dur dans le code (houuuuu que c’est pas beauuuuu ça aussi…)

6) Dernier point, ça fait juste quelques jours que j’ai ça en place, et je n’ai pas encore tout migré de mon ancien système vers la HC2. Donc si vous rencontrez des bugs et autres bizarreries… c’est normal ;)

 

Historique : 

09/11/2014 - v1.0 : version initiale

31/12/2014 - v1.2 : correction bug su l'utilisation du SWITCH

                                préparation pour la sortie du la v4.x

                                ajout du traitement des commandes envoyées par mails 

04/01/2015 - v1.3 : ajout support API pour Notification, Mise a jour des variables globales et Armer les devices

23/02/2015 - v2.0 : refactoring de la spreadsheet et du code

                                ajout de l'accusé de réception de la commande par email

                               ajout de l'aide par email

  • Upvote 11

Partager ce message


Lien à poster
Partager sur d’autres sites

A voir, ton idée me plait bien, car plus simple àmettre en œuvre.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci beaucoup pour ce super tuto. Enfin quelqu'un qui pense aux détenteurs de HCL  ;)

 

J'ai 2 questions :

  1. je suis bloqué au point 4) (Editeur de scripts est grisé)
  2. pour ne pas ouvrir mon routeur vers le HCL, n'y aurait-il pas moyen de passer par fibaro.home.com ?

 

Merci de ton aide

Partager ce message


Lien à poster
Partager sur d’autres sites

Heu pour le point 1, on dirait un problème de droit d'accès au contenu de la feuille. As tu bien copié la spreadsheet dans ton drive ? N'essaye pas de modifier celle que j'ai partagé directement...

 

Pour le 2cd point, je ne sais pas du tout si on peut passer par fibaro.home.com. Y a une authentification a passer, etc. Quoi qu'il en soit, meme le home fibaro il faut bien ouvrir ton routeur vers ta box (ca se fait peut etre par upnp) non ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Pinou,

 

Je vais suivre tes développements.. toute idée est bonne à  prendre  ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

@ pinou,

sorry, je ne suis pas un expert de Google Drive,

J'ai juste fait un Déplacer Vers

Juste ?

Si non, peux-tu SVP me détailler la procédure exacte ?

Partager ce message


Lien à poster
Partager sur d’autres sites

@Kriek : Ben oui, faut pas réinventer la roue surtout !!  :)

 

@Jojo : Intuitivement j'aurai fait la chose suivante : 

1) j'ouvre la spreadsheet a partir du lien que j'ai partagé

2) Puis  le menu Fichier > Créer une copie...

La feuille devrait maintenant se retrouver dans ton Drive. Je ne sais pas quelle est exactement la différence avec ta méthode de "déplacer". Est ce que dans le cas de la copie ca va corriger ton problème d'accès au script ? J'espère...

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Pinou,

Il fallait en effet faire une copie, et maintenant ça marche.

J'espère qu'en faisant déplacer, je n'ai pas foutu le bordel.

Peut-être peux-tu modifier ton tuto pour préciser ce point ?

Partager ce message


Lien à poster
Partager sur d’autres sites

@ Pinou (ou quelqu'un d'autre de plus compétent que moi)

J'ai avancé, et suis bloqué au point 6)

 

6) Ajoutez un déclencheur sur votre script afin d’executer chaque minute la fonction Gcal2HC

 

Je n'y connais RIEN en scripts. Qu'est-ce que je dois rajouter, où et comment ?

 

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour le 2cd point, je ne sais pas du tout si on peut passer par fibaro.home.com. Y a une authentification a passer, etc. Quoi qu'il en soit, meme le home fibaro il faut bien ouvrir ton routeur vers ta box (ca se fait peut etre par upnp) non ?

 

J'ai passé l'authentification manuellement via le navigateur, et j'ai ensuite tenté d'appeler l'API, mais ça ne fonctionne pas :

https://home.fibaro.com/api/settings/info

 

dhosting.pl

BÅÄ„D 404 - Strona nie znaleziona

Strona o adresie http://home.fibaro.com/api/settings/info

nie istnieje na tym serwerze.

Aby uzyskać więcej informacji o błędzie

przejdź na stronÄ™ opisu bÅ‚Ä™dà³w na dhosting.pl

Oferujemy szybki, bezpieczny i stabilny web-hosting.

Masz pytania? - skontaktuj siÄ™ z nami przez http://dhosting.pl/kontakt.

Copyright © 2002-2013 dhosting.pl

 

En ce qui concerne l'accès distant via home.fibaro.com, il n'y a pas d'UPNP et d'ouverture de port sur le routeur.

C'est la box qui initie un tunnel SSH vers les serveurs de Fibaro.

Partager ce message


Lien à poster
Partager sur d’autres sites

@jojo : C'est bon je viens de mettre a jour le premier post avec le complément d'info pour la copie et le déclencheur

 

@Lazer : Oui effectivement, j'ai dit des conneries avec mon upnp. Donc de toute façon y a pas d'autres moyens, meme en passant par home.fibaro, que d'ouvrir un port sur le routeur... Pour ne pas ouvrir de port il faut que la connexion soit a l'initiative de la box, donc pas possible pour la HCLite...

Partager ce message


Lien à poster
Partager sur d’autres sites

merci, je continue l'implémentation

Partager ce message


Lien à poster
Partager sur d’autres sites

@Pinou, une idée me vient.... attends.... voilà  elle est là  :)

 

Il "suffit" de spoofer le DNS de Fibaro pour rediriger le tunnel SSH vers l'adresse IP de son choix... par exemple un serveur dédié chez OVH, 1&1, etc...

 

Alternative : avec un routeur digne de ce nom (un bête Linux sur lequel on est root...), utiliser netfilter pour rediriger le trafic vers l'IP de son choix.

 

Pas forcément simple à  faire, surtout qu'après il faut décoder le protocole normalement utilisé entre la HC2/HCL et les serveurs du Fibaro Est-ce du simple HTTP encapsulé, ou autre ?

Je note ça sur ma Todo List par curiosité :)

Partager ce message


Lien à poster
Partager sur d’autres sites

@ Pinou,

Tu es un as, ça marche pico bello.  :D

Encore 2 petites remarques :

  1. préciser que l'IP/host est l'IP/host externe (c'est évident, mais on ne sait jamais)
  2. préciser qu'on niveau du router il faut faire une redirection de port (depuis le port aléatoire dans la feuille xls vers le port 80 et l'IP interne du HC2/L

encore 1000 mercis

Partager ce message


Lien à poster
Partager sur d’autres sites

Pinou,

J'ai une idée ...

Je cherche désespérément la possibilité d'automatiser la gestion de mes heating panels sur ma HCL :

  1. associer (ou dissocier) une pièce d'un heating panel
  2. Mettre une pièce en mode Manual ou Holiday àune tmp donnée

Serait-il possible de faire cela moyennant une adaptation de ton script ?

Partager ce message


Lien à poster
Partager sur d’autres sites

@Lazer : heu ... j'aime bien ton "il suffit"  ;) ... Une solution plus simple ne serait elle pas plutôt de "proxyfier" la communication entre le Google script et la box ? Je m'explique : Avec quelques petites modifs de configuration, au lieu d'attaquer directement la box HC on attaque un script (php, python, etc.) qui serait hébergé en local sur un syno par exemple. Ce script ne ferait que rediriger les paramètres reçus vers la box. L'avantage c'est que du coup la box n'est plus exposée sur internet (communication sur le lan entre le "script proxy" et la box), y a juste une ouverture a maintenir depuis internet vers le "script proxy" qui ne fait que traiter des commandes bien identifiées. Ca rajoute une petite couche de sécurité mais en même temps faut avoir la possibilité d'hébergement en local à  la maison et développer le script qui va bien. Pour ce qui est du maintien de l'accès à  la box depuis l'exterieur, suffit juste de monter un tunnel VPN et c'est réglé. Encore une fois, merci synology, ca se fait en deux clics. C'est vraiment pas grand chose a faire, j'avais déjà  mis en place cette solution avec mon HomeSeer...

 

@Jojo : Le seul moyen "d'attaquer" la HCL à  ma connaissance est de passer par l'API HTTP qui aujourd'hui, j'ai bien peur, ne permet pas de faire ce que tu demandes. Je n'ai d'ailleurs pas implémenté toutes les possibilités de l'API a ce jour vu que je n'arrive pas forcement a avoir de l'info clair dessus, que mon système domotique est branlant en ce moment (en cours de migration) donc je ne peux pas tout tester,  et puis je ne sais pas si avec l'arrivée de  la v4 (j'espère bien qu'il y aura une v4 pour les HCL aussi et pas que pour les HC2) les choses vont peut être changer ??? Bref ca ne demande qu'a évoluer en tout cas ...

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Pinou,

J'ai reçu un message d'erreur de Google.

Je te le partage, peux-être cela peut-il t'aider à  encore améliorer ta solution.

L'exécution de votre script, Copy of Gcal2HC (shared), a récemment échoué. Un résumé des échecs est fourni ci-dessous. Pour configurer les déclencheurs pour ce script ou modifier vos paramètres pour recevoir les futures notifications d'échec,cliquez ici.

Le script est utilisé par le document Gcal2HCL.

Details:

Début Fonction Message d'erreur Déclencheur Fin 14/11/14 04:43 Gcal2HC Erreur liée à  un service : Spreadsheets (ligne 317, fichier "Code") time-based 14/11/14 04:44
           

Encore Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors la je vois pas ! La ligne en question (317) correspond à  la récupération de l'ID de l'agenda configuré dans la spreadsheet. Alors soit ça ne fonctionne jamais (mais ce n'est pas le cas chez moi en tout cas), soit ca plante de temps en temps et la .... impossible de te dire pourquoi ! Peut être que les services Google ont de brefs problèmes de disponibilité a certains moments ?? Ce qui est clair c'est qu'il faudrait que j'implémente une gestion des erreurs "sérieuse", car en l'état actuel il n'y a ... heu ... comment dire ... rien  :unsure:

C'est l'inconvénient majeur de cette méthode telle qu'elle a été implémentée aujourd'hui (cf. premier poste) : si les services Google ne sont pas dispo alors on va louper tous les événements sur cette période ... 

Partager ce message


Lien à poster
Partager sur d’autres sites

Pinou, merci encore pour cette solution qui marche à  merveille !

Elle me permet d'avoir de l'eau chaude pour me laver (certaines scène avec timer ne fonctionnent pas  :angry: ) cfr http://www.domotique-fibaro.fr/index.php/topic/2826-mise-%C3%A0-jour-de-variables-globales/?view=findpost&p=38345

Partager ce message


Lien à poster
Partager sur d’autres sites

J'y vois également un autre avantage : je soulage le CPU de ma HCL, qui ne doit pas continuellement faire des tests en fonction de l'heure, c'est Google qui se charge du boulot  :D

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

moi j'ai un petit problème

 

j'ai deux routeurs chez moi qui sont tout les deux en mode routeur (pas en bridge)

 

dans gcal2hc il faut rentrer l'ip de mon hcl si je comprend bien mon ip publique est pas locale sauf que ma hcl est branché sur mon deuxième routeur qui se trouve derrière le premier et j'ai aussi un synology de branché sur celui-ci avec un nom de domaine synology

 

que faut il taper dans la barre d'adresse pour avoir accée a ma box, il faut que je fasse des modifs dans les ports ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut, il te faut mettre une adresse publique qui arrivera donc sur ton premier routeur. Ensuite sur la config de ton premier routeur tu dois faire une redirection de port vers le 2cd routeur, et rebelotte sur ce dernier pour finalement atteindre ta box sur le port 80...

Envoyé de mon iPhone en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

le probleme c'est que j'ai créér un ddns pour mon synology et lorsque je me connecte dessus il me renvoie a mon synology sur le port 5000

 

on ne peux pas avoir un autre ddns pour le hcl ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne suis pas certain de bien comprendre ton installation mais a mon avis tu dois configurer des ports spécifiques pour accéder àton HCL. Une première redirection sur ton routeur connecte àinternet te fait passer de ton ip_wan_publique:port_nº1 vers une ip_lan_routeur2:port_nº2, puis une deuxième redirection sur ton 2cd routeur te fait passer de ip_lan_routeur2:port_nº2 vers ip_lan_hcl:80.

Envoyé de mon iPhone en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

×