Qualité de l'Eau

Le site Hubeau propose une API dans le cadre de l'open data du l'Etat. Dès lors il est relativement facile de remonter ces informations dans Home Assistant. Le code qui suit est prêt à l’emploi, il suffit de replacer le code INSEE de votre commune. Bien sur ça ne remonte que ce qui est testé par les autorités.

Il est hélas difficile de réaliser ces test à titre individuels, ce qui permettrait de valider un filtre ou un adoucisseur.

Merci à Christophe pour la base du code.

Le code à ajouter

rest:
  # Code 1302 -> PH
  - resource: "https://hubeau.eaufrance.fr/api/v1/qualite_eau_potable/resultats_dis?code_commune=84007&code_parametre=1302&size=1"
    scan_interval: 43200
    sensor:
      - name: "Qualité Eau - PH"
        value_template: "{{ value_json.data[0].resultat_numerique | float(default=0) }}"
        unit_of_measurement: "pH"
        json_attributes_path: "$.data[0]"
        json_attributes: &hubeau_attr
          - date_prelevement
          - libelle_parametre
          - reference_qualite_parametre
          - conclusion_conformite_prelevement

  # Code 1340 -> Nitrates
  - resource: "https://hubeau.eaufrance.fr/api/v1/qualite_eau_potable/resultats_dis?code_commune=84007&code_parametre=1340&size=1"
    scan_interval: 43200
    sensor:
      - name: "Qualité Eau - Nitrates"
        value_template: "{{ value_json.data[0].resultat_numerique | float(default=0) }}"
        unit_of_measurement: "mg/L"
        json_attributes_path: "$.data[0]"
        json_attributes: *hubeau_attr

  # Code 1303 -> Conductivité
  - resource: "https://hubeau.eaufrance.fr/api/v1/qualite_eau_potable/resultats_dis?code_commune=84007&code_parametre=1303&size=1"
    scan_interval: 43200
    sensor:
      - name: "Qualité Eau - Conductivité"
        value_template: "{{ value_json.data[0].resultat_numerique | float(default=0) }}"
        unit_of_measurement: "µS/cm"
        json_attributes_path: "$.data[0]"
        json_attributes: *hubeau_attr

  # Code 1345 -> Dureté de l'eau (Calcaire)
  - resource: "https://hubeau.eaufrance.fr/api/v1/qualite_eau_potable/resultats_dis?code_commune=84007&code_parametre=1345&size=1"
    scan_interval: 43200
    sensor:
      - name: "Qualité Eau - Dureté"
        value_template: "{{ value_json.data[0].resultat_numerique | float(default=0) }}"
        unit_of_measurement: "°f"
        json_attributes_path: "$.data[0]"
        json_attributes: *hubeau_attr

  # Code 1399 -> Chlore libre
  - resource: "https://hubeau.eaufrance.fr/api/v1/qualite_eau_potable/resultats_dis?code_commune=84007&code_parametre=1399&size=1"
    scan_interval: 43200
    sensor:
      - name: "Qualité Eau - Chlore"
        value_template: "{{ value_json.data[0].resultat_numerique | float(default=0) }}"
        unit_of_measurement: "mg/L"
        json_attributes_path: "$.data[0]"
        json_attributes: *hubeau_attr

  # Code 1301 -> Température de l'eau
  - resource: "https://hubeau.eaufrance.fr/api/v1/qualite_eau_potable/resultats_dis?code_commune=84007&code_parametre=1301&size=1"
    scan_interval: 43200
    sensor:
      - name: "Qualité Eau - Température"
        value_template: "{{ value_json.data[0].resultat_numerique | float(default=0) }}"
        unit_of_measurement: "°C"
        json_attributes_path: "$.data[0]"
        json_attributes: *hubeau_attr

Le code pour la carte

type: vertical-stack
cards:
  - type: custom:mushroom-title-card
    title: Qualité de l'Eau à Avignon
  - type: custom:mushroom-template-card
    primary: "Nitrates : {{ states('sensor.qualite_eau_nitrates') }} mg/L"
    secondary: >
      {% set conf = state_attr('sensor.qualite_eau_nitrates',
      'conclusion_conformite_prelevement') %} {% set date =
      state_attr('sensor.qualite_eau_nitrates', 'date_prelevement') %} {{
      'Conforme' if conf and 'NON' not in conf.upper() else 'NON CONFORME' }} | 
      Analyse du : {{ as_timestamp(date) | timestamp_custom('%d/%m/%Y') if date
      else 'Inconnue' }}
    icon: mdi:water-percent
    icon_color: >
      {% set conf = state_attr('sensor.qualite_eau_nitrates',
      'conclusion_conformite_prelevement') %} {{ 'cyan' if conf and 'NON' not in
      conf.upper() else 'red' }}
    entity: sensor.qualite_eau_nitrates
  - type: custom:mushroom-template-card
    primary: "Potentiel Hydrogène (pH) : {{ states('sensor.qualite_eau_ph') }}"
    secondary: >
      {% set conf = state_attr('sensor.qualite_eau_ph',
      'conclusion_conformite_prelevement') %} {{ 'Conforme' if conf and 'NON'
      not in conf.upper() else 'NON CONFORME' }}
    icon: mdi:ph
    icon_color: >
      {% set conf = state_attr('sensor.qualite_eau_ph',
      'conclusion_conformite_prelevement') %} {{ 'green' if conf and 'NON' not
      in conf.upper() else 'red' }}
    entity: sensor.qualite_eau_ph
  - type: custom:mushroom-template-card
    primary: "Conductivité : {{ states('sensor.qualite_eau_conductivite') }} µS/cm"
    secondary: >
      {% set conf = state_attr('sensor.qualite_eau_conductivite',
      'conclusion_conformite_prelevement') %} {{ 'Conforme' if conf and 'NON'
      not in conf.upper() else 'NON CONFORME' }}
    icon: mdi:lightning-bolt-outline
    icon_color: >
      {% set conf = state_attr('sensor.qualite_eau_conductivite',
      'conclusion_conformite_prelevement') %} {{ 'blue' if conf and 'NON' not in
      conf.upper() else 'red' }}
    entity: sensor.qualite_eau_conductivite
  - type: custom:mushroom-template-card
    primary: "Dureté de l'eau : {{ states('sensor.qualite_eau_durete') }} °f"
    secondary: >
      {% set durete = states('sensor.qualite_eau_durete') | float(0) %} {% if
      durete < 15 %} Douce {% elif durete < 30 %} Moyenne {% else %} Très
      calcaire {% endif %} | {% set conf =
      state_attr('sensor.qualite_eau_durete',
      'conclusion_conformite_prelevement') %} {{ 'Conforme' if conf and 'NON'
      not in conf.upper() else 'NON CONFORME' }}
    icon: mdi:opacity
    icon_color: >
      {% set durete = states('sensor.qualite_eau_durete') | float(0) %} {% if
      durete < 15 %} green {% elif durete < 30 %} orange {% else %} red {% endif
      %}
    entity: sensor.qualite_eau_durete
  - type: custom:mushroom-template-card
    primary: "Chlore libre : {{ states('sensor.qualite_eau_chlore') }} mg/L"
    secondary: >
      {% set conf = state_attr('sensor.qualite_eau_chlore',
      'conclusion_conformite_prelevement') %} {{ 'Conforme' if conf and 'NON'
      not in conf.upper() else 'NON CONFORME' }}
    icon: mdi:pool
    icon_color: blue
    entity: sensor.qualite_eau_chlore
  - type: custom:mushroom-template-card
    primary: >-
      Température au prélèvement : {{ states('sensor.qualite_eau_temperature')
      }} °C
    secondary: >-
      Analyse du : {{ as_timestamp(state_attr('sensor.qualite_eau_temperature',
      'date_prelevement')) | timestamp_custom('%d/%m/%Y') }}
    icon: mdi:thermometer-water
    icon_color: orange
    entity: sensor.qualite_eau_temperature

Et voilà !