Récupérer le niveau d'alerte de VigiCrue

Bonjour,

Ceci est mon premier tuto, alors soyez indulgents, mais dites moi si je m’y prends mal.

C’est un sujet malheureusement encore d’actualité pour les gens du nord, je me suis demandé comment récupérer une alerte crue sur home assistant.
VigiCrue diffuse les informations. Je me suis inspiré de ce post pour la méthode : Vigilance des crues via la box eedomus. Je ne reprends pas toutes les informations générale que donne l’auteur, je vais directement à la mise en oeuvre.

Je récupère :

  • La couleur de vigilance de ma zone,
  • La date de mise à jour
  • le lien vers l’info directe Vigicrue
  • Une description de la situation

Il ne semble plus possible d’avoir les hauteurs d’eau via VigiCrue. Je continue à chercher ce point.


La première étape consiste à récupérer l’ID de la zone qui vous intéresse.

Sous home assistant, dans configuration.yaml, je crée 2 capteurs avec RESTFull.

rest:
  - resource: "https://www.vigicrues.gouv.fr/territoire/rss/?CdEntVigiCru=AN12" # VigiCrues Isère Grenoblois
    headers:
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
      Content-Type: application/json
      User-Agent: Wget/1.20.3 (linux-gnu)
    scan_interval: 7200
    sensor:
      - name: VigiCrue
        unique_id: vigicrue
        json_attributes_path: "$.rss.channel.item"
        json_attributes:
          - pubDate
          - link
        value_template: "{{ ( (value_json.rss.channel.item.title).split(':') )[1] | trim | upper }}"
      - name: VigiCrue description
        unique_id: vigicrue_description
        value_template: >
          {% set t = value_json.rss.channel.item.description %}
          {% set t = t.split('HL')[1].split('</p>')[1].split('Abonnez vous')[0] %}
          {{ t | striptags }}

Et c’est tout, on a nos sensors.


Côté interface, j’ai choisis d’utiliser Markdown, avec config-template-card qui me permet de changer la couleur de la carte en fonction de la couleur de vigilance.

type: custom:config-template-card
entities:
  - sensor.vigicrue
card:
  type: markdown
  content: |-
    Vigicrue - *{{ state_attr('sensor.vigicrue','pubDate') }}*

    ---
    # {{ states('sensor.vigicrue') }}

    {% if states('sensor.vigicrue') != 'VERT' %}
    {{ states('sensor.vigicrue_description') }}

    [site VigiCrue]({{ state_attr('sensor.vigicrue','link') }})
    {% endif %}
  theme: ${ states['sensor.vigicrue'].state }

Le contenu de mon themes.yaml :

ROUGE:
  card-background-color: '#ff8888'
  state-icon-color: '#ff0000'
  primary-text-color: '#ff0000'
  secondary-text-color: '#363636'
VERT:
  card-background-color: '#aaffaa'
  state-icon-color: '#008800'
  primary-text-color: '#008800'
  secondary-text-color: '#008800'
JAUNE:
  card-background-color: '#FCFCCF'
  state-icon-color: '#B7B70B'
  primary-text-color: '#B7B70B'
  secondary-text-color: '#B7B70B'
ORANGE:
  card-background-color: '#FAD7A0'
  state-icon-color: '#7E5109'
  primary-text-color: '#7E5109'
  secondary-text-color: '#7E5109'

Enjoy!

5 « J'aime »

Bonjour,
Je t’engage à consulter cette discussion sur laquelle nous avons travaillé à plusieus à la récupération des hauteurs d’eau et de débit des stations de Vigicrue.
Vigicrue avec Rest - Entraide Home Assistant - Home Assistant Communauté Francophone (hacf.fr)

Bonjour,

Merci pour ton exemple. J’ai un soucis concernant l’intégration du style. Est-il possible de le mettre directement dans une carte personnalisée (exemple ?) ou on doit forcement créer un fichier themes.yaml ?

Bonjour,
Si tu suis les exemples donnés pour récupérer l’information comme indiqué sur mon message juste au-dessus, celà te crée juste un sensor avec la valeur du débit our de la hauteur d’eau (au choix). Ensuite, tu en fais ce que tu veux comme tout sensor et tu peux l’intégrer dans n’importe quelle carte. De mon côté, j’ai fait un mini-graph avec le débit de la Seine, car c’est ce qui m’intéresse.
image

Je confirme ce que @Gilles2 a pu dire. Tout fonctionne très bien :

en ayant pour sensors :

        
  - platform: rest
    name: Seine_Hauteur_Station01
    scan_interval: 1200
    resource: https://hubeau.eaufrance.fr/api/v1/hydrometrie/observations_tr?code_entite=CodeStation01&size=1&pretty&grandeur_hydro=H&fields=date_obs,resultat_obs,continuite_obs_hydro
    value_template: "{{ ((value_json['data'][0]['resultat_obs']) | int / 1000 | round(3) ) }}" # mm en m
    unit_of_measurement: "m"
        
  - platform: rest
    name: Seine_Hauteur_Station02
    scan_interval: 1200
    resource: https://hubeau.eaufrance.fr/api/v1/hydrometrie/observations_tr?code_entite=CodeStation02&size=1&pretty&grandeur_hydro=H&fields=date_obs,resultat_obs,continuite_obs_hydro
    value_template: "{{ ((value_json['data'][0]['resultat_obs']) | int / 1000 | round(3) ) }}" # mm en m
    unit_of_measurement: "m"

  - platform: rest
    name: Seine_Debit_Station
    scan_interval: 1200
    resource: https://hubeau.eaufrance.fr/api/v1/hydrometrie/observations_tr?code_entite=CodeStation&size=1&pretty&grandeur_hydro=Q&fields=date_obs,resultat_obs,continuite_obs_hydro
    value_template: "{{ (((value_json['data'][0]['resultat_obs']) | int / 1000 ) | round ) }}" # l en m3/s
    unit_of_measurement: "m3/s"

Petite information, ceci est mon premier message. J’en profite pour remercier la communauté pour le partage de tout un tas d’informations.

1 « J'aime »

Pour info, je cherchais aussi l’information sur la température de l’eau.
J’ai trouvé une source qui publie cette info une fois par jour (les jours ouvrés). Il s’agit de la SIAAP.
En scrapant leur site Web, j’ai récupéré cette nouvelle donnée. Ma carte ressemble maintenant à ça:
image

1 « J'aime »

Bonjour,
Je récupère bien hauteur et débit ( en copiant Gilles2 qui visiblement dans le même coi que moi) mais pour la couleur vigilance :thinking:, peux tu expliquer le coup des RSS pour ceux qui ne savent pas ce que c’est
Merci

Bonjour Bruno,
Je pense mettre à jour le tuto publié sur le site ( Suivi des cours d’eau (hacf.fr)) en ajoutant le super travail de befour ici.
Il te fournit toute la solution en haut de cette discussion:

  • tu récupères l’adresse du flux RSS de la zone qui t’intéresse. Si tu es dans le même coin que moi, pour la Seine à Paris c’est: vigicrues.gouv.fr/rss/?CdEntVigiCru=IF5
  • tu rajoutes le code rest proposé par befour à ton configuration.yaml en modifiant juste l’ adresse du flux dans resource
  • et c’est tout. Tu as maintenant 2 nouveaux sensor à ta disposition :
    • vigicrue, qui te donne à la fois l’état d’alerte (VERT) et dans un attribut la date de dernière mise à jour
    • vigicrue_description qui te donne un texte explicatif

Befour a fait une carte complexe, mais tu peux commencer par une carte simple pour commencer. Ci-dessous ce que j’ai fait rapidement pour contrôler.
image

1 « J'aime »

@befour ,
Bonjour,
A priori, le flux rss de Vigicrue a été modifié. L’url a été modifiée (Vigicrues : Tronçon(s) de cours d'eau en vigilance crues) au lieu de vigicrues.gouv.fr/rss/?CdEntVigiCru=IF5.
La structure du flux rss a aussi été modifiée, car le code que tu avais partagé au début de cette discussion ne fonctionne plus. N’étant pas un expert du sujet, peux-tu partager les modifications à faire pour récupérer les vigilences crue?
Merci d’avance

Bonjour @Gilles2 et merci pour l’alerte.
La correction est simple :
remplacer - resource: "https://www.vigicrues.gouv.fr/rss/?CdEntVigiCru=XXXX"
par - resource: "https://www.vigicrues.gouv.fr/territoire/rss/?CdEntVigiCru=XXXX"

Je modifie mon post initial.
Et je vais ajouter aussi une automation pour m’alerter si mon sensor VigiCrue passe à unknown !

Bonsoir Befour,
Malheureusement, cela ne suffit pas. Mon niveau n’est pas très élevé, mais ça j’avais compris ;-).
Par contre, j’imagine que la structure du flux a aussi été modifiée.
J’ai 2 erreurs dans mes journaux;

Enregistreur: homeassistant.helpers.template
Source: helpers/template.py:2613
S'est produit pour la première fois: 10:41:57 (12 occurrences)
Dernier enregistrement: 20:41:57

Template variable error: 'value_json' is undefined when rendering '{{ ( (value_json.rss.channel.item.title).split(':') )[1] | trim | upper }}'
Template variable error: 'value_json' is undefined when rendering '{% set t = value_json.rss.channel.item.description %} {% set t = t.split('HL')[1].split('</p>')[1].split('Abonnez vous')[0] %} {{ t | striptags }}'

et

Enregistreur: homeassistant.components.rest.util
Source: components/rest/util.py:37
intégration: RESTful (documentation, problèmes)
S'est produit pour la première fois: 10:41:57 (6 occurrences)
Dernier enregistrement: 20:41:57

REST result could not be parsed as JSON

Salut @Gilles2

Chez moi, ça fonctionne.
As-tu redémarré HA ?
Sinon partage ton code :upside_down_face:

1 « J'aime »

Bonsoir,
Idem ça fonctionne aussi chez moi avec la modif’ après redémarrage d’HA

1 « J'aime »

Bonjour,
Merci à tous pour vos réponses. J’avais fait un redémarrage rapide (rechargement de la configuration), mais a priori ça ne suffit pas. Après redémarrage complet, c’es bon. Plus d’erreur et j’ai de nouveau les infos.
Merci encore à @befour pour ce code.

1 « J'aime »