Verifié l’état précédent d’une entité dans un scripts

Bonjour,

Je bloque actuellement sur la réalisation de plusieurs scripts.

En effet, je ne parviens pas à faire contrôler l’état précédent d’une entité par le script à la place de l’État actuel.

DSL mais impossible de vous afficher le morceau de script, mon iPad remplace systématiquement tous les espaces par des signes bizarre, quand je colle ça dans le texte préformaté!
Je vous partage donc une photo du code qui pose problème.

Merci d’avance

Hello,

Je ne comprends pas trop ce que tu veux faire, là tu as l’air de vouloir juste regarder ton activité en cours et envoyer une command on/off à ta TV et ta box TV.

Pas besoin de regarder le status d’avant? Apparemment on peut rechercher avec une query SQL la valeur d’une entité à un moment donné:

Mais dans les automatisations tu peux trigger sur from state to state qui serait bien plus simple.

Oui tout à fait, le script présenté n’est pas bon parce qu’il vérifie l’état actuel de l’entité alors que je souhaiterais qu’il vérifie l’état précédent de l’entité.

Le but étant de contrôler mon système multimédia, l’action à réaliser n’est pas la même suivant l’état dans lequel il était et l’état dans lequel je souhaite qu’il soit.

L’action à réaliser n’est pas la même si je passe HCPC à Shield que si je passe de Regarder la TV à Shield

Il me faut donc bien récupérer l’état précédent pour pouvoir ordonner les bonnes actions.

Merci

Bonjour,
Une piste, quand j’ouvre une fenêtre j’enregistre dans un input_txt le preset_mode de mon thermostat et je passe mon preset_mode à away, quand je referme la fenêtre je remets dans le preset_mode la valeur de l’input_text.
Tu peux peut être utiliser le même principe.
Bob

Salut,
Je m’avance peut-être…
Si « HCPC » & « TV » & « Shield » sont des états, alors une automatisation avec 2 trigger:

  • le 1er → Si l’état passe de « HCPC » à « Shield »
  • le 2nd → Si l’état passe de « TV » à « Shield »
    Un ID sur chaque trigger… Le reste c’est de la programmation.
    Mais peut-être que je n’ai pas tout compris ?!
1 « J'aime »

Tout à fait possible le problème ici c’est le nombre de combinaisons possible.

J’ai 5 états possible:
-PowerOff
-Regarder la Tv
-Shield
-HCPC
-AirPlay

Ce qui donne 20 possibilités et du coup je cherchais quelque chose de plus smart.

Merci

OK, je comprends mieux.

Salut

Je vais être con et basique mais moi je vois 5 états.

Exemple :
1 power off j’éteins tout
2 j’allume la TV et j’éteins le reste
3 j’allume la TV et la shield et j’éteins le reste
4 j’allume la TV l’ampli et j’éteins le reste
5 j’allume le périphérique AirPlay et l’ampli et j’éteins le reste

Ce que je veux dire, sur chaque état du demande à allumer ce que tu veux et éteindre le reste. Ce qui est déjà allumé ou éteint ne changera pas d’état et le reste s’allumera ou s’éteindra.

Je vais donc lister les possibilités:
1 PowerOff vers Regarder la TV
2 PowerOff vers Shield
3 PowerOff vers HCPC
4 PowerOff vers AirPlay
5 Regarder la TV vers PowerOff
6 Regarder la TV vers Shield
7 Regarder la TV vers HCPC
8 Regarder la TV vers AirPlay
9 Shield vers PowerOff
10 Shield vers Regarder la TV
11 Shield vers HCPC
12 Shield vers AirPlay
13 HCPC vers PowerOff
14 HCPC vers Regarder la TV
15 HCPC vers Shield
16 HCPC vers AirPlay
17 AirPlay vers PowerOff
18 AirPlay vers Regarder la TV
19 AirPlay vers Shield
20 AirPlay vers HCPC

Il y en a bien 20 et chacune d’entre elles demande des actions différentes suivant l’état précédent voici 2 exemple:
Regarder la TV: Allume la TV l’ampli et la Bbox, HDMI2 sur TV et HDMI 5 sur ampli.
Shield: Allume la TV l’ampli et la Shield, HDMI2 sur TV et HDMI3 sur ampli.

Comme vous le faite remarquer il faut éteindre le reste mais encore faut-il le définir, les boutons de télécommande c’est du toggle (si c’est éteint ça s’allume et inversement) d’où l’importance de savoir ce qui est allumé et donc l’état précédent.

Merci @+

Je pense qu’on est un peu perdu sur ce que tu veux faire :slight_smile:

Peux-tu expliquer le but final? Peut-être il y a une meilleur solution que de regarder le dernier état d’une entité.

C’est ta réponse à la proposition d’utiliser des trigger ID de @GDX2 mais si tu veux avoir les 25 cas possibles, il faudra que tu aies quelque part cette logique quoi qu’il arrive? As-tu un des cas que tu as présenté où il y a une logique très différente? Avec les template et les trigger ID des automatisations on peut faire des choses puissantes, maintenant il faut de la logique et c’est parfois compliqué de faire quelque chose qui puisse être modifié et qui fonctionne bien tout en étant lisible sans avoir fait un master en Jinja2 et Home Assistant :smiley:

Qu’entends-tu par là? Tu utilises une télécommande dans HA ou une télécommande physique?

Est-ce pour mapper les touches de ta télécommande en fonction de ce que tu fais sur ton système multimédia?

Bonjour @Alkynao,

Juste pour moi… qu’entends tu par HCPC et Shield :blush:
Bob

Shield => Box TV Nvidia Shield
HCPC => Home Cinéma PC

Alors je souhaiterai que mes Scripts vérifie l’état précédent de l’entité.

A la place de ceci:

if:
  - condition: state
    entity_id: input_select.activitees
    state: PowerOff

Qui vérifie l’état actuelle de « input_select.activitees », je souhaiterai quelque chose qui resemble au trigger d’une automatisation

trigger:
  - platform: state
    entity_id:
      - input_select.activitees
    from: PowerOff
    to: Regarder la TV

Merci

Il serait important je crois de répondre à la question de @Cloom
Si c’est depuis HA tu pourrais le faire avec une pseudo télécommande ou chaque bouton ferait appel à un script ou automatisation, 20 quand même mais ça donnerai quelque chose comme ça:

Bob

J’utilise un RM4 Pro pour envoyé les commandes en IR depuis HA.

J’utilise des scripts pour les enchainements.

Je ne connais pas le RM4 Pro mais ça semble assez large en utilisation.
J’ai un Home Cinéma mais qu’appelles-tu un « Home Cinéma PC » ?
Perso je ne suis pas pour la factorisation du code à outrance, c’est comme ça, comme je ne suis pas « Cloud », donc je partirai sur un script par cas + un pour tout OFF, après je n’ai pas du tout ton approche sur le pilotage, tout passe par mon Ampli et je pilote que la source puisque mon ampli associe déjà la source au bon HDMI et que toutes les fonctions de mon ampli sont accessible depuis Node Red par exemple.
Mon approche : « Mieux vaut un peu de labeur que trop de prise de tête » :innocent:
Bob

1 « J'aime »

Petite note: le terme HTPC pour Home Theater Personal Computer est répandu alors que HCPC… je crois que ça n’existe pas, du moins ce n’est pas répandu.

Ces scipts que tu présentes c’est pour, par exemple, allumer la SHIELD (super produit d’ailleurs :wink: ) via Home assistant par l’intégration AndroidTV, allumer l’ampli Home Cinéma en passant par l’intégration broadlink ansi qu’allumer la TV via Broadlink aussi etc

Ton problème c’est que si tu dis à l’intégration broadlink de simuler la touche « power TV » c’est un toggle (on a pas une touche on et une touche off sur la télécommande de la TV.

Je rejoins @Bob sur simplifier le schmilblik, mais j’ai la même problèmatique, quand ma Shield allume bien la TV et le home cinéma quand je l’allume mais si j’ai éteint l’écran pour juste cast ma musique dessus, elle rallume pas l’écran quand je veux ensuite mater un film.

Pour faire ce que tu veux, il faut utiliser SQL et ton cas est exactement documenté:

Sinon tu peux utiliser la solution de @Bob :

Il n’y a pas, à ma connaissance, un moyen plus simple que la requête SQL pour obtenir le dernier état d’une entité.

1 « J'aime »

Finalement j’ai contournée mon souci de script en créant une seconde entité activités renomé « activitées +10 » mise à jour par l’automatisation qui lance mes scripts à t+10s, j’utilise donc la seconde entité dans mes scripts pour connaitre l’état précédent de l’entité activités (puisqu’elle se met à jour 10s après l’entité qui lance l’automatisation).

Merci pour votre aide.
Bonne journée