Petit soucis avec l'agenda google

Discussion et échanges de scripts pour la box eedomus

Re: Petit soucis avec l'agenda google

Messagepar eedomusbox » 02 Déc 2020 13:12

Salut,
c'est ton nom d'agenda qui n'est pas bon.
Quand je mets un mauvais nom chez moi, j'ai la même erreur.
Pièces jointes
GeqiMbDpxH.png
GeqiMbDpxH.png (36.78 Kio) Consulté 6390 fois
eedomusbox
 
Messages : 887
Inscription : 12 Sep 2014
Localisation : 69

Re: Petit soucis avec l'agenda google

Messagepar Christophe » 02 Déc 2020 14:21

Bonjour eedomus Box,
Merci de t’être arrêté sur mon poste mais,à priori, il ne s’agit pas du nom de calendrier comme on le voit en rouge dans le script plus haut et sur la capture d’écran encore plus haut dans Google agenda c’est la même « syntaxe »
Il semble que tu utilises cette fonctionnalité, pourrais-tu m’eclairer concernant le lien qui lie eedomus et l’agenda car je n’ai pas capté ce point,
Merci encore :(
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

Re: Petit soucis avec l'agenda google

Messagepar Christophe » 02 Déc 2020 16:04

Rebonjour,
A priori tu utilises le script de Tibhix dont l’adaptation de celui de Pvet (merci à eux)est très bien expliquée aussi avec le calendrier unique pouvant renvoyer à plusieurs domaine avec des mots code, c’est bien cela ?
Une question me titille alors car Tibhix parle de format XML mais j’ai cru comprendre que Google agenda l’avait arrêté depuis non?
Pour terminer le script, la structure XML est renvoyé au demandeur.


Et concernant les capteurs d’état, dans le tuto que j’ai suvi on indique qu’il faut des capteurs d’état et non http, c’est chaud là :oops:
3193D9E1-343C-475E-8F0C-E32BA197CDE2.jpeg
3193D9E1-343C-475E-8F0C-E32BA197CDE2.jpeg (149.78 Kio) Consulté 6383 fois


Par conséquent le service s’est arrêté le 18 novembre 2015. Depuis cette date, il n’est plus possible de récupérer les informations des calendriers Google via un flux XML.


Désolé pour mon niveau ras des paquerette mais pour le moment je ne suis pas dedans :roll:
Merci de votre aide ;)
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

Re: Petit soucis avec l'agenda google

Messagepar tibhix » 03 Déc 2020 08:02

Bonjour,

Effectivement, il y a 2 possibilités pour affecter un état:
- Soit un capteur HTTP basique combiné avec une affectation XPATH (voir doc eedomus en cherchant XPATH).
- Soit une affectation de valeur directement via l'URL du genre :
Code : Tout sélectionner
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);

Dans ce cas présent, j'utilise toujours l'appel à URL directement dans le Google Script et ça fonctionne correctement depuis 3 ans.
tibhix
 
Messages : 35
Inscription : 18 Juin 2013

Re: Petit soucis avec l'agenda google

Messagepar Christophe » 03 Déc 2020 17:15

Bonjour Tibhix,
Merci pour ce retour ;)
je suis reparti avec un copier collé de ton code dans lequel j'ai renseigné les variables comme ceci

var IDCalendrier ="Decheterie";
et
var email_de_retour ="monemail@gmail.com";

puis
var id_api_user="xxxxx";
var pass_api_user="yyyyyyyyyyyyyyy";
(avec mes codes bien sur)

Concernant le lien:
Code : Tout sélectionner
  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;

Que faut-il changer stp, je ne comprend pas bien la structure pour le moment.
les codes Api des périphériques doivent-il être déclarés comme variable dans le code ?

désolé de, peut-être, ne pas être très clair :roll:

Merci ;)
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

Re: Petit soucis avec l'agenda google

Messagepar Christophe » 03 Déc 2020 22:37

Bonjour Tibhix, encore moi,

j'essaye de comprendre le script....
pourrais-tu me faire une capture des valeurs de ton périphérique "RV demain" stp?

Pour les id périphérique dans le script c'est bien les noms qu'il faut remplacer par les chiffres ?
Comme ça...
var pRdvJour="RDV Aujourd'hui";
var pRdvDemain="RDV Demain";

Pas de code Api périphériques à renseigner ?

eedomusbox avait finalement raison pour mon erreur de script, cela provenait bien du nom de calendrier qui, coté calendrier, comportait un espace à la fin, vicieux (merci à lui) :roll:

Espérant que quelque chose remontra incessamment, merci encore :oops:
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

Re: Petit soucis avec l'agenda google

Messagepar tibhix » 04 Déc 2020 19:18

En fait,il faut que tu mettes les codes API dans le script
// ID périphériques RDV
var pRdvJour="28xxxx";
var pRdvDemain="28yyyy";

// ID périphériques présences
var pPrsJour="30zzzz";
var pPrsDemain="30aaaa";

Tu trouves les codes dans ton périph sur eedomus:
2020-12-04_19-15-06.jpg
PeriphDemain
2020-12-04_19-15-06.jpg (83.78 Kio) Consulté 6353 fois


C'est plus clair ?
tibhix
 
Messages : 35
Inscription : 18 Juin 2013

Re: Petit soucis avec l'agenda google

Messagepar Christophe » 05 Déc 2020 08:56

Bonjour Tibhix,
là maintenant je n'ai plus le doute de ce côté-là, j'avais déjà essayé avec les codes Api mais comme en parallèle j'avais le souci de nom de calendrier, l'ensemble ne fonctionnait pas.
j'ai neutralisé les autres variables par un // pour essai uniquement sur le RV jour et RV demain
donc dans la déclaration des données, dans Fonction Set_Eedomus_Events et Ecriture des données.
J'ai mes 2 contrôleurs d'état:

Capture d’écran 2020-12-05 à 08.32.57.png
Capture d’écran 2020-12-05 à 08.32.57.png (57.91 Kio) Consulté 6342 fois


J'ai programmé un RV:garage dans l'agenda concerné pour le jour et demain mais quand j' exécute le script je n'ai toujours rien qui remonte dans Eedomus :roll:

De plus, là mon compte Gmail a été désactivé, sans doute à cause des envois répétés des erreurs de script dans ma boite mail considéré comme des spams dont voici un exemple:
Une erreur [%3Cbr%3E8h45%3Accc] Fri Dec 04 22:05:15 CET 2020 INFO: Jour=Jour
Fri Dec 04 22:05:15 CET 2020 INFO: appelAPI:216xxxx/22h30:garage
Fri Dec 04 22:05:15 CET 2020 INFO: {
"success": "0",
"body":
{
"error_code": "23",
"error_msg": "HTTP protocol not allowed on your account."
}
}
Fri Dec 04 22:05:16 CET 2020 INFO: Jour=Demain
Fri Dec 04 22:05:16 CET 2020 INFO: appelAPI:216xxxx/<br>8h45:garage
Fri Dec 04 22:05:16 CET 2020 INFO: {
"success": "0",
"body":
{
"error_code": "23",
"error_msg": "HTTP protocol not allowed on your account."
}
}


Qu'a tu mis dans l'onglet "valeur" des périphériques état stp ?
Explique tu ce dysfonctionnement ?

Encore merci :wave:
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

Re: Petit soucis avec l'agenda google

Messagepar tibhix » 06 Déc 2020 16:25

Je pense que le pb n'est pas dans ton script mais sur les paramètres de ton compte Gmail.
En recopiant le chemin complet "http://api.eedomus.com/set?action=periph.value&periph_id=" + PeriphID + "&value=" + PeriphValue + "&api_user="+id_api_user+"&api_secret="+pass_api_user", est-ce que la valeur se met à jour sur eedomus ?

Si l'appel direct fonctionne, c'est bien que c'est ton script ou tom compte Gmail qui n'autorise pas le fonctionnalité.
tibhix
 
Messages : 35
Inscription : 18 Juin 2013

Re: Petit soucis avec l'agenda google

Messagepar Christophe » 06 Déc 2020 18:59

Bonsoir Tibhix et merci pour ta ténacité :oops:
Désolé de ne pas tout saisir mais concernant le lien que tu indiques, il se trouve bien dans le script mais les valeurs de periphid, apiuser et apisecret font références aux variables correspondantes en début de script n’est ce pas ?
Ce que tu me demande c’est bien de mettre ce lien dans le navigateur?
De ce fait il faut que je change les noms de variables par les valeurs elles mêmes non? :roll:

Pourquoi aussi mon compte gmail n’autoriserait il pas la fonctionnalité alors que pour d’autres c’est ok?

Il faut dire que j’ai reçu une quinzaine de mails d’affillé suite à l’erreur de script :(

Merci de ton retour :wave:
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

Re: Petit soucis avec l'agenda google

Messagepar Christophe » 09 Déc 2020 14:24

Bonjour,

Mon compte gmail a été réactivé :)
Vu mon niveau, je suis reparti sur le script de base de Eedomusbox pas à pas et posément ici
https://www.domo-blog.fr/gestion-ordures-tri-domotique-v2/
Puis en lisant toutes les lignes, y compris les retours d'utilisateurs, j' ai été interpellé par cette ligne:
Il semble que ton compte ne permette pas de faire des requetes http. As tu bien autorisé les actions du script à la premiere execution?

J'ai donc fait ceci dans mon compte Eedomus:
Capture d’écran 2020-12-09 à 12.34.05.png
Capture d’écran 2020-12-09 à 12.34.05.png (14.45 Kio) Consulté 6304 fois


Et là ça marche :D , j'imagine que cette précision sera utile aux non aguerris comme moi ;)

Toutefois, la modification apportée par Tibhix est intéressante puisque "mono agenda" ceci dit je ne parviens toujours pas à le faire fonctionner et une question demeure toujours,
Comment les infos de RV aujourd'hui et demain s'affichent-elles dans les retours d'état puisqu'il ne s'agit pas de données préenregistrées dans l'onglet "valeurs" mais bien de ce qui a été édité dans l'agenda?

Capture d’écran 2020-12-09 à 14.11.07.png
Capture d’écran 2020-12-09 à 14.11.07.png (28.46 Kio) Consulté 6304 fois


Capture d’écran 2020-12-09 à 14.12.19.png
Capture d’écran 2020-12-09 à 14.12.19.png (104.47 Kio) Consulté 6304 fois


Qu'avez vous dans cet onglet "valeurs" des RV svp ?

Merci :wave:
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

Re: Petit soucis avec l'agenda google

Messagepar tibhix » 19 Déc 2020 10:42

Bonjour,
Dans l'affichage, il faut que ton type de données soit "Texte" et non "Liste de Valeurs".
Si tu mets liste de Valeurs, ça veut dire que tu dois déclarer toutes les valeurs (sensible à la casse) donc c'est trop lourd à paramétrer (...et inutile).

Mais vu mon délai de réponse, tu l'as sans doute deviné !
tibhix
 
Messages : 35
Inscription : 18 Juin 2013

Re: Petit soucis avec l'agenda google

Messagepar Christophe » 04 Jan 2021 09:04

Bonjour à tous et bonne année ;)
Bonjour Tibhix,
Eh bien non, je n'avais pas deviné parce que je ne savais pas interpréter le défaut, merci pour ton aide :)
Aprés pas mal d'essais, tout fonctionne à présent, ou presque :D
Il reste quand même un bug que je n'arrive pas à élucider:
PRS => Ok
HOR => Ok
RDV => problème sur la remonté dans le capteur demain, en fait quand je programme un RDV pour demain et que j'exécute le script, le capteur me renvoi aucun (il ne voit pas le RDV), si je déplace ce RDV à après demain, il me le voit sur demain :roll:
j'ai vérifié les code Api dans le script et tout semble pourtant ok, voici le script actuellement actif(sans les codes bien sur)
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 ="AgendaEedomus";
var email_de_retour ="xxxxxx@gmail.com";

// ID périphériques horaires
var pHorJour ="2207235";
var pHorDemain ="2207234";

// ID périphériques RDV
var pRdvJour="2192722";
var pRdvDemain="2175300";

// ID périphériques présences
var pPrsJour="2207232";
var pPrsDemain="2207233";
var pPrsApresDemain ="2207211";

// ID + mdp API eedomus
var id_api_user="yyyyyy";
var pass_api_user="zzzzzzzzzzzzzzzzzzz";

//***********************************************************************************************//
// 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);
   
  }
}


Quand je programme ceci:

Capture d’écran 2021-01-04 à 08.08.51.png
Capture d’écran 2021-01-04 à 08.08.51.png (34.56 Kio) Consulté 6041 fois


J'obtient ceci:

Capture d’écran 2021-01-04 à 08.15.04.png
Capture d’écran 2021-01-04 à 08.15.04.png (152.67 Kio) Consulté 6041 fois


Quand je programme ceci:

Capture d’écran 2021-01-04 à 08.56.47.png
Capture d’écran 2021-01-04 à 08.56.47.png (37.42 Kio) Consulté 6041 fois


J'obtient ceci:

Capture d’écran 2021-01-04 à 08.56.34.png
Capture d’écran 2021-01-04 à 08.56.34.png (158.56 Kio) Consulté 6041 fois


Aurais tu une idée sur ce qui cloche stp ?

Merci d'avance :wave:
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

Re: Petit soucis avec l'agenda google

Messagepar tibhix » 04 Jan 2021 17:26

Christophe a écrit:
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


Bonjour,
Je pense que ton pb vient d'ici. Il faut que les variables soient décalées de 24h:

function Calendrier()
{

// Définition Variables
var Maintenant = new Date();
var JourDebut = new Date();
var JourFin = new Date();
var DemainDebut = new Date(new Date().getTime() + 24 * 60 * 60 * 1000); //24 = 24h en plus par rapport à ce jour
var DemainFin = new Date();
var ApresDemainDebut = new Date(new Date().getTime() + 48 * 60 * 60 * 1000); //48 = 48h en plus par rapport à ce jour
var ApresDemainFin = new Date();
var cptRDV=0;

// Definition des dates
JourDebut.setHours(0,0,0,0);
JourFin.setTime( JourDebut.getTime() + ((24 * 3600)-1) * 1000 ); //jour courant

DemainDebut.setHours(0,0,0,0);
DemainFin.setTime( DemainDebut.getTime() + ((24 * 3600)-1) * 1000 ); //1 jour de plus

ApresDemainDebut.setHours(0,0,0,0);
ApresDemainFin.setTime( ApresDemainDebut.getTime() + ((24 * 3600)-1) * 1000); //2 jour de plus

...

Il est possible que j'ai modifié mon script de mon côté car c'est ce que j'ai actuellement.
tibhix
 
Messages : 35
Inscription : 18 Juin 2013

Re: Petit soucis avec l'agenda google

Messagepar Christophe » 04 Jan 2021 23:21

Bonsoir Tibhix,

Merci pour ta réponse mais après avoir adapté mon code suivant ta modification, j'ai le même résultat,
les saisies RDV d'agenda de demain ne remontent pas dans le périphérique "demain", par contre quand je déplace les RDV de "demain" vers "après demain" dans l'agenda, le périphérique "demain" reçoit bien les saisies de RDV :roll:
étrange mais j'ai beau essayer de comprendre le code, je ne vois pas ce qui peut clocher :?
ça sent le détail mais je ne trouve pas, j'ai bien reverifié l'attribution des codes Api mais en vain...

Si tu as d'autres pistes; merci encore :wave:
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

Re: Petit soucis avec l'agenda google

Messagepar Christophe » 07 Jan 2021 09:05

Bonjour,
J'essaye en vain de trouver le bug mais, rien à faire :(
J'ai fait un peu de VBA mais là on est pas dans le même langage et je ne trouve pas :think:
Il ne s'agit que du paramètre RDV: de demain programmé dans l'agenda qui ne remonte pas dans le périphérique correspondant, c'est fou ça :roll:
Alors que si je positionne le rendez-vous dans après demain, il remonte dans le périphérique
"RDV demain"
Dans la capture ci dessous, quand je change dans la variable "ApresDemainDebut " le 48 par 24, les RDV du jour et demain remontent bien en bon lieu et place mais, évidemment, les PRS après demain s'en trouvent également décalés et donc...ça va pas :cry:

Capture d’écran 2021-01-07 à 08.46.37.png
Capture d’écran 2021-01-07 à 08.46.37.png (117.91 Kio) Consulté 5996 fois


Merci à celui qui saura adapter et interpréter, de son coté, mon code pour élucider ce phénomène
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 ="AgendaEedomus";
var email_de_retour ="xxxxxx@gmail.com";

// ID périphériques horaires
var pHorJour ="2207235";
var pHorDemain ="2207234";

// ID périphériques RDV
var pRdvJour="2192722";
var pRdvDemain="2175300";

// ID périphériques présences
var pPrsJour="2207232";
var pPrsDemain="2207233";
var pPrsApresDemain ="2207211";

// ID + mdp API eedomus
var id_api_user="yyyyyy";
var pass_api_user="zzzzzzzzzzzzzzzzzzz";

//***********************************************************************************************//
// 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);
   
  }
}


Bonne journée ;)
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

Re: Petit soucis avec l'agenda google

Messagepar tibhix » 07 Jan 2021 10:53

Bonjour,

Regarde bien la définition des variables initiales:
Code : Tout sélectionner
// Définition Variables
var Maintenant = new Date();
var JourDebut = new Date();
var JourFin = new Date();
var DemainDebut = new Date(new Date().getTime() + 24 * 60 * 60 * 1000); //24 = 24h en plus par rapport à ce jour
var DemainFin = new Date();
var ApresDemainDebut = new Date(new Date().getTime() + 48 * 60 * 60 * 1000); //48 = 48h en plus par rapport à ce jour
var ApresDemainFin = new Date();
var cptRDV=0;


Puis ensuite, on calcule la fin du jour pour chaque jour en ajoutant 24h - 1 seconde
Code : Tout sélectionner
// Definition des dates
JourDebut.setHours(0,0,0,0);
JourFin.setTime( JourDebut.getTime() + ((24 * 3600)-1) * 1000 ); //jour courant

DemainDebut.setHours(0,0,0,0);
DemainFin.setTime( DemainDebut.getTime() + ((24 * 3600)-1) * 1000 ); //1 jour de plus

ApresDemainDebut.setHours(0,0,0,0);
ApresDemainFin.setTime( ApresDemainDebut.getTime() + ((24 * 3600)-1) * 1000); //2 jour de plus


Je pense que ton pb est là
tibhix
 
Messages : 35
Inscription : 18 Juin 2013

Re: Petit soucis avec l'agenda google

Messagepar Christophe » 08 Jan 2021 09:43

Bonjour Thibix,

C'est bien de ne pas faire un copié/collé de la réponse, c'est plus constructif, bonne démarche :thumbup:
As tu identifié mon problème concrètement ?
Ceci dit c'est chaud pour moi car langage inconnu :roll:
Dans la définition des variables, je penses comprendre que:
on actualise toutes les variables à la date de l'exécution du script (var Maintenant = new Date())
A propos "new Date()" renvoi quoi, date et getTime() l'heure, comment puis-je le tester?
Ensuite on défini "var DemainDebut" à 24h00 de + que DemainDebut(comme c'est noté en commentaire :P ) et là je ne comprend déjà plus puisque 24h00 de plus que l'instant T c'est:
T + (24h*60s*60s) soit T + (24h*3600sec) soit 86400sec et c'est tout, pourquoi multiplier par 1000 après ?
Et puis il y a la variable var "cptRDV=0" quelle est sa fonction, de compter le nb de RDV le même jour pour incrémenter dans le périphérique ?
J'attend la leçon 3 :shock:

Merci :wave:
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

Re: Petit soucis avec l'agenda google

Messagepar Christophe » 13 Jan 2021 21:25

Bonjour,

Il faut que je me fasse une raison, là c'est cuit, je ne parviens pas à corriger le bug de "demain" :?
je m'en retourne vers le script de base de Eedomusbox qui fonctionne et répond à mon besoin.
petit regret néanmoins pour la version mono-calendrier mais je n'arrive pas à finaliser :(
En tous cas, un grand merci à Eedomusbox et Thibix pour le partage de ces scripts qui nous aident à peaufiner notre environnement domotique :thumbup:

:wave:
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édent

Retour vers Scripts & Périphériques du store

Qui est en ligne ?

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