[TUTO] Créer sa carte de maintenance des taches à la maison - Home Maintenance

Bonjour à tous !

j’ai mis en place un système de maintenance divers et variés de la maison sur HA.
je profite de cette mise en place pour vous la partager.

Avantages de cette intégration par rapport à un calendrier de base :

  • avoir le nombre de jours entre chaque maintenance
  • calcul et remise de la date future quand l’action a été faite.
  • visualisation synthétique des retards

Une fois l’intégration installée, redémarrage de Home Assistant et, simplement, l’intégration est présente dans la sidebar.

Depuis cette intégration vous allez pouvoir ajouter vos différents types de maintenance :

Exemple ici, vous ajoutez :

  • le nom de la tâche
  • interval entre les maintenances en jour
  • en jour
  • la date de la dernière maintenance
  • une icône
  • label
  • tag (on pourrait créer un tag en amont et l’utiliser pour valider le jour de la maintenance ! )

Ensuite et c’est là où je peux vous partager mon code, c’est la partie dashboard :

Ma carte :

Cette carte permet de lister toutes les maintenances que l’on a pu créer
Permet d’avoir :

  • le nombre de jours restants
  • la date de la prochaine maintenance
  • la date de la dernière maintenance

Un tap ou double tap permet de mettre à jour le device en maintenance (avec confirmation)

Le code :

type: custom:auto-entities
card:
  type: entities
filter:
  include:
    - integration: 01KE48XB3MH0PAZ6R2676CR2YD
      options:
        type: custom:mushroom-template-card
        entity: this.entity_id
        fill_container: false
        multiline_secondary: true
        primary: "{{ state_attr(config.entity, 'friendly_name') }}"
        secondary: >
          {% set next_due = as_datetime(state_attr(config.entity,'next_due')) %}
          {% set last = as_datetime(state_attr(config.entity,'last_performed'))
          %} {% set today = now().date() %} {% set days = (next_due.date() -
          today).days %}

          {% if days < 0 %} 
            ⚠️ Retard de {{ -days }} jours
          {% elif days == 0 %} 
            🔔 À faire aujourd'hui
          {% else %} 
            ⏳ Dans {{ days }} jours 
          {% endif %}

          📅 Prévu le : {{ next_due.strftime('%d/%m/%Y') }}

          ✅ Fait le : {{ last.strftime('%d/%m/%Y') }}
        icon: "{{ state_attr(config.entity, 'icon') }}"
        icon_color: >
          {% set next_due =
          as_datetime(state_attr(config.entity,'next_due')).date() %} {% set
          today = now().date() %} {% set days = (next_due - today).days %} {% if
          days <= 0 %} red  {% elif days <= 3 %} orange  {% else %} green  {%
          endif %}
        tap_action:
          action: perform-action
          perform_action: home_maintenance.reset_last_performed
          data:
            entity_id: this.entity_id
          confirmation:
            text: Confirmer la réalisation de cette tâche
        double_tap_action:
          action: perform-action
          perform_action: home_maintenance.reset_last_performed
          data:
            entity_id: this.entity_id
          confirmation:
            text: Confirmer la réalisation de cette tâche ?
sort:
  method: state
  numeric: true


Oliv

5 « J'aime »

Pour mettre en place un système de notification, vous pouvez vous baser sur ce code :

Ici, tous les matins à 9h, check des dates des différentes tâches.
Si J-1 alors notification par un message que la tache est prévue demain !
Si J+X, notification que la tâche est dépassée.

alias: Notification Maintenance Maison
description: Rappel J-1 et retard - Correction finale TypeError
triggers:
  - at: "09:00:00"
    trigger: time
actions:
  - repeat:
      for_each: >
        {{ integration_entities('home_maintenance') | select('match',
        'binary_sensor') | list }}
      sequence:
        - variables:
            next_due_attr: "{{ state_attr(repeat.item, 'next_due') }}"
            next_due_ts: "{{ as_timestamp(next_due_attr) | default(0) }}"
            today_ts: >-
              {{ as_timestamp(now().replace(hour=0, minute=0, second=0,
              microsecond=0)) }}
            days_left: "{{ ((next_due_ts - today_ts) / 86400) | round(0) | int }}"
            friendly_name: "{{ state_attr(repeat.item, 'friendly_name') }}"
        - choose:
            - conditions:
                - condition: template
                  value_template: "{{ days_left == 1 }}"
              sequence:
                - action: notify.mobile_app_pixel_9a_oliv
                  data:
                    title: ⏳ Rappel Maintenance
                    message: La tâche '{{ friendly_name }}' est à faire demain !
                    data:
                      ttl: 0
                      priority: high
                      notification_icon: mdi:tools
            - conditions:
                - condition: template
                  value_template: "{{ days_left <= 0 }}"
              sequence:
                - action: notify.mobile_app_pixel_9a_oliv
                  data:
                    title: ⚠️ Information maintenance
                    message: |
                      {% if days_left == 0 %}
                        La tâche '{{ friendly_name }}' est à faire AUJOURD'HUI !
                      {% else %}
                        La tâche '{{ friendly_name }}' est en retard de {{ days_left | abs }} jours !
                      {% endif %}
                    data:
                      ttl: 0
                      priority: high
                      notification_icon: mdi:tools
mode: parallel
max: 10

3 « J'aime »

Intéressant comme idée, merci pour le partage.
Par contre je vois une coquille dans ta capture concernant l’arrosage. Je ne comprend pas pourquoi ça marque du retard alors que tu as 7jours d’avance…

Bonjour,

très intéressant pour moi.

Merci beaucoup.

1 « J'aime »

Merci !
En fait , il ne s’agit pas d’une coquille :wink:

La date du dernier arrosage a eu lieu le 07/01/2026
Ce qui était prévu, c’était donc 7 jours plus tard soit le 14/01/2026
Et le 21/01/2026 (date du post) , ce n’était toujours pas fait, donc 7 jours de retard :wink:

Depuis, j’ai réalisé la tâche et ma plante m’a remercié ! :laughing:

1 « J'aime »

Ok ! Je comprend mieux merci

Bonjour,

est-ce que chez vous aussi vous avez une erreur au niveau de l’intégration?

Quand je clique sur la tâche et qu’il me demande la confirmation, j’ai ce message:

Échec de l’exécution de l’action home_maintenance/reset_last_performed. value should be a string for dictionary value @ data[‹ entity_id ›]

Avez-vous une idée du problème?

Oui remplace :

tap_action:
  action: perform-action
  perform_action: home_maintenance.reset_last_performed
  target:
    entity_id: this.entity_id
  confirmation:
    text: Confirmer la réalisation de cette tâche
double_tap_action:
  action: perform-action
  perform_action: home_maintenance.reset_last_performed
  target:
    entity_id: this.entity_id
  confirmation:
    text: Confirmer la réalisation de cette tâche ?

par :

tap_action:
  action: perform-action
  perform_action: home_maintenance.reset_last_performed
  data:
    entity_id: this.entity_id
  confirmation:
    text: Confirmer la réalisation de cette tâche
double_tap_action:
  action: perform-action
  perform_action: home_maintenance.reset_last_performed
  data:
    entity_id: this.entity_id
  confirmation:
    text: Confirmer la réalisation de cette tâche ?

il faut en fait remplacer target par data

Super merci beaucoup.

1 « J'aime »

Super tuto.

Je cherche depuis longtemps un moyen de gérer l’entretien de la maison et je ne connaissais pas cette intégration. L’affichage sur un calendrier n’était pas adapté à mon sens …

Grâce a ton code, cela remplit a 100% mon besoin.

Merci pour le partage

1 « J'aime »