Automatisation périodique "coincée" sans raison apparente

Bonjour,

Mon problème

Mon automatisation de chauffage ne va pas au bout de son execution, sans vraiment de raison dans les traces…

Ce matin je me rends compte que la PAC tourne toujours alors qu’elle aurait du être coupée par l’automatisation de chauffage. Tous les booléens et schedulers utilisés dans l’automatisations sont bien définis et dans l’état suivant:

  • mode auto: ON
  • saison chauffage: ON
  • override temporaire: OFF
  • tarif rouge: OFF
  • Scheduler: Off
le code de l'automatisation:
alias: PAC - gestion auto chauffage
description: |-
  Toutes les 10 minutes.
  En saison de chauffage. En mode auto et sans override temporaire. 
  Réglage automatique du chauffage en fonction du planning et du tarif:
  -  Chauffe à la temperature de consigne si planifié, sinon PAC off. 
  -  Si tarif rouge => PAC off.
mode: restart
triggers:
  - minutes: /10
    trigger: time_pattern
  - entity_id:
      - input_boolean.chauffage_mode_auto
    to: "on"
    trigger: state
conditions:
  - condition: state
    entity_id: input_boolean.chauffage_mode_auto
    state: "on"
    alias: Le chauffage est en mode AUTO
  - condition: state
    entity_id: input_boolean.saison_chauffage
    state: "on"
    alias: La saison est en mode Chauffage (mode hiver)
  - condition: state
    entity_id: input_boolean.pac_override_temporaire
    state: "off"
    alias: L'override temporaire n'est pas activé
actions:
  - alias: Réglage auto du chauffage en fonction du tarif
    choose:
      - conditions:
          - condition: state
            entity_id: input_boolean.tarif_rouge
            state: "off"
        sequence:
          - choose:
              - conditions:
                  - condition: state
                    entity_id: schedule.planning_chauffage
                    state: "on"
                sequence:
                  - device_id: 5b89093e82e42fe555148e26a107faba
                    domain: climate
                    entity_id: fe8907573739d862acee9459abe1c731
                    type: set_hvac_mode
                    hvac_mode: heat
                  - data:
                      temperature: >-
                        {{states('input_number.temperature_confort_hiver')|int
                        }}
                    target:
                      entity_id: climate.pac
                    action: climate.set_temperature
                alias: >-
                  planning Chauffage => allumer PAC en chauffage et régler la
                  temperature
              - conditions:
                  - condition: state
                    entity_id: schedule.planning_chauffage
                    state: "off"
                sequence:
                  - device_id: 5b89093e82e42fe555148e26a107faba
                    domain: climate
                    entity_id: fe8907573739d862acee9459abe1c731
                    type: set_hvac_mode
                    hvac_mode: "off"
                alias: planning OFF => éteindre la PAC
            alias: test du scheduler
        alias: >-
          Tarif rouge est Désactivé => régler le chauffage en fonction du
          planning
      - conditions:
          - condition: state
            entity_id: input_boolean.tarif_rouge
            state: "on"
        sequence:
          - device_id: 5b89093e82e42fe555148e26a107faba
            domain: climate
            entity_id: climate.pac
            type: set_hvac_mode
            hvac_mode: "off"
        alias: Tarif Rouge est activé => éteindre la PAC

Je suis en mode « restart » pour cette automatisation, qui est triggée toutes les 10min:

Dans ma comprehension, si un truc bloque, genre melcloud ne passe pas la commande vers la PAC qui serait injoignable, l’automatisation sera au pire « débloquée » toutes les 10 minutes…

MelCloud n’était à priori pas cassé, puisque la PAC renvoyait bien son état. De plus j’ai réussi à la mettre « manuellement » sur OFF vers 11h17… (manuellement via HA, depuis le dashboard, donc via les mêmes contrôles que l’automatisation)

Ci dessous les traces des 5 dernières executions au moment du souci:

les 5 dernières executions :

En regardant les traces, je me rends compte que les 3 premières executions semblent « en attente » de quelque chose, mais quoi ? Et ont été arrêtées à 11h17 alors que j’aurais cru qu’elles seraient arrêtées par l’execution suivante de l’automatisation 10 min plus tard.
Je ne comprend pas non plus le runtime observé sur les premières traces alors que l’automatisation est en mode restart, donc le trigger aurait du « tuer » les premières traces après 10min non?

