Une erreur dans un script bloque le reste du script

Bonjour à tous

J’ai créé des scripts pour allumer et éteindre mon home cinéma, mais j’ai un problème à l’extinction. Lorsque je demande l’extinction du vidéoprojecteur, l’intégration JVC projector exécute la commande et attends un résultat, qui est vide et ne correspond pas à ses attentes, donc il bloque le script.
Solution 1 : faire en sorte que le script continue quand même
Solution 2 : modifier le fichier python pour qu’il accepte une réponse vide (mais OU est ce fichier ?)

Merci d’avance pour votre aide et vos idées !

Erreur : Sensor sensor.jvc_projector_power_status provides state value ‹  ›, which is not in the list of options provided
Résultat :

params:
domain: remote
service: turn_off
service_data: {}
target:
device_id:
- e8efa01d3c2444bdacd65d4f54cbdffe
running_script: false

alias: Éteindre le Home Cinéma
sequence:
  - service: kodi.call_method
    metadata: {}
    data:
      method: System.shutdown
    target:
      device_id: 65cac9d0c1020e57b5caff665e6aa8eb
  - type: turn_off
    device_id: e8efa01d3c2444bdacd65d4f54cbdffe
    entity_id: 809dec7936e1180281dcb2c08a4585b6
    domain: remote
    enabled: false
  - service: remote.turn_off
    metadata: {}
    data: {}
    target:
      device_id: e8efa01d3c2444bdacd65d4f54cbdffe
  - delay:
      hours: 0
      minutes: 0
      seconds: 20
      milliseconds: 0
  - type: turn_off
    device_id: 56250fed24d872a601870db6fe5faf96
    entity_id: 99c0a8bb04236c8d85f9a1325a055d3b
    domain: switch
  - delay:
      hours: 0
      minutes: 1
      seconds: 30
      milliseconds: 0
  - type: turn_off
    device_id: f18d9abbb943d7ae8a0551420cd04ba9
    entity_id: 88c4b680a34ecc07eeac5cb1e93b06c1
    domain: switch
mode: single
icon: mdi:theater

Ma configuration


System Information

version core-2024.4.1
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.2
os_name Linux
os_version 6.6.20-haos
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.34.0
Stage running
Available Repositories 1398
Downloaded Repositories 4
HACS Data ok
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 12.1
update_channel stable
supervisor_version supervisor-2024.04.0
agent_version 1.6.0
docker_version 24.0.7
disk_total 117.4 GB
disk_used 3.5 GB
healthy true
supported true
board generic-aarch64
supervisor_api ok
version_api ok
installed_addons Advanced SSH & Web Terminal (17.2.0), Samba share (12.3.1)
Dashboards
dashboards 2
resources 0
views 0
mode storage
Recorder
oldest_recorder_run 7 avril 2024 à 07:05
current_recorder_run 17 avril 2024 à 08:25
estimated_db_size 28.82 MiB
database_engine sqlite
database_version 3.44.2
___

Je dis peut-être une bétise, mais as-tu essayé de mettre un continue_on_error: true dans tes actions?

Je vais me documenter sur le champ de cette option que je n’ai pas trouvé dans mes recherches, et qui n’apparait pas dans l’interface graphique.
Merci @Gilles2 , je reviens dire ce qu’il en est !
Je teste donc ce script ce soir :

alias: Éteindre le Home Cinéma
sequence:
  - service: kodi.call_method
    metadata: {}
    data:
      method: System.shutdown
    target:
      device_id: 65cac9d0c1020e57b5caff665e6aa8eb
  - type: turn_off
    continue_on_error: true
    device_id: e8efa01d3c2444bdacd65d4f54cbdffe
    entity_id: 809dec7936e1180281dcb2c08a4585b6
    domain: remote
    - delay:
      hours: 0
      minutes: 0
      seconds: 20
      milliseconds: 0
  - type: turn_off
    device_id: 56250fed24d872a601870db6fe5faf96
    entity_id: 99c0a8bb04236c8d85f9a1325a055d3b
    domain: switch
  - delay:
      hours: 0
      minutes: 1
      seconds: 30
      milliseconds: 0
  - type: turn_off
    device_id: f18d9abbb943d7ae8a0551420cd04ba9
    entity_id: 88c4b680a34ecc07eeac5cb1e93b06c1
    domain: switch
mode: single
icon: mdi:theater

Bonjour,
explication dans la doc sur continue_on_error:

Script Syntax

Documentation for the Home Assistant Script Syntax.

Continuer sur erreur

Par défaut, une séquence d’actions sera interrompue lorsqu’une des actions de cette séquence rencontrera une erreur. L’automatisation ou le script sera arrêté, une erreur est enregistrée et l’automatisation ou l’exécution du script est marquée comme erronée.

Parfois, ces erreurs sont attendues, par exemple parce que vous savez que le service que vous appelez peut parfois poser problème, et peu importe s’il échoue. Vous pouvez définir continue_on_error ces cas sur une telle action.

Le continue_on_error est disponible sur toutes les actions et est défini sur false . Vous pouvez le définir true si vous souhaitez continuer la séquence d’actions, que cette action rencontre ou non une erreur.

J’ai vu aussi que ça fonctionnait uniquement si l’intégration utilise bien les standards de programmation de HA. On va regarder ça.

Ma première modification directe via YML :partying_face:

Si tu as fait ton automatisation par l’UI jusqu’à aujourd’hui, j’espère qu’elle respecte bien les standards.

Pour les modifications du yaml, Tu verras, on s’y fait. Attention à bien respecter les espaces en début de lignes :wink:

Bon, bah raté, malgré que l’interface reconnaisse bien « Continuer en cas d’erreur », il s’arrête.
Il ne s’arrête pas lorsque l’action se déclenche, mais quand le vidéoprojecteur s’éteint effectivement, après la période de refroidissement.
Peut-être donc qu’il détecte cette erreur pendant le timer que j’ai mis et pas pendant l’exécution.
Je vais essayer de mettre le continue on error sur le delay pour voir. J’ai peu d’espoir, ce serait étrange que ça fonctionne comme ça, mais bon…

Edit : ah bah non, il ne veut pas de continue on error sur un delai. Je cherche.

Le « continue_on_error » est effectivement pour les actions, pour que si une action d’une automatisation a un problème, les autres actions se fassent quand même.
Peux-tu nous détailler un peu ton autmatisation, car avec les device_id et entity_id, pas facile de comprendre la séquence des actions ! :slight_smile:
Par ailleurs, l’erreur que tu as partagé au début concerne sensor.jvc_projector_power_status. Comment est défini ce sensor? Il faut peut-être cherche de ce côté là aussi.

C’est une séquence pour éteindre le vidéoprojecteur proprement.
1 - appel de kodi pour qu’il s’éteigne sur le RPI
2 - appel de JVC pour éteindre le VP
3 - pause de 20 secondes le temps que le RPI s’éteigne
4 - appel de Meross pour couper la prise connectée du RPI
5 - pause de 1minute 30 pour que le VP refroidisse
6 - appel de Meross pour couper la prise connectée du JVC

C’est le 2 qui bloque.
Le sensor est défini automatiquement par l’intégration JVC, et est activé.

Je ne suis pas un grand spécialiste du yaml. J’ai appris sur le tas en faisant mes automatisations, mais si tu regardes le yaml de ton automatisation, dans la section suivante:

  - type: turn_off
    continue_on_error: true
    device_id: e8efa01d3c2444bdacd65d4f54cbdffe
    entity_id: 809dec7936e1180281dcb2c08a4585b6
    domain: remote
    - delay:
      hours: 0
      minutes: 0
      seconds: 20
      milliseconds: 0

la partie delay ne semble pas indentée correctement. En tous cas, pas de la même façon que le delay de la partie Meross. Tu devrais essayer de decaler :

  - type: turn_off
    continue_on_error: true
    device_id: e8efa01d3c2444bdacd65d4f54cbdffe
    entity_id: 809dec7936e1180281dcb2c08a4585b6
    domain: remote
  - delay:
    hours: 0
    minutes: 0
    seconds: 20
    milliseconds: 0

C’est une erreur de copié coller, en vrai c’est ça :

  - type: turn_off
    continue_on_error: true
    device_id: e8efa01d3c2444bdacd65d4f54cbdffe
    entity_id: 809dec7936e1180281dcb2c08a4585b6
    domain: remote
 - delay:
      hours: 0
      minutes: 0
      seconds: 20
      milliseconds: 0

et si je met l’indentation hour minute seconds au niveau des autres comme tu le propose, ça me met un message d’erreur de syntaxe.

Tu as raison, la bonne syntaxe est avec les hour, minutes, etc. tabulés après delay. J’aurais dû vérifier.
Néanmoins, il doit y avoir 2 espaces devant hours, minutes, etc. Il y en a 3 dans ce que tu as copié au-dessus (le « h » de hours devrait être sous le « l » de delay).
Je ne sais pas si ça explique le problème…

Non c’est pas là le problème, j’en ai bien 2 dans HA.
Je fais des tests…

Je ne sais pas comment tu faits tes copier-coller de ton code yaml vers le forum. Peux-tu nous remettre l’ensemble du code tel que dans ton fichier automation.yaml s’il te plait?
Difficile d’aider si ce que tu partages n’est pas ce que tu as en réalité.
Si tu regardes la trace de ton automation, que dit HA?

Hum, je pense que les erreurs de copier coller viennent quand je fait ctrl+a pour tout sélectionner, puis ctrl+c ctl+v. Si je passe par le lien « copier dans le presse papier » ça me donne ça actuellement (j’ai essayé une autre approche pour éteindre le VP, mais rien de mieux) :

alias: Éteindre le Home Cinéma
sequence:
  - service: kodi.call_method
    metadata: {}
    data:
      method: System.shutdown
    target:
      device_id: 65cac9d0c1020e57b5caff665e6aa8eb
  - type: turn_off
    continue_on_error: true
    device_id: e8efa01d3c2444bdacd65d4f54cbdffe
    entity_id: 809dec7936e1180281dcb2c08a4585b6
    domain: remote
    enabled: false
  - service: remote.turn_off
    continue_on_error: true
    metadata: {}
    data: {}
    target:
      device_id: e8efa01d3c2444bdacd65d4f54cbdffe
  - delay:
      hours: 0
      minutes: 0
      seconds: 20
      milliseconds: 0
  - type: turn_off
    device_id: 56250fed24d872a601870db6fe5faf96
    entity_id: 99c0a8bb04236c8d85f9a1325a055d3b
    domain: switch
  - delay:
      hours: 0
      minutes: 1
      seconds: 30
      milliseconds: 0
  - type: turn_off
    device_id: f18d9abbb943d7ae8a0551420cd04ba9
    entity_id: 88c4b680a34ecc07eeac5cb1e93b06c1
    domain: switch
mode: single
icon: mdi:theater

Voici la capture de la trace, toujours la même erreur : Sensor sensor.jvc_projector_power_status provides state value ‹  ›, which is not in the list of options provided

J’aurais bien fait plusieurs blocs en parallèle, mais pas sûr que ce soit possible

Je ne sais pas comment marche l’intégration JVC, mais pourquoi avoir une commande qui désactive le projecteur (Désactiver JVC Projector), puis une commande télécommande « Eteindre » sur JVC Projector ?
Si le projecteur est désactivé, c’est peut-être pour ça qu’il ne trouve pas le sensor en question.

C’est mes essais, la première étape est désactivée. Il y a plusieurs solution pour éteindre le VP donc j’essaie les différentes façons de faire. Mais une seule à la fois bien entendu.

Je ne pense pas que ça change quoi que ce soit, mais dans la doc, le continue_on_error est présenté comme le premier élément de l’action. Si tu n’as pas déjà essayé, tu peux essayer de le mettre en premier, avant ton service: remote.turn_off.
Ca ne coûte rien d’essayer…

Yep merci je vais tenter ça

Bon, pas de miracle, le problème est toujours là.
Je mets en pause quelque temps ce problème particulier, je fais en manuel la dernière étape en attendant.
J’aimerai éditer le code de l’intégration pour essayer (et parce que j’ai vu la fonction correspondante), mais je n’ai pas encore compris comment y accéder (le log parle de /usr/src que je ne voit pas en ssh, console ou en samba). Je vais creuser un peu.
Merci pour le suivi :+1: