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 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 ?
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-Luke 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
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 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-Luke et @Clemalex !