A11h17, j’ai manuellement coupé la PAC, puis j’ai commencé à « troubleshooter » en testant les différentes conditions de l’automatisation.

Les executions suivantes se passent bien…

On dirait donc que les actions de 11h17 ont « réveillé » un truc. Mais comment éviter que ce type de blocage se reproduise ?

J’ai d’ores et déjà modifé l’automatisation pour garder plus de traces pour le prochain coup…

trace:
  stored_traces: 50

Depuis tout roule…

Ma configuration


HAOS
Clim pilotée via MelCloud


Ce soir à 17h, la PAC a démarré comme d’habitude.

Mystère…

Si quelqu’un à une piste pour:

  • comprendre le phénomène
  • éviter qu’il ne se reproduise

Je suis intéressé !

Les seuls cas où ça a planté (depuis quelques années ou ça tourne) étaient pour l’instant liés à MelCloud:

  • soit le service cloud KO => donc perte du controle par HA (de l’interret de rester en local…).
  • soit une indispo temporaire qui avait planté l’automatisation alors que le service était revenu d’où le passage de l’automatisation en mode « restart » pour palier au problème.

Salut,

comme ça vite fait pourquoi un check toutes les 10 minutes ?
Tu as une liste de conditions, tu les mets tous en trigger et du coup dès qu’un bouge, ça fait l’analyse lancement … Exit le toutes les 10min

Question légitime! Et dans un monde idéal, je ferai comme ça aussi…

Mais,

  • Parce que la (télé)commande de la PAC est toujours accessible (montée sur le mur).
  • parce que cette télécommande est notre back-up si melCloud tombe (car on n’est pas passé en local sur ce point (mais ce truc me fait de l’oeil)).
  • parce que si quelqu’un y touche, le principe sur les PAC mitsubishi, c’est que le dernier qui cause à raison, donc la télécommande « gagne » sur HA.

Du coup pour éviter que « quelqu’un » relance la PAC à fond parce qu’il fait froid en jour rouge, et que ça tourne jusqu’au prochain changement d’état d’un des booléens, j’ai ce check à 10min…

ben climate.pac change d’état aussi non ?

C’est pas faux… Il y aurait peut être un peu de lag lié au cloud à regarder, mais rien d’insurmontable…

Faut que je teste climate.pac et sa target de temperature comme trigger puisque ce sont les deux principaux trucs qu’on peut faire varier avec la télécommande…

Je peux aussi tenter faire un truc sioux pour détecter ce genre d’input « manuels » et passer en mode « override temporaire » lorsqu’on manipule la télécommande pour volontairement déverrouiller, avec un timer en jour rouge pour pas chauffer plus de 10min…

PS: c’est une de mes premières automatisations, ça tourne depuis le début de mon HA.


Mais quid de cette automation « qui coince »… parce que là j’avoue que je ne comprend pas vraiment ce qui a pu coincer ni pourquoi les triggers suivants ne l’ont pas sortie du coma…

On dirait que ça reste coincé au niveau du test du booléen tarif rouge (qui n’a pas bougé depuis l’hiver dernier), mais je n’ai pas les traces du moment exact où ça commence à bloquer…

Ce qui coince sans la totalité des traces avec tous les steps… Pas facile à dire

Sur le snapshot de 11h10 on voit que quand ça débloque il fait le test du booléen tarif rouge (qui est dans les actions, pas dans les conditions), 7min apres le trigger…

Mais j’ai vérifié, il n’a pas bougé depuis des mois ce booléen…

Vraiment bizarre ton déroulé…

On a l’impression qu’il a du mal à accéder à ton entité scheduler : 7 minutes dans l’une des exécutions pour commencer à dérouler le switch.

Tu peux nous donner le détail de ton scheduler ?

Note : les premiers échecs sont déterministes (environ 2200 secondes), cela ressemble à un timeout global d’automatisation de HA.

Je pense que ça bloque à l’étape juste précédant le test du scheduler, sur l’évaluation du booléen tarif rouge avec le choix:

  • soit la branche / on fait rien
  • soit la branche où on teste le scheduler pour savoir si on chauffe ou pas

Le fameux sceduler:


Et l’historique de la PAC qui ne s’est pas coupée à 8h mais coupée à 11h17 et a redémarré à 17h comme prévu

Et RAS sur les jours précédents…

J’ai le JSON d’une des traces (celle de 11h00 il me semble):

{
  "trace": {
    "last_step": "condition/2/entity_id/0",
    "run_id": "5e20af8daf86d4adfc0ce054a6a803b5",
    "state": "stopped",
    "script_execution": "cancelled",
    "timestamp": {
      "start": "2025-11-24T10:00:00.435664+00:00",
      "finish": "2025-11-24T10:17:08.874477+00:00"
    },
    "domain": "automation",
    "item_id": "1668017338369",
    "trigger": "time pattern",
    "trace": {
      "trigger/0": [
        {
          "path": "trigger/0",
          "timestamp": "2025-11-24T10:00:00.435724+00:00",
          "changed_variables": {
            "this": {
              "entity_id": "automation.test_gestion_chauffage",
              "state": "on",
              "attributes": {
                "id": "1668017338369",
                "last_triggered": "2025-11-23T12:40:00.436283+00:00",
                "mode": "restart",
                "current": 1,
                "icon": "mdi:air-conditioner",
                "friendly_name": "PAC - gestion auto chauffage"
              },
              "last_changed": "2025-11-22T18:04:02.447132+00:00",
              "last_reported": "2025-11-23T12:40:00.437889+00:00",
              "last_updated": "2025-11-23T12:40:00.436362+00:00",
              "context": {
                "id": "01KARBMWNKV2Y881ZKVT6KJARX",
                "parent_id": null,
                "user_id": null
              }
            },
            "trigger": {
              "id": "0",
              "idx": "0",
              "alias": null,
              "platform": "time_pattern",
              "now": "2025-11-24T11:00:00.435420+01:00",
              "description": "time pattern"
            }
          }
        }
      ],
      "condition/0": [
        {
          "path": "condition/0",
          "timestamp": "2025-11-24T10:00:00.435783+00:00",
          "result": {
            "result": true
          }
        }
      ],
      "condition/0/entity_id/0": [
        {
          "path": "condition/0/entity_id/0",
          "timestamp": "2025-11-24T10:00:00.435824+00:00",
          "result": {
            "result": true,
            "state": "on",
            "wanted_state": "on"
          }
        }
      ],
      "condition/1": [
        {
          "path": "condition/1",
          "timestamp": "2025-11-24T10:00:00.435918+00:00",
          "result": {
            "result": true
          }
        }
      ],
      "condition/1/entity_id/0": [
        {
          "path": "condition/1/entity_id/0",
          "timestamp": "2025-11-24T10:00:00.435951+00:00",
          "result": {
            "result": true,
            "state": "on",
            "wanted_state": "on"
          }
        }
      ],
      "condition/2": [
        {
          "path": "condition/2",
          "timestamp": "2025-11-24T10:00:00.436013+00:00",
          "result": {
            "result": true
          }
        }
      ],
      "condition/2/entity_id/0": [
        {
          "path": "condition/2/entity_id/0",
          "timestamp": "2025-11-24T10:00:00.436041+00:00",
          "result": {
            "result": true,
            "state": "off",
            "wanted_state": "off"
          }
        }
      ]
    },
    "config": {
      "id": "1668017338369",
      "alias": "PAC - gestion auto chauffage",
      "description": "Toutes les 10 minutes.\nEn saison de chauffage. En mode auto et sans override temporaire. \nRéglage automatique du chauffage en fonction du planning et du tarif:\n-  Chauffe à la temperature de consigne si planifié, sinon PAC off. \n-  Si tarif rouge => PAC off.",
      "trigger": [
        {
          "platform": "time_pattern",
          "minutes": "/10"
        },
        {
          "platform": "state",
          "entity_id": [
            "input_boolean.chauffage_mode_auto"
          ],
          "to": "on"
        }
      ],
      "condition": [
        {
          "condition": "state",
          "entity_id": "input_boolean.chauffage_mode_auto",
          "state": "on",
          "alias": "Le chauffage est en mode AUTO"
        },
        {
          "condition": "state",
          "entity_id": "input_boolean.saison_chauffage",
          "state": "on",
          "alias": "La saison est en mode Chauffage (mode hiver)"
        },
        {
          "condition": "state",
          "entity_id": "input_boolean.pac_override_temporaire",
          "state": "off",
          "alias": "L'override temporaire n'est pas activé"
        }
      ],
      "action": [
        {
          "alias": "Réglage auto du chauffage en fonction du tarif",
          "choose": [
            {
              "conditions": [
                {
                  "condition": "state",
                  "entity_id": "input_boolean.tarif_rouge",
                  "state": "off"
                }
              ],
              "sequence": [
                {
                  "choose": [
                    {
                      "conditions": [
                        {
                          "condition": "state",
                          "entity_id": "schedule.planning_chauffage",
                          "state": "on"
                        }
                      ],
                      "sequence": [
                        {
                          "device_id": "5b89093e82e42fe555148e26a107faba",
                          "domain": "climate",
                          "entity_id": "fe8907573739d862acee9459abe1c731",
                          "type": "set_hvac_mode",
                          "hvac_mode": "heat"
                        },
                        {
                          "data": {
                            "temperature": "{{states('input_number.temperature_confort_hiver')|int }}"
                          },
                          "target": {
                            "entity_id": "climate.pac"
                          },
                          "action": "climate.set_temperature"
                        }
                      ],
                      "alias": "planning Chauffage => allumer PAC en chauffage et régler la temperature"
                    },
                    {
                      "conditions": [
                        {
                          "condition": "state",
                          "entity_id": "schedule.planning_chauffage",
                          "state": "off"
                        }
                      ],
                      "sequence": [
                        {
                          "device_id": "5b89093e82e42fe555148e26a107faba",
                          "domain": "climate",
                          "entity_id": "fe8907573739d862acee9459abe1c731",
                          "type": "set_hvac_mode",
                          "hvac_mode": "off"
                        }
                      ],
                      "alias": "planning OFF => éteindre la PAC"
                    }
                  ],
                  "alias": "test du scheduler"
                }
              ],
              "alias": "Tarif rouge est Désactivé => régler le chauffage en fonction du planning"
            },
            {
              "conditions": [
                {
                  "condition": "state",
                  "entity_id": "input_boolean.tarif_rouge",
                  "state": "on"
                }
              ],
              "sequence": [
                {
                  "device_id": "5b89093e82e42fe555148e26a107faba",
                  "domain": "climate",
                  "entity_id": "climate.pac",
                  "type": "set_hvac_mode",
                  "hvac_mode": "off"
                }
              ],
              "alias": "Tarif Rouge est activé => éteindre la PAC"
            }
          ]
        }
      ],
      "mode": "restart"
    },
    "blueprint_inputs": null,
    "context": {
      "id": "01KATMWMNK2S4R2XFVVCYB29QP",
      "parent_id": null,
      "user_id": null
    }
  },
  "logbookEntries": []
}

Et si on regarde dans l’interface:
la dernière étape des conditions est bien effectuée:
si on clique sur
image
On obtient

le premier check des actions n’est pas effectué (démarre par le test du booléen puis si OFF le test du scheduler):
si on clique sur
image

On obtient

Le booléen tarif rouge est dans le recorder et il n’a pas bougé.
Le scheduler n’est pas enregistré, donc je n’ai pas de trace de son état entre 8h et 11h17, mais à 11h17 il était bien off quand j’ai vérifié avant de couper la clim via le climate.PAC…

Ton input boolean est dynamique dans sa construction ?

Que veux tu dire par là ?

Il est défini dans l’ui

Et j’ai une automatisations pour le passer à on ou off lorsque le tarif change.

Je pensais à une construction par template qui se repose sur un appel REST ou autre.

Pas d’autre idée pour le moment, désolé.

Pas d’idée non plus.

Le truc roule depuis des années sans soucis, et roule sans soucis aussi depuis.

Le coup de l’execution coincée comme ça j’avoue que j’avais pas vu, et je ne comprend pas non plus vraiment le mode « restart » qui n’interrompt pas l’execution précédente.

Même si un boson de Higgs a perturbé l’automatisation pour l’empêcher d’aller au bout, je ne comprend pas pourquoi les triggers suivants n’ont pas décoincé le truc?

Bon tu m’as fait réfléchir et du coup j’ai refait entièrement mon automatisation…

le code de l'automatisation principale
alias: Gestion automatique du chauffage - v2.0
description: >-
  Lorsque l'etat d'un booléen: Auto - override - scheduler - tarif rouge change

  Si on est en saison de chauffage, en mode auto et sans override temporaire. 
  - Désactivation temporaire de la detection de changement de la PAC (overide
  temporaire)
  - Réglage automatique du chauffage en fonction du planning et du tarif:
    -  Chauffe à la temperature de consigne si planifié, sinon PAC off. 
    -  Si tarif rouge => PAC off.
  - ECAM pour le debug.

triggers:
  - trigger: state
    entity_id:
      - input_boolean.chauffage_mode_auto
      - input_boolean.pac_override_temporaire
      - input_boolean.saison_chauffage
      - schedule.planning_chauffage
      - input_boolean.tarif_rouge

conditions:
  - condition: state
    entity_id: input_boolean.chauffage_mode_auto
    state: "on"
    alias: Le chauffage est en mode AUTO
  - condition: state
    entity_id: input_boolean.saison_chauffage
    state: "on"
    alias: La saison est en mode Chauffage (mode hiver)
  - condition: state
    entity_id: input_boolean.pac_override_temporaire
    state: "off"
    alias: L'override temporaire n'est pas activé

actions:
  - action: input_boolean.turn_on
    alias: Désactivation de la detection de changement manuel de la PAC
    metadata: {}
    data: {}
    target:
      entity_id: input_boolean.pac_detect_inhib
  - alias: Réglage auto du chauffage en fonction du tarif
    choose:
      - conditions:
          - condition: state
            entity_id: input_boolean.tarif_rouge
            state: "off"
        sequence:
          - alias: test du scheduler
            choose:
              - conditions:
                  - condition: state
                    entity_id: schedule.planning_chauffage
                    state: "on"
                sequence:
                  - device_id: 5b89093e82e42fe555148e26a107faba
                    domain: climate
                    entity_id: fe8907573739d862acee9459abe1c731
                    type: set_hvac_mode
                    hvac_mode: heat
                  - data:
                      temperature: >-
                        {{states('input_number.temperature_confort_hiver')|int
                        }}
                    target:
                      entity_id: climate.pac
                    action: climate.set_temperature
                  - action: script.ecam_publish
                    metadata: {}
                    data:
                      message: "PAC: Chaud auto"
                alias: >-
                  planning Chauffage => allumer PAC en chauffage et régler la
                  temperature
              - conditions:
                  - condition: state
                    entity_id: schedule.planning_chauffage
                    state: "off"
                sequence:
                  - device_id: 5b89093e82e42fe555148e26a107faba
                    domain: climate
                    entity_id: fe8907573739d862acee9459abe1c731
                    type: set_hvac_mode
                    hvac_mode: "off"
                  - action: script.ecam_publish
                    metadata: {}
                    data:
                      message: "PAC: Auto Off"
                alias: planning OFF => éteindre la PAC
              - conditions: []
                sequence:
                  - action: script.ecam_publish
                    metadata: {}
                    data:
                      message: Etat scheduler inconnu
        alias: >-
          Tarif rouge est Désactivé => régler le chauffage en fonction du
          planning
      - conditions:
          - condition: state
            entity_id: input_boolean.tarif_rouge
            state: "on"
        sequence:
          - device_id: 5b89093e82e42fe555148e26a107faba
            domain: climate
            entity_id: climate.pac
            type: set_hvac_mode
            hvac_mode: "off"
          - action: script.ecam_publish
            metadata: {}
            data:
              message: "PAC: Auto Rouge "
        alias: Tarif Rouge est activé => éteindre la PAC
      - conditions: []
        sequence:
          - action: script.ecam_publish
            metadata: {}
            data:
              message: Etat Tarif inconnu
    enabled: true
  - delay:
      hours: 0
      minutes: 0
      seconds: 5
      milliseconds: 0
  - action: input_boolean.turn_off
    alias: Réactivation de la detection de changement manuel de la PAC
    metadata: {}
    data: {}
    target:
      entity_id: input_boolean.pac_detect_inhib
mode: restart
trace:
  stored_traces: 50


le code de l'automatisation qui détecte les inputs manuels

On passe alors en mode « override temporaire » pour 30 min max.

alias: Detection changement PAC
description: >-
  Lorsque la PAC change de mode, de temperature cible ou de mode de
  ventilation. 


  Si la detection n'est pas inhibée


  On passe en mode manuel temporaire (override temp), on publie un ECAM et on
  lance le timer pour 30min
triggers:
  - trigger: state
    entity_id:
      - climate.pac
    to: null
  - trigger: state
    entity_id:
      - climate.pac
    attribute: temperature
  - trigger: state
    entity_id:
      - climate.pac
    attribute: fan_mode
conditions:
  - condition: state
    entity_id: input_boolean.pac_detect_inhib
    state:
      - "off"
actions:
  - action: input_boolean.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: input_boolean.pac_override_temporaire
  - action: script.ecam_publish
    metadata: {}
    data:
      message: "PAC: Manuel Ponctuel"
  - action: timer.start
    metadata: {}
    data:
      duration: "1800"
    target:
      entity_id: timer.minuteur_pac
mode: single



J’ai ajouté un nouveau booléen pour inhiber la detection de changement de mode / temperature / ventilation de la PAC lorsque c’est l’automatisation qui gère et je fais la même chose dans les scripts qui sont exposés à Alexa.

Les différents appel au script ecam_publish me permettent d’avoir des log perso qui me servent pour l’instant au debug… J’avais décrit comment j’utilise ce truc là dans mon fil de présentation

Pour l’instant ça tourne…

Je n’ai pas encore « rénové » l’automatisation de gestion de la clim, mais ce sera le même principe…


Bon tout ça n’explique pas le blocage observé l’autre jour…

Histoire de tenter de bétonner le truc, j’ai ajouté une condition toujours vraie dans les choose relatif au tarif tempo et au mode du scheduler histoire de ne pas coincer dans ces tests:


Je suis pas sûr que ça suffise à eviter un bug mais bon…

Oui, et si tu veux vérifier que c’est plus malin, tu compteras le nombre d’excécution dans la journée, versus 1 toutes les 10 minutes, ça doit probablement être significatif :wink:
Et même si tu n’arrives pas à trouver le blocage, moins d’exécutions ça donne diminue forcément le cas ça se produit, en plus de pouvoir les trouver plus facilement dans le lot, s’il y en a.

Tu devrai aussi virer les appels appareils comme device_id: 5b89093e82e42fe555148e26a107faba et utiliser les appels entités du genre entity_id: climate.pac à la place, beaucoup plus lisible, et portable (tu remplaces physiquement l’appareil le device_id change forcément alors que tu peux réutiliser le entity_id

Merci ! C’est fait… c’était des vieux restes, c’était pas vraiment apparent via l’UI donc j’ai pas fait gaffe…

Peut être une piste… j’ai laissé des traces de débug dans mon automatisation, et aujourd’hui j’ai activé une branche qui ne devrait pas s’activer:

Je vous la fait courte:

  • l’activation de ce matin était sur le basculement du scheduler « planing chauffage » à « on »
  • cette partie là de l’automatisation teste si
    • planing chauffage est on => allumage chauffage en mode confort
    • planning chauffage est off => extinction du chauffage
    • pas de condition => notification de truc pas net sur le scheduler

Et ce matin j’ai eu ma notification de truc pas net à 5h:

Bref ça ressemble pas mal aux traces que j’ai eu là: Automatisation périodique "coincée" sans raison apparente - #12 par BBE sauf que je n’avais pas la branche de secours…

Bon je n’ai pas mon scheduler dans le recorder, donc je ne sais pas ce qu’il a fait à 5h ce matin… :face_with_symbols_on_mouth:

En tout cas l’automatisation ne s’est pas coincée. C’est positif ! :+1:

C’est peut être un bon retour d’expérience, mettez des branches « de secours » dans vos choose, au moins sur des automatisations critiques…

Bref je ne regrette pas d’avoir fait ça: