Pollens custom component sensor

J’ai fait le test avec le même département je n’ai pas eu d’erreur. Essaye de te connecter sur :
Pollens Eure-Et-Loir
J’ai l’impression que le problème viens de l’accès au site

Par contre dans la carte custom-entities utilisée, il y a 6 niveaux (0-5) or maintenant le site n’en retourne que 4 (« nul », « faible », « moyen », « élevé ») ou 0-3

Je viens de ré-essayer et cette fois-ci aucun problème.

Bonjous à tous, perso je viens d’installer ce composant par HACS, je vois bien le dépôt apparaître dans les intégrations de HACS mais je ne vois pas comment le configurer :

1. Select your county
2. Untick the option to have numeric states or submit to stay with literal states
3. Select all the pollens you want to have in sensors

Comment accéder à cela, svp ?

Tu dois ajouter une intégration a partir du menu habituel

1 « J'aime »

Ok merci ! J’avais aussi testé ça hier mais rien ne sortait avec pollens comme recherche, cette-fois c’est bon :+1:

Merci pour tout! J’ai pu créer en qques clics grâce à cette intégration et vos exemples ce petit visuel:
image
Maintenant je vais me pencher sur les alertes associées à ces infos via telegram ^^

4 « J'aime »

ç’est cool
Mais tu devrais revoir ton max.
Sur le site, ça va de 0 à 3. Mais toi, tu vas jusqu’à 4.

Ah! Oki - merci! je me suis appuyé sur les exemples des cartes et conditions au dessus… C’est corrigé! et en prime voici mon automatisation - encore un peu à paufiner mais je suis assez content de moi pour un newbee ^^:

alias: Alerte Pollens
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.pollens_91_risklevel
condition: []
action:
  - service: telegram_bot.send_message
    data:
      title: ⚠️ Alerte Pollens
      disable_notification: false
      message_tag: pollens
      message: |-
        {% set result = namespace(sensors=[]) %}
            {% for state in states.sensor -%}
              {%- if state.entity_id | regex_match('sensor.pollens_91_',ignorecase=False) -%}
                {% if state.entity_id != 'sensor.pollens_91_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 result.sensors = result.sensors + [ ic ~ state_attr(state.entity_id,"pollen_name") ~ ' (' ~ state.state ~ ')'] %}
                    {% endif %}
                {% endif %}
              {%- endif -%}
            {%- endfor %}
        Niveau Alerte = {{ states('sensor.pollens_91_risklevel') }}
        {{result.sensors|join(',\n')}}
mode: single
1 « J'aime »

Salut,
J’ai le même soucis que toi visiblement, j’ai installé l’intégration dans HACS, elle est bien visible à ce niveau, j’ai redémarrer plusieurs fois HA mais tjrs aucun résultats dans le menu intégration via la recherche pollens.

As-tu fais une manip spéciale ?

Hello

Prends:
image

et la tu auras tout ce que tu cherches… J’ai passé qque heures avant de comprendre

J’ai passé plusieurs dizaine de minutes, je venais justement pour poster la même chose que toi.

Je pense qu’il serait bien de réduire le nom ou le faire commencer par « Pollens - Réseau National de Surveillance… »

Bon en tous cas chez moi ça fonctionne nikel !

Merci pour la carte, le copier/coller à été efficace, juste à changer le département et exclure le risk global.

1 « J'aime »

en prime :slight_smile:

Voici mon blueprint (mode newbee = on) :

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: 59
      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: |-
    {% set result = namespace(sensors=[]) %}
    {% for state in states.sensor -%}
      {%- 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 -%}
            {%- if valeur > 0 %}
              {%- set ic = ' 🌿' %}
                {%- if state_attr(state.entity_id,'icon') == 'mdi:tree' %}
                  {%- set ic = ' 🌳 ' %}
                {%- endif %}
              {%- set result.sensors = result.sensors + [ ic ~ 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')}}

trigger:
  - platform: time
    at: !input time
condition:
  - "{{ pollens != '' and (day | int == 0 or day | int == now().isoweekday()) }}"
action:
  - choose: []
    default: !input actions
mode: single

et un automatisme qd une valeur change…

- id: '1677261915844'
  alias: Alerte Cgt alerte Pollen 59
  description: ''
  trigger:
  - platform: state
    entity_id:
    - automation.alerte_pollens_pour_le_59
    - sensor.pollens_59
    - sensor.pollens_59_ambroisies
    - sensor.pollens_59_armoise
    - sensor.pollens_59_aulne
    - sensor.pollens_59_bouleau
    - sensor.pollens_59_charme
    - sensor.pollens_59_chataignier
    - sensor.pollens_59_chene
    - sensor.pollens_59_cupressacees
    - sensor.pollens_59_frene
    - sensor.pollens_59_graminees
    - sensor.pollens_59_noisetier
    - sensor.pollens_59_olivier
    - sensor.pollens_59_oseille
    - sensor.pollens_59_peuplier
    - sensor.pollens_59_plantain
    - sensor.pollens_59_platane
    - sensor.pollens_59_risklevel
    - sensor.pollens_59_saule
    - sensor.pollens_59_tilleul
    - sensor.pollens_59_urticacees
  condition: []
  action:
  - service: telegram_bot.send_message
    data:
      title: ⚠️ Attention une valeur d'alerte des pollens à changé !
      message: "{%- set mess = \"Le niveau d'alerte dans le nord \" %} {%- set result
        = namespace(sensors=[]) %} {%- set result.sensors =  ['Voici les valeurs actives:']
        %}\n  {%- for state in states.sensor %}\n    {%- if state.entity_id |regex_match('sensor.pollens_59_',ignorecase=False)
        %}\n      {%- if state.entity_id != 'sensor.pollens_59_risklevel' %}\n        {%-
        set valeur = states(state.entity_id)|float|round %}\n        {%- if valeur
        > 0 %}\n          {%- set ic = \"  \U0001F33F \" %}\n            {%- if state_attr(state.entity_id,\"icon\")
        == \"mdi:tree\" %}\n              {%- set ic = \"  \U0001F333 \" %}\n            {%-
        endif %}\n            {%- set info_pollen = \"\" %}\n            {%- if trigger.entity_id
        == state.entity_id %}\n               {%- set info_pollen = ' est passé de
        (' ~ trigger.from_state.state ~ ') à' %}\n            {%- endif %}\n\n            {%-
        set result.sensors = result.sensors + [ ic ~ state_attr(state.entity_id,\"pollen_name\")
        ~ info_pollen ~ ' (' ~ state.state ~ ')'] %}\n        {%- endif %}\n      {%-
        else %}\n        {%- if trigger.entity_id == state.entity_id %}\n        {%-
        set mess =  mess + \"est passé de \" + states('sensor.pollens_91_risklevel')
        + \" à \" + trigger.from_state.state + ' ,'  %}\n\n        {{mess|regex_replace(find='
        ,', replace='\\n',ignorecase=False)}}\n        {%- else %}\n        {%- set
        mess =  mess + \"est de \" + states('sensor.pollens_91_risklevel') + ' ,'
        %}\n        {{mess|regex_replace(find=' ,', replace='\\n',ignorecase=False)}}\n
        \       {%- endif %}\n      {%- endif %}\n    {%- endif %}\n  {%- endfor %}\n{{result.sensors|join('\\n')}}"
  mode: single

Voila ce que vous recevrez dans Telegram:
image

Je suis certain qu’il est possible d’optimiser mais bon les nuits sont courtes en ce moment donc si vous avez des recos je prends à 200% ^^
Enjoy !

Du coup j’ai un peu modifié le rendu de la carte même si elle reste proche de @roumano :

Le code de la carte
type: custom:auto-entities
filter:
  include: null
  template: |
    {%  set ALTNAME = 'd'-%} 
    {% for state in states.sensor -%}
      {%- if state.entity_id | regex_match('sensor.pollens_25_',ignorecase=False) -%}
      {%- set NAME = state_attr(state.entity_id,"pollen_name") -%}
        {{
          { 'entity': state.entity_id,
            'name': NAME,
          } }},
      {%- endif -%}
    {%- endfor %}
  exclude:
    - state: <1
    - entity_id: sensor.pollens_25_risklevel
sort:
  numeric: true
  reverse: true
  method: state
card:
  type: custom:bar-card
  title: Allergies aux pollens
  min: 0
  max: 3
  positions:
    name: outside
  width: 70%
  style: |-
    bar-card-value {
      margin-right: 5px;
      font-size: 15px;
      font-weight: bold;
      text-shadow: 1px 1px #000000;
    }
  severity:
    - color: '#0000ff'
      from: 0
      to: 0
    - color: '#00FF00'
      from: 1
      to: 1
    - color: '#0000FF'
      from: 2
      to: 2
    - color: '#FF0000'
      from: 3
      to: 3

J’avoue que depuis que j’ai poster ça, j’ai changer, pour ça :

Capture d’écran du 2023-02-24 23-08-52

Le design est différent (mais n’est pas forcement mieux) , par contre, il est beaucoup plus compacte et s’ insert mieux dans mon dashboard

code
  - type: custom:mod-card
    style:
      .: |
        :host {
          --text-divider-color: rgb(68, 115, 158);
          --text-divider-line-size: 1px;
          --border-width: 0px !important;
        }
    card:
      type: custom:text-divider-row
      text: Risque pollen
      align: left
  - type: custom:auto-entities
    card:
      type: grid
      columns: 4
      square: true
    card_param: cards
    filter:
      include:
        - entity_id: sensor.pollens_38_*
          options:
            type: custom:button-card
            color_type: icon
            show_name: true
            show_state: false
            style: |
              ha-card {
                background: none;
                box-shadow: #ccffcc;
                border-width: 0px;
              }
            styles:
              card:
                - height: 100px
                - width: 100px
              name:
                - font-size: 14px
            state:
              - value: unknown
                operator: '=='
                color: silver
              - value: '0'
                operator: '=='
                color: silver
              - value: '1'
                operator: '=='
                color: '#377d22'
              - value: '2'
                operator: '=='
                color: '#fffd54'
              - value: '3'
                operator: '=='
                color: '#ea3522'
            size: 60%
            name: |
              [[[
               return entity.attributes.pollen_name + " : " + entity.state
              ]]]
      exclude:
        - entity_id: sensor.pollens_38_*
          state: unknown
        - entity_id: sensor.pollens_38_*
          state: '0'
        - entity_id: sensor.pollens_38_risklevel
    sort:
      method: state
      reverse: true
      ignore_case: true
      numeric: true
1 « J'aime »

Hello,

En même temps si tu tape « pollen » et qu’il ne te sort que « Réseau national de Surveillance… » c’est qu’il doit trouver le mot clé dans le titre :wink:
J’essaierai de mettre un petit quelque chose en plus pour éviter de galèrer mais je veux garder le RNSA dans le titre car c’est quand même eux qui nous fournissent l’information et de plus gratuite. N’hésitez pas a les soutenir en utilisant [Merci pour votre soutien !]
Sinon j’ai vu vos splendides cartes Lovelace, j’essaierai de m’en inspirer si j’arrive a trouver le temps de faire une « Custom Card » (c’est dans mes projets)
Pour la demande d’amélioration https://github.com/chris60600/pollens-home-assistant/issues/14 je vais voir s’il est possible d’ajouter toutes les entités mais de n’activer que celles qui sont cochées cela permettrai de pouvoir les activer en cas de besoin sans tout supprimer. Je ne sais pas ce que cela va occasionner comme modification au niveau des scripts par exemple quand on fait cela :

Il faudra tester
Mais soyez indulgent car cela prend un peu de temps, et si voulez contribuer au projet, je suis ouvert.

3 « J'aime »

Hello
Pas de soucis :stuck_out_tongue_winking_eye:
C’est déjà top ce que tu proposes. Je partagerais plus tard comment j’ai ajusté mon blueprint pour integrer une variable qui permet de gérer le département. En attendant voici un petit Snap
Testé et approuvé pour 4 dpts

Merci @chris60600 pour cette chouette intégration.

Par contre, il semble que les valeurs numériques sont retournées sous forme de texte:

image

Serait-il possible de les définir en format numérique pour avoir un historique sous formes de courbes ?

Ce que j’ai adapté de la façon suivante:

Pour la jauge, je préfère une présentation des valeurs avec l’aiguille au milieu de la zone comme ça:

image

type: gauge
entity: sensor.aqi_pollens_statut
needle: true
min: -0.5
max: 3.5
segments:
  - from: -0.5
    color: '#43a047'
  - from: 0.5
    color: '#63d087'
  - from: 1.5
    color: '#ff781f'
  - from: 2.5
    color: '#ff2200'
unit: Sévérité
name: Pollens
2 « J'aime »

J’adore @FillR2 !!! Adopté !!!
Voici comme promis également une version qui prends en compte le département pour le blueprint alerte

Blueprint
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: 0
      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: |-
    {% set result = namespace(sensors=[]) %}
    {% for state in states.sensor -%}
      {%- 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 -%}
            {%- if valeur > 0 %}
              {%- set ic = ' 🌿' %}
                {%- if state_attr(state.entity_id,'icon') == 'mdi:tree' %}
                  {%- set ic = ' 🌳 ' %}
                {%- endif %}
              {%- set result.sensors = result.sensors + [ ic ~ 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 valeurs actives :
    {{result.sensors|join(',\n')}}

trigger:
  - platform: time
    at: !input time
condition:
  - "{{ pollens != '' and (dpt | int > 0) }}"
action:
  - choose: []
    default: !input actions
mode: single
2 « J'aime »