Mon problème
Impossible de créer un template avec deux conditions.
Ma configuration
[center]## System Information
version |
core-2022.10.2 |
installation_type |
Home Assistant Supervised |
dev |
false |
hassio |
true |
docker |
true |
user |
root |
virtualenv |
false |
python_version |
3.10.5 |
os_name |
Linux |
os_version |
5.10.0-17-amd64 |
arch |
x86_64 |
timezone |
Europe/Paris |
config_dir |
/config |
Home Assistant Community Store
GitHub API |
ok |
GitHub Content |
ok |
GitHub Web |
ok |
GitHub API Calls Remaining |
4867 |
Installed Version |
1.28.0 |
Stage |
running |
Available Repositories |
1122 |
Downloaded Repositories |
21 |
Home Assistant Cloud
logged_in |
false |
can_reach_cert_server |
ok |
can_reach_cloud_auth |
ok |
can_reach_cloud |
ok |
Home Assistant Supervisor
host_os |
Debian GNU/Linux 11 (bullseye) |
update_channel |
stable |
supervisor_version |
supervisor-2022.10.0 |
agent_version |
1.3.0 |
docker_version |
20.10.18 |
disk_total |
48.0 GB |
disk_used |
17.3 GB |
healthy |
true |
supported |
failed to load: Unsupported |
supervisor_api |
ok |
version_api |
ok |
installed_addons |
Duck DNS (1.15.0), ESPHome (dev) (dev), FTP (4.6.1), File editor (5.4.1), Glances (0.16.0), Grafana (8.0.2), Log Viewer (0.14.0), MariaDB (2.5.1), Mosquitto broker (6.1.3), Portainer (2.15.1), SSH & Web Terminal (12.0.2), Samba Backup (5.1.2), Samba share (10.0.0), motionEye (0.18.0), phpMyAdmin (0.8.1), Simple Scheduler (0.64), Nginx Proxy Manager (0.12.2) |
Dashboards
dashboards |
1 |
resources |
17 |
views |
17 |
mode |
storage |
Recorder
oldest_recorder_run |
13 septembre 2022 à 20:24 |
current_recorder_run |
10 octobre 2022 à 20:09 |
estimated_db_size |
384.89 MiB |
database_engine |
mysql |
database_version |
10.6.8 |
[/center]
___
Bonjour à tous,
Je souhaite créer un template et y mettre deux conditions, j’ai gratté tout l’après midi et je ne suis arrivé à rien. Je vous joins ce que j’ai pu faire mais avec un message d’erreur.
{% if is_state('sensor.watermeter_erreur' != 'error') or is_state('sensor.watermeter_valeur')|float(0) < 159000 %}
{{ states('sensor.watermeter_valeur')}}
{% else %}
{% endif %}
Je souhaiterai que si les deux conditions sont réunies la valeur du sensor.watermeter_valeur soit validé. Mais quand je copie ce template dans « modele » j’ai cette erreur:
« TypeError: is_state() missing 1 required positional argument: ‹ state › »
Sinon j’ai essayé une autre config qui fonctionne un peu mieux:
{{ states('sensor.watermeter_erreur') != 'error'
and states('sensor.watermeter_valeur')|float(0) < 159000
}}
Le problème avec celle ci c’est qu’elle ne m’affiche pas de valeur mais true ou false.
En vous remerciant pour votre aide.
Hello
Ce n’est pas la bonne forme is_state(entity, valeur de l’état)
Et la deuxième tu fais juste une comparaison donc il t’indique si elle est vrai ou fausse
{% if is_state(‹ sensor.watermeter_erreur ›,‹ error ›) or states(‹ sensor.watermeter_valeur ›)|float(0) < 159000 %}
{{ states(‹ sensor.watermeter_valeur ›)}}
{% else %}
{% endif %}
Merci pour ton aide, je viens de recopier ta correction mais j’ai un message d’erreur.
« TemplateSyntaxError: unexpected char ‹ ‹ › at 15 »
Oui il faut mettre des « ' » c’est le site qui les converti en < >
Mais la doc home assistant tu as des exemples
J’ai fait la modif des caractères, maintenant ça m’affiche la valeur du sensor.watermeter_valeur mais si je change l’état des deux autres sensor ça n’a aucune incidence.
J’ai testé ça mais toujours une errreur, j’ai egalement cherché sur la page templating de HA mais je m’y perds, je suis une quiche lol
{% if is_state('sensor.watermeter_erreur' != 'error') or states('sensor.watermeter_valeur')|float(0) < 159000 %}
{{ states('sensor.watermeter_valeur')}}
{% else %}
{% endif %}
J’ai ce message d’erreur :
TypeError: is_state() missing 1 required positional argument: ‹ state ›
Car ce n’est pas comme ceci que s’utilise is_state
.
Ton code doit être celui ci :
{% if (
not is_state('sensor.watermeter_erreur', 'error')
) or (
states('sensor.watermeter_valeur')|float(0) < 159000
)
%}
{{ states('sensor.watermeter_valeur')}}
{% else %}
{% endif %}
Merci pour ton aide, je viens de tester ton template et ça ne fonctionne pas, lorsque je modifie l’un ou l’autre des sensor il m’affiche quand même la valeur. J’ai réussi malgré tout, certes de manière pas très académique, à obtenir ce que je voulais. Je m’explique:
J’ai créé un premier sensor qui me renvoie la valeur True ou False et avec un deuxieme sensor, si à True, j’affiche la valeur du sensor.watermeter_valeur.
- name: watermeter_3
unique_id: watermeter_3
unit_of_measurement: L
state_class: total_increasing
state_topic: "compteur_eau/main/value"
value_template: "{{ states('sensor.watermeter_erreur') == 'no error' and states('sensor.watermeter_valeur')|float(0) < 159000 }}"
icon: mdi:water
- name: watermeter_4
unique_id: watermeter_4
state_topic: "compteur_eau/main/value"
value_template: "{% if is_state('sensor.watermeter_3', 'True') %}{{ states('sensor.watermeter_valeur')}}{% else %}{% endif %}"
icon: mdi:water
Je pense que j’ai été très approximatif dans mes explications et surtout ce que je souhaitais faire.
De ce que je comprends c’est un and
qu’il faut pas un or
dans la condition du code corrigé que je t’ai indiqué.
Le code fonctionne mais ne fais pas ce que tu veux… 
Je me doutais bien que cela venait de moi, c’est bien pour ça que je l’ai précisé à la fin de mon dernier post 
Je ne connais rien en programmation alors j’y vais à tâtons, j’essaye d’adapter des templates que je trouve au travers des articles. D’ailleurs je souhaiterai faire évoluer ce dernier et lui rajouter deux conditions. J’utilise ce template pour gérer ma consommation d’eau qui se fait à l’aide d’un esp32cam qui lit les chiffres qui défilent, or le « soucis » c’est que parfois la lecture est imparfaite et la valeur enregistrée comporte un N, du style 19257N, je souhaiterai que la valeur ne soit copiée que sur le nombre comporte que des chiffres. Ensuite, et surtout au début, quand la valeur était erronée, je me retrouvais avec des 300 000L de conso journalière, ce qui fausse totalement la BDB, pour éviter cela j’aimerai que la valeur écrite ne dépasse pas les 100L par rapport à la dernière valeur. Et pour finir je souhaiterai également que la valeur ne soit pas inferieure à la valeur précédente. Si toutefois vous pouvez m’apportez une aide, mais je ne vais pas attendre et commencer à chercher de mon coté.
En vous souhaitant une bonne journée 
Voilà le resultat de ma matinée:
{{ states('sensor.watermeter_erreur') == 'no error'
and states('sensor.watermeter_valeur')|float(0) < 159000
and ('N' not in states('sensor.watermeter_valeur'))
and states('sensor.watermeter_valeur') >= states('sensor.watermeter_2')
}}
Il ne me manque plus que la condition comme quoi la valeur ne doit pas être supérieure à 100 par rapport au sensor.watermeter_valeur.
Je continue mes recherches.
Voilà la version finale, testée dans les différents cas et je n’ai aucune remontée erronée:
{{ states('sensor.watermeter_erreur') == 'no error'
and ('N' not in states('sensor.watermeter_valeur'))
and states('sensor.watermeter_valeur') >= states('sensor.watermeter_2')
and (states('sensor.watermeter_2') | float(0) - states('sensor.watermeter_valeur') | float(0)) <100 }}
{{ states('sensor.watermeter_erreur') == 'no error'
Le 'sensor.watermeter_erreur doit avoir comme valeur ‹ no error › si non False
and ('N' not in states('sensor.watermeter_valeur'))
Il ne doit pas y avoit de « N » dans la valeur du sensor.watermeter_valeur si oui False
and states('sensor.watermeter_valeur') >= states('sensor.watermeter_2')
La valeur de sensor.watermeter_valeur doit être supérieure ou égale à la valeur du sensor.watermeter_2 si inferieure alors False
and (states('sensor.watermeter_2') | float(0) - states('sensor.watermeter_valeur') | float(0)) <100
}}
La différence du 'sensor.watermeter_2 avec le sensor.watermeter_valeur ne doit pas étre supérieure à 100 si supérieure False.
Ce template là me créait un sensor.watermeter_3 qui doit etre à « true », je le reprends dans mon sensor d’origine qui me sert pour mes utility meter pour ma conso.
{% if is_state('sensor.watermeter_3', 'True') %}{{ states('sensor.watermeter_valeur')}}{% else %}{% endif %}
J’espère que cela servira à d’autre, je débute dans les template, je ne doute pas que l’on peut faire plus simple mais pour moi la finalité c’est que ça fonctionne.
Je vous remercie tous pour votre aide.
1 « J'aime »