Obtenir le temps d'utilisation d'un appareil électrique sur une période donnée

Effectivement, si j’ouvre le fichier avec le bloc note, je n’ai pas de bug d’affichage

Lors du redémarrage de HA, ou suite à une indisponibilité du zigbee, je reçois de nouveau une notification.
voir photo ci dessous :

Comment faire pour éviter cela ?

Il y plusieurs solution mais moi j’ai pas ce souci, sûrement du fait que j’ai mis cette « protection » dans l’automatisation de fin :

  condition:
  - condition: state
    entity_id: input_boolean.lave_vaisselle_cycle
    state: 'on'

Pour ma part je n’utilise que 2 automatisations :

  • Celle de départ :
START
alias: "03a - Lave Vaisselle : Start"
description: Lave Vaisselle Start
trigger:
  - type: power
    platform: device
    device_id: 9f4a7bf121c459cf0544a0b0c2a464a5
    entity_id: sensor.0xa4c1389a6388b5b5_power
    domain: sensor
    above: 5
    for:
      hours: 0
      minutes: 5
      seconds: 0
condition:
  - condition: state
    entity_id: input_boolean.lave_vaisselle_cycle
    state: "off"
action:
  - service: utility_meter.calibrate
    data:
      value: "0"
    target:
      entity_id: sensor.lave_vaisselle_power_cycle
  - service: input_boolean.turn_on
    data: {}
    target:
      entity_id: input_boolean.lave_vaisselle_cycle
  - service: notify.telegram_pascal_ha
    data:
      title: ⚠️ Lave-Vaisselle Depart
      message: |
        ♻ Le cycle de lavage à commencé
mode: single

Et

  • celle de FIN : notification
FIN
alias: "03c - Lave-Vaisselle Fin : Notification"
description: |-
  a la fin du cycle : 
  - reset de l'utility meter
  - notification de la durée et de la consommation du cycle du lave-vaisselle
trigger:
  - type: power
    platform: device
    device_id: 9f4a7bf121c459cf0544a0b0c2a464a5
    entity_id: sensor.0xa4c1389a6388b5b5_power
    domain: sensor
    below: 8
    for:
      hours: 0
      minutes: 30
      seconds: 0
condition: null
action:
  - service: input_boolean.turn_off
    data: {}
    target:
      entity_id: input_boolean.lave_vaisselle_cycle
  - service: notify.telegram_pascal_ha
    data:
      title: ⚠️ Lave-Vaisselle :Fin de Lavage 🍽
      message: >
        {%- set time =
        ((state_attr('automation.03c_lave_vaisselle_notification_fin','last_triggered'))
        -
        (state_attr('automation.03a_lave_vaisselle_start','last_triggered'))).seconds
        -%} {%- set minutes = ((time % 3600) / 60) | round | int -%} {%- set
        hours = ((time % 86400) / 3600) | int -%} {{ now().strftime("%d/%m/%Y")
        }} 

        🔄 debut de cycle : {{
        ((state_attr('automation.03a_lave_vaisselle_start','last_triggered')) |
        as_local).strftime("%Hh%M") }} 

        🔃 Fin de cycle : {{
        (state_attr('automation.03c_lave_vaisselle_notification_fin','last_triggered')|
        as_local).strftime("%Hh%M") }} 

        🕐 Durée du cycle {{ '{:01}h{:02}m'.format(hours, minutes) }} 

        ⚡ Puissance : {{ states('sensor.lave_vaisselle_power_cycle') | round
        }}Kwh 

        💰 cout : {{ (states('sensor.lave_vaisselle_power_cycle') |
        float(default=0) * (states('sensor.edf_tempo_prix_actuel')|
        float(default=0)) /10) | round(3) }}€         
  - service: notify.telegram_isabelle_ha
    data:
      title: ⚠️ Lave-Vaisselle :Information 🍽
      message: >
        {%- set time =
        ((state_attr('automation.03c_lave_vaisselle_notification_fin','last_triggered'))
        -
        (state_attr('automation.03a_lave_vaisselle_start','last_triggered'))).seconds
        -%} {%- set minutes = ((time % 3600) / 60) | round | int -%} {%- set
        hours = ((time % 86400) / 3600) | int -%} {{ now().strftime("%d/%m/%Y")
        }} 

        🔄 debut de cycle : {{
        ((state_attr('automation.03a_lave_vaisselle_start','last_triggered')) |
        as_local).strftime("%Hh%M") }} 

        🔃 Fin de cycle : {{
        (state_attr('automation.03c_lave_vaisselle_notification_fin','last_triggered')|
        as_local).strftime("%Hh%M") }} 

        🕐 Durée du cycle {{ '{:01}h{:02}m'.format(hours, minutes) }} 

        ⚡ Puissance : {{ states('sensor.lave_vaisselle_power_cycle') | round
        }}Kwh 

        💰 cout : {{ (states('sensor.lave_vaisselle_power_cycle') |
        float(default=0) * (states('sensor.edf_tempo_prix_actuel')|
        float(default=0)) /10) | round(3) }}€  
  - service: notify.lave_vaisselle
    data:
      message: >
        {{ now().strftime("%d/%m/%Y") }} ; {{
        ((state_attr('automation.03a_lave_vaisselle_start', 'last_triggered')) |
        as_local).strftime("%Hh%M") }} ; {{ now().strftime("%Hh%M") }} ; {{
        ((now() - (state_attr('automation.03a_lave_vaisselle_start',
        'last_triggered'))).seconds / 3600 )| int }}h{{ (((now() -
        (state_attr('automation.03a_lave_vaisselle_start',
        'last_triggered'))).seconds % 3600 )/60 )| round }}m ; {{
        states('sensor.lave_vaisselle_power_cycle') }}Wh ; {{
        (states('sensor.lave_vaisselle_power_cycle') | float(default=0) *
        (states('sensor.edf_tempo_prix_actuel')| float(default=0)) /10) |
        round(3) }}€        
mode: single

J’ai ajouté cette condition dans FIN , Je vais tester. Merci

Salut,
C’est exactement ça.

Perso, je préfère avoir 3 automations pour que le temps de fin soit le plus précis possible

Oui, j’ai commencé avec les 3 automatisations, mais je recevais du coup l’information de fin de cycle avec 1 heure de retard (suivant le temps réglé)

Avec 3, tu peux être aussi précis que 2, il suffit de mettre les bonnes valeurs dans le trigger;)

Hello,
J’essaie d’appliquer la même chose, mais à l’utilisation de mon chauffe-eau.
En gros, mon chauffe-eau est autorisé (via switch Zigbee) à tourner 5h par jour, mais via le sensor power du chauffe-eau, on voit qu’il tourne moins que 5h.
L’idée, serait d’afficher le temps d’utilisation de l’appareil au-dessus de 2 000w par exemple
image
Si quelqu’un à une idée sur la façon d’interpréter cette carte :grinning:

Que ce soit un chauffe-eau, lave-linge, lave-vaisselle, charge de batterie, la solution fournie s’appplique également : Obtenir le temps d'utilisation d'un appareil électrique sur une période donnée - #21 par roumano

Après, si tu veut juste un sensor journalier qui affiche le temps utiliser, il te faut :

  • ce type de sensor : ( a adapter le nom & la source )
    - name: "portail_en_fonctionnement"
      unique_id: "portail_en_fonctionnement"
      state: >
        {% if states('sensor.circuit_12_power') | int >= 10 %}
          on
        {% else %}
          off
        {% endif %}

  • puis un history_stats sur celui-ci :
- platform: history_stats
  name: "temps allumage portail today"
  unique_id: "temps allumage portail today"
  entity_id: sensor.portail_en_fonctionnement
  state: 'on'
  type: time
  start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
  end: "{{ now() }}"

cf Obtenir le temps d'utilisation d'un appareil électrique sur une période donnée

C’est parfait, je te remercie :ok_hand:t2:
image

Salut,
j’ai repris ton principe , du sensor par rapport a la puissance de la prise.

    - name: 'Ordinateur en fonctionnement'
      unique_id: 'ordinateur_en_fonctionnement'
      state: >
        {% if states('sensor.0xa4c138244f6e91e3_power') | int(0) >= 10 %}
          on
        {% else %}
          off
        {% endif %}

    - name: 'Télévision en fonctionnement'
      unique_id: 'television_en_fonctionnement'
      state: >
        {% if states('sensor.0xa4c138d4c17833b3_power') | int(0) >= 10 %}
          on
        {% else %}
          off
        {% endif %}

Et les history_stats pour le calcul de la journée:

- platform: history_stats
  name: Temps Allumage Ordinateur
  unique_id: "temps_allumage_ordinateur"
  entity_id: sensor.ordinateur_en_fonctionnement
  state: 'on'
  type: time
  start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
  end: "{{ now() }}"

- platform: history_stats
  name: Temps Allumage Télévision
  unique_id: "temps_allumage_television"
  entity_id: sensor.television_en_fonctionnement
  state: 'on'
  type: time
  start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
  end: "{{ now() }}"

J’ai un problème de calcul de temps. Le premier des deux template sensor qui sera démarrer met l’heure du lancement + augmente les min, tandis que les deuxième ca cacul bien .
Pour aujourd’hui le PC a tourner que 3h30 , mais ca a calculer l’heure de lancement a 3h57 + 3h30 d’activité .Ca me donne un totaux de 7h28 au lieu de 3h30 :frowning:

Je vois pas ou j’aurais fait un erreur ?

Surement sur le % de la puissance ? a voir en veille la conso sur ton sensor ?

Bonjour,
@roumano @Doubledom j’ai trouver mon erreur, je m’étaait tromper sur la commande start:.

j’avais mis:

start: "{{ now().replace(hour=0, minute=0, second=0) }}"

au lieu de:

start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"

Fallai que j’attende 24h pour que je calcul soit bon. A minuit, tout c’est remis a zéro et compte comme il faut pour la journée :wink: