Petit soucis avec l'agenda google

Discussion et échanges de scripts pour la box eedomus

Re: Petit soucis avec l'agenda google

Messagepar Alphonse Magova » 18 Nov 2015 18:24

Cà fonctionne super merci pour le tuto! ;)
Par contre j'ai dû mettre RAS en valeur brute pour déchetterie fermée et aucune poubelle à sortir.
EEDOMUS+
Alphonse Magova
 
Messages : 317
Inscription : 13 Déc 2014

Re: Petit soucis avec l'agenda google

Messagepar pvet » 19 Nov 2015 10:49

Petit tuto rapide pour ceux intéressés par ma méthode.
Je ne vais pas avoir le temps de faire des copies d'écran, j'espère que ces seules explications vous suffiront ;)

Nous avons besoin d'une Eedomus et d'un compte Google (nous allons utiliser les services Google Calendar, Google Script et donc Google Drive puisque je crois que c'est implicite dès lors qu'on utilise Google Script).

Dans mon cas, j'utilise Google Calendar pour synchroniser ma situation entre 2 Eedomus, notamment pour déclencher le chauffage ou les chauffe-eaux...

J'ai donc un agenda "congés" dans lequel j'indique "maison" ou "bureau" ou "ailleurs" en titre de jours entiers selon que je prévois d'être à la maison, au bureau ou ailleurs. Et pour être tout à fait précis, j'ai un autre titre concernant notre maison secondaire, disons "normandie" lorsque nous prévoyions de nous y rendre. Pour le titre "maison", je ne le remplis pas dans mon agenda, c'est l'état par défaut, je n'ai donc besoin d'indiquer dans Google Calendar que les autres états sur les jours concernés, et j'apprécie tout particulièrement la possibilité de récurrence d'un événement, par exemple tous les week-ends, une fonctionnalité que n'a pas (encore?) l'agenda intégré d'Eedomus.

J'ai donc différentes règles qui vont allumer/éteindre le chauffage en s'appuyant sur ces états : par exemple: "si aujourd'hui=maison et demain devient normandie, allumer le chauffe-eau sur l'eedomus de la maison secondaire en normandie", "si aujourd'hui=maison autoriser chauffage", etc.

Sur chacune de mes Eedomus, j'ai donc 2 "capteurs HTTP" (Configuration/Ajouter ou supprimer un périphérique/Ajouter un autre type de périphérique/HTTP-Capteurs)

Etat Aujourd'hui
Etat Demain

Pour le champ "Type de données", je peux les paramétrer en Liste de données ou Texte. Dans le cas Liste de données, il vous faudra indiquer dans la colonne "Valeurs brutes" de l'onglet "Valeurs" les différents titres que vous utiliserez dans votre agenda Google.

Pour le champ "URL de la requête", nous laissons vide pour l'instant puisqu'un URL très particulier sera fourni par Google Script une fois que nous aurons publié notre script...

Présupposé: vous avez déjà un calendrier Google spécifique à utiliser pour votre Eedomus, le mien s'appelle "congés", savoir ce nom est important ;) J'ai d'autres calendriers dans mon Google Calendar (privé, professionnel, anniversaires, etc.)

Passons maintenant à Google Script en passant par Google Drive...
https://drive.google.com/
Puis bouton NOUVEAU, déployez "Plus >" pour sélectionner "Google Apps Script"

Dans l'onglet Code.gs créé par défaut, supprimez le début de code déjà en place et remplacez le tout par le code suivant:

Code : Tout sélectionner
//***********************************************************************************************//
// Script Google pour mise à Jour Eedomus
// Adaptation du script réalisé par Eedomusbox basé sur http://www.maison-et-domotique.com/12622-script-google-google-agenda-box-domotique/
//***********************************************************************************************//
function doGet(request) {
  // Définition Variable
  var TodayDebut = new Date();
  var TodayFin = new Date();
  var DemainDebut = new Date();
  var DemainFin = new Date();

  var Default = "maison";
  var NomCalendrier = "congés";

  // 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
 
  var Cal = CalendarApp.getCalendarsByName(NomCalendrier)[0];
  var EventsA = Cal.getEvents(TodayDebut, TodayFin); //Journée d'aujourd'hui
  var EventsD = Cal.getEvents(DemainDebut, DemainFin); // Journée de demain
   
  var Aujourdhui = Default;
  if(EventsA.length > 0) {
    Aujourdhui = EventsA[0].getTitle();
  }
 
  var Demain = Default;
  if(EventsD.length > 0) {
    Demain = EventsD[0].getTitle();
  }

  var Response = '<?xml version="1.0" encoding="utf8" ?>';
  Response = Response + '<calendrier>';
  Response = Response + '<aujourdhui>' + Aujourdhui + '</aujourdhui>';
  Response = Response + '<demain>' + Demain + '</demain>';
  Response = Response + '</calendrier>';
 
  return ContentService.createTextOutput(Response)
  .setMimeType(ContentService.MimeType.XML);
}


Vous n'avez que 2 variables à personnaliser:
"var Default = " c'est le titre à utiliser pour la valeur par défaut, c'est à dire lorsqu'une journée n'a aucun titre. Dans mon cas, c'est "maison"... quand une journée n'a pas de titre, je suis sensé être à la maison.

la 2ème variable:
"var NomCalendrier = " vous indiquez le nom de votre calendrier Google spécifique à Eedomus, le mien comme déjà précisé d'appelle "congés", le vôtre est peut-être "déchetterie" ;)

Le script est très très simple : Il calcule la date du jour et celle de demain (assurez-vous que Google Script est bien réglé sur la même Time Zone que vous... Menu Fichier/Propriétés du projet et vérifiez que dans le premier onglet "Info", le Fuseau Horaire soit bien le même que celui de votre Eedomus (Paris la plupart du temps))

Une fois ces dates calculées, le script interroge votre calendrier Google et récupère tous les événements pour ce jour et pour demain. Rappelons que dans nos conventions pour notre usage particulier de ce calendrier, nous respectons bien de n'avoir qu'un seul titre pour une journée. :)

S'il n'y a pas d'événements pour le jour demandé, nous utilisons la valeur par Défaut, sinon le premier événement (et normalement unique) retourné.

On construit une réponse sous la forme d'une structure XML avec 2 balises : "aujourdhui" (sans guillement pour ne pas pertuber l'informatique trop susceptible avec ces guillemets...) et "demain", ces balises accueilleront nos 2 éléments retournés.
Pour terminer le script, la structure XML est renvoyé au demandeur.

Enregistrer votre script: Menu Fichier puis Enregistrer ou le petit bouton avec l'icone d'une disquette. Pour le nom du projet, peu importe, choisissez de l'explicite ;)

Et pour vérifier que tout va bien et pour provoquer une procédure d'autorisation de Script envers votre Calendar, lancez une exécution de votre script: soit menu Exécuter soit bouton de lecteur (le petit triangle noir qui pointe à droite).
Le moteur de Google Script va lire rapidement votre script et va s'apercevoir que vous utilisez des fonctions relatives à Google Calendar, il va donc falloir une autorisation à utiliser les calendriers, vous serez donc inviter à autoriser ce script avec le message "This app needs authorization to run".
Cliquez Continuer puis Autoriser.
Le script va finir de s'exécuter puis s'arrêter en silence, situation normale rassurez-vous puisque le script ne provoque aucun affichage, la réponse XML concerne ceux qui la demande, dans cette exécution vous n'avez rien demandé ;)

Pour rendre maintenant ce script accessible depuis l'extérieur (comprendre depuis notre Eedomus donc), il nous faut le publier: menu Publier puis "Déployez en tant qu'application Web"
Dans les champs, remplissez comme suit:
Version du projet: [Nouveau] "Première tentative"
Exécuter l'application en tant que : [Moi]
Qui a accès à l'application : [Tout le monde, même les utilisateurs anonymes]

Permettre un accès aux anonymes permet de ne pas avoir de procédure d'authentification pour accéder au script, une condition assez essentielle puisque notre Eedomus ne connait pas le protocole OAuth... Au niveau sécurité, l'accès anonyme ne concerne que l'exécution du script, en aucun cas un autre service Google et je considère que l'URL fournie par Google Script est suffisamment anonyme pour être difficile de la deviner et que le résultat du script est assez insignifiant quand on ne sait pas qui il concerne. De plus, le script n'utilise aucune donnée éventuellement fournie par le demandeur, aussi anonyme soit-il, source souvent de contournement des règles en place ou piratage. Un petit discours pour être le plus clair possible et que tout le monde comprenne les enjeux ;)

Une fois le bouton "Déployer" cliqué, vous obtenez la fameuse URL complexe pour permettre d'exécuter votre script depuis le Grand Internet. C'est cette URL qu'il va falloir renseigner dans vos 2 capteurs HTTP définis sur l'Eedomus.

Pour le capteur HTTP "Etat Aujourd'hui", dans "URL de la requête", vous copiez votre URL, par exemple (bidon):
https://script.google.com/macros/s/AKfy ... y6VMS/exec
et dans le champ "Chemin XPATH", vous renseignez "//aujourdhui" pour indiquer le neud XML contenant la valeur du jour.

Pour le capteur HTTP "Etat Demain", copiez de nouveau la même URL, et dans le champ "Chemin XPATH", vous renseignez "//demain" (oui oui ce sont bien 2 slashs ;) )

Pour les 2 capteurs, pour le champ "Fréquence de la requête" vous pouvez indiquer "60" pour une requête toutes les heures, ça ne coûte rien :) si vous mettez à jour votre agenda côté Google, l'info sera répercutée dans l'heure vers votre Eedomus.

J'espère avoir été le plus clair possible. A vous de comprendre chaque étape pour anticiper les problèmes. Exécutez bien une première fois votre script avant de placer l'URL dans l'Eedomus afin de forcer la procédure d'autorisation du script envers Google Calendar, si cette autorisation était demandée pour la première fois du côté de l'Eedomus, vous ne la verriez jamais apparaître mais elle entraverait le bon déroulement du process.

Pour "débugger" un peu votre script si vous vous aventurez à tenter de le personnaliser davantage ou si mettre dans le cambouis vous titille, vous pouvez utiliser une fonction assez pratique :
Logger.log ("coucou");
... qui permet d'écrire dans le journal d'exécution du script. Je ne vais pas vous faire l'affront de vous préciser de remplacer "coucou" par la valeur souhaitée, ah ben si je l'ai fait :)
Pour afficher ce journal, menu Affichage puis Journaux, après chaque exécution de votre script.

Pour ceux qui utilise Google Calendar pour leurs poubelles et déchetterie, je n'ai pas bien regardé vos scénarios mais juste constaté que vous utilisiez 2 calendriers. Plutôt que d'adapter le code que j'ai indiqué pour supporter 2 calendriers, vous pouvez simplement faire... 2 scripts :) un pour chaque calendrier, et régler vos capteurs avec les bonnes URLs respectives. Allez, courage ;)

@eedomusbox: Que veux-tu dire par surcharger la box de requêtes ? tu peux paramétrer une requête par 24h (toutes les 1440 minutes au lieu de 60 par exemple) mais ça ne coûte pas bien cher, ni en temps machine, ni en réseau, ni en temps ;)
pvet
 
Messages : 47
Inscription : 26 Oct 2012

Re: Petit soucis avec l'agenda google

Messagepar valrom » 27 Nov 2015 12:55

Bravo ça marche super bien !!
valrom
 
Messages : 112
Inscription : 14 Juin 2013

Re: Petit soucis avec l'agenda google

Messagepar tibhix » 24 Déc 2015 16:09

Bonjour,
Dans la suite de ce qui a été dit précédemment, j'ai aussi mis le Google script à ma sauce.
Mon besoin: Ne gérer qu'un seul calendrier contenant plusieurs types de données (Horaires, présence, RDV, poubelles à sortir).
J'ai donc également créé autant de types de périphériques que nécessaire (horaire, présence, RDV) et chacun décliné en version "jour" et "demain". J'ai donc 6 périphériques (voire un peu plus...):
Capture d'écran 2015-12-24 15.57.06.png
Periphériques eedomus
Capture d'écran 2015-12-24 15.57.06.png (97.08 Kio) Consulté 25665 fois

Il suffit ensuite de copier/coller le code dans votre drive Gmail en tant que nouveau script et l'ajuster pour coller avec votre configuration:
Code : Tout sélectionner
//***********************************************************************************************//
// 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
// revu par Tibhix pour ajustements:
// Un seul calendrier Gmail est suffisant contenant tout ce que l'on veut gérer.
// dans le cas présenté:
// -RDV = Rendez-vous de la journée + lendemain (conditionne l'allumage des lumières extérieures)
// -HOR = Horaire de travail de la journée + lendemain (conditionne le chauffage dans la salle de bain)
// -PRS = Présence de la journée + lendemain (conditionne les températures de consignes et chauffe-eau)
//***********************************************************************************************//
//***********************************************************************************************//
// Déclaration des variables globales (A PERSONNALISER)
//***********************************************************************************************//
// Nom du calendrier Gmail
var IDCalendrier ="Mon_Calendar_Gmail";
var email_de_retour ="mon_adresse@gmail.com";

// ID périphériques horaires
var pHorJour ="111111";
var pHorDemain ="222222";

// ID périphériques RDV
var pRdvJour="333333";
var pRdvDemain="444444";

// ID périphériques présences
var pPrsJour="555555";
var pPrsDemain="666666";
var pPrsApresDemain ="777777";

// ID + mdp API eedomus
var id_api_user="aaaaaa";
var pass_api_user="bbbbbbbbbbbbbb";

//***********************************************************************************************//
// Fin de Déclaration des variables globales
//***********************************************************************************************//
// Initialisation des variables de retour
//***********************************************************************************************//
// NE PAS MODIFIER
//***********************************************************************************************//
var Horaire="";
var Presence="";


function Calendrier()
{
  // Définition Variable
  var JourDebut = new Date();
  var JourFin = new Date();
  var DemainDebut = new Date();
  var DemainFin = new Date();
  var ApresDemainDebut = new Date();
  var ApresDemainFin = new Date();
  var cptRDV=0;
 
  // Definition des dates
  JourDebut.setHours(0,0,0,0);
  JourFin.setTime( JourDebut.getTime() + ((60*60*24) * 1000) ); //jour courant
 
  DemainDebut = JourFin;
  DemainFin.setTime( DemainDebut.getTime() + ((60*60*24) * 1000) ); //1 jour de plus
 
  ApresDemainDebut = DemainFin;
  ApresDemainFin.setTime( ApresDemainDebut.getTime() + ((60*60*24) * 1000) ); //2 jour de plus
 
  // Recherche du différent calendrier pour mise à jour des Périphériques
  Read_calendar(IDCalendrier);

  //***********************************************************************************************//
  //Fonction Read_calendar
  // Var 1 = Nom du calendrier
  //***********************************************************************************************//
  function Read_calendar(Fv_Cal)
  {   
    var Cal = CalendarApp.getCalendarsByName(Fv_Cal)[0];
    var EvenementsJour = Cal.getEvents(JourDebut, JourFin); //Journée d'aujourd'hui
    var EvenementsDemain = Cal.getEvents(DemainDebut, DemainFin); // Journée de demain
    var EvenementsApresDemain = Cal.getEvents(ApresDemainDebut, ApresDemainFin); // Journée de demain
   
    // Assignation des evenements aux periphériques
    Set_Eedomus_Events( EvenementsJour,"Jour");
    Set_Eedomus_Events( EvenementsDemain,"Demain");
    Set_Eedomus_Events( EvenementsApresDemain,"ApresDemain");
  }

  //***********************************************************************************************//
  // Fonction Set_Eedomus_Events
  //***********************************************************************************************//
  function Set_Eedomus_Events(FV_Events,LeJour)
  {
    Logger.log("Jour="+LeJour);
    var EventTexte = '';
    var ListeEventsRDV = '';
   
    switch (LeJour)
    {
      case "Jour":
        IDPeriphRDV = pRdvJour;
        IDPeriphHOR = pHorJour;
        IDPeriphPRS = pPrsJour;
        break;
     
      case "Demain":
        IDPeriphRDV=pRdvDemain;
        IDPeriphHOR=pHorDemain;
        IDPeriphPRS = pPrsDemain;
        break;
     
      case "ApresDemain":
        //IDPeriphRDV=pRdvApresDemain;
        //IDPeriphHOR=pHorApresDemain;
        IDPeriphPRS = pPrsApresDemain;
        break;    
      
     case defaut:
      //Nothing
      break;
    }
   
    // S'il n'y a aucun événement c'est que c'est égal à RAS
    if ( FV_Events.length == 0 )
    {
     
      Error = Error || AppelAPI(IDPeriphRDV , 'aucun' ); // Mise à jour RDV
      Error = Error || AppelAPI(IDPeriphHOR , 'aucun' ); // Mise à jour HOR
      Error = Error || AppelAPI(IDPeriphPRS , 'maison' ); // Mise à jour PRS
    }
    else
    {
      for (i in FV_Events)   
      {   
        var Titre = FV_Events[i].getTitle(); // On récupère le titre de l’événement 
        var Type = Titre.substring(0,3); // Type de l'evenement
        var ResteTitre = Titre.substring(4);
        // Si le type n'est pas du genre "XXX:", on assume que c'est un RDV
        if (Titre.substring(3,4)!=":")
        {
          Type="RDV";
          ResteTitre=Titre;
        }
       
               
        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

        var Minutes = FV_Events[i].getEndTime().getMinutes();
        if (Minutes<10 ) {  Minutes = '0'+Minutes;}
        var StartTime = FV_Events[i].getStartTime().getHours()+'h'+Minutes;
       
        Minutes = FV_Events[i].getEndTime().getMinutes();
        if (Minutes<10 ) {  Minutes = '0'+Minutes;}
        var EndTime = FV_Events[i].getEndTime().getHours()+'h'+Minutes;
 
        // Definition de l'evenement
        EventTexte = EventTexte+'_'+Type+StartTime +'-'+ EndTime +':'+ Titre ;
       
       
        switch(Type)
        {
          case "HOR":           
            Horaire=ResteTitre;         
            break;
         
          case "RDV":
           
            if (cptRDV==0) {ListeEventsRDV=StartTime+':'+ResteTitre;}
            else {ListeEventsRDV=ListeEventsRDV+'<br>'+StartTime+':'+ResteTitre;}
            cptRDV = cptRDV+1;
            break;
           
          case "PRS":
             Presence=ResteTitre;
            break;
           
          case defaut:
            //Nothing
            break;
           
        }
       
      } 
     
      // Ecriture des données
      // HOR
      if ( Horaire=="") { Horaire="aucun";}  // Mise à jour par défaut
      // Renseignement du périphérique
      Error = Error || AppelAPI( IDPeriphHOR, Horaire);
     
      // PRS
      if ( Presence=="") { Horaire="maison";} // Mise à jour par défaut
      // Renseignement du périphérique
      Error = Error || AppelAPI( IDPeriphPRS, Presence);
     
      // RDV
      if ( ListeEventsRDV=="") { ListeEventsRDV="aucun";} // Mise à jour par défaut
      // Renseignement du périphérique
      Error = Error || AppelAPI( IDPeriphRDV, ListeEventsRDV);

    }
  }

  //***********************************************************************************************//
  // Fonction
  //***********************************************************************************************//
  function AppelAPI(PeriphID, PeriphValue)
  {
    Logger.log ("appelAPI:"+PeriphID+"/"+PeriphValue);
   
    var Reponse;
    var ReponseText;
    PeriphValue = encodeURIComponent(PeriphValue, "UTF-8");
    var urlCalled="http://api.eedomus.com/set?action=periph.value&periph_id=" + PeriphID + "&value=" + PeriphValue + "&api_user="+id_api_user+"&api_secret="+pass_api_user;
       
    Reponse = UrlFetchApp.fetch(urlCalled);
    ReponseText = Reponse.getContentText();
   
    Logger.log (ReponseText);
   
    if (ReponseText.indexOf("error_code") >= 0)
    {
      var body = Logger.getLog();
      MailApp.sendEmail(email_de_retour , " Erreur du script domotique ", " Une erreur [" + PeriphValue + "] "+ body + "URL:"+urlCalled); 
    }
   
    return(ReponseText.indexOf("error_code") >= 0);
   
  }
}


Dans votre calendrier Google, vous pouvez à présent définir des RDV, des HORaires et des PRSence.
Chaque événement est précédé d'un qualificatif (RDV+HOR+PRS) permettant l'assignation au bon périphérique eedomus:
Capture d'écran 2015-12-24 16.02.55.png
calendrier
Capture d'écran 2015-12-24 16.02.55.png (20.17 Kio) Consulté 25665 fois


Mettez des déclencheurs réguliers de votre script (je n'y reviens pas, c'est décrit au-dessus) et hop, ça marche !
tibhix
 
Messages : 35
Inscription : 18 Juin 2013

Re: Petit soucis avec l'agenda google

Messagepar bibizounours » 02 Jan 2016 16:22

Bonjour,

tout d'abord merci pour cette mise a jours, en effet, mes capteurs tombaient en erreur depuis un certain temps.

Maintenant, j'ai tout de meme un petit soucis avec la methode de pvet, lorsque j’exécute le script depuis le drive, j'ai bien les bonnes valeurs qui apparaissent a l'ecran.

hors, mes capteurs tombent en erreur et n'arrivent pas a parser le XML renvoyé...

Je n'ai que :

<!DOCTYPE html><html><head><link rel="shortcut icon" href="//ssl.gstatic.com/docs/script/images/favicon.ico"><title>Erreur</title><style type=%2 [...]

qui s'affiche.

Auriez vous une idée du pourquoi du comment ?

Merci de votre aide !
bibizounours
 
Messages : 17
Inscription : 06 Nov 2015

Re: Petit soucis avec l'agenda google

Messagepar bibizounours » 02 Jan 2016 17:21

Bon et bien j'ai trouver tout seul, il fallait enregistrer une nouvelle version du script dans drive...

cela fonctionne maintenant et plutôt bien, merci encore !
bibizounours
 
Messages : 17
Inscription : 06 Nov 2015

Re: Petit soucis avec l'agenda google

Messagepar tibhix » 02 Jan 2016 23:09

@bibizounours : tu utilises mon code ou pas ? Car j'ai corrigé quelques erreurs...
tibhix
 
Messages : 35
Inscription : 18 Juin 2013

Re: Petit soucis avec l'agenda google

Messagepar wirless » 11 Jan 2016 21:20

Bonsoir
bibizounours a écrit:Bonjour,

tout d'abord merci pour cette mise a jours, en effet, mes capteurs tombaient en erreur depuis un certain temps.

Maintenant, j'ai tout de meme un petit soucis avec la methode de pvet, lorsque j’exécute le script depuis le drive, j'ai bien les bonnes valeurs qui apparaissent a l'ecran.

hors, mes capteurs tombent en erreur et n'arrivent pas a parser le XML renvoyé...

Je n'ai que :

<!DOCTYPE html><html><head><link rel="shortcut icon" href="//ssl.gstatic.com/docs/script/images/favicon.ico"><title>Erreur</title><style type=%2 [...]

qui s'affiche.

Auriez vous une idée du pourquoi du comment ?

Merci de votre aide !


Merci pour ce script. J'ai le même message d'erreur.Auriez vous un idée.

Merci par avance.
wirless
 
Messages : 39
Inscription : 05 Jan 2014
Localisation : Marne

Re: Petit soucis avec l'agenda google

Messagepar galaksy2001 » 12 Fév 2016 18:40

@ tibhix : merci pour ce script :D

Quels sont les chemins xpath pour chacun des capteurs ?

P.S.: merci aussi à pvet !
galaksy2001
 
Messages : 727
Inscription : 06 Jan 2014

Re: Petit soucis avec l'agenda google

Messagepar tibhix » 13 Fév 2016 15:00

Il n'y a pas de chemin XPath puisque c'est le script Google qui assigne les valeurs directement dans eedomus
tibhix
 
Messages : 35
Inscription : 18 Juin 2013

Re: Petit soucis avec l'agenda google

Messagepar galaksy2001 » 13 Fév 2016 18:47

Pourtant le champ xpath est obligatoire quand tu souhaites créer ton périphérique ...
Dans mon cas, impossible de le créer si je laisse ce champ vide.
edit : ou bien je place juste une barre oblique pour qu'il cherche sur tout le doc xml, c'est ça ?
galaksy2001
 
Messages : 727
Inscription : 06 Jan 2014

Re: Petit soucis avec l'agenda google

Messagepar tibhix » 13 Fév 2016 20:58

Ce n'est pas un périphérique de type capteur HTTP mais un capteur de type "Etat"....
tibhix
 
Messages : 35
Inscription : 18 Juin 2013

Re: Petit soucis avec l'agenda google

Messagepar treker » 05 Mai 2016 22:11

Hello a tous,

le script de domo blog fonctionne parfaitement pour la gestion de mes ordures par contre j'aimerais bien pouvoir obtenir dans la box tous les rdv de mon agenda google. Cela permettrait de lire les rdv via la synthese vocale.
Or quand je met valeur texte il ne me prend QUE le 1er evenement et ne recupere pas les autres situes apres?
Comment puis je faire pour obtenir dans mon etat tous les evenements du caldendrier?
treker
 
Messages : 69
Inscription : 19 Nov 2014

Re: Petit soucis avec l'agenda google

Messagepar galaksy2001 » 17 Déc 2016 23:20

bibizounours a écrit:Bon et bien j'ai trouver tout seul, il fallait enregistrer une nouvelle version du script dans drive...cela fonctionne maintenant et plutôt bien, merci encore !


On la trouve où cette nouvelle version ?

Edit : tout fonctionne sauf RDV demain. J'ai bien vérifié l'ID du périphérique, liste des valeurs "texte". Une idée ?
galaksy2001
 
Messages : 727
Inscription : 06 Jan 2014

Re: Petit soucis avec l'agenda google

Messagepar gabvoir » 02 Juil 2017 21:25

Bonjour,
Le script domo-blog ne semble plus d’actualité.
Les agendas Google ne semblent plus récupérable sous sa forme "feed".
Quelqu'un a t'il trouver une solution pour récupérer son agenda Google dans la box ?
Merci
gabvoir
 
Messages : 178
Inscription : 24 Juin 2015

Re: Petit soucis avec l'agenda google

Messagepar eedomusbox » 03 Juil 2017 07:01

Ça fonctionne toujours chez moi
eedomusbox
 
Messages : 887
Inscription : 12 Sep 2014
Localisation : 69

Re: Petit soucis avec l'agenda google

Messagepar gabvoir » 03 Juil 2017 11:55

Heu ben c'est que je ne dois pas récupérer le bon lien alors :?:
Il n'est pas sous la même forme que celui de la capture.
Pourrais tu me donner le structure du lien que tu te sers ?
gabvoir
 
Messages : 178
Inscription : 24 Juin 2015

Re: Petit soucis avec l'agenda google

Messagepar eedomusbox » 03 Juil 2017 17:39

Je ne suis pas qu"on parle de la même chose.
j'utilise le scripts suivant
http://forum.eedomus.com/viewtopic.php?f=50&t=3039&p=51644#p32037
eedomusbox
 
Messages : 887
Inscription : 12 Sep 2014
Localisation : 69

Re: Petit soucis avec l'agenda google

Messagepar gabvoir » 04 Juil 2017 05:52

Ha oui effectivement.
Moi je parlais de la méthode suivante :
https://www.domo-blog.fr/gestion-ordures-domotique/


Je vais donc menpresser de tester la méthode de pvet.

Merci !

Edit : Tout est fonctionnel ! Au top ! Merci pvet !
gabvoir
 
Messages : 178
Inscription : 24 Juin 2015

Re: Petit soucis avec l'agenda google

Messagepar Christophe » 01 Déc 2020 21:24

Bonjour,
je me permet de relancer ce sujet puisque je pédale un peu dans la semoule alors que le tuto utilisé est pourtant bien fait ;)
J'ai également besoin de remonter dans Eedomus la gestion des horaires de Déchétterie et j'ai donc suivi ce tuto (https://www.domo-blog.fr/gestion-ordures-tri-domotique-v2/qui correspond exactement à ce que je cherche à faire, je ne doit pas être loin mais je n'y suis pas :?
Le problème doit se trouver dans le script ou j'ai du zapper quelque chose, ou alors il n'est pas au bon emplacement (actuellement dans mon Google Drive) :?: .

En rouge les valeurs que j'ai changées dans le script:

On a donc le nom du calendrier

Capture d’écran 2020-12-01 à 16.41.17.png
Capture d’écran 2020-12-01 à 16.41.17.png (25.65 Kio) Consulté 10425 fois


les codes api des états aujourd'hui et demain

api.png
api.png (2.21 Kio) Consulté 10425 fois


Mon Gmail google

et mes codes User et Secret Eedomus

Capture d’écran 2020-12-01 à 16.50.16.png
Capture d’écran 2020-12-01 à 16.50.16.png (115.01 Kio) Consulté 10425 fois



Donc voici le script:

//***********************************************************************************************//
// Script Google pour mise à Jour Eedomus
// Script réalisé par Eedomusbox basé sur http://www.maison-et-domotique.com/1262 ... 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("Decheterie","xxxx940","xxxx941" );

//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=xxxxxx&api_secret=xxxxxxxxxxxxxxxx" );

ReponseText = Reponse.getContentText();

Logger.log (ReponseText);

if (ReponseText.indexOf("error_code") >= 0)
{
var body = Logger.getLog();
MailApp.sendEmail("monmail@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);

}
}

Mes controles d'états:
Capture d’écran 2020-12-01 à 16.37.10.png
Capture d’écran 2020-12-01 à 16.37.10.png (60.78 Kio) Consulté 10425 fois

Capture d’écran 2020-12-01 à 16.36.15.png
Capture d’écran 2020-12-01 à 16.36.15.png (85.05 Kio) Consulté 10425 fois

Capture d’écran 2020-12-01 à 16.34.24.png
Capture d’écran 2020-12-01 à 16.34.24.png (206.76 Kio) Consulté 10425 fois


Quand j'exécute le script, j'ai cette erreur:
Capture d’écran 2020-12-01 à 20.58.17.png
Capture d’écran 2020-12-01 à 20.58.17.png (25.48 Kio) Consulté 10425 fois

La ligne 41 étant celle en couleur bleue dans le script un peu plus haut.

D'autre part il reste à priori un lien vers l'agenda à insérer, il y a bien des liens disponibles dans les paramètres du calendrier mais lequel est ce et ou dois-je l'insérer ?? :?:

Capture d’écran 2020-12-01 à 21.06.50.png
Capture d’écran 2020-12-01 à 21.06.50.png (162.91 Kio) Consulté 10425 fois


Alors si le votre fonctionne, ce serait sympa de me filer un coup de main :)

Merci d'avance ;)
Eedomus+, Netatmo: Camera Thermostat pluviomètre anémomètre Station météo , Synology Ds218, Raspberry Pi 3, Alarme Myfox HCPRO, Ensemble Dio modules détecteurs portes, Antenne GP433
Christophe
 
Messages : 140
Inscription : 28 Sep 2019
Localisation : Hauts de France

PrécédentSuivant

Retour vers Scripts & Périphériques du store

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 10 invité(s)

cron