Je commence à m’intéresser a Jinja2 et je ne trouve pas de paramètre qui permette de parcourir les valeurs historique comme dans un array() en python.
J’ai trouvé un sujet qui se rapproche de ma demande mais il n’est pas compatible avec la console de développement Recupérer la valeur d'un compteur a n-1
Je souhaite récupérer l’avant dernière valeur pour calculer l’écart en pourcentage par rapport à la valeur actuelle.
C’est pour suivre l’évolution de la désinfection au Brome qui est lente pendant la phase de correction, tant que la désinfection augmente de 10% je souhaite temporiser les notifications.
Je récupère la dernière valeur avec {{ states.sensor.spa_flipr_red_ox.state }}
Qui retourne 636.0
J’ai les attribut de l’entité avec {{ states.sensor.spa_flipr_red_ox.attributes }}
Qui retourne le bloc suivant
J’ai pensé utiliser les dates pour parcourir l’historique mais là aussi je ne sais pas récupérer une liste de date ou de remonter dans le jeu de donnée… le serpent se mord la queue
Je récupère la date de la dernière relève avec {{ states.sensor.spa_flipr_red_ox.state | as_datetime }}
Qui retourne 2023-08-26 09:53:53.652389+00:00
Il me manque la méthode me permettant de remonter dans le temps jusqu’à l’avant dernière valeur (ou enregistrement précédent) qui est 564.0 (relevé manuellement sur un graphique)
Auriez-vous des pistes de recherche ? De la doc sur ce cas précis ?
En vous remerciant d’avance
Ps : au fil de mes recherches je n’ai pas trouvé d’outil permettant de recommander le type et la quantité de traitement à appliquer sur une piscine/spa. A mon niveau quand ce sera validé je pourrais vous partager les notifications pH et Red OX (désinfection) à adapter à votre bassin. Elles indiquent le volume de traitement à appliquer.
Pour l’avant dernière valeur, avec une automatisation ça peut le faire.
Le trigger doit être le capteur :
trigger:
- platform: state
entity_id: sensor.spa_flipr_red_ox
to:
Et dans la partie action de l’automatisation vous pouvez récupérer la valeur précédente avec : trigger.from_state.state (la valeur ayant déclenché le trigger est trigger.to_state.state)
Merci @Makai pour me mettre sur la piste mais j’ai bien l’impression que je fait une erreur de syntaxe lors de mes tests.
Le test consiste à m’envoyer une notification avec la valeur précédente et la valeur actuelle.
J’ai le retour erreur :
Error: Error rendering data template: UndefinedError: ‹ dict object › has no attribute ‹ to_state ›
J’ai parcouru pas mal de sujet comme celui-ci sans comprendre d’où viens mon problème. Il y a un concept qui doit m’échapper pour me lancer à l’utilisation des variables.
Le code de mon test est le suivant
alias: Test écart
description: ""
trigger:
- platform: state
entity_id:
- sensor.spa_flipr_red_ox
condition: []
action:
- service: notify.mobile_app_huawei
data:
message: >-
Valeur précédente {{ trigger.to_state.entity_id }} et actuelle {{
trigger.to_state.state }}
mode: single
Il faut remplacer trigger.to_state.entity_id par trigger.from_state.state pour la valeur précédente.
Exemple d’une de mes automatisations :
- service: notify.mobile_app_x
continue_on_error: true
data:
title: "External IP has changed"
message: "External IP changed from {{ trigger.from_state.state }} to {{ trigger.to_state.state }}"
Vraiment bizarre. Pouvez-vous essayer avec une autre entité ?
Et créer une notification plutôt que d’envoyer sur votre téléphone :
- service: persistent_notification.create
data:
title: "External IP has changed"
message: "External IP changed from {{ trigger.from_state.state }} to {{ trigger.to_state.state }}"
Dans ce cas, dans configuration.yaml, il vous faut avoir les 2 lignes suivantes (la 1ere doit déjà y être, les 2 permettent de pouvoir utiliser l’interface et le yaml pour faire des automatisations) :
Ensuite, dans le dossier config, vous devez créer un dossier nommé automations. Dans ce dossier vous créez un fichier yaml nommé par exemple test.yaml dans lequel vous copiez-collé l’automatisation
Je prends le problème dans tous les sens et il est certains que je me mélange les pinceaux.
Je suis très embêté de te demander plus d’explications. Est-il possible de me partager l’exemple complet que tu utilise sur le changement d’adresse IP ?
Pour recopier ton exemple :
Est-ce que je doit créer une nouvelle entrée ?
Est-ce que je doit ajouter des infos dans configuration.yaml
Est-ce que tout est saisi dans l’automatisation ou y a t’il un template à créer ?
Encore une fois, j’apprécie grandement le temps que tu passe à m’aider et je suis mal à l’aise de te demander autant d’informations.
J’espère à partir de cet exemple fonctionnel pouvoir l’adapter à mon besoin.
Voici une automatisation que j’ai créé et testé et qui fonctionne, à placer telle quelle dans le fichier test.yaml (ou autre nom que vous aurez donné au fichier se trouvant dans le dossier automations) en changeant bien sur le nom de l’entité (ici mon capteur de température du jardin)
Arghh c’est toujours pareil pourtant tout semble parfaitement parfait.
ajout dans configuration.yaml de automation manual: !include_dir_merge_list automations
création de test.yaml avec ton code (sauf la partie notification vers mobile), j’ai remplacé mon sensor
redémarrage
dans automatisation, exécution manuelle de Test - changement
retourne toujours Error: Error rendering data template: UndefinedError: 'dict object' has no attribute 'from_state'
C’est à croire qu’il y a un bug dans mon système. Je continue mes recherches sur cette anomalie mais ça ne semble pas venir de l’automatisation en elle même
Je suppose que vous déclenchez cela à partir de l’interface utilisateur ? Si oui, il y aura une erreur car il n’y a pas de déclencheur. Attendez que l’automatisation se produise naturellement ou utilisez une entité de test pour déclencher l’automatisation. Vous pouvez utiliser une aide input_number comme entité de test.
J’ai attendu un rafraichissement et ça fonctionne parfaitement.
Merci pour toute l’aide que tu m’a apporté, c’était un problème d’usage au lieu d’un problème technique.
Ah oui je l’ai pas vu venir celle la. Effectivement si on déclenche manuellement il n’y a pas de trigger et donc de variable contenant la valeur de celui-ci !
J’aurai pu chercher longtemps
Grâce à toi je vais avancer sur mon algorithme de traitement de l’eau du spa / jacuzzi
Le code est déjà pas mal étoffé et ça servira de garde fou le temps que les traitements fassent leurs effets
Actuellement j’affine la quantité des traitements et les déclencheurs. Dès que je le mettrait en ligne je te ferait une notification pour que tu puisse consulter le résultat