Vigilance météo par département et alerte de changement d'état

Bonjour,

Voila depuis le changement du plugin météo France, cela à rajouter les vigilances météo, ce qui est pour ma part une belle amélioration. Cependant je voudrait extraire les vigilances de mon département, un peu comme le faisait le plugin vigilance, et avoir une alerte sms lors dans changement de phase ( ex passage de jaune à orange).
J’ai essayé avec la commande vigilancejson mais je ne n’arrive à extraire qui que soit, j’ai essayé aussi avec le fichier CDP_TEXTES_VIGILANCE.json, mais je ne sais pas comment on peu faire un widget avec cela ? Une idée ? Une Piste ?

Salut,

J’ai corrigé le titre et mis le tag du plugin :wink:

Sinon je pense que tu peux trouver un début de piste ici

Bonjour, merci de ton retour mon but serait d’avoir un truc comme ca :

image

Bonjour,

Je suis sous Telegram donc à adapter (tu sors un tag du bloc-code donc tout est possible).
Soit un scénario par vigilance, soit un seul et alors il faut utiliser les triggers (c’est ce que je fais).

Bonjour,

  • Fourni avec le plugin, vous avez le widget « Vigilance » qui peut être associé à la commande « Vigilance - Json » et obtenir cela dans un virtuel ou sur le dashboard:
    image
    Le point vert correspond au niveau de vigilance global du département ( jaune chez vous avec le gyrophare )
    La carte, la date et l’heure sont masquables avec les paramètres optionnels.
    Les sources du widget sont dans le fichier
    plugins/meteofrance/core/template/dashboard/cmd.info.string.Vigilance.html
    A adapter selon vos besoins. (javascript inside)

  • En utilisant le template Vigilance pour afficher un équipement, vous obtenez directement:
    image

  • Pour les scénarios d’alerte, j’utilise ceux fournis juste au dessus. Merci à Madcow.

2 « J'aime »

Avec quelques modifs du fichier plugins/meteofrance/core/template/dashboard/cmd.info.string.Vigilance.html , j’obtiens:
image image

4 « J'aime »

Et tu le mets à dispo le fichier pour obtenir cela ? Car je trouve cela sympa

Bonjour,

Voici le widget à affecter dans un virtuel à la commande reprenant « Vigilance - Json » du plugin MF.
Dev en cours. Ça sera inclus dans le plugin après debug.
NB: La carte du département n’est pas inclue dans la version actuelle du plugin

Une version de Jeedom supérieure ou égale à 4.2 est nécessaire.

cmd.info.string.Vigilance.html
<div class="cmd cmd-widget #history#" data-type="info" data-subtype="string" data-template="custom" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
  <div class="title #hide_name#">
    <div  class="cmdName">#name_display#</div>
  </div>
  <div class="dateText"></div>
  <table>
    <tr style="background-color:transparent !important;">
      <td>
        <div class="vigilanceMap" style="margin-top: -5px;margin-bottom: -5px"></div>
      </td>
      <td>
        <div class="maxDeptColor"></div>
      </td>
    </tr>
  </table>
  <div class="weatherAlerts" style="margin-top: 4px"></div>
  <div title="Message" class="errorMessage"></div>
  <template>
    <div>color : rgb(20,20,20) ({{Couleur de fond}})</div>
    <div>fontColor : rgb(20,20,20) ({{Couleur du texte}})</div>
    <div>displayDate : 0/1 ({{Affichage du jour}})</div>
    <div>displayTime : 0/1 ({{Affichage de l'heure}})</div>
    <div>displayMapFr : 0/1 ({{Affichage de la carte de France des vigilances du jour}})</div>
    <div>displayDeptLevel : 0/1 ({{Affichage du niveau de vigilance du département}})</div>
    <div>displayAlerts : 0/1 ({{Affichage des vigilances}})</div>
  </template>
  <script>
    jeedom.cmd.addUpdateFunction('#id#',function(_options) {
      const vigilanceColors = [
        ["Non défini",'<i class="fa fa-circle" style="color: #888888"></i>'],
        ["Vert",'<i class="fa fa-circle" style="color: #31AA35"></i>'],
        ["Jaune",'<i class="fa fa-circle" style="color: #FFF600"></i>'],
        ["Orange",'<i class="fa fa-circle" style="color: #FFB82B"></i>'],
        ["Rouge",'<i class="fa fa-circle" style="color: #CC0000"></i>']
      ];
      let cmd = $('.cmd[data-cmd_id=#id#]');
      cmd.find('.errorMessage').empty(); // clean previous error
      let json = _options.display_value.replaceAll('&quot;','"');
      try {
        let jsonData = JSON.parse(json);
        if(jsonData != null) {
          if('#displayMapFr#' != '0') {
            cmd.find('.vigilanceMap').empty().append('<img style="width:70px" src="plugins/meteofrance/data/' +jsonData.image +'">');
          }

          let cd = new Date(jsonData.begin_validity_time);
          let dateTime = '';
          let dayTxt = cd.toLocaleDateString('fr-FR', {month: 'short', day: 'numeric',weekday: 'short'});
          let day = dayTxt.charAt(0).toUpperCase() + dayTxt.slice(1); // ucfirst
          if('#displayDate#' != '0') dateTime += day;
          let vigilanceIconTitle = day;
          let cdEnd = new Date(jsonData.end_validity_time);
          if('#displayTime#' != '0') {
            if(dateTime.length) dateTime += ' ';
            dateTime += cd.toLocaleTimeString('fr-FR', {hour: '2-digit'});
            dateTime += ' - ' +cdEnd.toLocaleTimeString('fr-FR', {hour: '2-digit'});
          }
          else {
            vigilanceIconTitle += ' ' +cd.toLocaleTimeString('fr-FR', {hour: '2-digit'});
            vigilanceIconTitle += ' - ' +cdEnd.toLocaleTimeString('fr-FR', {hour: '2-digit'});
          }
              
          cmd.find('.dateText').empty().append(dateTime);
          cmd.find('.vigilanceMap').attr('title', vigilanceIconTitle);
          cmd.find('.dateText').attr('title', '{{Date de valeur}} : '+_options.valueDate+'<br/>{{Date de collecte}} : '+_options.collectDate);
         

          if('#displayDeptLevel#' != '0') {
            let maxColorTxt = '';
            switch(jsonData.dept.max_color_id) {
              case 1: maxColorTxt = vigilanceColors[1][1]; break;
              case 2: maxColorTxt = vigilanceColors[2][1]; break;
              case 3: maxColorTxt = vigilanceColors[3][1]; break;
              case 4: maxColorTxt = vigilanceColors[4][1]; break;
              default: maxColorTxt = vigilanceColors[0][1]; break;
            }
            if(jsonData.domain_id_picture == 'none')
              cmd.find('.maxDeptColor').empty().append(jsonData.dept.domain_id +" " +maxColorTxt);
            else
              cmd.find('.maxDeptColor').empty().append('<img style="margin-top:4px;width:50px; height:50px" src="plugins/meteofrance/data/' +jsonData.domain_id_picture +'">');
            cmd.find('.maxDeptColor').attr('title', "Vigilance du département: " +jsonData.dept.domain_id);
          }
        }
            // Affichage des vigilances météo
        let txtWeatherAlerts = '';
        if('#displayAlerts#' != '0') {
          const vigilanceType = [
            ["Vent","wi-strong-wind"],
            ["Pluie-inondation","wi-rain-wind"],
            ["Orages","wi-lightning"],
            ["Crues","wi-flood"],
            ["Neige-verglas","wi-snow"],
            ["Canicule","wi-hot"],
            ["Grand-froid","wi-thermometer-exterior"],
            ["Avalanches","wi-na"],
            ["Vagues-submersion","wi-tsunami"],
            ["Incendie","wi-fire"]
          ];
         
          for(i=0;i<jsonData.dept.phenomenon_items.length;i++) {
            phenom = jsonData.dept.phenomenon_items[i];
            couleur = phenom.phenomenon_max_color_id;
            if(couleur > 1) { // exclude green
              id = phenom.phenomenon_id;
              txtWeatherAlerts += vigilanceType[parseInt(id)-1][0] +': ' +vigilanceColors[couleur][1] +'<br>';
            }
          }
          if(typeof jsonData.littoral !== "undefined") {
            for(i=0;i<jsonData.littoral.phenomenon_items.length;i++) {
              phenom = jsonData.littoral.phenomenon_items[i];
              couleur = phenom.phenomenon_max_color_id;
              if(couleur > 1) { // exclude green
                id = phenom.phenomenon_id;
                txtWeatherAlerts += vigilanceType[parseInt(id)-1][0] +': ' +vigilanceColors[couleur][1] +'<br>';
              }
            }
          }
        }
            // alert(txtWeatherAlerts);
        cmd.find('.weatherAlerts').empty().append(txtWeatherAlerts);
            // Couleur de fond du widget
        if ($.issetWidgetOptParam('#color#', 'color')) {
          cmd.style('background-color', '#color#', 'important')
        }
            // Couleur de la police du widget
        if ($.issetWidgetOptParam('#fontColor#', 'fontColor')) {
          cmd.style('color', '#fontColor#', 'important')
        }
      }
      catch(err) {
        cmd.find('.errorMessage').empty().append('<strong>JSON data:' +json.substr(0,30) +'...</strong><br>' +err.message);
      }
    });
    jeedom.cmd.refreshValue([{cmd_id :'#id#',display_value: '#state#', valueDate: '#valueDate#', collectDate: '#collectDate#', alertLevel: '#alertLevel#', unit: '#unite#'}])
  </script>
</div>
4 « J'aime »

Bonjour et merci pour ce partage de fonctionnement et contenu des notifications très sympa et inspirant. J’avais deux questions :

  • peux tu partager ce que tu mets dans les tag « logoOrage », « logoVent » etc… ? j’imagine un lien vers des pictos sympa Orage et autres
  • sur le principe de déclenchement du scénario je ne suis pas certain de bien comprendre : j’avais moi aussi un déclencheur sur chgt de valeur d’une conditions de vigilance et en effet si d’aventure les horaires changeaient je les manquais. J’ai compris que pour gérer cela tu forçais une réactualisation des horaires 70mn plus tard et que tu testais les conditions actuelles avec les précédentes que tu mémorisais. Est-ce bien cela ? Si oui pourquoi 70mn, est-ce lié à une période de refresh du plugin ?
    Merci par avance

Bonjour,

Content de savoir que ça peut être utile.

En effet j’avais oublié de mettre le bloc-code correspondant (obligé de passer par des tags sinon le code est converti automatiquement et cela ne fonctionne plus). Je le rajoute dans le post initial.
Dans le bloc il y a le lien vers le site le plus complet que je connaisse si tu veux rajouter d’autres emojis.
Bloc-code à mettre au tout début du scénario.

//Pour utilisation emoji https://unicode.org/emoji/charts/full-emoji-list.html

$tags = $scenario->getTags();

//$tags['#LogoRouge#'] = '&' .'#x1F534';
//$tags['#LogoOrange#'] = '&' .'#x1F7E0';
//$tags['#LogoJaune#'] = '&' .'#x1F7E1';
//$tags['#LogoVert#'] = '&' .'#x1F7E2';

$tags['#LogoFlocon#'] = '&' .'#x2744';
$tags['#LogoNeige#'] = '&' .'#x1F328';
$tags['#LogoTornade#'] = '&' .'#x1F32A';
$tags['#LogoOrage#'] = '&' .'#x1F329';
$tags['#LogoThermometre#'] = '&' .'#x1F321';
$scenario->setTags($tags);

Je teste en effet les « nouvelles » conditions avec les précédentes que j’ai au préalable stockées dans une variable (que j’efface à la fin de la vigilance pour être propre). Cela évite des répétitions si les conditions ne changent pas (de mémoire les conditions vigilance une fois la vigilance démarrée sont mises à jour par Météo France 3 fois/jour).
Les 70 minutes c’est bien en effet lié au fait qu’au minimum la vigilance change toutes les heures. j’ai rajouté +10 min pour être certain d’avoir les nouvelles conditions. Bien entendu cela peut facilement se modifier.

1 « J'aime »

Bonjour,

Le minimum est 2 fois par jour. A 6h et 16h
Mais ça peut-être beaucoup plus.
Exemple le 4 novembre 16 publications: Archives MF
Les horaires sont en GMT. Les publications peuvent être partielles.
image

top merci pour les logos, ca fonctionne dans mon test sur le Vent :
Sans titre

Je poursuis pour rendre mon scénario générique multi type de vigilance (comme ton cas avec le test trigger + tag de relance 70mn) et valable pour ma vigilance domicile et la vigilance qui suit le déplacement de mon mobile

vu aussi le site des emojis, merci

Je prends enfin le temps de me pencher sur cela

J’ai donc créé un virtuel avec un commande de type info autre et je vais chercher la commande json
A la sauvegarde, j’ai ceci
image

Bonjour,
Il est interdit d’historiser toutes les commandes dont la valeur contient plus de 127 caractères.
Jeedom a fait le choix de ne pas les tronquer et de balancer cette erreur.

J’avais pas vu ce post.
Merci j’ai donc l’explication.

CA fonctionne merci à toi de tes lumières :beers: :beers:
image

Pour tester, il faut changer de département:
image

image

Bonjour. Désolé de revenir avec une question. J’ai bien réussi à exploiter la trame et aussi à gérer dans un seul scénario à la fois la vigilance à mon domicile et celle lorsque je suis en itinérance.

Je remarque en revanche que les conditions sont mises à jour en fonction de l’heure de la journée sans pour autant que les périodes prévues initialement changent : par exemple le matin j’ai vigilance jaune de 6h à 18h, puis vert à partir de 19h. Je reçois cela vers 5 ou 6h. Ensuite à 10h, je reçois une mise à jour des conditions disant jaune de 10h à 18h, puis Vert à partir de 19h. Puis vers 12h ou 13h Jaune de 13h à 18h, Vert à 19h. Les conditions au sens strictes (texte) sont différentes d’avant mais en réalité les périodes sont inchangées, l’actualisation n’est que le fait d’avoir avancé dans la journée.

Est-ce que tu évites cet envoi d’infos ou comme moi tu re notifies quand bien même le découpage de la journée est inchangé ?

Bonjour,

Je me notifie tous les changements même si les créneaux horaires restent identiques. Ça n’en fait pas beaucoup par jour.