Suivre un appareil électroménager (Lave-vaisselle, Lave-linge, Sèche-linge…)

Suivi de la consommation et des cycles du lave-vaisselle

Pour suivre précisément l’état, la durée, la consommation et le coût des cycles de mon lave-vaisselle, j’ai mis en place une série de capteurs et d’automatisations dans Home Assistant. Voici comment j’ai procédé, étape par étape.

1. Capteur d’état du lave-vaisselle

J’ai créé un capteur nommé sensor.etat_lave_vaisselle qui me permet de connaître l’état actuel de l’appareil : Éteint, Veille ou En marche. Cet état est déterminé en fonction de la puissance consommée, mesurée par sensor.lave_vaisselle_power, qui provient d’une prise connectée.

De manière empirique, j’ai défini les seuils suivants :

  • Éteint : moins de 1 W
  • Veille : entre 1 W et 20 W
  • En marche : plus de 20 W
Lave-vaisselle éteint

Éteint

Lave-vaisselle en veille

Veille

Lave-vaisselle en marche

En marche

Voici le template que j’ai ajouté dans mon fichier templates.yaml pour créer ce capteur :

- name: "État Lave-vaisselle"
  unique_id: sensor.etat_lave_vaisselle
  state: >
    {% set power = states('sensor.lave_vaisselle_power') | float(0) %}
    {% if power < 1 %}
      Éteint
    {% elif power < 20 %}
      Veille
    {% else %}
      En marche
    {% endif %}
  icon: >
    {% if is_state('sensor.etat_lave_vaisselle', 'Éteint') %}
      mdi:power-plug-off
    {% elif is_state('sensor.etat_lave_vaisselle', 'Veille') %}
      mdi:sleep
    {% elif is_state('sensor.etat_lave_vaisselle', 'En marche') %}
      mdi:dishwasher
    {% else %}
      mdi:help-circle
    {% endif %}

2. Capteurs de début et fin de cycle

Pour enregistrer les horaires de début et de fin du dernier cycle, j’ai créé deux capteurs de type input_datetime via Paramètres/Appareils et services/Entrées :

  • input_datetime.dernier_cycle_lave_vaisselle_debut
  • input_datetime.dernier_cycle_lave_vaisselle_fin

Ces capteurs sont configurés au format Date et heure.

3. Capteurs de consommation au début et à la fin du cycle

Pour calculer la consommation d’énergie pendant un cycle, j’ai créé deux capteurs de type input_number :

  • input_number.dernier_cycle_lave_vaisselle_conso_au_debut : enregistre la consommation en kWh au début du cycle.
  • input_number.dernier_cycle_lave_vaisselle_conso_a_la_fin : enregistre la consommation en kWh à la fin du cycle.

J’ai mis 1000000 en valeur maximale (on verra bien).

4. Capteur de durée du cycle

Ce capteur calcule la durée du cycle en heures et minutes, en se basant sur les horaires de début et de fin enregistrés. Voici le template utilisé dans templates.yaml :

- name: "Durée Cycle Lave-Vaisselle"
  unique_id: sensor.duree_cycle_lave_vaisselle
  state: >
    {% set start = states('input_datetime.dernier_cycle_lave_vaisselle_debut') %}
    {% set end = states('input_datetime.dernier_cycle_lave_vaisselle_fin') %}

    {% if start not in ['unknown', 'unavailable', 'none', 'None']
          and end not in ['unknown', 'unavailable', 'none', 'None'] %}
      {% set start_t = as_timestamp(strptime(start, '%Y-%m-%d %H:%M:%S')) %}
      {% set end_t = as_timestamp(strptime(end, '%Y-%m-%d %H:%M:%S')) %}

      {% if end_t < start_t %}
        Cycle en cours
      {% else %}
        {% set total_seconds = end_t - start_t %}
        {% set hours = (total_seconds // 3600) | int %}
        {% set minutes = ((total_seconds % 3600) // 60) | int %}
        {{ "%dh%02d" | format(hours, minutes) }}
      {% endif %}
    {% endif %}
  icon: mdi:clock-outline

5. Capteur de consommation du cycle

Ce capteur calcule la consommation totale du cycle en kWh, en soustrayant la consommation au début de celle à la fin. Il prend également en compte les cas où le compteur aurait été réinitialisé.

- name: "Consommation Cycle Lave-Vaisselle"
  unique_id: sensor.consommation_cycle_lave_vaisselle
  unit_of_measurement: "kWh"
  device_class: energy
  state_class: measurement
  state: >
    {% set debut = states('input_number.dernier_cycle_lave_vaisselle_conso_au_debut') | float(0) %}
    {% set fin = states('input_number.dernier_cycle_lave_vaisselle_conso_a_la_fin') | float(0) %}
    {% set consommation = fin - debut %}

    {% if consommation < 0 %}
      0
    {% else %}
      {{ consommation | round(3) }}
    {% endif %}
  icon: mdi:lightning-bolt-circle

6. Capteur de coût du cycle

Pour calculer le coût du cycle, j’utilise un capteur qui multiplie la consommation en kWh par le prix du kWh, défini dans input_number.prix_manuel_du_kwh. Voici le template :

- name: "Coût Cycle Lave-Vaisselle"
  unique_id: sensor.cout_cycle_lave_vaisselle
  unit_of_measurement: "€"
  device_class: monetary
  state: >
    {{ states('sensor.consommation_cycle_lave_vaisselle') | float(0) * states('input_number.prix_manuel_du_kwh') | float(0) | round(4) }}
  icon: mdi:currency-eur

7. Capteur de cycle en cours

Pour éviter les erreurs de détection, j’ai ajouté un capteur de type input_boolean :

  • input_boolean.cycle_lave_vaisselle_en_cours : indique si un cycle est en cours.

8. Automatisations pour le suivi des cycles

Enfin, j’ai créé trois automatisations pour :

  • Détecter le début d’un cycle et enregistrer la consommation et l’heure de début.
  • Détecter la fin d’un cycle et enregistrer la consommation et l’heure de fin.
  • Réinitialiser le suivi si le cycle dépasse 6 heures (sécurité).
alias: Cycle lave-vaisselle - Début
description: ""
triggers:
  - entity_id:
      - sensor.etat_lave_vaisselle
    to: En marche
    trigger: state
    from: Éteint
    for:
      hours: 0
      minutes: 0
      seconds: 20
conditions:
  - condition: state
    entity_id: input_boolean.cycle_lave_vaisselle_en_cours
    state: "off"
    alias: Si on n'a pas déjà un cycle en cours
actions:
  - action: input_boolean.turn_on
    target:
      entity_id: input_boolean.cycle_lave_vaisselle_en_cours
    data: {}
    alias: Cycle en cours passe à ON
  - action: input_number.set_value
    data:
      entity_id: input_number.dernier_cycle_lave_vaisselle_conso_au_debut
      value: "{{ states('sensor.lave_vaisselle_energy') | float }}"
    alias: Sauvegarder la valeur de la conso kWh au début
  - action: input_datetime.set_datetime
    data:
      entity_id: input_datetime.dernier_cycle_lave_vaisselle_debut
      datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
    alias: Sauvegarder heure et date du début de cycle


alias: Cycle lave-vaisselle - Fin
description: ""
triggers:
  - trigger: numeric_state
    entity_id:
      - sensor.lave_vaisselle_power
    for:
      hours: 0
      minutes: 5
      seconds: 0
    below: 20
conditions:
  - condition: state
    entity_id: input_boolean.cycle_lave_vaisselle_en_cours
    state: "on"
actions:
  - action: input_number.set_value
    data:
      entity_id: input_number.dernier_cycle_lave_vaisselle_conso_a_la_fin
      value: "{{ states('sensor.lave_vaisselle_energy') | float }}"
    alias: Sauvegarder la conso à la fin
  - action: input_datetime.set_datetime
    data:
      entity_id: input_datetime.dernier_cycle_lave_vaisselle_fin
      datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
    alias: Sauvegarde Heure et Date de la fin de cycle
  - action: input_boolean.turn_off
    target:
      entity_id: input_boolean.cycle_lave_vaisselle_en_cours
    data: {}
    alias: Désactiver Cycle en cours

alias: Cycle lave-vaisselle - Cycle trop long
description: "Réinitialise le flag si le cycle dépasse 6h"
trigger:
  - platform: state
    entity_id: input_boolean.cycle_lave_vaisselle_en_cours
    to: "on"
    for: "06:00:00"
action:
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.cycle_lave_vaisselle_en_cours

Création d’une vue dédiée pour l’électroménager

Pour visualiser clairement l’état et les données de mon lave-vaisselle, j’ai créé une carte personnalisée dans Home Assistant. Cette carte me permet de suivre en temps réel la puissance consommée, l’état de l’appareil, ainsi que les informations sur le dernier cycle effectué. Voici le résultat final et une explication détaillée du code utilisé.

Carte de suivi du lave-vaisselle dans Home Assistant

Explication du code de la carte

Le code ci-dessous définit une vue organisée en sections pour afficher les informations relatives à mon lave-vaisselle. Voici une description de chaque élément :

type: sections
max_columns: 4
title: Electro
path: electro
icon: mdi:washing-machine
sections:
  - type: grid
    cards:
      - type: heading
        heading: Lave-vaisselle
        heading_style: title
        icon: mdi:dishwasher

Explication : Cette section définit une vue nommée « Electro » avec une icône de machine à laver. Le titre principal de la section est « Lave-vaisselle », affiché avec une icône de lave-vaisselle. La structure est de type grid, ce qui permet d’organiser les cartes dans une grille flexible.

      - type: custom:button-card
        entity: sensor.etat_lave_vaisselle
        name: Lave-vaisselle
        show_state: true
        show_icon: true
        color_type: icon
        styles:
          card:
            - height: 183px
        state:
          - value: En marche
            color: "#1e90ff"
            styles:
              icon:
                - animation: blink 2s ease infinite
          - operator: default
            color: "#49556c"
        grid_options:
          columns: 6
          rows: 3

Explication : Cette carte utilise le composant custom:button-card pour afficher l’état actuel du lave-vaisselle (sensor.etat_lave_vaisselle). Elle montre à la fois l’icône et l’état. Si le lave-vaisselle est « En marche », l’icône clignote en bleu (#1e90ff). Sinon, elle reste grise (#49556c). La carte occupe 6 colonnes et 3 lignes dans la grille.

      - type: gauge
        entity: sensor.lave_vaisselle_power
        min: 0
        needle: true
        severity:
          green: 0
          yellow: 60
          red: 1700
        grid_options:
          columns: 6
          rows: 3
        name: Puissance
        unit: W
        max: 1800

Explication : Cette carte est un indicateur de type gauge (jauge) qui affiche la puissance actuelle consommée par le lave-vaisselle (sensor.lave_vaisselle_power). La jauge est graduée de 0 à 1800 W, avec des zones de couleur pour indiquer la sévérité : vert pour une faible consommation, jaune pour une consommation modérée, et rouge pour une consommation élevée. La jauge occupe également 6 colonnes et 3 lignes dans la grille.

      - type: custom:mushroom-entity-card
        entity: input_datetime.dernier_cycle_lave_vaisselle_debut
        icon_color: light-green
        name: Début
        grid_options:
          columns: 4
          rows: 1
        layout: vertical

Explication : Cette carte utilise le composant custom:mushroom-entity-card pour afficher l’heure de début du dernier cycle (input_datetime.dernier_cycle_lave_vaisselle_debut). L’icône est en vert clair et la carte est organisée verticalement. Elle occupe 4 colonnes et 1 ligne dans la grille.

      - type: custom:mushroom-entity-card
        entity: input_datetime.dernier_cycle_lave_vaisselle_fin
        icon_color: red
        name: "Fin"
        grid_options:
          columns: 4
          rows: 1
        layout: vertical

Explication : Cette carte affiche l’heure de fin du dernier cycle (input_datetime.dernier_cycle_lave_vaisselle_fin). L’icône est en rouge pour une meilleure visibilité. Elle occupe 4 colonnes et 1 ligne dans la grille.

      - type: custom:mushroom-entity-card
        entity: sensor.duree_cycle_lave_vaisselle
        icon_color: orange
        name: Durée
        grid_options:
          columns: 4
          rows: 1
        layout: vertical

Explication : Cette carte affiche la durée du dernier cycle (sensor.duree_cycle_lave_vaisselle). L’icône est en orange et la carte est organisée verticalement. Elle occupe 4 colonnes et 1 ligne dans la grille.

      - type: custom:mushroom-entity-card
        icon_color: light-green
        name: Conso dernier cycle
        entity: sensor.consommation_cycle_lave_vaisselle

Explication : Cette carte affiche la consommation d’énergie du dernier cycle (sensor.consommation_cycle_lave_vaisselle). L’icône est en vert clair. Elle utilise les paramètres par défaut pour la taille dans la grille.

      - type: custom:mushroom-entity-card
        icon_color: light-green
        name: Coût dernier cycle
        entity: sensor.cout_cycle_lave_vaisselle

Explication : Cette carte affiche le coût du dernier cycle (sensor.cout_cycle_lave_vaisselle). L’icône est également en vert clair. Elle utilise les paramètres par défaut pour la taille dans la grille.

      - type: custom:apexcharts-card
        header:
          show: true
          title: Puissance (7 derniers jours)
          show_states: true
          colorize_states: true
        graph_span: 7d
        series:
          - entity: sensor.lave_vaisselle_power
            name: " "
        apex_config:
          chart:
            height: 450
          stroke:
            curve: stepline

Explication : Cette carte utilise le composant custom:apexcharts-card pour afficher un graphique de la puissance consommée sur les 7 derniers jours (sensor.lave_vaisselle_power). Le graphique est colorisé et affiche les états. La hauteur du graphique est définie à 450 pixels pour une meilleure lisibilité.

Avantages de cette vue

  • Centralisation des informations : Toutes les données relatives au lave-vaisselle sont regroupées en un seul endroit, ce qui facilite le suivi.
  • Visualisation claire : Les cartes personnalisées et les couleurs permettent de distinguer rapidement l’état et les données importantes.
  • Suivi en temps réel : La puissance consommée et l’état de l’appareil sont mis à jour en temps réel.
  • Historique accessible : Le graphique permet de visualiser l’évolution de la consommation sur une semaine.

Cette vue est idéale pour surveiller efficacement la consommation et l’utilisation de mon lave-vaisselle, tout en gardant un œil sur les coûts énergétiques.