❄️ Météo France Montagne - Nouvelle intégration Home Assistant

Avec les premières neiges qui arrivent, c’est le moment parfait pour vous présenter mon intégration pour suivre les Bulletins d’estimation du Risque d’Avalanche (BRA) de Météo France ! :snow_capped_mountain:

Fonctionnalités principales :

  • :police_car_light: Risque d’avalanche actuel et prévisionnel (échelle européenne 1-5)
  • :snowflake: Enneigement et limites par versant
  • :cloud_with_snow: Neige fraîche quotidienne
  • :snow_capped_mountain: Situations avalancheuses typiques (SAT)
  • :sun_behind_small_cloud: Météo montagne complète
  • :framed_picture: 6 images PNG (rose des pentes, risques, enneigement…)

Tous les massifs français : Alpes, Pyrénées, Corse

Installation : Disponible via HACS ou manuellement
:package: GitHub : GitHub - faizpuru/ha-meteofrance-montagne: Intégration Home Assistant pour les bulletins d'avalanche de Météo France. Suivez le risque d'avalanche, l'enneigement et la météo montagne pour tous les massifs français (Alpes, Pyrénées, Corse). 🏔️❄️

:warning: Nécessite un token API gratuit de Météo France (inscription rapide sur leur portail)

Parfait pour créer des automatisations (alertes risque élevé, notifications neige fraîche) ou des dashboards complets pour vos sorties en montagne ! :skis::skier:

N’hésitez pas si vous avez des questions ou suggestions d’amélioration !

9 « J'aime »

Salut

Merci pour cette excellente idée :ok_hand:

2 petites remarques en l’état:

  • Tu devrais indiquer BDA et non DPBDA car sur le site de MF le moteur de recherche le trouve uniquement avec BDA :wink: ( Données Publiques DPBRA)
  • possible de ne pas avoir le texte tronqué en utilisant ton exemple ?

Vincèn

1 « J'aime »

Bien vu !

Je mettrais ça à jour demain :slight_smile:

1 « J'aime »

@vincen Et voilà, la version 1.0.2 règle ces deux remarques. Merci d’avoir pris le temps de tester !

1 « J'aime »

Merci pour la mise à jour mais cela n’a pas réglé le problème du texte tronqué dans Lovelace :frowning: J’ai augmenté la limite de texte à 20 000 caractères dans la carte mais rien à faire :frowning:

J’ai changé l’exemple dans le readme. En fait, la value est limité à 255 caractere, du coup le texte est tronqué. Le texte entier est dans l’attribut “texte_complet”.

Je te met en dessous la card markdown telle qu’elle est maintenant dans le readme.

  - type: markdown
    content: >
      **Stabilité :** {{ states('sensor.aravis_stabilite_du_manteau_neigeux') }}

      **Qualité :** {{ state_attr('sensor.aravis_qualite_de_la_neige', 'texte_complet') }}

Merci, très belle intégration, un grand merci a toi @faizpuru !!!

Dans le readme de l’installation, il faut faire un petit changement pour la partie HACS et installation de l’intégration:

c’est pas « Météo France Montagne » mais “MeteoFrance Montagne” (sans les accents et 2mots pas 3)

Sinon, est-il possible d’avoir l’image image.xxxx_sept_derniers_jours un peut plus grand, il y a tellement d’information utile dedans qu’elle en devient illisible a cette taille là.

Ce soir il y a un soucis avec le serveur Météo France, j’ai plus aucune info qui remonte. Si je reloade l’intégration il la recharge sans soucis mais aucune donnée et dans les logs j’ai ce genre de chose:

Belle ! C’est une erreur de mon côté.
Il y a des guillemets dans un des texte du xml. Du coup à la suite du traitement xslt le json n’est pas valide. Je corrigerai ça semaine pro.

1 « J'aime »

C’est corrigé dans la dernière version ! J’ai aussi rajouter les historiques meteo / neige.

1 « J'aime »

J’ai corrigé le nom. J’ai harmonisé partout avec le nom Météo-France.
Pour l’image je ne fais pas de traitement particulier.

Pour info, toutes les valeurs permettant de recréer ce genre de graphes directement dans ton home assistant sont dans les attributs des entités. Je peux te faire un exemple avec une apexcharts-card par exemple, si tu veux.

Salut,

Oui je veut bien un exemple

Et si tu sais si on peut (et comment) afficher l’image dans home assistant en plus grand ( chez moi, elle est plus petit que dans ton exemple)

Bonne journée

type: custom:apexcharts-card
header:
  show: true
  title: Conditions de neige
  show_states: true
  colorize_states: true
graph_span: 8d
span:
  start: day
  offset: "-7d"
now:
  show: true
  label: Maintenant
series:
  - entity: sensor.aravis_limite_enneigement_nord
    name: Limite enneigement Nord
    color: "#2196F3"
    stroke_width: 3
    type: line
    curve: smooth
    data_generator: |
      const historique = entity.attributes.historique.map(h => {
        return [new Date(h.date).getTime(), h.limite_nord];
      }).filter(e => e[1] != null);

      const now = new Date().getTime();
      const current = entity.attributes.limite_nord_m ?
        [[now, entity.attributes.limite_nord_m]] : [];

      return [...historique, ...current].sort((a, b) => a[0] - b[0]);
    show:
      in_header: true
      legend_value: false
  - entity: sensor.aravis_limite_enneigement_sud
    name: Limite enneigement Sud
    color: "#FF9800"
    stroke_width: 3
    type: line
    curve: smooth
    data_generator: |
      const historique = entity.attributes.historique.map(h => {
        return [new Date(h.date).getTime(), h.limite_sud];
      }).filter(e => e[1] != null);

      const now = new Date().getTime();
      const current = entity.attributes.limite_sud_m ?
        [[now, entity.attributes.limite_sud_m]] : [];

      return [...historique, ...current].sort((a, b) => a[0] - b[0]);
    show:
      in_header: true
      legend_value: false
  - entity: sensor.aravis_meteo
    name: Isotherme 0°C
    color: "#00BCD4"
    stroke_width: 3
    type: line
    curve: smooth
    data_generator: |
      const historique = entity.attributes.echeances_historique.map(e => {
        const val = parseInt(e.iso_0);
        return [new Date(e.date).getTime(), (val != null && !isNaN(val) && val != -1) ? val : null];
      });
      const prevision = entity.attributes.echeances.map(e => {
        const val = parseInt(e.iso_0);
        return [new Date(e.date).getTime(), (val != null && !isNaN(val) && val != -1) ? val : null];
      });
      return [...historique, ...prevision].sort((a, b) => a[0] - b[0]);
    show:
      in_header: true
      legend_value: false
  - entity: sensor.aravis_meteo
    name: Limite pluie/neige
    color: "#9C27B0"
    stroke_width: 3
    type: line
    curve: smooth
    data_generator: |
      const historique = entity.attributes.echeances_historique.map(e => {
        const val = parseInt(e.pluie_neige);
        return [new Date(e.date).getTime(), (val != null && !isNaN(val) && val != -1) ? val : null];
      });
      const prevision = entity.attributes.echeances.map(e => {
        const val = parseInt(e.pluie_neige);
        return [new Date(e.date).getTime(), (val != null && !isNaN(val) && val != -1) ? val : null];
      });
      return [...historique, ...prevision].sort((a, b) => a[0] - b[0]);
    show:
      in_header: true
      legend_value: false
apex_config:
  yaxis:
    title:
      text: Altitude (m)
  xaxis:
    type: datetime
  tooltip:
    enabled: true
    "y":
      formatter: |
        EVAL:function(value) {
          return value + ' m';
        }
  stroke:
    curve: smooth
  legend:
    position: bottom

type: custom:apexcharts-card
header:
  show: true
  title: Neige fraiche
  show_states: true
  colorize_states: true
graph_span: 7d
span:
  start: day
  offset: "-6d"
series:
  - entity: sensor.aravis_neige_fraiche
    type: column
    color: "#2196F3"
    unit: cm
    data_generator: |
      const historique = entity.attributes.historique.map(h => {
        return [new Date(h.date).getTime(), h.max];
      }).filter(e => e[1] != null);
      const mesures = entity.attributes.mesures.map(h => {
        return [new Date(h.date).getTime(), h.max_cm];
      }).filter(e => e[1] != null);
      return [...historique, ...mesures].sort((a, b) => a[0] - b[0]);
    show:
      in_header: true
      legend_value: false
apex_config:
  yaxis:
    title:
      text: Hauteur (cm)
  xaxis:
    type: datetime
  tooltip:
    enabled: true
    "y":
      formatter: |
        EVAL:function(value) {
          return value + ' cm';
        }
  legend:
    position: bottom

1 « J'aime »

Tu penses régler le soucis ou pas ? car là ça enlève pas mal d’intérêts de pas avoir le texte de description en entier :wink:

Bonjour

Merci beaucoup pour cette intégration, fan de montagne, c’est celle qu’il manquait :folded_hands:

J’ai moi aussi par contre depuis 3 semaines l’intégration en rade, la raison étant que le JSON, bien que régulièrement récupéré, est incomplet. Apparemment, toujours un problème de délimiteur.

Pour info, j’essaye de récupérer les infos du massif de la Vanoise en Savoie.

J’ai cela dans les logs:

Merci par avance

Edit: je vois que je suis en 1.0.1 toujours, bizarre, je n’arrive pas à re-télécharger la 1.0.2 …:thinking:

Bien que je sois à présent en 2.0.0 (j’ai finalement trouvé comme la re-télécharger), tjs la même erreur de decode JSON :thinking:

Comme je disais précédemment, la value est limité à 255 caractere (limitation home assistant), du coup le texte est tronqué. Toutefois le texte entier est dans l’attribut “texte_complet” de l’entité.

Comme tu le vois, pas de pb pour afficher les textes non tronqués :

Example yaml
type: markdown
content: >-
  ### Avalanche

  {{state_attr("sensor.aravis_risque_avalanche", "resume")}}

  ### Meteo

  {{states("sensor.aravis_meteo")}}

  ### Enneigement

  {{state_attr("sensor.aravis_qualite_de_la_neige","texte_complet")}}

  ### Stabilité

  {{states("sensor.aravis_stabilite_du_manteau_neigeux")}} :
  {{state_attr("sensor.aravis_stabilite_du_manteau_neigeux", "titre")}}

Pour le reste je ne pourrai regarder qu’à partir du 5 janvier. Je suis en vacances en famille.

Bonne fêtes à tous

Problème réglé par une suppression totale des sensor et réinstallation de l’intégration.

Donc R.A.S

Bonne vacances en famille

1 « J'aime »