Vigicrue avec Rest

Mon problème

Bonjour,
Après maintenant quelques semaines sous HA, je tente d’intégrer des choses comme Vigicrue et remonter la hauteur d’une rivière pour me prévenir en cas de crue, par une alerte.
Le problème est que je crois que je bloque dès le début…
J’ai récupéré sur

Dans outil de développement, onglet Modèle :

J’indique :

sensor:
  - platform: rest
    name: Hauteur Calavon
    scan_interval: 1200
    resource: https://www.vigicrues.gouv.fr/services/observations.json/index.php?CdStationHydro=X343401201&GrdSerie=H&FormatSortie=simple
    value_template: "{{ ((value_json['data'][0]['ObssHydro'])) }}" 
    unit_of_measurement: "m"

et j’ai ce message :
UndefinedError: ‹ value_json › is undefined

Je me suis inspiré de ce qu’il y a ici : How to create a sensor for river level getting data from API vigicrue (France) - #3 by pierrot - Configuration - Home Assistant Community

Pouvez vous me dire ce que je ne fais pas comme il faut ?

Ma configuration


Ma configuration

System Information

version core-2023.12.4
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.11.6
os_name Linux
os_version 6.1.63-haos
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.33.0
Stage running
Available Repositories 1438
Downloaded Repositories 4
HACS Data ok
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 11.2
update_channel stable
supervisor_version supervisor-2023.12.0
agent_version 1.6.0
docker_version 24.0.7
disk_total 56.6 GB
disk_used 8.9 GB
healthy true
supported true
board odroid-n2
supervisor_api ok
version_api ok
installed_addons Advanced SSH & Web Terminal (17.0.1), InfluxDB (4.8.0), Node-RED (16.0.2), Z-Wave JS (0.4.3), File editor (5.7.0), Linky (1.2.0), Mosquitto broker (6.4.0), SSH Tunnel & Forwarding (1.2.0), rsync (1.7.0), LFTP sync (1.0.0)
Dashboards
dashboards 1
resources 2
views 5
mode storage
Recorder
oldest_recorder_run 28 décembre 2023 à 17:16
current_recorder_run 1 janvier 2024 à 21:30
estimated_db_size 85.93 MiB
database_engine sqlite
database_version 3.41.2
___

Salut

La structure des réponses sont différentes, donc tu ne peux pas utiliser le même « value_template ».
Si tu ouvres les url dans ton navigateur, tu peux voir la structure:

VS

Essaie avec :

value_template: "{{ ((value_json['Serie']['ObssHydro'][0])) }}"

Bonjour et merci @Giga77 !
J’ai le même message d’erreur curieusement : UndefinedError: ‹ value_json › is undefined

Comment tester si la partie rest fonctionne, c’est peut être la le problème ?

Bonjour,
Je cherche à faire la même chose sans plus de succès.
J’ai une question préalable: a quel endroit du configuration.yaml doit-on mettre le code?
Je comprends qu’il s’agit d’un template. Si je mets le code dans :

template:
  - sensor:
    - platform: rest
      ...

J’ai un message d’erreur qui me dit:

  • Invalid config for ‹ template › at configuration.yaml, line 130: required key ‹ state › not provided Invalid config for ‹ template › at configuration.yaml, line 132: ‹ platform › is an invalid option for ‹ template ›, check: sensor->10->platform Invalid config for ‹ template › at configuration.yaml, line 133: ‹ scan_interval › is an invalid option for ‹ template ›, check: sensor->10->scan_interval Invalid config for ‹ template › at configuration.yaml, line 134: ‹ resource › is an invalid option for ‹ template ›, check: sensor->10->resource Invalid config for ‹ template › at configuration.yaml, line 135: ‹ value_template › is an invalid option for ‹ template ›, check: sensor->10->value_template
  • Invalid config for ‹ template › at configuration.yaml, line 130: ‹ platform › is an invalid option for ‹ template ›, check: sensor->10->platform Invalid config for ‹ template › at configuration.yaml, line 130: required key ‹ state › not provided Invalid config for ‹ template › at configuration.yaml, line 133: ‹ scan_interval › is an invalid option for ‹ template ›, check: sensor->10->scan_interval Invalid config for ‹ template › at configuration.yaml, line 134: ‹ resource › is an invalid option for ‹ template ›, check: sensor->10->resource Invalid config for ‹ template › at configuration.yaml, line 135: ‹ value_template › is an invalid option for ‹ template ›, check: sensor->10->value_template

Bonjour @Gilles2 ,
Dans le fichier configuration.yaml, j’ai ceci :
Capture
Puis dans sensors.yaml :


Mais ca ne fonctionne pas encore cette partie Vigicrue

Pour info, avec ce code:

  - platform: rest
    name: Loire Débit Orleans
    scan_interval: 1200
    resource: https://hubeau.eaufrance.fr/api/v1/hydrometrie/observations_tr?code_entite=K435001020&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"

J’ai bien récupéré un sensor avec une valeur. Il y a de l’espoir.

Concernant mon problème précédent, j’ai compris qu’il ne fallait pas mettre ce sensor dans les template, mais à part.

OK, pour ma part j’ai besoin de la hauteur du cours d’eau.
Je poursuis donc mes recherches et essais.

Dans le code que j’ai partagé, si tu remplace le « Q » par « H » après « grandeur hydro », il me semble que tu as la hauteur.
Il faut aussi, je pense, modifier le calcul pour l"unité.
Tu peux essayer ça pour voir:

  - platform: rest
    name: Hauteur Calavon
    scan_interval: 1200
    resource: https://hubeau.eaufrance.fr/api/v1/hydrometrie/observations_tr?code_entite=X343401201&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"
1 « J'aime »

essaie ça:

value_template: "{{ (value_json['Serie']['ObssHydro'][0][1] | float(0)) }}"

ça donne ça :

1 « J'aime »

Merci @Giga77 et @Gilles2
Les 2 fonctionnent !
Pour celui avec vigicrue, il prend la première valeur donc celle d’il y a 30 jours…
C’est le classement des données qui veut ca je suppose, c’est sur 30 jours glissants.

Merci beaucoup, je vais pouvoir mettre une alerte en route et éteindre domoticz !

Oui, le fichier Vigicrue est peu pratique avec la dernière info à la fin du fichier. S’il y a un nombr efixe de mesures, il est peut-être possible de pointer sur cette mesure.
Le fichier que je propose est plus simpls car il n’a que la dernière mesure.

Il faut d’ailleurs remercier @JCLB qui a fourni l’information que j’ai utilisée sur cette discussion : How to create a sensor for river level getting data from API vigicrue (France) - Configuration - Home Assistant Community (home-assistant.io)

1 « J'aime »

Bonjour, je vous remercie pour tout ce travail.
Je souhaite le reproduire, mais je ne comprend pas comment récupérer le numéro de tronçon / station. Comment faire pour avoir l’url de la ressource qui correspond à mon tronçon ?
Merci d’avance !

Bonjour @Yoth ,
As-tu regardé ce tuto :
Suivi des cours d’eau (hacf.fr)
Tu devrais trouver ton bonheur. N’hésite pas à revenir vers moi si tu n’y arrives pas.

Non effectivement ! Merci beaucoup, c’est super clair et didactique, je vais essayer ça, et merci pour la fulgurance de la réponse :smile:

Bonjour,
Sur mon installation j’ai ajouté dans sensor.yaml ces lignes :

  - platform: rest
    name: Hauteur Calavon
    scan_interval: 600
    resource: https://hubeau.eaufrance.fr/api/v1/hydrometrie/observations_tr?code_entite=X343401201&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"

Puis je récupère ensuite dans les entités le sensor fraichement créé : « sensor.hauteur_calavon » avec la dernière valeur.
La valeur à modifier ici est l’ID de l’emplacement de la mesure soit X343401201 qui correspond chez moi à l’emplacement le plus proche.

Bonjour,
Je rebondis sur le sujet, est ce normal que les données ne soient conservées que 10 jours sur ce dispositif ? Je regardais l’historique et ca va du 17 au 27 mars ?!
Normalement tout est conservé, non ?

Salut

Non, ç’est le contraire, normalement l’historique est conservé 10 jours max, sauf pour certains types de capteur.
Fais des recherches « recorder » et « state_class » sur le forum.
Et regarde ça aussi : Long-term Statistics

1 « J'aime »

Pour aller un cran plus loin:

il faut définir le state_class de ton sensor sur « measurement » pour qu’il puissent être stocké dans les long term statistics, au delà des 10j de ton recorder…

un extrait de mon sensor.yaml, il te manque juste une ligne pour les long term stat:

# recuperation de la hauteur d'eau du Touch à Plaisance du Touch
- platform: rest
  name: Hauteur Touch Plaisance
  unique_id: hauteur_touch_plaisance
  scan_interval: 300
  resource: https://hubeau.eaufrance.fr/api/v1/hydrometrie/observations_tr?code_entite=O196431001&size=1&pretty&grandeur_hydro=H&fields=date_obs,resultat_obs,continuite_obs_hydro
  value_template: "{{ (value_json['data'][0]['resultat_obs']) | int / 1000  }}" # mm en m
  unit_of_measurement: "m"
  state_class: measurement
  
- platform: rest
  name: Debit Touch Plaisance
  unique_id: debit_touch_plaisance
  scan_interval: 300
  resource: https://hubeau.eaufrance.fr/api/v1/hydrometrie/observations_tr?code_entite=O196431001&size=1&pretty&grandeur_hydro=Q&fields=date_obs,resultat_obs,continuite_obs_hydro
  value_template: "{{ ((value_json['data'][0]['resultat_obs']) | int / 1000 ) }}" # l en m3/s
  unit_of_measurement: "m³/s"
  state_class: measurement

Merci, je venais de trouver entre temps cette information :state_class: measurement
Ca confirme que j’ai donc trouvé ce qu’il me faut.
Merci

Dommage je n’ai donc plus la dernière crue d’enregistrée :wink: