Certaines instructions d'un script ignorées

Mon problème

Hello,

J’ai créé un script « heure du coucher », pour tout éteindre et m’assurer que la porte est bien verrouillée. Je l’appelle dans ma routine « bonne nuit » dans Google Assistant mais obtiens le même comportement en l’appelant directement dans HA.

Cependant, certaines instructions semblent totalement ignorées.
Les lumières et l’interrupteur semblent bien s’éteindre (j’ai testé en aln’allumant que certaines), la porte me log bien un verrouillage, par contre pour ce qui est des ventilateurs ça ventile toujours malgré ce que j’appelle.
Et aucune erreur dans le log…

Même avec homeassistant.turn_of j’ai le même résultat, initialement je voulais tout éteindre d’un seul appel mais j’ai abandonné à cause du même souci.
D’après ce que je me souviens ça n’éteignait rien du tout :slight_smile: j’ai également tenté d’indenter à un de moins ou un de plus les entités ou les services à appeler, jamais d’ereur mais jamais d’extinction de ventilateur.

J’ai sûrement fait une erreur, du coup qu’est-ce qui pourrait faire que mon script n’est pas exécuté dans son intégralité ?

Voici le script en question, pourtant si basique :

heure_du_coucher:
  description: éteint toutes les lumières et verrouille la porte d'entrée
  alias: Heure du coucher
  sequence:
    - service: lock.lock
      data: {}
      entity_id: lock.porte_d_entree
    - service: light.turn_off
      entity_id:
        - light.lustre_chambre
        - light.spot_canape
        - light.spot_cuisine
        - light.spot_fenetre
    - service: switch.turn_off
      entity_id:
        - switch.lustre_bureau
    - service: fan.turn_off
      entity_id:
        - fan.ventilateur_bureau
        - fan.diffuseur_bureau
        - fan.diffuseur_salon
  mode: single

Ma configuration


System Health

version core-2021.8.7
installation_type Home Assistant Container
dev false
hassio false
docker true
user root
virtualenv false
python_version 3.9.6
os_name Linux
os_version 5.10.0-8-amd64
arch x86_64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
Github API Calls Remaining 4920
Installed Version 1.13.2
Stage running
Available Repositories 932
Installed Repositories 5
Home Assistant Cloud
logged_in true
subscription_expiration 20 août 2021 à 02:00
relayer_connected true
remote_enabled true
remote_connected true
alexa_enabled false
google_enabled true
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Lovelace
dashboards 2
resources 2
views 2
mode yaml
___

Salut.
Si tu appelle le service fan.turn_off sur 1 ventilateur depuis l’onglet développeur ça marche ?

1 « J'aime »

Une erreur dans les actions précédentes arrête le déroulement du script.

Donc : une erreur sur une action interrompt le script.

Pas d’erreur dans le log ? Rien du tout ?

:face_with_monocle:

Oui, ça marche.

Absolument, aucune erreur.

J’en ai du coup profité pour tester plus attentivement et c’est encore plus étrange que je ne le pensais.
En allumant tous les appareils, seul un ne s’éteint pas avec le script, en tout cas dans les faits parce que pour Home Assistant, il est éteint.
Par contre, par l’onglet développeur il s’éteint en appelant fan.turn_off.

Maintenant, vous me demanderais (ou pas) : qu’est-ce qui les différencie ?
Ceux qui s’éteignent sont des diffuseurs connectés sous ESPHome, du coup autonomes dans leurs actions.
Celui qui ne s’éteint pas est un fan template, qui appelle un script pour utiliser un broadlink RM Mini et changer les input sensors pour notifier du changement d’état.
Est-ce que le fait que le script appelle fan.turn_off qui appelle à son tour un script ferait que ce dernier script ne serait pas exécuté tout en ne créant aucune erreur dans le log ?
Je n’avais pas encore pensé à ça jusqu’alors…

Non… (sauf erreur de prog sur les template fan que je n’utilise pas…issue ?)

@Pulpy t’a montré la voie :

Mets une action par appareil.

Si cela ne suffit pas, mets un délai de 1 secondes entre chaque action (jamais eu besoin mais c’est ce qui est préconisé lorsque ça fonctionne à la main, on est moins rapide que la machine.)

1 « J'aime »

Finalement, c’est toi qui m’a mis sur la voie avec ton délai :slight_smile:
Car ça m’a fait (encore) plus attentivement relir mon script et constater que juste avant, c’est la lumière du bureau, elle aussi contrôlée via le RM Mini, que j’éteins.
Du coup, ça fait deux instructions demandées au Broadlink qui n’en fait plus qu’une.
J’ai essayé de tricher en éteignant la lumière avant toute autre instruction mais la machine est encore trop rapide, un délai d’une seconde avant fan.turn_off a fait l’affaire.
Et comme les souvenirs viennent en écrivant, une alternative aurait pu être d’envoyer directement la séquence de comandes avec remote.send_command, mais ça impliquerait que du coup le fan template et le switch ne seraient pas mis à jour côté HA. Il faudrait finalement faire les deux pour avoir tout à jour :wink: du coup le délai reste effectivement la meilleure solution je pense.

Le nouveau script
heure_du_coucher:
  description: éteint toutes les lumières et verrouille la porte d'entrée
  alias: Heure du coucher
  sequence:
    - service: lock.lock
      data: {}
      entity_id: lock.porte_d_entree
    - service: light.turn_off
      entity_id:
        - light.lustre_chambre
        - light.spot_canape
        - light.spot_cuisine
        - light.spot_fenetre
    - service: switch.turn_off
      entity_id:
        - switch.lustre_bureau
    - delay: 00:00:01
    - service: fan.turn_off
      entity_id:
        - fan.ventilateur_bureau
        - fan.diffuseur_bureau
        - fan.diffuseur_salon
  mode: single

Merci @Pulpy et @Clemalex !