Pollens custom component sensor

Salut @FROlCi ,
il y a 2 autres soucis :

  • 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
1 « J'aime »

@roumano Top et Merci! Je vais de ce pas maj mon code ^^

Bonjour,
Merci,
Je viens de tester le code suivant:

type: custom:stack-in-card
mode: vertical
keep:
  box_shadow: true
  margin: false
  border_radius: true
  background: false
  outer_padding: false
cards:
  - type: custom:mod-card
    card_mod:
      style:
        .: |
          :host {
            --text-divider-color: rgb(68, 115, 158);
            --text-divider-line-size: px;
          }
    card:
      type: custom:text-divider-row
      text: POLLENS
      align: left
  - type: custom:mod-card
    card_mod:
      style: |
        ha-card {
          margin: -15px -5px 0px -5px;
        }  
    card:
      type: horizontal-stack
      cards:
        - type: custom:button-card
          entity: sensor.pollens_38
          name: 'Pollens Var:'
          icon: mdi:alert-decagram-outline
          layout: icon_name_state2nd
          color_type: icon
          show_name: true
          show_state: true
          state:
            - value: nul
              operator: '=='
              color: black
              icon: mdi:decagram-outline
              styles:
                state:
                  - color: black
            - value: faible
              operator: '=='
              color: green
              icon: mdi:check-decagram-outline
              styles:
                state:
                  - color: green
            - value: moyen
              operator: '=='
              color: orange
              icon: mdi:alert-decagram-outline
              styles:
                state:
                  - color: orange
            - value: élevé
              operator: '=='
              color: red
              icon: mdi:alert-decagram
              styles:
                state:
                  - color: red
          size: 55%
          styles:
            card:
              - '--mdc-ripple-color': rgb(68, 115, 158)
              - '--mdc-ripple-press-opacity': 0.5
            name:
              - font-size: 16px
            state:
              - font-weight: bold
              - font-size: 16px
        - type: custom:bar-card
          entities:
            - entity: sensor.pollens_38_risklevel
              name: Risque Pollen
              icon: mdi:alert-circle
              height: 0px
              color: red
              min: 0
              max: 4
              positions:
                indicator: 'off'
                icon: 'off'
              severity:
                - color: Red
                  from: 2
                  to: 3
                - color: Orange
                  from: 1
                  to: 2
                - color: Green
                  from: 0
                  to: 1
          card_mod:
            style: >
              bar-card-currentbar, bar-card-backgroundbar {
                border-radius: 25px;
              }

              #states > bar-card-row > bar-card-card > bar-card-background >
              bar-card-contentbar > bar-card-name {
                font-size: 20px;

              }  ha-card {
                margin-top: -2px;
                background: none;
                border: none;
              }
  - type: conditional
    conditions:
      - entity: sensor.pollens_38
        state_not: nul
    card:
      type: custom:mod-card
      card_mod:
        style: |
          ha-card {
            margin: 5px 5px 5px 5px;
          }
      card:
        type: custom:auto-entities
        card:
          type: grid
          columns: 5
          square: false
        card_param: cards
        filter:
          include:
            - entity_id: sensor.pollens_38_*
              options:
                type: custom:button-card
                color_type: icon
                aspect_ratio: 1/1
                show_name: true
                show_state: true
                name: |
                  [[[
                    return entity.attributes.pollen_name + ":"
                  ]]]
                styles:
                  card:
                    - '--mdc-ripple-color': rgb(68, 115, 158)
                    - '--mdc-ripple-press-opacity': 0.5
                    - border-radius: 8px
                  name:
                    - font-size: 14px
                  state:
                    - font-weight: bold
                    - font-size: 12px
                state:
                  - value: faible
                    operator: '=='
                    color: green
                    styles:
                      card:
                        - box-shadow: 0px 0px 0px 2px green
                      state:
                        - color: green
                  - value: moyen
                    operator: '=='
                    color: orange
                    styles:
                      card:
                        - box-shadow: 0px 0px 0px 2px orange
                      state:
                        - color: orange
                  - value: élevé
                    operator: '=='
                    color: red
                    styles:
                      card:
                        - box-shadow: 0px 0px 0px 2px red
                      state:
                        - color: red
                size: 50%
          exclude:
            - entity_id: sensor.pollens_38_*
              state: nul
            - entity_id: sensor.pollens_38
            - entity_id: sensor.pollens_38_risklevel
        sort:
          method: name
          reverse: false

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

Hello @Noob38 ,

Cette ligne n’est pas bonne: height: 0px au niveau de la carte custom:bar-card


Remplace 0px par 47px et hop les couleurs seront visibles:

1 « J'aime »

Effectivement, beaucoup mieux !
Fallait juste savoir lire le code… Merci bcp !

1 « J'aime »

Bonjour,
mon code fonctionne :

c’est bien à 47PX et non 0px. Tu as utilisé un autre code que le mien.

1 « J'aime »

Salut,

J’aimerais améliorer le blueprint de notification en évitant qu’il notifie si les niveaux sont exactement les mêmes que la veille.

Tu en pense quoi ?
si oui, il faudrait enregistrer dans une variable les liste des pollens en alerte.

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 :

alias: Alerte Pollens pour tous les dpts
description: ""
mode: single
triggers:
  - entity_id:
      - sensor.pollens_33_ambroisies
      - sensor.pollens_33_armoise
      - sensor.pollens_33_cupressacees
      - sensor.pollens_33_frene
      - sensor.pollens_33_graminees
      - sensor.pollens_33_noisetier
      - sensor.pollens_33_chene
      - sensor.pollens_33_chataignier
      - sensor.pollens_33_charme
      - sensor.pollens_33_olivier
      - sensor.pollens_33_oseille
      - sensor.pollens_33_peuplier
      - sensor.pollens_33_plantain
      - sensor.pollens_33_platane
      - sensor.pollens_33_risklevel
      - sensor.pollens_33_bouleau
      - sensor.pollens_33_aulne
      - sensor.pollens_33_saule
      - sensor.pollens_33_tilleul
      - sensor.pollens_33_urticacees
      - sensor.pollens_44_ambroisies
      - sensor.pollens_44_armoise
      - sensor.pollens_44_aulne
      - sensor.pollens_44_bouleau
    

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² ^^

HTH