? ! Besoin d'aide formule - affichage - mesure ?!

Salut,

Alors desolé pour le titre qui veut rien dire mais je sais pas trop comment on nomme ce que je veut faire!

Donc j’ai un ESP avec capteur ultrasonique et capteur de température pour mesurer mon étang. Tout cela dans une boite étanche, je peut de cette manière mesurer le niveau d’eau.

image

Je vaut l’utiliser finalement pour tenir le niveau d’eau avec un vanne Woox en Zigbee. jusque la je pense que je vais pouvoir utiliser ce chiffre dans une automatisations pour déclencher la vanne.
Mais l’affichage (voir en haut) j’aimerais pas un chiffre mais plutôt un mot comme « normal » et « bas » et trop élevée" selon un chiffre qui est mesurer.
Comment je peut faire cela, formule, template…etc
Faut dire en programmation j’ai aucune idée, donc je veut bien apprendre un peut


Salut, Tu peux le faire en utilisant le Template de HA

Salut,

Tu as 2 approches que je verrais:

  • Sensor Template
    Tu fais ça dans le fichier de config avec un template sensor dont la valeur « state_template » sera la texte qui dépendra de ton niveau d’eau.
    C’est clean mais ça nécessite un peu d’écriture yaml & template. Donc à lire dans le lien de @fredarro

  • No Code
    Si tu es allergique au Yaml, tu peux aussi faire ça en mode UI, and créant un input_text (config>automatisation>entrées). Ensuite en créant une automatisation qui change la valeur de ton input_text en fonction de niveau d’eau.

Le résultat sera similaire à première vue.
La solution sensor template sera plus complète cela dit car c’est un sensor à part entière.

Merci, intéressant je vais essayer le sensor Template, le yaml me fait pas peur tant que je peut faire du copier collé et adapter avec mes sensor etc. Je ne suis pas capable de les écrire puisque les connaissance me manque.

Eh je peux faire dans config.yaml:

template: !include template.yaml

de cette manière c’ets un peu plus structurer

Dans la doc de Template, l’exemple le plus proche de ton cas serait:

MULTILINE EXAMPLE WITH AN IF TEST

Sinon pour l’utilisation d’un fichier séparé, c’est possible comme tu l’as donné.

Merci, ce que j’ai fait:

  - sensor:
      - name: "Niveau étang"
        state: >
          {% if is_state('sensor.niveau_etang_2', '=0.25') %}
            normal
          {% elif state_attr('sensor.niveau_etang_2', '<=0.20')|float < 1000 %}
            trop élevé
          {% elif is_state('sensor.niveau_etang_2', '>=0.27') %}
            trop bas
          {% else %}
            failed
          {% endif %}

et j’ai sa comme retour:

avec un niveau afficher a 0.23, il me semble pas que tout a fait juste, je vais faire des essai!

image

La forme générale est bonne.
Maintenant c’est les comparaisons de valeurs qu’il faut revoir.

is_state('sensor.niveau_etang_2', '=0.25') .

is_state sert à comparer un état avec une valeur fixe, tu ne peux pas y ajouter de comparateur.

Pour faire ce que tu veux tu peux utiliser:

states.sensor.niveau_etang_2.state

La variable ci-dessus représente to niveau d’eau donc ça peut donner une truc comme ça:

{% if (states.sensor.niveau_etang_2.state | float() < 0.20) %}

oh merci,

juste is_state je ne peut pas comparer OK - sa j’ai compris - le reste pas désolé

la formule ok {% if et ensuite le sensor… float sert aquoi? et ensuite la formule (donc je peut faire une fois < 0.20, une fois > 0.28 et le « normal » avec = 0.25)

elif state_attr il sert a quoi?

J’étais un peu évasif, mais voilà ce que tu peux faire.
J’ai pris des valeurs que j’ai déduites de tes exemples. A toi de corriger
La première chose à laquelle il faut faire attention c’est bien couvrir toutes les valeurs possibles. Et bien placer les > et les >=.

Il y a possibilité de le faire plus évolué, mais c’est plus compréhensible comme ça:

          {% if states.sensor.niveau_etang_2.state | float() > 0.27  %}
            trop élevé
          {% elif states.sensor.niveau_etang_2.state | float() <= 0.27 and states.sensor.niveau_etang_2.state | float() >= 0.25 %}
            normal
          {% elif states.sensor.niveau_etang_2.state | float() < 0.25 %}
            trop bas
          {% else %}
            erreur
          {% endif %}

Sinon pour tes autres questions:

  • float() : les états sont stockés en tant que chaines de caractères (str), le float permet de le convertir en nombre décimal pour pouvoir faire les comparaisons sans erreurs.
  • state_attrib tu permet de retrouver un attirbut de ton entitié. Dans ton exemple « friendly_name » est un attribut.Mais là on veut l’état, donc on prends « state ».
  • elif : c’est une logique pour faire « sinon si ».
  • Je ne ferais pas de test avec un « = » car c’est très restrictif, tu ne serait jamais en « normal »

Je n’ai pas donné plus d’explication sur la logique car ça me semble assez compréhensible.

Ah cool,
Merci la j’ai tout compris

1 « J'aime »

Je viens de trouver des infos pour le niveau d’un réservoir d’huile, même principe que j’ai fait avec l’étang

https://community.home-assistant.io/t/oil-tank-level-sensor/96809/5

1 « J'aime »