Le threshold ne sert a rien, vu que le test est par rapport au niveau 0 ( {%- if valeur > 0 %} )
, le fix est simple: {%- if valeur > threshold %}
la variable pollens n’est jamais vide, au pire, celle-ci contient que Le niveau d'alerte est de {{ states('sensor.pollens_'+ dpt|string + '_risklevel') }} et voici les valeur actives :, du coup ca envoie systematiquement une notification.
Pour résoudre ça, on peut rajouter ce test en début : {%- if states('sensor.pollens_'+ dpt|string + '_risklevel') | int (default=0) >= threshold -%}
Du coup, le code complet du blueprint devient :
blueprint:
name: Liste tous les pollens en mode alerte
description: Check des differents sensors dédiés au monitoring des pollens
domain: automation
input:
time:
name: Lancer la vérification à
description: La vérification est lancée à un moment spécifié
default: '10:00:00'
selector:
time: {}
threshold:
name: Niveau d'alerte
description: Selection du niveau min d'alerte pollen
default: 2
selector:
number:
min: 0
max: 3
unit_of_measurement: ""
mode: slider
step: 1
dpt:
name: Département monitoré
description: 'Entrer le dpt concerné'
default: 38
selector:
number:
min: 01
max: 99
mode: box
step: 1
actions:
name: Actions
description: Que faut il faire ? mettre {{pollens}} et il sera remplacé par les agents allergènes
selector:
action: {}
# source_url: pas de depo .....
variables:
dpt: !input dpt
threshold: !input threshold
pollens: |-
{%- if states('sensor.pollens_'+ dpt|string + '_risklevel') | int (default=0) >= threshold -%}
{% set result = namespace(sensors=[]) %}
{% for state in states.sensor | sort(attribute='state', reverse=true) | sort(attribute='name') | list -%}
{%- if state.entity_id | regex_match('sensor.pollens_'+ dpt|string + '_',ignorecase=False) -%}
{% if state.entity_id != 'sensor.pollens_'+ dpt|string + '_risklevel' %}
{%- set valeur = states(state.entity_id)|float|round -%}
test {{ valeur }} {{ threshold }}
{%- if valeur > threshold %}
{%- set result.sensors = result.sensors + [ state_attr(state.entity_id,'pollen_name') ~ ' (*' ~ state.state ~ '*)'] %}
{%- endif %}
{%- endif %}
{%- endif -%}
{%- endfor %}
Le niveau d'alerte est de {{ states('sensor.pollens_'+ dpt|string + '_risklevel') }} et voici les valeur actives :
{{result.sensors|join(',\n')}}
{%- endif -%}
trigger:
- platform: time
at: !input time
condition:
- "{{ pollens != '' and (dpt | int > 0) }}"
action:
- choose: []
default: !input actions
mode: single
Mon problème est que je n’ai pas la barre de progression sous le risque pollen. Une idée d’où cela proviendrait ?
(Pour une raison que j’ignore le code de @WarC0zes reste en rouge dans l’éditeur et je ne peux pas cliquer sur enregistrer…)
Merci
Bonsoir,
Je suis passé via une autre approche au niveau de l’automation : j’utilise en trigger le changement d’un des pollens que je surveille sur les différents Departement :
Et ensuite j’utilise ce code pour envoyer le message:
{%- set result = namespace(sensors=[]) -%} {%- set result.sensors =
['Voici les valeurs actives:'] -%} {# {%- set sensor = trigger.entity_id
-%} #} {%- set sensor = trigger.entity_id -%} {%- set dpt =
sensor[15:17] -%} {%- set dpt_liste = {'91':'en Essonne','33':'en
Gironde','59':'dans le Nord','44':'en Loire Atlantique'} -%} {%- set
dpt_name = dpt_liste[dpt] %} {%- set mess = "Le niveau d'alerte " +
dpt_name + ' ' -%}
{%- for state in states.sensor %}
{%- if state.entity_id |regex_match('sensor.pollens_' + dpt + '_',ignorecase=False) -%}
{%- if state.entity_id != 'sensor.pollens_' + dpt + '_risklevel' -%}
{%- set valeur = states(state.entity_id)|float|round -%}
{%- if valeur > 0 -%}
{%- set ic = " 🌿 " -%}
{%- if state_attr(state.entity_id,"icon") == "mdi:tree" -%}
{%- set ic = " 🌳 " -%}
{%- endif -%}
{%- set info_pollen = "" -%}
{%- if sensor == state.entity_id %}
{%- set info_pollen = ' est passé de (' ~ trigger.from_state.state ~ ') à' %}
{%- endif %}
{%- set result.sensors = result.sensors + [ ic ~ state_attr(state.entity_id,"pollen_name") ~ info_pollen ~ ' (' ~ state.state ~ ')'] %}
{%- endif %}
{%- else %}
{%- if sensor == state.entity_id %}
{%- set mess = mess + "est passé de " + states('sensor.pollens_' + dpt + '_risklevel') + " à " + trigger.from_state.state + ' ,' %}
{{mess|regex_replace(find=' ,', replace='\n',ignorecase=False)}}
{%- else %}
{%- set mess = mess + "est de " + states('sensor.pollens_' + dpt + '_risklevel') + ' ,' %}
{{mess|regex_replace(find=' ,', replace='\n',ignorecase=False)}}
{%- endif %}
{%- endif %}
{%- endif %}
{%- endfor %}
{{result.sensors|join('\n')}}
Loin d’être parfait certainement (je dois regarder pour créer un groupe avec tous les sensors afin de simplifier) et pour le code j’ai eu qques recos dans cette discussion afin d’optimiser et certainement il y a matière à faire mieux mais là j’ai atteind mes limites² ^^