Vigilance météo et Vigilance crue via Google Apps Script

Tutoriels sur la Vera

Vigilance météo et Vigilance crue via Google Apps Script

Messagede Shaigan » 31 AoĂ» 2013, 23:26

Bonjour, suite à une demande sur mon blog, voici un script pour Google Apps Script qui poste toutes les heures les couleurs pour une vigilance météo et une vigilance crue de votre choix dans un Variable Container.

Code: Tout sélectionner
function start() {
  // Supprime les triggers s'il y en a
  var triggers = ScriptApp.getScriptTriggers();
  for(var i = 0; i < triggers.length; i++) {
    ScriptApp.deleteTrigger(triggers[i]);
  }

  // Paramètre le script pour dĂ©marrer automatiquement chaque heures
  ScriptApp.newTrigger("fetchTweets")
           .timeBased()
           .everyMinutes(60)
           .create();
}

function sendMeteoAlerts() {
  // Quelques constante de paramètrage
  var veraUsr = "AAAAAAA"
  var veraPwd = "BBBBBBB"
  var veraUnit = "CCCCCCC"
  var vContainerId = "DD"
  var itimeteoArea = "EEEEE"
  var vigicrueTron = "FFFFF"
  var vigicrueName = "GGGGG"
 
  // On rĂ©cupère le serveur actif de la Vera
  var serverHttp = UrlFetchApp.fetch("http://sta1.mios.com/locator_json.php?username=" + veraUsr);
  var serverData = serverHttp.getContentText();
  var serverJson = Utilities.jsonParse(serverData);
  var serverFwd = serverJson.units[0].active_server;

  // On rĂ©cupère la couleur mĂ©tĂ©o sur le site de itimĂ©tĂ©o
  var itimeteoHttp = UrlFetchApp.fetch("http://api.itimeteo.com/getMeteoalarm.ims?areaid=" + itimeteoArea + "&format=json");
  var itimeteoData = itimeteoHttp.getContentText();
  var itimeteoJson = Utilities.jsonParse(itimeteoData);
  var itimeteoLevelColor = itimeteoJson.Level.Level;
  var itimeteoLevelType = itimeteoJson.Level.Type;
  var itimeteoColor = "--";
  if (itimeteoLevelColor == "GREEN") {
    itimeteoColor = "Vert";
  } else if (itimeteoLevelColor == "YELLOW") {
    itimeteoColor = "Jaune";
  } else if (itimeteoLevelColor == "ORANGE") {
    itimeteoColor = "Orange";
  } else if (itimeteoLevelColor == "RED") {
    itimeteoColor = "Rouge";
  }

  // On rĂ©cupère les couleurs sur le site de Vigicrue
  var vigicrueHttp = UrlFetchApp.fetch("http://www.vigicrues.ecologie.gouv.fr/rss/?codeTron=" + vigicrueTron);
  var vigicrueData = vigicrueHttp.getContentText();
  var vigicrueSearch = "<title>" + vigiCrueName + " : ";
  var vigicrueStart = vigicrueData.indexOf(vigicrueSearch) + vigicrueSearch.length;
  var vigicrueStop = vigicrueData.indexOf("</title>", vigicrueStart);
  var vigicrueColor = vigicrueData.substring(vigicrueStart, vigicrueStop);

  // On envoie la couleur de l'alerte mĂ©tĂ©o
  //  MĂ©tĂ©o
  UrlFetchApp.fetch("https://" + serverFwd + "/" + veraUsr + "/" + veraPwd + "/" + veraUnit + "/data_request?id=variableset&DeviceNum=" + vContainerId + "&serviceId=urn:upnp-org:serviceId:VContainer1&Variable=Variable1&Value=" + itimeteoColor);
  //  Crue
  UrlFetchApp.fetch("https://" + serverFwd + "/" + veraUsr + "/" + veraPwd + "/" + veraUnit + "/data_request?id=variableset&DeviceNum=" + vContainerId + "&serviceId=urn:upnp-org:serviceId:VContainer1&Variable=Variable2&Value=" + vigicrueColor);
}

Il faut renseigner les constantes veraUsr, veraPwd, veraUnit, vContainerId, itimeteoArea, vigicrueTron et vigicrueName avec les infos.

Pour choper le code "area" pour itimeteo, il faut se réferrer à http://api.itimeteo.com/getMeteoalarm.ims qui renvoie vers http://www.meteoalarm.eu. En naviguant, vous allez trouver les vigilances pour votre département, et on chope le code "area" en regardant l'adresse de la page. Pour les Hautes-Pyrénées, c'est http://www.meteoalarm.eu/fr_FR/0/0/FR003-Hautes_Pyrenees.html, le code est FR003.

Pour choper le code "tron" pour vigiecrue, il faut suivre le tuto posté sur abavala

Enjoy :D !
Dernière édition par Shaigan le 11 Mar 2014, 00:30, édité 2 fois.
Aeon Labs : Multisensor (6), Compteur HEM3 | Everspring : DĂ©tecteur HSM02 (7), Prise AN157-6 (3), Prise AN180-6 (3), DĂ©tecteur HAC01, DĂ©tecteur SF812
Fibaro : FGD-211 (20->17), FGR-221 (7), FGS-211, FGS-221 (6), FGBS-001 (2), FGMS-001 | Fortrezz : SSA2 | Qees : MyKey | Violet : Karotz (2)
Micasaverde : Vera Plus (1.7.1786) | Android : Nexus 4, Galaxy Naos, Galaxys S, Galaxy Teos, Wiko Cink Slim, Archos Helium 50+, Asus Zenforce 2 Laser
Web : http://shaigan-reloaded.net
Shaigan
Dieu de domotique
 
Messages: 609
Inscription: 04 FĂ©v 2012, 22:35
Localisation: Hautes-Pyrénées (65)

Re: Vigilance météo et Vigilance crue via Google Apps Script

Messagede alcor » 09 Sep 2013, 23:08

Salut

Merci pour tes scripts. C'est mis en place et ça fonctione du premier coup !!

Merci Ă  toi

Alex
alcor
Guru de domotique
 
Messages: 101
Inscription: 06 Oct 2006, 19:54

Re: Vigilance météo et Vigilance crue via Google Apps Script

Messagede Shaigan » 09 Sep 2013, 23:25

De rien.

alcor a écrit:ça fonctione du premier coup
Bravo :D
Aeon Labs : Multisensor (6), Compteur HEM3 | Everspring : DĂ©tecteur HSM02 (7), Prise AN157-6 (3), Prise AN180-6 (3), DĂ©tecteur HAC01, DĂ©tecteur SF812
Fibaro : FGD-211 (20->17), FGR-221 (7), FGS-211, FGS-221 (6), FGBS-001 (2), FGMS-001 | Fortrezz : SSA2 | Qees : MyKey | Violet : Karotz (2)
Micasaverde : Vera Plus (1.7.1786) | Android : Nexus 4, Galaxy Naos, Galaxys S, Galaxy Teos, Wiko Cink Slim, Archos Helium 50+, Asus Zenforce 2 Laser
Web : http://shaigan-reloaded.net
Shaigan
Dieu de domotique
 
Messages: 609
Inscription: 04 FĂ©v 2012, 22:35
Localisation: Hautes-Pyrénées (65)

Re: Vigilance météo et Vigilance crue via Google Apps Script

Messagede Shaigan » 11 Mar 2014, 00:33

Coucou Ă  tous
J'ai un soucis pour récupérer les infos sur itimétéo, j'ai trouvé un autre site qui ne propose pas d'api mais dont les infos sont relativement faciles à parser. Voici la fonction Google Scripts, il y a certainement moyen de coder ça plus proprement mais en urgence, c'est mieux que rien:
Code: Tout sélectionner
function getMeteoAlerts(codePostal) {
  // Le script va rĂ©cupĂ©rer l'info des 3 premières alertes mĂ©tĂ©o sur le net. Il renvoie les 3 types d'alertes s'il sont de mĂŞme couleur, sinon il renvoie les deux premières alertes
  var alerteMeteoFrHttp = UrlFetchApp.fetch("http://alerte.vigilance-meteo.fr/getwarning_fr.php?plz=" + codePostal + "&uwz=UWZ-FR&lang=fr");
  var alerteMeteoFrData = alerteMeteoFrHttp.getContentText();
  var alerteMeteoFr = "verte";
  var alerteMeteoFrSearch = "Alerte d'intempĂ©ries de niveau ";
  var alerteMeteoFrSplit = " pour ";
 
  var alerteMeteoFrColor1 = "";
  var alerteMeteoFrColorStop1 = 0;
  var alerteMeteoFrType1 = "";
  var alerteMeteoFrTypeStart1 = 0;
  var alerteMeteoFrString1 = "";
  var alerteMeteoFrColor2 = "";
  var alerteMeteoFrColorStop2 = 0;
  var alerteMeteoFrType2 = "";
  var alerteMeteoFrTypeStart2 = 0;
  var alerteMeteoFrString2 = "";
  var alerteMeteoFrColor3 = "";
  var alerteMeteoFrColorStop3 = 0;
  var alerteMeteoFrType3 = "";
  var alerteMeteoFrTypeStart3 = 0;
  var alerteMeteoFrString3 = "";

  // 1ère alerte
  var alerteMeteoFrStringStart1 = alerteMeteoFrData.indexOf(alerteMeteoFrSearch);
  if (alerteMeteoFrStringStart1 > 0) {
    // 1ère alerte trouvĂ©e, on Ă©clate la couleur et le type
    var alerteMeteoFrStringStop1 = alerteMeteoFrData.indexOf(" avec ", alerteMeteoFrStringStart1);
    Logger.log("Alerte n°1: " + alerteMeteoFrStringStart1 + " / " + alerteMeteoFrStringStop1)
    if (alerteMeteoFrStringStop1 - alerteMeteoFrStringStart1 > 1000) {
      // Si on ne trouve pas, on cherche autre chose
      alerteMeteoFrStringStop1 = alerteMeteoFrData.indexOf(" valide Ă  ", alerteMeteoFrStringStart1)-1;
      Logger.log("Alerte n°1: " + alerteMeteoFrStringStart1 + " / " + alerteMeteoFrStringStop1 + " [CORRECTION]")
    }
    alerteMeteoFrString1 = alerteMeteoFrData.substring(alerteMeteoFrStringStart1 + alerteMeteoFrSearch.length, alerteMeteoFrStringStop1);
    alerteMeteoFrColorStop1 = alerteMeteoFrData.indexOf(alerteMeteoFrSplit, alerteMeteoFrStringStart1);
    alerteMeteoFrColor1 = alerteMeteoFrData.substring(alerteMeteoFrStringStart1 + alerteMeteoFrSearch.length, alerteMeteoFrColorStop1);
    if (alerteMeteoFrColor1 == "violet") {
      alerteMeteoFrColor1 = "violette";
    }
    alerteMeteoFrTypeStart1 = alerteMeteoFrColorStop1 + alerteMeteoFrSplit.length;
    alerteMeteoFrType1 = alerteMeteoFrData.substring(alerteMeteoFrTypeStart1, alerteMeteoFrStringStop1);
    Logger.log(alerteMeteoFrColor1 + " pour " + alerteMeteoFrType1);

    // 2ème alerte
    var alerteMeteoFrStringStart2 = alerteMeteoFrData.indexOf(alerteMeteoFrSearch, alerteMeteoFrStringStop1);
    if (alerteMeteoFrStringStart2 > 0) {
      // 2ème alerte trouvĂ©e, on Ă©clate la couleur et le type
      var alerteMeteoFrStringStop2 = alerteMeteoFrData.indexOf(" avec ", alerteMeteoFrStringStart2);
      Logger.log("Alerte n°2: " + alerteMeteoFrStringStart2 + " / " + alerteMeteoFrStringStop2)
      if (alerteMeteoFrStringStop2 - alerteMeteoFrStringStart2 > 1000) {
        // Si on ne trouve pas, on cherche autre chose
        alerteMeteoFrStringStop2 = alerteMeteoFrData.indexOf(" valide Ă  ", alerteMeteoFrStringStart2)-1;
        Logger.log("Alerte n°2: " + alerteMeteoFrStringStart2 + " / " + alerteMeteoFrStringStop2 + " [CORRECTION]")
      }
      alerteMeteoFrString2 = alerteMeteoFrData.substring(alerteMeteoFrStringStart2 + alerteMeteoFrSearch.length, alerteMeteoFrStringStop2);
      alerteMeteoFrColorStop2 = alerteMeteoFrData.indexOf(alerteMeteoFrSplit, alerteMeteoFrStringStart2);
      alerteMeteoFrColor2 = alerteMeteoFrData.substring(alerteMeteoFrStringStart2 + alerteMeteoFrSearch.length, alerteMeteoFrColorStop2);
      if (alerteMeteoFrColor2 == "violet") {
        alerteMeteoFrColor2 = "violette";
      }
      alerteMeteoFrTypeStart2 = alerteMeteoFrColorStop2 + alerteMeteoFrSplit.length;
      alerteMeteoFrType2 = alerteMeteoFrData.substring(alerteMeteoFrTypeStart2, alerteMeteoFrStringStop2);
      Logger.log(alerteMeteoFrColor2 + " pour " + alerteMeteoFrType2);
      // 3ème alerte
      var alerteMeteoFrStringStart3 = alerteMeteoFrData.indexOf(alerteMeteoFrSearch, alerteMeteoFrStringStop2);
      if (alerteMeteoFrStringStart3 > 0) {
        // 3ème alerte trouvĂ©e, on Ă©clate la couleur et le type
        var alerteMeteoFrStringStop3 = alerteMeteoFrData.indexOf(" avec ", alerteMeteoFrStringStart3);
        Logger.log("Alerte n°3: " + alerteMeteoFrStringStart3 + " / " + alerteMeteoFrStringStop3)
        if (alerteMeteoFrStringStop3 - alerteMeteoFrStringStart3 > 1000) {
          // Si on ne trouve pas, on cherche autre chose
          alerteMeteoFrStringStop3 = alerteMeteoFrData.indexOf(" valide Ă  ", alerteMeteoFrStringStart3)-1;
          Logger.log("Alerte n°3: " + alerteMeteoFrStringStart3 + " / " + alerteMeteoFrStringStop3 + " [CORRECTION]")
        }
        alerteMeteoFrString3 = alerteMeteoFrData.substring(alerteMeteoFrStringStart3 + alerteMeteoFrSearch.length, alerteMeteoFrStringStop3);
        alerteMeteoFrColorStop3 = alerteMeteoFrData.indexOf(alerteMeteoFrSplit, alerteMeteoFrStringStart3);
        alerteMeteoFrColor3 = alerteMeteoFrData.substring(alerteMeteoFrStringStart3 + alerteMeteoFrSearch.length, alerteMeteoFrColorStop3);
        if (alerteMeteoFrColor3 == "violet") {
          alerteMeteoFrColor3 = "violette";
        }
        alerteMeteoFrTypeStart3 = alerteMeteoFrColorStop3 + alerteMeteoFrSplit.length;
        alerteMeteoFrType3 = alerteMeteoFrData.substring(alerteMeteoFrTypeStart3, alerteMeteoFrStringStop3);
        Logger.log(alerteMeteoFrColor3 + " pour " + alerteMeteoFrType3);
      }
    }
  }

  // Construction de la rĂ©ponse
  if (alerteMeteoFrColor1 != "") {
    // Si on a trouvĂ© au moins une alerte
    if ((alerteMeteoFrColor1 == alerteMeteoFrColor2) && (alerteMeteoFrColor1 == alerteMeteoFrColor3)) {
      // Si les trois alertes sont de la mĂŞme couleur
      alerteMeteoFr = alerteMeteoFrColor1 + " pour " + alerteMeteoFrType1 + ", " + alerteMeteoFrType2 + " et " + alerteMeteoFrType3;
    } else {
      // Si les trois alertes ne sont pas de la mĂŞme couleur
      if (alerteMeteoFrColor3 == "") {
        // S'il n'y a qu'au moins deux alertes
        if (alerteMeteoFrColor1 == alerteMeteoFrColor2) {
          // Si les deux premières alertes sont de la mĂŞme couleur
          alerteMeteoFr = alerteMeteoFrColor1 + " pour " + alerteMeteoFrType1 + " et " + alerteMeteoFrType2;
        } else {
          // Si les deux premières alertes ne sont pas de la mĂŞme couleur
          if (alerteMeteoFrColor2 == "") {
            // S'il n'y a qu'une seule alerte
            alerteMeteoFr = alerteMeteoFrColor1 + " pour " + alerteMeteoFrType1;
          } else {
            // Si il y a deux alertes
            if (alerteMeteoFrType1 == alerteMeteoFrType2) {
              // Si les deux alertes sont du mĂŞme type, on ne garde que la première
              alerteMeteoFr = alerteMeteoFrColor1 + " pour " + alerteMeteoFrType1
            } else {
              // Si les deux alertes ne sont pas du mĂŞme type
              alerteMeteoFr = alerteMeteoFrColor1 + " pour " + alerteMeteoFrType1 + " et " + alerteMeteoFrColor2 + " pour " + alerteMeteoFrType2;
            }
          }
        }
      } else {
        // Si on a trois alertes de couleurs diffĂ©rentes
        if (alerteMeteoFrColor1 == alerteMeteoFrColor2) {
          // Si les deux premières alertes sont de la mĂŞme couleur
          alerteMeteoFr = alerteMeteoFrColor1 + " pour " + alerteMeteoFrType1 + " et " + alerteMeteoFrType2 + ", et " + alerteMeteoFrColor3 + " pour " + alerteMeteoFrType3;
        } else {
          alerteMeteoFr = alerteMeteoFrColor1 + " pour " + alerteMeteoFrType1 + ", " + alerteMeteoFrColor2 + " pour " + alerteMeteoFrType2 + " et " + alerteMeteoFrColor3 + " pour " + alerteMeteoFrType3;
        }
      }
    }
  }
  Logger.log("RĂ©ponse envoyĂ©e: " + alerteMeteoFr);
  return alerteMeteoFr;
}
Aeon Labs : Multisensor (6), Compteur HEM3 | Everspring : DĂ©tecteur HSM02 (7), Prise AN157-6 (3), Prise AN180-6 (3), DĂ©tecteur HAC01, DĂ©tecteur SF812
Fibaro : FGD-211 (20->17), FGR-221 (7), FGS-211, FGS-221 (6), FGBS-001 (2), FGMS-001 | Fortrezz : SSA2 | Qees : MyKey | Violet : Karotz (2)
Micasaverde : Vera Plus (1.7.1786) | Android : Nexus 4, Galaxy Naos, Galaxys S, Galaxy Teos, Wiko Cink Slim, Archos Helium 50+, Asus Zenforce 2 Laser
Web : http://shaigan-reloaded.net
Shaigan
Dieu de domotique
 
Messages: 609
Inscription: 04 FĂ©v 2012, 22:35
Localisation: Hautes-Pyrénées (65)

Re: Vigilance météo et Vigilance crue via Google Apps Script

Messagede pikasso » 11 Juin 2014, 12:52

Surement ignorant, pourriez vous m'expliquer le lien avec Google ?
Merci
Dans une vie antérieure : box Vera3 + MyVera (iPad), Karotz, 7x FGK10x+DS18B20, 2x Aeon 4in1(2), 4x AEO_DSC17(4), 9x FGRM221(5), 6x AN15x, Sirene VIS_ZM1601(1)
Maintenant.. box Alyt, Karotz, 3x AN158 -- A installer : 4in1(2)- PhilipsHue(4)- Sirene(1) et un Mir:ror
Avatar de l’utilisateur
pikasso
Guru de domotique
 
Messages: 141
Inscription: 21 Oct 2013, 05:45
Localisation: Strasbourg

Re: Vigilance météo et Vigilance crue via Google Apps Script

Messagede Shaigan » 04 DĂ©c 2014, 19:30

Oups, pour une réponse en retard, c'est une réponse en retard -_-
My bad et toutes mes excuses...

Le lien avec Google est que le script est hébergé dans un fichier Google Drive, ce qui me permet de délocaliser les calculs et soulager ma vera de plusieurs requêtes HTTP ;)
C'est aussi un bon exercice (en tous cas pour moi) pour utiliser encore un autre langage de prog.
Aeon Labs : Multisensor (6), Compteur HEM3 | Everspring : DĂ©tecteur HSM02 (7), Prise AN157-6 (3), Prise AN180-6 (3), DĂ©tecteur HAC01, DĂ©tecteur SF812
Fibaro : FGD-211 (20->17), FGR-221 (7), FGS-211, FGS-221 (6), FGBS-001 (2), FGMS-001 | Fortrezz : SSA2 | Qees : MyKey | Violet : Karotz (2)
Micasaverde : Vera Plus (1.7.1786) | Android : Nexus 4, Galaxy Naos, Galaxys S, Galaxy Teos, Wiko Cink Slim, Archos Helium 50+, Asus Zenforce 2 Laser
Web : http://shaigan-reloaded.net
Shaigan
Dieu de domotique
 
Messages: 609
Inscription: 04 FĂ©v 2012, 22:35
Localisation: Hautes-Pyrénées (65)

Re: Vigilance météo et Vigilance crue via Google Apps Script

Messagede pikasso » 04 DĂ©c 2014, 20:36

Ah ok.. :) Merci
Dans une vie antérieure : box Vera3 + MyVera (iPad), Karotz, 7x FGK10x+DS18B20, 2x Aeon 4in1(2), 4x AEO_DSC17(4), 9x FGRM221(5), 6x AN15x, Sirene VIS_ZM1601(1)
Maintenant.. box Alyt, Karotz, 3x AN158 -- A installer : 4in1(2)- PhilipsHue(4)- Sirene(1) et un Mir:ror
Avatar de l’utilisateur
pikasso
Guru de domotique
 
Messages: 141
Inscription: 21 Oct 2013, 05:45
Localisation: Strasbourg


Retourner vers Tutoriels

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique