Condition trigger automatisation

Bonjour à tous,

Je me retrouve bloqué sur une automatisation que je souhaite mettre en place et j’espère que vous pourrez m’aider :slight_smile:

J’ai une automatisation qui TogglePower mon home cinema si la TV s’allume ou s’éteint.
Seulement le temps que la TV soit vue comme « activée » par HomeAssitant, ça prend un petit moment…

J’ai donc ajouté dans l’automatisation que si la TV « est appelée à s’allumer », alors le home cinema s’allume (comme ça j’ai le son direct quand la TV est allumée. Seulement lorsqu’elle est arrive à l’état « activée » sous HomeAssitant, il fait un TogglePower et éteint mon home cinema.

Je souhaitais donc mettre en place 2 automatisations, l’une qui allume/éteint mon home cinéma si la tv a été appelée à démarrer ou s’éteint, et une seconde automatisation qui allume le home cinema lorsque la tv est activée (donc sous condition que la première automatisation n’a pas été activée dans les 30 dernières secondes…).

Et là où je bloque justement, c’est la condition à mettre pour dire « si l’automatisation 1 n’a pas été trigger dans les 30s ».

J’étais partie sur ça, mais on me demande obligatoirement un « state » et je ne sais pas quoi mettre…

En espérant que je me sois bien expliqué et que l’on puisse m’aider :wink:

[EDIT] Si ça peut se faire avec une seule automatisation… C’est le top :smiley:

Merci

Bonjour,

Est-ce que vous pouvez nous communiquer le yaml de votre « automation » d’origine, je pense qu’il est possible de la modifier pour qu’elle fasse le tout.

Mcp

Voici mon automation d’origine (sans la partie avec « est appelé à s’allumer », uniquement tv activée ou désactivée) :

trigger:
  - platform: device
    type: changed_states
    device_id: 0d6dc148b4179b3307abfbeb34993890
    entity_id: media_player.la_tele
    domain: media_player
condition: []
action:
  - service: remote.send_command
    data:
      command: PowerToggle
      device: '77822172'
    target:
      entity_id: remote.harmony_hub

Bonjour,

Donc si je comprends bien à chaque changement de statut de « media_player.la_tele » vous changez l’état de « remote.harmony_hub »

Pouvez-vous me dire quels sont les états possibles de « media_player.la_tele » ?

Par avance merci

Mcp

Bonjour,

C’est bien ça, si la TV change d’état, j’envoie une commande via la « remote.harmony_hub » afin de TogglePower mon home cinema.

Les seuls états possibles de « media_player.la_tele » sont « on » et « off » il me semble (ou les diverses source_list de la TV).

Si besoin de plus d’informations ou que j’explique mieux ce que je souhaite n’hésitez pas !

Merci :slight_smile:

Sans pouvoir connaitre l’état de l’ampli, il n’y aura pas vraiment de solution 100% robuste.

Mais j’essayerais avec un input_boolean créé dans le menu « Entrées ».
Et aussi vérifier l’état de la télé avec un « choose ». Pour faire des actions spécifiques aux états « on » et « off » de la télé.

  • Allumage de la télé demandé. Mettre boolean = on.
  • Quand Télé « Activée ». Si boolean == on, ne rien faire, sinon allumer Ampli et mettre boolean = on.
  • Quand Télé éteinte. Mettre boolean = off.

Mais bon si tu changes d’habitude et que tu allumes l’ampli à la main tout risque de partir de travers, d’ailleurs dans ton automatisation que tu partages, comme c’est juste un changed_states de la télé le trigger, il peut y avoir aussi des surprise de comportement.

Malheureusement l’ampli n’est pas connecté et n’a pas de bouton « on » et « off » mais seulement « TogglePower » ce qui pose en effet problème.

Par contre ta solution me semble logique et efficace mais je ne sais pas comment gérer les boolean (ça fait partie des choses que je n’ai jamais trop compris).

Après le but est de ne pas avoir à allumer l’ampli manuellement car il ne me sert que pour la TV. Si exception il y a, il suffira de resortir la télécommande de façon exceptionnelle…

Si nécessaire je peux changer le « changed_states » par « a été allumé » et « a été éteint » ce qui donnerait :

trigger:
  - platform: device
    device_id: 0d6dc148b4179b3307abfbeb34993890
    domain: media_player
    entity_id: media_player.la_tele
    type: turned_on
  - platform: device
    device_id: 0d6dc148b4179b3307abfbeb34993890
    domain: media_player
    entity_id: media_player.la_tele
    type: turned_off

Merci pour ton retour

Bonjour,

Plus vous limiterez le change du déclencher mieux ce sera, donc je dirai que oui, bien que ne connaissant pas cet état, c’est a vérifier que cela fonction dans les deux cas, mais n’y a-t-il vraiment aucun moyen de savoir l’état de l’ampli, comment HA et l’ampli communique t’il ?

Car même si on gère dans l’automatisation une vérification de l’état de la TV uniquement pour les états allumé et était de la télévision, le résultat sera toujours le même, une simple bascule d’état pour l’allumage de l’ampli.

Il faudra que vous vous astreignez à éteindre l’ampli si celui-ci est allumé avant la TV.

J’ai eu le même type de problème, et pour faire quelque chose de fiable, j’ai mis mon ampli derrière une prise zigbee avec relever de puissance.
Donc dans mes automatisation, j’ai put faire des test avec (si ampli consommme > 10w, alors … )

Salut,

En fait HA à rajouté dans les dernières versions des scripts et des automatisation, pas mal d’options intéressantes pour améliorer le contrôle.
Ce qui est possible c’est de garder ton trigger changed_state sur la télé.
Mais dans les actions utiliser des : « si-alors » qui permettent de rajouter les autres logiques.

Un input boolean c’est juste l’équivalent de switch qui peut est on ou off, mas que tu définis et que tu contrôle toi même avec des services toggle, turn_on ou turn_off. Pour en ajouter un c’est dès simple dans « paramètres>appareils » y’a un onglet « entrées » tu as juste a cliquer sur « + Ajouter un entrée » et choisir interrupteur, tu donnes un nom et un icone et tu sauves. Et voilà… t’as une entité qui 'appelle input_boolean.le_nom_donné

Bonjour,

@mcp , l’ampli ne communique pas directement avec HA, c’est une télécommande infra-rouge logitech (qui est connectée à HA) qui envoie une commande pour allumer ou éteindre l’ampli.
En effet il se peut que parfois j’ai à allumer ou éteindre manuellement l’ampli si il est allumé avant la TV (mais en théorie cela ne devrait pas arriver).

@roumano , c’est une très bonne idée, à l’avenir je passerais peut-être à cette solution.

@AlexHass je n’avais encore jamais utilisé les « Si-alors » et je viens d’essayer de mettre en place cette fonction, mais sans succès… Car si je pars sur ça :

trigger:
  - platform: device
    device_id: 0d6dc148b4179b3307abfbeb34993890
    domain: webostv
    type: webostv.turn_on (est appelé à s'allumer)
  - platform: device
    device_id: 0d6dc148b4179b3307abfbeb34993890
    domain: media_player
    entity_id: media_player.la_tele
    type: turned_off (est éteint)
  - platform: device
    device_id: 0d6dc148b4179b3307abfbeb34993890
    domain: media_player
    entity_id: media_player.la_tele
    type: turned_on (est allumé)

Et que j’utilise en action « Si la TV est allumée, TogglePower l’ampli », ça ne correspondra pas forcément au bon trigger (j’espère que je me fais comprendre).

Il me semble que ce serait possible si je faisais 3 automatisations différentes (une pour chaque trigger) avec le « si-alors » qui lui correspond bien…

Qu’en pensez-vous ? Vous voyez un moyen de le faire en une seule automatisation ?

Concernant l’input_boolean, comment faire pour qu’il réagisse en fonction de l’état de la TV (par exemple) ? Il faut faire une automatisation ?

Salut,

Pour la partie logique basée sur le changement d’état de la télé, j’aurais pensé à un truc comme ça.

  • input_boolean.mon_interrupteur_virtuel c’est ce qui va tenter de garder l’état de ton ampli.
  • switch.prise_ikea c’est juste un exemple que j’ai pris, mais en fait ça ce serait la télécommande.

Partie qui manque c’est une 2eme automatisation qui s’occupe de la logique la télé « est appelée à s’allumer », qui elle doit faire 2 actions: toggle de la télécommande et appeler le service input_boolean.turn_on.

alias: Test Trigger
description: ''
trigger:
  - platform: state
    entity_id:
      - media_player.tele_du_salon
condition: []
action:
  - if:
      - condition: state
        entity_id: media_player.tele_du_salon
        state: 'on'
    then:
      - if:
          - condition: state
            entity_id: input_boolean.mon_interrupteur_virtuel
            state: 'off'
        then:
          - service: switch.toggle
            data: {}
            target:
              entity_id: switch.prise_ikea
          - service: input_boolean.turn_on
            data: {}
            target:
              entity_id: input_boolean.mon_interrupteur_virtuel
    else:
      - service: switch.toggle
        data: {}
        target:
          entity_id: switch.prise_ikea
      - service: input_boolean.turn_off
        data: {}
        target:
          entity_id: input_boolean.mon_interrupteur_virtuel
mode: single

1 « J'aime »

Bonjour,

N’étant pas sûr d’avoir tout compris à 100%, voici ce que j’ai fait (tu me diras si je suis dans le bon).

J’ai créé un input_boolean.hp_logitech puis 2 automatisations :

alias: Test HP1
description: ''
trigger:
  - platform: state
    entity_id:
      - media_player.la_tele
condition: []
action:
  - if:
      - condition: state
        entity_id: media_player.la_tele
        state: 'on'
    then:
      - if:
          - condition: state
            entity_id: input_boolean.hp_logitech
            state: 'off'
        then:
          - service: remote.send_command
            data:
              device: '77822175'
              command: PowerToggle
            target:
              entity_id: remote.harmony_hub
          - service: input_boolean.turn_on
            data: {}
            target:
              entity_id: input_boolean.hp_logitech
    else:
      - service: remote.send_command
        data:
          command: PowerToggle
          device: '77822175'
        target:
          entity_id: remote.harmony_hub
      - service: input_boolean.turn_off
        data: {}
        target:
          entity_id: input_boolean.hp_logitech
mode: single

et

alias: Test HP2
description: ''
trigger:
  - platform: device
    device_id: 0d6dc148b4179b3307abfbeb34993840
    domain: webostv
    type: webostv.turn_on
condition: []
action:
  - service: remote.send_command
    data:
      device: '77822172'
      command: PowerOn
    target:
      entity_id: remote.harmony_hub
  - service: remote.send_command
    data:
      device: '77822175'
      command: PowerToggle
    target:
      entity_id: remote.harmony_hub
  - service: input_boolean.turn_on
    data: {}
    target:
      entity_id: input_boolean.hp_logitech
mode: single

Si je suis dans le bon, ça me semble correct sauf qu’on ne parle jamais de l’état « TV OFF ». on indique juste que si l’état de la TV change (sans préciser quel état ormis « on ») alors on ToggleOff l’ampli et l’input_boolean. Ne serait-il pas préférable de préciser sous forme d’une condition « si la TV passe de « on » à « off » » ?

Encore merci :slight_smile:

Le « off » c’est géré par la partie « else »… sous entendu, si l’état n’est pas à « on ».
En fait c’est bon sauf si la télé peut avoir plus d’états que juste « on » ou « off »… dans ce cas là, dans le « else », c’est possible d’y réimbriquer un « if » pour vérifier si la télé est « off » avant de faire les actions.

J’ai tout mis en place et cela semble parfaitement fonctionner comme ça !

Grâce à vous j’aurais appris des choses :slight_smile:

Un gros merci !

1 « J'aime »

Bonjour,

Pour informations si ça peut servir, j’ai apporté des modifications pour (je pense) simplifier un peu tout ça…

D’abord, j’ai supprimé l’input_boolean pour le remplacer par un switch.
Cela a pour moi deux avantages.
1- Contrôlable sous Google Assistant, possibilité d’allumer / éteindre l’ampli à la voix si besoin.
2- Plus besoin d’appeler 2 services pour gérer l’ampli (remote TogglePower + imput_boolean on/off).

Voici ce que ça donne :

Ajout d’un switch pour contrôler l’ampli:

switch:
  - platform: template
    switches:
      logitech_z906:
        unique_id: Logitech Z906
        turn_on:
          service: remote.send_command
          data:
            device: '77822175'
            command: PowerToggle
          target:
            entity_id: remote.harmony_hub
        turn_off:
          service: remote.send_command
          data:
            device: '77822175'
            command: PowerToggle
          target:
            entity_id: remote.harmony_hub

Ensuite, la première automatisation:

alias: Test HP1
description: ''
trigger:
  - platform: state
    entity_id:
    - media_player.la_tele
  condition: []
  action:
  - if:
    - condition: state
      entity_id: media_player.la_tele
      state: 'on'
    then:
    - if:
      - condition: state
        entity_id: switch.logitech_z906
        state: 'off'
      then:
      - service: switch.turn_on
        data: {}
        target:
          entity_id: switch.logitech_z906
    else:
    - service: switch.turn_off
      data: {}
      target:
        entity_id: switch.logitech_z906
  mode: single

Puis la seconde:

alias: Test HP2
description: ''
trigger:
  - platform: device
    device_id: 0d6dc148b4179b3307abfbeb34993890
    domain: webostv
    type: webostv.turn_on
  condition: []
  action:
  - service: remote.send_command
    data:
      device: '77822172'
      command: PowerOn
    target:
      entity_id: remote.harmony_hub
  - service: switch.turn_on
    data: {}
    target:
      entity_id: switch.logitech_z906

On gagne un paquet de ligne, tout est un peu plus simplifié et le fonctionnement reste le même.

En tous cas j’espère ne pas me tromper :smiley: