Bonjour tous le monde,
Je suis en train de me prendre la tête avec cette automatisation… J’ai besoin de vos lumières !
Ma configuration :
J’ai ouvert ma cuisine sur mon salon pour en faire une grande pièce à vivre. J’ai une enceinte echo dans la cuisine et une barre de son dans le salon. Lorsque j’écoute la même musique sur les 2 appareils (en multiroom), je ne peux pas régler les 2 au même niveau sonore sinon on entends que l’echo de la cuisine.
J’ai donc créé un input_number (input_number.balance_rez_de_chaussee) pour pouvoir indiquer la différence de niveau sonore de l’un en fonction de l’autre.
Le but de l’automatisation :
Le principe de l’automation est assez simple. J’aimerais par exemple monter et descendre le volume du multiroom.
Usecases :
1/ Pour cela je veux pouvoir gérer manuellement le volume sur la bar de son et que l’automation monte aussi le volume de l’echo.
2/ Évidemment, je veux pouvoir faire la même manipulation a partir de m’echo pour que l’automation monte le volume de la barre de son.
3/ Dans tous les autres cas (lancement de la musique, changement de l’input_number), je veux que le volume soit ajusté sur la cuisine en se basant sur le volume de la barre de son
Le problème que je rencontre :
J’ai commencer à rencontrer une boucle infinie car mon trigger d’automation est aussi l’entité que je modifie à l’intérieur. J’ai donc voulu ajouter une condition pour dire que :
SI l’update du trigger est antérieur à la date de trigger de mon automation, Alors c’est un cas passant et j’execute mon automation.
Malheureusement, les résultats ne sont pas probant et le debug des timestamps dans developer-tools/template fait crash mon instance d’HA…
Avez-vous une idée ?
Et voici le code qui ne marche pas super bien… :
- alias: Balance rez-de-chaussée
trigger:
- platform: state
entity_id: media_player.rez_de_chaussee
to: 'playing'
- platform: state
entity_id:
- media_player.rez_de_chaussee
- media_player.echo_cuisine
- media_player.barre_de_son
attribute: volume_level
for: 5
- platform: state
entity_id: input_number.balance_rez_de_chaussee
condition:
- "{{ is_state('media_player.rez_de_chaussee', 'playing') }}"
- "{{ trigger.entity_id not in ['media_player.echo_cuisine', 'media_player.barre_de_son'] or states[trigger.entity_id].last_updated - state_attr('automation.balance_rez_de_chaussee', 'last_triggered') >= timedelta(seconds=10) }}"
variables:
percent: "{{ (-1 if trigger.entity_id == 'media_player.echo_cuisine' else 0) + (states('input_number.balance_rez_de_chaussee') | int / 100) }}"
action:
- service: media_player.volume_set
data:
entity_id: "{{ 'media_player.barre_de_son' if trigger.entity_id == 'media_player.echo_cuisine' else 'media_player.echo_cuisine' }}"
volume_level: "{{ state_attr('media_player.barre_de_son' if trigger.entity_id == 'media_player.echo_cuisine' else 'media_player.echo_cuisine', 'volume_level') | float(0) + state_attr('media_player.barre_de_son' if trigger.entity_id == 'media_player.echo_cuisine' else 'media_player.echo_cuisine', 'volume_level') | float(0) * percent }}"
Merci beaucoup !
Juicy !