Comparer la valeur d'une entité

Bonjour,

Savez-vous comment comparer la valeur d’une entité entre aujourd’hui à l’instant T ( par exemple à 13h55) & hier à la même heure (13h55) ?

Merci :slight_smile:

Oui, tu peux en utilisant history_stats, history.get_state dans un script Python, ou une requête SQL

Merci ! ça na pas l’air simple ça. Aurais-tu un exemple ?

Autrement une méthode via node Red ?

Utiliser history.get_state dans un template

utiliser un template Jinja pour récupérer la valeur d’une entité à un moment précis « hier ».

{% set entity_id = 'sensor.ton_entite' %}
{% set now = now() %}
{% set yesterday = now - timedelta(days=1) %}
{% set state_yesterday = states(entity_id, yesterday) %}
{% set state_now = states(entity_id) %}

Valeur actuelle: {{ state_now }}
Valeur hier à la même heure: {{ state_yesterday }}

Si tu veux un capteur qui compare en continu, ajout de sensor dans configuration.yaml :

sensor:
  - platform: history_stats
    name: "Valeur hier"
    entity_id: sensor.ton_entite
    state: "on"
    type: mean
    start: "{{ now().replace(hour=13, minute=55, second=0) - timedelta(days=1) }}"
    end: "{{ now().replace(hour=13, minute=55, second=0) - timedelta(days=1) + timedelta(minutes=1) }}"

Cela récupère la valeur moyenne hier à 13h55.

tu a apexcharts card pour le graph et le suivi en fonction du temps

Merci pour tes précisions.
Sur le template Jinja , à partir d’un exemple sur la base du ‹ sensor.temp_ext_nord_temperature ›

Valeur Actuelle == Valeur d’hier ; alors que ce n’était pas le cas… (?)

Le problème vient du fait que states(entity_id, timestamp) ne fonctionne pas dans Home Assistant nativement en Jinja.

Solution : Utiliser history.get_state dans un script ou une automation.

OK .

Comment appelle-t-on history.get_state dans une automation ou un script ?
(Je n’ai jamais fait de script …)
Encore Merci ! :wink:

avec une automation ou un script, tu peux utiliser history.get_state en appelant le service python_script ou history.

Méthode 1 : Utiliser history.get_state dans un script HA (facile)

Ajoute cette action dans ton automation ou script YAML :

action:
  - service: history.get_state
    data:
      entity_id: "sensor.ton_entite"
      timestamp: "{{ (now() - timedelta(days=1)).isoformat() }}"
    response_variable: state_yesterday

  - service: persistent_notification.create
    data:
      title: "Valeur d'hier"
      message: "Hier à la même heure, {{ state_yesterday.state }} (actuel: {{ states('sensor.ton_entite') }})"

Explication :

  1. history.get_state récupère l’état de l’entité hier à la même heure.
  2. response_variable: state_yesterday stocke la valeur récupérée.
  3. persistent_notification.create affiche une notification pour vérifier la valeur récupérée.

Méthode 2 : Stocker la valeur d’hier dans un input_number (pour la comparer plus tard)

Si tu veux comparer cette valeur avec celle d’aujourd’hui dans une autre automation, stocke-la dans un input_number.

  1. Créer un input_number pour stocker la valeur d’hier
input_number:
  valeur_hier:
    name: Valeur Hier
    min: 0
    max: 10000
    step: 0.1
  1. Créer une automation pour sauvegarder la valeur d’hier chaque jour
automation:
  - alias: "Sauvegarde de la valeur d’hier"
    trigger:
      - platform: time
        at: "23:59:00"
    action:
      - service: history.get_state
        data:
          entity_id: "sensor.ton_entite"
          timestamp: "{{ (now() - timedelta(days=1)).isoformat() }}"
        response_variable: state_yesterday

      - service: input_number.set_value
        target:
          entity_id: input_number.valeur_hier
        data:
          value: "{{ state_yesterday.state | float(0) }}"
  1. Comparer dans une autre automation
automation:
  - alias: "Comparer valeur actuelle et hier"
    trigger:
      - platform: state
        entity_id: sensor.ton_entite
    condition:
      - condition: template
        value_template: "{{ states('sensor.ton_entite') | float(0) > states('input_number.valeur_hier') | float(0) }}"
    action:
      - service: persistent_notification.create
        data:
          title: "Alerte : Valeur en hausse"
          message: "La valeur actuelle est plus élevée qu'hier !"

Quelle méthode choisir ?

Méthode 1 (history.get_state dans l’action) → Pour récupérer la valeur et l’afficher immédiatement.
Méthode 2 (input_number + automation) → Si tu veux comparer la valeur d’hier avec aujourd’hui dans d’autres scénarios.

Astuce : Une fois que tu maîtrises ça, tu peux utiliser history.get_state pour comparer plusieurs jours en arrière !

Merci pour tous ces détails ! Je vais regarder tout ça.