Analyse graphique dans Homeassistant

Bonjour,

Je viens de découvrir la puissance des courbes d’historique dans Homeassistant, pour des capteurs par exemple. Une analyse graphique visuelle permet de voir par exemple la période d’occupation d’une pièce (basée sur le CO2) et la période d’une douche (basée sur l’humidité).

Y a-t-il un moyen de faire une analyse graphique automatisée dans HomeAssistant et par exemple de faire un rapport journalier avec les périodes d’occupation de la salle de bains, du temps de douche etc ?
Et y a-t-il moyen de faire l’analyse graphique en temps réel ?

Quitte à mettre un peu d’IA pour faciliter la tâche ?

Si tu veux connaître le temps d’une douche par exemple, le plus simple est de créer une petite automatisation je pense.
C’est ce que nous sommes nombreux à faire par exemple pour les mesures de cycles des appareils ménagers. Par exemple ici: Obtenir le temps d'utilisation d'un appareil électrique sur une période donnée - #21 par roumano.
Quel type d’analyse souhaiterais-tu faire qui ne rentrerait pas dans ce type de calcul?

Bonjour, dans votre exemple, vous avez déjà de manière native les mesures que vous cherchez (début de lave vaisselle). Dans le cas de la douche, je n’ai pas de capteur qui dise « début de douche » ou « fin de douche ». Par contre certains capteurs (détection de CO2, détection d’humidité) fournissent de manière indirecte (sous réserve, justement, d’analyser et d’interpréter les graphiques) ces informations. D’où ma question: comment automatiser l’analyse de ces graphiques ?

Bonjour,
Dans l’exemple que j’ai partagé, la détection du début de cycle se fait par une automatisation qui est déclechée par la consommation électrique du lave-vaisselle. Regarde bien l’exemple, tout est détailé.
Ci-dessous mon automatisation qui identifie que le lave vaisselle a été mis en marche:

En yaml si tu préfères >>
alias: "Lave-vaisselle : 1 - Start"
description: Lave-vaisselle start
mode: single
triggers:
  - entity_id: sensor.tz3000_2putqrmw_ts011f_active_power_7
    above: 10
    for:
      hours: 0
      minutes: 1
      seconds: 0
    trigger: numeric_state
conditions:
  - condition: state
    entity_id: input_boolean.lave_vaisselle_cycle
    state: "off"
actions:
  - data:
      value: "0"
    target:
      entity_id: sensor.lave_vaisselle_power_cycle_bis
    action: utility_meter.calibrate
  - data: {}
    target:
      entity_id: input_boolean.lave_vaisselle_cycle
    action: input_boolean.turn_on

En résumé, je passe un input number booléen à « on » (input_bolean.lave_vaisselle_cycle) lorsque HA détecte que le lave vaisselle consomme plus de 10W pendant 1 minute.

J’ai une autre automatisation qui détecte de façon similaire la fin du cycle.

Détection de fin de cycle
alias: "Lave-vaisselle : 2 - Fin"
description: Lave_vaisselle Fin
mode: restart
triggers:
  - entity_id: sensor.tz3000_2putqrmw_ts011f_active_power_7
    below: 10
    for:
      hours: 0
      minutes: 2
      seconds: 0
    trigger: numeric_state
conditions:
  - condition: state
    entity_id: input_boolean.lave_vaisselle_cycle
    state: "on"
actions: nulli

Puis une autre automatisation qui calcule la durée du cycle, m’nvoie une notification et ajoute une entrée à mon fichier de suivi:

Calcul durée et coût du cycle, envoi notifications et entrée dans fichier de suivi
alias: "Lave-vaisselle : 3 - Fin, notification"
description: Lave-vaisselle Fin, notifications
triggers:
  - entity_id: sensor.tz3000_2putqrmw_ts011f_active_power_7
    below: 5
    for:
      hours: 0
      minutes: 30
      seconds: 0
    trigger: numeric_state
conditions:
  - condition: state
    entity_id: input_boolean.lave_vaisselle_cycle
    state: "on"
actions:
  - data: {}
    target:
      entity_id: input_boolean.lave_vaisselle_cycle
    action: input_boolean.turn_off
  - data:
      title: Lave-vaisselle terminé
      message: >-
        Le cycle s'est déroulé de {{
        ((state_attr('automation.lave_vaisselle_start','last_triggered')) |
        as_local).strftime("%Hh%M") }} à {{ now().strftime("%Hh%M") }}
    action: notify.mobile_app_sm_s936b
  - continue_on_error: true
    data:
      title: Lave-vaisselle terminé
      message: >
        Le cycle s'est déroulé de {{
        ((state_attr('automation.lave_vaisselle_start','last_triggered')) |
        as_local).strftime("%Hh%M") }} à {{ now().strftime("%Hh%M") }} 

        Soit une durée de {{
        (((state_attr('automation.lave_vaisselle_fin_notification','last_triggered'))
        -
        (state_attr('automation.lave_vaisselle_start','last_triggered'))).seconds
        / 3600 )| int
        }}h{{((((state_attr('automation.lave_vaisselle_fin_notification','last_triggered'))
        -
        (state_attr('automation.lave_vaisselle_start','last_triggered'))).seconds
        % 3600 )/60 )| round }}m

        Le cycle a consommé {{ states('sensor.lave_vaisselle_power_cycle_bis')
        }}kWh

        Le cycle a coûté {{ ((states('sensor.lave_vaisselle_power_cycle_bis') |
        float(default=0) *
        float(states('input_number.prix_du_kwh_d_electricite'))))  | round(2) 
        }}€
    action: persistent_notification.create
  - continue_on_error: true
    target:
      entity_id: notify.consommations2
    data:
      message: >-
        {{ now().strftime("%d/%m/%Y") }} ; Lave-vaisselle ; {{
        ((state_attr('automation.lave_vaisselle_start','last_triggered')) |
        as_local).strftime("%Hh%M") }} - {{ now().strftime("%Hh%M") }} ;  {{
        (((state_attr('automation.lave_vaisselle_fin_notification','last_triggered'))
        -
        (state_attr('automation.lave_vaisselle_start','last_triggered'))).seconds
        / 3600 )| int
        }}h{{((((state_attr('automation.lave_vaisselle_fin_notification','last_triggered'))
        -
        (state_attr('automation.lave_vaisselle_start','last_triggered'))).seconds
        % 3600 )/60 )| round }}min ; {{
        states('sensor.lave_vaisselle_power_cycle_bis') }}kWh ; {{
        ((states('sensor.lave_vaisselle_power_cycle_bis') | float(default=0) * 
        float(states('input_number.prix_du_kwh_d_electricite'))))  | round(2) }}
        EUR
    action: notify.send_message
mode: single

Je n’ai rien inventé, tout le crédit va à @roumano

Pas mieux que @Gilles2

Si tu veux automatiser l’analyse de ta courbe, il faut que tu le fasse avec une automatisation.

Tout va se faire avec des passages de seuils.

Je te conseille de regarder la série des 3 articles sur l’automatisation qui sont disponibles sur le portail et le forum: [Article] Automatisation #1 : débuter en douceur!

Dans ton cas tu vas devoir utiliser le declencheur entity / numerical state, éventuellement avec un temps de confirmation, décrit ici: Automatisation #2 : libérer le plein potentiel !

Les exemples fournis par @Gilles2 et @roumano sont excellents.

Super, merci à tous. Il me faudra du temps pour étudier tout cela. @Gilles2 désolé j’avais lu trop vite ton automation la première fois, merci pour les explications didactiques.

Bon courage pour la lecture.
Je te conseille de commencer par les articles partagés par @BBE qui te permettront de bien assimiler les bases des automatisations sur HA.
Si tu bloques ou si tu as des questions précises, tu trouveras plein de bonnes volontés sur ce forum pour t’aider :wink: