Traiter les valeurs deux trigger simultanément

Bonjour,

Suite aux retour à une autre question : Afficher le résultat d'un calcul dans une notification - #4 par AlexHass

J’arrive correctement à notifier les valeurs et à effectuer des calculs avec.

trigger.from_state.state
trigger.to_state.state

J’ai un appareil qui me remonte deux informations simultanément (pH et désinfection de l’eau).

Question :
J’en doute réellement mais est-il possible de récupérer la valeur précédente et l’actuelle sur les deux trigger en même temps ?
Ce serait pour calculer l’évolution des deux entité en même temps et affiner mon algorithme

Voici un automatisme de démo

alias: Test - Trigger double
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.spa_flipr_red_ox
    to: null
  - platform: state
    entity_id:
      - sensor.spa_flipr_ph
    to: null
condition: []
action:
  - service: notify.mobile_app_huawei
    data:
      message: >-
        Analyse deux trigger simultané <br> Valeur avant {{
        trigger.from_state.state }} <br> Valeur après {{ trigger.to_state.state
        }}
mode: single

Et les capture écran indiquant que le second trigger ne peut pas être traité

Salut,
ça ne marchera pas.
les 2 triggers sont indépendants. Ca va exécuter la logique si un OU l’autre change… tu n’aura pas les from/to des 2 triggers en même temps.

Un façon de faire ça c’est de créer des Sensors Template donc la valeur change en fonction d’un trigger. Ce n’est pas à faire dans les automatisations, mais dans le fichier de configuration.

Ensuite, tu peux faire une automatisation qui envoie des notifications quand tu le veux vraiment, avec les 2 valeurs calculées.

Ceci est un lien direct vers la doc de « trigger based template sensors »:

Argh dommage j’espérai pouvoir tout traiter uniquement via l’automatisme mais c’est compréhensible.

Je vais tester ça rapidement

Salut… Je pense qu’en Indexant les triggers tu dois surement t’en sortir sans Template !
As tu essayé de nommer tes triggers ?

:point_left:

image :point_right:Choix d’un nom ici OX :point_right:image

[Avec la même chose pour le Ph avec un nom PH]

Puis de faire une action du type
image
Puis :point_down:
image :point_right:image

Tu fais choix condition
image :point_left:OX (ici)

et dans
image
Tu mets ton action en précisant l’identité de la mesure !
Ensuite tu vas sur :point_right:image
et tu fais la même chose pour PH !

Ton Exemple en Yaml
alias: Test - Trigger double
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.spa_flipr_red_ox
    to: null
    id: OX
  - platform: state
    entity_id:
      - sensor.spa_flipr_ph
    to: null
    id: PH
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - OX
        sequence:
          - service: notify.mobile_app_huawei
            data:
              message: >-
                Analyse deux trigger simultané <br> OX <br> Valeur avant {{
                trigger.from_state.state }} <br> Valeur après {{
                trigger.to_state.state }}
      - conditions:
          - condition: trigger
            id:
              - PH
        sequence:
          - service: notify.mobile_app_huawei
            data:
              message: >-
                Analyse deux trigger simultané <br>  PH <br> Valeur avant {{
                trigger.from_state.state }} <br> Valeur après {{
                trigger.to_state.state }}
mode: single
1 « J'aime »

Pas mal, je vais tester mais j’ai l’impression que je ne pourrait remonter que l’un ou l’autre.

L’idée est d’en traiter le premier, puis le second et une fois les 4 valeurs obtenu d’exécuter une action si

  • ph et ox monte
  • ph monte et ox descend
  • ph descend et ox monte
  • ph et ox descend

Je suis également en train de tester les moyenne sur l’oxydation grâce à un sujet existant sur le forum. C’est prometteur. Je regarde ce que donne filter par rapport à average.
Plus d’info sur Moyenne sur 30 minutes d'un capteur - #16 par Haz

Côté template la toute dernière version amène des nouveauté : 2023.9: New climate entity dialogs, lots of tile features, and template sensors from the UI! - Home Assistant
Est-ce que cette evolution pourrait m’aider ?

Dans tous les cas, tu aura qu’un trigger de déclencher. Un trigger est un évènement et en informatique les évènements sont forcément séquentiel.
Il faut que tu fasse autrement pour arriver à ton besoin/envie

Je comprend

Est-il possible de sauvegarder les valeur from_state et to_state dans deux variables pour le premier trigger puis de faire la même pour le second ?
Si je met un délais de 10 seconde sur l’un des deux ils sont correctement traité de manière séquentiel.

Reste à trouver comment sauvegarder les données du premier trigger pour les utiliser plus loin dans l’automate quand le second tigger est validé.

Exemple en mettant un délais sur le pH et une notification avec des variables (que je ne sais pas créer ni définir)
probablement qu’un template pourrait aider mais je manque d’exemple pour m’en inspirer.

alias: Test - Trigger double
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.spa_flipr_red_ox
    to: null
  - platform: state
    entity_id:
      - sensor.spa_flipr_ph
    to: null
    for:
      hours: 0
      minutes: 0
      seconds: 10
condition: []
action:
  - service: notify.mobile_app_huawei
    data:
      message: >-
        Analyse deux trigger simultané <br>  Premier trigger pH<br>
        Valeur avant {{ variable_3 }} <br>
        Valeur après {{ variable_4 }} <br>
        Deuxième trigger Ox <br>
        Valeur avant {{ variable_1 }} <br>
        Valeur après {{ variable_2 }}
mode: single


Salut,
Je comprend pas pourquoi tu veut passer par un trigger pour avoir les données de variable

tu a accès directement a tous tes sensors dans la partie message …

Tu peut, par exemple, voir une notification complexe avec plusieurs sensors et des calculs là : Obtenir le temps d'utilisation d'un appareil électrique sur une période donnée - #21 par roumano

Parce que je ne connait pas encore toutes les possibilités offerte par HA…

J’avais vu ton message il y a quelques semaines et j’étais loin d’imaginer que ça pourrait être applicable pour mon cas.
Je vais étudier tout ça sérieusement, merci pour le conseil… en espérant que ce soit reproductible sur mon usage

@roumano

Je pense avoir trouvé une solution intéressante. Je suis en train de tester les requêtes SQL là où je suis plus à l’aise et je crée une intégration SQL pour remonter la valeur qui m’intéresse.

Exemple de code pouvant remonter l’avant dernière valeur de manière indépendante des déclencheurs (trigger)
Pour l’intégration pensez à supprimer le premier commentaire SQL pour ne pas être éjecté par l’intégration

-- Remonte l'avant dernier enregistrement d'un capteur
SELECT s.state
FROM states s, states_meta m
WHERE s.metadata_id = m.metadata_id
  -- Nom de l'entitée à suivre
  AND m.entity_id = 'sensor.spa_flipr_ph'
  -- Remonte plus loin que l'avant dernier enregistrement jusqu'à trouver de la donnée
  AND s.state <> 'unavailable'
ORDER BY
  last_updated_ts DESC
LIMIT 1,1

Je sens que je tient une solution intéressante

Je valide la méthode mais attendez au minimum 30s ou 1min avant d’appeler les sensors issus d’une intégration SQL.

C’est le temps qu’il faut à HA pour inscrire en base les nouvelles valeurs.
Sans ce délais, vous remonterez l’ancienne valeur n-1. C’est à dire la valeur n-2 après l’ajout des nouvelles données.

Gros bonus : contrairement à from_state et to_state qui ne peuvent pas être appeler manuellement, ces données sont des sensors et peuvent être reprises partout y compris dans les tableaux de bord.

J’ai réussi sans trop d’effort à remonter plusieurs valeurs n-1 en même temps dans la même notification.
Pour résumer voici les étapes à effectuer

  1. Créez autant d’intégration SQL que de valeur n-1 à traiter (dans mon pour le pH et le Red Ox)
  2. Une intégration SQL doit remonter une seule valeur, un tris descendant par le timestamp metadata_id et un LIMIT 1,1 permet de cibler la bonne valeur. Le faire sur l’index ne protège pas des ajouts manuel
  3. Ajoutez un délais minimum de 30s sur le trigger pour laisser le temps à HA de mettre à jour la BdD
  4. Affichez plusieurs données en les appelant une par une dans la même action (ici un message)

Contrairement (je me répète) à from_state et to_state, ces données sont également accessible dans la console de développement pour vos tests.
Elles peuvent également être visualisées en graphique

Au top… Étrange que personne ai mis en avant cette méthode sur le forum anglophone… À moins que ce soit une fausse bonne idée ???

Vu que cela fait partie d’une intégration HA, je crois pas mal d’info sur le Github ?

Forum IO
Forum Fr

En effet, dès que les demandes sont plus spécifique SQL en effet ça ne manque pas.
Merci pour les liens, je vais les compulser à la recherche d’astuce pouvant m’aider.

Mon besoin était de remonter l’avant dernier état, presque partout ça renvoi vers l’usage de from_state et to_state
Au final, interroger directement la base est bien plus facile et me semble plus robuste et malléable.

Merci @Doubledom pour les liens :wink:

Je trouve ça bizarre qu’on puisse pas (facilement) avoir les valeurs d’avant (l’avant dernier valeur ou bien celle d’hier a 19h par exemple ) d’un capteur dans HA !

Où alors c’est méconnu et mal documenté ?

1 « J'aime »