Tuto Script de syncro Google Agenda vers Lifedomus
#1
Bonjour


Utiliser les agenda Google et remonter chaque événement dans une variable LD.




Principe de fonctionnement :

Chaque jour et J+1, l'évènement présent dans dans le calendrier est envoyé au serveur LD.
La mise à jour est automatique, une fois le script créé et paramétré, aucune autre action n’est à prévoir. Chaque lancement du script se fera selon une durée paramétrable.


L’idée est de pouvoir déclencher des scénarios en fonction du nom de l'évènement présent dans le calendrier.


Par exemple, ci-dessous dans le calendrier « congés », j’ai spécifié des dates dans l’agenda avec comme titre « CONGES ».
Quand la date arrivera, l'évènement sera récupéré par le serveur LD pouvant ainsi déclencher des automates ou scénario.




   



A savoir qu’il est possible de créer autant de calendriers que l’on souhaite mais il n’est pas possible d’utiliser un seul calendrier avec plusieurs évènements sur la journée, le script récupérant uniquement le premier évènement.
 
A l’heure actuelle, je ne récupère que les titres, mais peut-être plus tard, dans d’autres versions, il sera possible de récupérer les heures de début et fin d’évènement.
 
Personnelement, avec cet outil, je vais me passer du plugin « Planification » présent sur nos serveur LD qui pour moi n’est pas adapté.
Mon chauffage sera géré grâce à ce script…
Ayant plusieurs planning horaires au niveau du boulot, il sera très facile grâce au script de déclencher mes automates de gestion du chauffage qui seront conditionnés par la valeur de ma variable récupérée à l’instant « t » .Je n’aurai juste qu’à tenir à jour mon agenda google.




   



Prérequis :


-         Un serveur Lifedomus avec le Plugin « écoute »
-         Un ou plusieurs agenda Google
-         Avoir redirigé le port Wan 8080 vers l’IP du serveur LD
( Attention, le fait d'ouvrir le port 8080 vers l'extérieur expose directement le serveur et sa console d'administration. S'assurer d'avoir un mot de passe Admin fort )
-         Avoir un compte Google drive

 
Installation :


-         Créer un connecteur « écoute » :


   




Ensuite créer un équipement « écoute » :

-         Donner lui un nom et spécifier le « connecteur écoute »


   




Créer ensuite 2 variables et donnez-lui un nom (par ex. « aujourd’hui » et « demain ») :
( Attention , "sensible à la casse" )

   




C’est tout ce qu’il y a à faire coté « serveur LD »






 
Maintenant, rendez-vous sur votre « Drive » Google et créer un nouveau script :


   




Donner lui un nom et copier le script ci-dessous :

   







Code PHP :
function myFunction() {
 
 }
//***********************************************************************************************//
// Script Google pour mise à Jour du(des) calendrier(s) Google vers le serveur domotique Lifedomus
// Permet de récupérer le Titre de l'évenement du Jour + le lendemain des calendriers Google Agenda
// Script réalisé par moicphil et basé sur celui de Eedomusbox
// Version 2.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.setTimeTodayDebut.getTime() + ((60*60*24) * 1000) ); //1 jour de plus
DemainDebut TodayFin;
DemainFin.setTimeDemainDebut.getTime() + ((60*60*24) * 1000) ); //1 jour de plus
 
 
  
//***********************************************************************************************//
// Recherche des différents calendriers et mise à jour des différentes variables "écoute" sur Lifedomus
//***********************************************************************************************// 
 
 
Get_calendar
("Chauffage","aujourd'hui","demain" );  
//Get_calendar("xxxxxx","yyyyyyyyyyyyyyyy","zzzzzzzzzzzz" );
// ...
 
 
  
//***********************************************************************************************//
//Fonction Get_calendar
//***********************************************************************************************//
 
 
function Get_calendar(Fv_Cal,Fv_var1,Fv_var2)
{

var 
Cal CalendarApp.getCalendarsByName(Fv_Cal)[0];
var 
EventsA Cal.getEvents(TodayDebutTodayFin); //Journée d'aujourd'hui
var EventsD Cal.getEvents(DemainDebutDemainFin); // Journée de demain

// Récupération des différentes journée
Look_CalendarEventsAFv_var1 );
Look_CalendarEventsDFv_var2 );
}

//***********************************************************************************************//
// Fonction Look_Calendar
//***********************************************************************************************//
function Look_Calendar(FV_Events,Fv_var)

{
// S'il n'y a aucun événement c'est que c'est égale à RAS
if ( FV_Events.length == )
{
Error Error || AppelAPI(Fv_var 'Ras' ); // Changer "RAS" par le nom de votre choix, s'affiche par défaut si aucun évènement
}
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_var Titre ); // Mise à jour 
break; 
}

}
}

//***********************************************************************************************//
// Fonction
//***********************************************************************************************//
function AppelAPI(Fv_varTitre)

{

var 
Reponse;
var 
ReponseText;

Reponse UrlFetchApp.fetch("http://IP_SERVEUR_LD:8080/UniversalListen?" Fv_var "=" Titre);
ReponseText Reponse.getContentText();

Logger.log (ReponseText);

if (
ReponseText.indexOf("error_code") >= 0)
{
var 
body Logger.getLog();
MailApp.sendEmail("MONMAIL@XXXXX.com" " Erreur du script Lifedomus calendar "" Une erreur s’est produite lors à la réalisation de l’événement [" Titre "] "body);

}

return(
ReponseText.indexOf("error_code") >= 0);

}


 


Enregistrez le script (on le modifiera un peu après) et exécutez-le :
Cliquer sur « examiner les autorisations »

   





Autoriser Google à accéder à vos données :


   





Maintenant, on va modifier le script selon vos infos :

Ligne 30, renseigner le nom de l’agenda à traiter et le nom des variables à renseigner ( Attention , "sensible à la casse" ) :

   




Ligne 92 et 100

Spécifier l’adresse externe (ou DNS) de votre serveur Lifedomus (bien penser à rediriger le port 8080) et renseigner si vous souhaitez votre adresse e-mail (en cas d’échec du script)

   





On va vérifier que tout fonctionne correctement…

Ouvrez un projet DS et créer un « état », puis sélectionner votre équipement « écoute », vous devriez retrouver le nom des 2 variables crées.
Vous avez compris, à chaque exécution du script, ces variables vont être renseignées soit « aujourd’hui » et « demain ».

Testez en lançant le script manuellement : le nom que vous avez saisi dans l’agenda apparait donc :

   



Ca fonctionne ?  Impec !   :eek-1e6fb:


Maintenant, il ne reste plus qu’à automatiser l’exécution de ce script.
Cliquer sur l’horloge et ajouter un déclencheur :

   




Renseigner les différents champs. Perso, je le déclenche toutes les heures puis validez :

   





Voilà, le script tourne maintenant tout seul, toutes les heures il va aller scruter vos agendas et renseigner les titres des évènements du calendrier dans vos variables LD.

Si aucun évènement n’est trouvé, la valeur « Ras » est envoyée au serveur LD. Il est possible de remplacer ce mot par un autre en modifiant la ligne 60 du script.
 



----------------------------------------------------------------------------------------------------------------------------------------------------------------------
 


Voici par exemple comment je gère les différents planning de chauffage.
Je conditionne les horaires de déclenchement et consignes en fonction du nom de mes variables ( planning_1, planning_2, etc…)

   





Si vous vous demandez à quoi peut encore servir ce script, voici des exemples :
-         Gérer les congés
-         Les absences et présence
-         Récupérer les jours fériés
-         Obtenir les vacances scolaires
-         Anniversaires
-         Etc…
 

Google met à dispo toutes sortes d’agenda facilement importable, pleins d’autres sont dispos sur des sites tiers à importer.
Ce qui est impératif, c’est que le calendrier se trouve dans « mes agendas » et pas « autres agenda »


Voici un dernier exemple, je vais le mettre en place un calendrier pour afficher le « saint du jour » :
 
Je créer un agenda que je nomme « Saint »
 
Puis j’importe un calendrier « Ical »

   




Une fois importé :

   




Je créer un équipement « écoute », le nomme « Saint du jour » et créé une variable « Saint » :


   




Je modifie mon script afin d’ajouter un nouveau calendrier :

   




Je créé un "painter" sous DS et selectionne ma variable :

   





Et voilà, chaque jour les Saints s’afficheront automatiquement sur ma page d’accueil de mon projet sous DS :


   





Enjoy    :wink-1627:
Admin du Forum

Z-wave:  4 x RGBW - 8 x FGS211 - 2 x FGS221 - 1 x FGFS-101 - 17 x FGK101 - 4 x WallPlug - 1 x  FGSS-001 - 1 X FGBS.321 - 2 X FGD211 - 4 X FGSS-002 - 2 X FGMS-001
3 x SM103 - 1x HSM02 - 4 x AN157 - 4 x ST814 - 1 x ZG8101 , 2 x ZM1602 . 2 x Power Node 6
2 x Minimote - 1 X Smart Energy DSC06106 - 1 x Keyfob - 2 x FGPB.001 - 1x Octan remote

Divers : 1 x EcoDevices - 1 x IPX800 - 1 x Sirène Elkron - 3 x Foscam - 1 x Zmodo - 1 x Tablette Surface- 1 x Ipad2 - 1 x Qnap 453a- 1 x SMS Gateway - Sonos: 1xPlaybar , 1xSub, 2xPlay3 , 4xPlay1 , 2 x Thermostat NetAtmo + Station, Nuc, Karotz, Philips Hue , Roomba 620. Doorbird, Jeedom en esclave

Likes Received: 62 in 33 posts
Likes Given: 47
Répondre
#2
Encore un tuto aux petits oignons  Eek-1e6fb

Merci pour le partage  Cool-1614
http://www.homesweetdom.lu
Boutique en ligne avec identification des produits testés compatibles Lifedomus
www.homesweetshop.eu
Répondre
#3
Nom de bleu de nom de bleu ! Amen-1fb6
C'est vraiement du beau boulot !
par contre rediriger le port 8080 vers lifedomus ca craint vraiement ! Concu comme ca, si on a ton IP on peut lancer ou couper ton chauffage ou autre.
Je te suggererais plutot de faire ceci a l'envers, c'est a dire, au lieu "d'ecouter universellement" du specifie au serveur LD ou chercher l'info, par exemple a quel url. ou encore mieux utiliser une API google. mais je pense que LD est trop fermé pour cela.
C'est peut etre une déformation professionnelle mais laisser la porte ouverte comme ca, ca me donne des frissons, si en plus tu as les caméras connecté dessus Cartonrouge02-1d0e

Mais sinon bravo !
Répondre
#4
Oui je sais que c'est délicat d'ouvrir ce port. Google ne supporte pas le 8443 avec certificat...dommage.

Au départ, oui, je pensais interroger les APi Google mais c'est vraiment compliqué ( pour mon niveau de compétences )
En attendant une solution plus sécurisée, celle ci me va dans la mesure où je pilote des fonctions 'confort' et pas 'sécurité'
Admin du Forum

Z-wave:  4 x RGBW - 8 x FGS211 - 2 x FGS221 - 1 x FGFS-101 - 17 x FGK101 - 4 x WallPlug - 1 x  FGSS-001 - 1 X FGBS.321 - 2 X FGD211 - 4 X FGSS-002 - 2 X FGMS-001
3 x SM103 - 1x HSM02 - 4 x AN157 - 4 x ST814 - 1 x ZG8101 , 2 x ZM1602 . 2 x Power Node 6
2 x Minimote - 1 X Smart Energy DSC06106 - 1 x Keyfob - 2 x FGPB.001 - 1x Octan remote

Divers : 1 x EcoDevices - 1 x IPX800 - 1 x Sirène Elkron - 3 x Foscam - 1 x Zmodo - 1 x Tablette Surface- 1 x Ipad2 - 1 x Qnap 453a- 1 x SMS Gateway - Sonos: 1xPlaybar , 1xSub, 2xPlay3 , 4xPlay1 , 2 x Thermostat NetAtmo + Station, Nuc, Karotz, Philips Hue , Roomba 620. Doorbird, Jeedom en esclave

Répondre
#5
Et pis faut aussi connaître le nom des variables qui sont 'écoutées' ET leurs valeurs pour pouvoir agir.

On va dire que ca correspond à un couple Login/mdp. ;)
Admin du Forum

Z-wave:  4 x RGBW - 8 x FGS211 - 2 x FGS221 - 1 x FGFS-101 - 17 x FGK101 - 4 x WallPlug - 1 x  FGSS-001 - 1 X FGBS.321 - 2 X FGD211 - 4 X FGSS-002 - 2 X FGMS-001
3 x SM103 - 1x HSM02 - 4 x AN157 - 4 x ST814 - 1 x ZG8101 , 2 x ZM1602 . 2 x Power Node 6
2 x Minimote - 1 X Smart Energy DSC06106 - 1 x Keyfob - 2 x FGPB.001 - 1x Octan remote

Divers : 1 x EcoDevices - 1 x IPX800 - 1 x Sirène Elkron - 3 x Foscam - 1 x Zmodo - 1 x Tablette Surface- 1 x Ipad2 - 1 x Qnap 453a- 1 x SMS Gateway - Sonos: 1xPlaybar , 1xSub, 2xPlay3 , 4xPlay1 , 2 x Thermostat NetAtmo + Station, Nuc, Karotz, Philips Hue , Roomba 620. Doorbird, Jeedom en esclave

Répondre
#6
(03-10-2017, 11:54 PM)moicphil a écrit : ca correspond à un couple Login/mdp.  ;)

Stockés en clair chez google et transmis en clair jusqu'a ton serveur ;)
Non je comprend confort vs securité.

Par contre tu devrait editer ton post in initial et sensibiliser les gens a changer leur mot de pass admin LD par qlqchose de fort car avec ce meme port tu peux acceder a l'interface admin de LD et rares seront les gens a suprimmer l'utilisateur admin (je ne sais meme pas si c'est possible) donc déja il ne reste plus que le mot de passe a trouver.
Si en plus il ne l'on pas changer c'est la cata.
Répondre
#7
Hum ! effectivement tu as raison.

Je vais ajouter une ligne en début de post pour sensibiliser sur le risque d'ouvrir ce port vers l'extérieur.

... faut vraiment que je trouve un moyen pour travailler dans l'autre sens LD>Google...ca sera plus sécure tout de même.

En attendant je vais peut etre étudier la possibilité d’héberger ce script en local sur Nas par ex.
Admin du Forum

Z-wave:  4 x RGBW - 8 x FGS211 - 2 x FGS221 - 1 x FGFS-101 - 17 x FGK101 - 4 x WallPlug - 1 x  FGSS-001 - 1 X FGBS.321 - 2 X FGD211 - 4 X FGSS-002 - 2 X FGMS-001
3 x SM103 - 1x HSM02 - 4 x AN157 - 4 x ST814 - 1 x ZG8101 , 2 x ZM1602 . 2 x Power Node 6
2 x Minimote - 1 X Smart Energy DSC06106 - 1 x Keyfob - 2 x FGPB.001 - 1x Octan remote

Divers : 1 x EcoDevices - 1 x IPX800 - 1 x Sirène Elkron - 3 x Foscam - 1 x Zmodo - 1 x Tablette Surface- 1 x Ipad2 - 1 x Qnap 453a- 1 x SMS Gateway - Sonos: 1xPlaybar , 1xSub, 2xPlay3 , 4xPlay1 , 2 x Thermostat NetAtmo + Station, Nuc, Karotz, Philips Hue , Roomba 620. Doorbird, Jeedom en esclave

Répondre
#8
Un debut de solution  : un VPN entre chez toi et google apps : https://cloud.google.com/compute/docs/vpn/overview
mais je crois comprendre qu'il faut une IP fixe, donc faut etre chez free. Je connais pas d'autre provider a en fournir.
Répondre
#9
Merci beaucoup pour ce tuto, ça m'a donné des idées pour la gestion de mes thermostats !

Vu que je n'étais pas chaud du tout pour exposer le port 8080 du LD sur internet, j'ai procédé dans l'autre sens pour récupérer les infos du planning : LifeDomus fait appel aux API Google Calendar via une classe Java que je fais tourner sur un serveur web local (1 méthode d'authentification à exécuter 1 fois et 1 autre appelée de manière récurrente pour récupérer les événements).

Ça doit pouvoir se faire directement sur Lifedomus qui prend en charge OAuthV2 et Javascript pour les plus motivés (je dis ça par rapport à la tronche de l'éditeur Javascript sur la LD et aux déconnexions intempestives qui j'ai subi pour écrire 4 lignes de codes :p)
Répondre




Utilisateur(s) parcourant ce sujet : 1 visiteur(s)