Pollens custom component sensor

salut @pepite
je l’ai aussi fait mais j’ai toujours des erreurs.
Avec le code suivant dans sensors.yaml :

- platform: pollens
  location: "75"
  timeout: 60

- platform: template
  sensors: > 
{%- set  ns = namespace(pollen = []) -%}
{%- for item in states.sensor.pollens_paris.attributes -%}
    {%- if not item in ("attribution","url", "departement", "friendly_name", "icon") -%}
        {%- set ns.pollen = ns.pollen  + [item + ':' + state_attr('sensor.pollens_paris', item)] -%}
    {%- endif -%}
{%- endfor -%}
{%- for pollen in ns.pollen -%}
   {%- set p = pollen.split(':')[0] -%}
   {%- set risk = pollen.split(':')[1] -%}
   pollen_{{p}}
     friendly_name: Pollen {{ p }}
     value_template: '{{risk}}'
{%- endfor -%}

j’ai l’erreur :

Error loading /config/configuration.yaml: while scanning for the next token
found character ‹ % › that cannot start any token
in « /config/sensors.yaml », line 7, column 2

Si je modifie l’indentation, le code dans sensors.yaml devient :

- platform: pollens
  location: "75"
  timeout: 60

- platform: template
  sensors: > 
    {%- set  ns = namespace(pollen = []) -%}
    {%- for item in states.sensor.pollens_paris.attributes -%}
      {%- if not item in ("attribution","url", "departement", "friendly_name", "icon") -%}
        {%- set ns.pollen = ns.pollen  + [item + ':' + state_attr('sensor.pollens_paris', item)] -%}
     {%- endif -%}
    {%- endfor -%}
    {%- for pollen in ns.pollen -%}
      {%- set p = pollen.split(':')[0] -%}
      {%- set risk = pollen.split(':')[1] -%}
       pollen_{{p}}
         friendly_name: Pollen {{ p }}
         value_template: '{{risk}}'
    {%- endfor -%}

mais j’ai l’erreur :

Invalid config for [sensor.template]: expected dictionary for dictionary value @ data[‹ sensors ›]. Got '{%- set ns = namespace(pollen = ) -%} {%- for item in states.sensor.pollens_paris.attributes -%}\n {%- if not item in (« attribution »,« url », « departement », « friendly_name », « icon ») -%}\n {%- set ns.pollen = ns.pollen + [item + ':' + state_attr('sensor.pollens_paris', item)] -%}\n {%- endif -%}\n{%- endfor -%} {%- for pollen in ns.pollen -%}\n {%- set p = pollen.split(':')[0] -%}\n {%- set risk = pollen.split(':')[1] -%}\n pollen_{{p}}\n friendly_name: Pollen {{ p }}\n … (See ?, line ?).

j’ai vraiment l’impression de tourner en rond !

super merci beaucoup

Je vois dans la discussion que le besoin existe d’avoir un sensor par pollens. Je peux voir pour intégrer une liste de pollens pour lesquels il serait intéressant d’avoir le risque (a configurer dans le configuration.yaml)

sensor:
  - platform: pollens
    location: "60"
    timeout: 60
    pollens:
      - peuplier
      - armoise

Je ne vous le promet pas tout de suite…

4 « J'aime »

Bonjour

Je partage ma réalisation avec ajout de sensor et card avec custom:stack-in-card, custom:button-card et custom:auto-entities. A voir pour les améliorations car je débute.
pour le sensor

- platform: pollens
  location: 77
  timeout: 60

- platform: template
  sensors:
    pol_77_cupressacees:
      friendly_name: Cupressaccees
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'cupressacees') }} "
      icon_template: mdi:flower
- platform: template
  sensors:
    pol_77_saule:
      friendly_name: Saule
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'saule') }} "
      icon_template: mdi:tree
- platform: template
  sensors:
    pol_77_frene:
      friendly_name: Frêne
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'frene') }} "
      icon_template: mdi:tree
- platform: template
  sensors:
    pol_77_peuplier:
      friendly_name: Peuplier
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'peuplier') }} "
      icon_template: mdi:tree
- platform: template
  sensors:
    pol_77_charme:
      friendly_name: Charme
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'charme') }} "
      icon_template: mdi:tree
- platform: template
  sensors:
    pol_77_bouleau:
      friendly_name: Bouleau
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'bouleau') }} "
      icon_template: mdi:tree
- platform: template
  sensors:
    pol_77_platane:
      friendly_name: Platane
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'platane') }} "
      icon_template: mdi:tree
- platform: template
  sensors:
    pol_77_chene:
      friendly_name: Chêne
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'chene') }} "
      icon_template: mdi:tree
- platform: template
  sensors:
    pol_77_graminees:
      friendly_name: Graminées
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'graminees') }} "
      icon_template: mdi:flower
- platform: template
  sensors:
    pol_77_oseille:
      friendly_name: Oseille
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'oseille') }} "
      icon_template: mdi:flower
- platform: template
  sensors:
    pol_77_urticacees:
      friendly_name: Urticacées
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'urticacees') }} "
      icon_template: mdi:flower
- platform: template
  sensors:
    pol_77_chataigner:
      friendly_name: Chataigner
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'chataigner') }} "
      icon_template: mdi:tree
- platform: template
  sensors:
    pol_77_amoise:
      friendly_name: Amoise
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'amoise') }} "
      icon_template: mdi:flower
- platform: template
  sensors:
    pol_77_aulne:
      friendly_name: Aulne
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'aulne') }} "
      icon_template: mdi:tree
- platform: template
  sensors:
    pol_77_noisetier:
      friendly_name: Noisetier
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'noisetier') }} "
      icon_template: mdi:tree
- platform: template
  sensors:
    pol_77_plantain:
      friendly_name: plantain
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'plantain') }} "
      icon_template: mdi:flower
- platform: template
  sensors:
    pol_77_olivier:
      friendly_name: Olivier
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'Olivier') }} "
      icon_template: mdi:tree
- platform: template
  sensors:
    pol_77_ambroisies:
      friendly_name: Ambroisies
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'ambroisies') }} "
      icon_template: mdi:flower
- platform: template
  sensors:
    pol_77_tilleul:
      friendly_name: Tilleul
      value_template: "{{ state_attr('sensor.pollens_seine_et_marne', 'tilleul') }} "
      icon_template: mdi:tree

pour la card

type: 'custom:stack-in-card'
title: Pollens Seine et Marne
keep:
  box_shadow: true
  margin: true
  border_radius: true
  background: true
  outer_padding: true
cards:
  - type: 'custom:button-card'
    entity: sensor.pollens_seine_et_marne
    name: Pollens
    icon: 'mdi:alert'
    color_type: icon
    show_name: true
    show_state: false
    state:
      - value: unknown
        operator: ==
        color: black
      - value: très faible
        operator: ==
        color: '#75f94c'
      - value: faible
        operator: ==
        color: '#377d22'
      - value: moyen
        operator: ==
        color: '#fffd54'
      - value: élevé
        operator: ==
        color: '#ef8641'
      - value: très élevé
        operator: ==
        color: '#ea3522'
    size: 20%
  - type: 'custom:auto-entities'
    card:
      type: grid
      title: Type de pollen
      columns: 4
      square: true
    card_param: cards
    filter:
      include:
        - entity_id: sensor.pol_77*
          options:
            type: 'custom:button-card'
            color_type: icon
            show_name: true
            show_state: false
            style: |
              ha-card {
                background: none;
                box-shadow: #ccffcc;
              }
            styles:
              card:
                - height: 100px
                - width: 100px
              name:
                - font-size: 13px
            state:
              - value: unknown
                operator: ==
                color: black
              - value: très faible
                operator: ==
                color: '#75f94c'
              - value: faible
                operator: ==
                color: '#377d22'
              - value: moyen
                operator: ==
                color: '#fffd54'
              - value: élevé
                operator: ==
                color: '#ef8641'
              - value: très élevé
                operator: ==
                color: '#ea3522'
            size: 60%
      exclude:
        - entity_id: sensor.pol_77*
          state: unknown
    sort: null
    method: friendly_name
    ignore_case: true
    numeric: false

4 « J'aime »

Bien la custom component !
Bravo !
Des nouvelles d’une belle card lovelace ?

bonjour , j ai un soucis en voulant installer son code .
voici l’erreur :

Platform error switch.pollens - No module named 'custom_components.pollens.switch' Invalid config for [switch.template]: [sensors] is an invalid option for [switch.template]. Check: switch.template->sensors. (See ?, line ?). Invalid config for [switch.template]: [sensors] is an invalid option for [switch.template]. Check: switch.template->sensors. (See ?, line ?). Invalid config for [switch.template]: [sensors] is an invalid option for [switch.template]. Check: switch.template->sensors. (See ?, line ?). Invalid config for [switch.template]: [sensors] is an invalid option for [switch.template].

1 « J'aime »

Salut,

A priori, c’est pas configurer dans la bonne catégorie, tu es certain que c’est pas un sensor, plutot qu’un switch ?

j’ai repris le code donné plus haut par Sweepy

Certes, mais le mot « switch » c’est pas dans sa config à lui… donc tu t’es sans doute trompé en ajoutant son code au mauvais endroit chez toi.

a ton avis il faut ajouter le code a quel endroit ?

Sans savoir comment c’est organisé chez toi … je ne sais pas répondre…
Ce qui est sûr c’est que tu as mis ça dans une catégorie « switch » alors que c’est pas nécessaire

ok , j ai simplement Copié le code dans le fichier configuration.yaml
… je n’y connais pas grand chose de plus , je débute . merci quand même

cherche un truc du genre (probablement au dessus de la partie que tu as copié) :
- switch :
ça devrait plutôt être collé en dessous de
- sensor:

A défaut, tu peux toujours partager ton fichier configuration.yaml, qu’on jete un oeil à l’occasion

# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:




tts:
  - platform: google_translate
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
neato:
  client_id: .........
  client_secret: .......
media_player:
  - platform: emby
    host: 192.168.x.x
    api_key: .........
frontend:    
  themes: !include_dir_merge_named themes
group:
  salle a manger:
    name: Lumières salle à manger
    entities:
      - switch.guirlande_salon
      - light.applique
      - light.boule_salle_a_manger
      - light.lightstrip_salle_a_manger
      - light.plafonnier_salle_a_manger
  salon:
    name: Lumières salon
    entities:
      - switch.guirlande_bureau
      - switch.guirlande_chauffage
      - light.boule
      - light.lightstrips_meuble_tv
      - light.plafonnier_salon
  chambre:
    name: Lumières chambre
    entities:
      - light.chevet
      - light.guirlande
      - light.lightstrip_chambre
  salle de bains:
    name: Lumières salle de bains
    entities:
      - light.lumiere_miroir_gauche
      - light.lumiere_miroir_droit
      - light.lightstrip_douche
switch:
  - platform: wake_on_lan
    mac: xxxxxx
    host: xxxxx
    name: xxxxx
    
  - platform: pollens
    location: 75
    timeout: 60
    
  - platform: template
    sensors:
      pol_75_cupressacees:
      friendly_name: Cupressaccees
      value_template: "{{ state_attr('sensor.pollens_paris', 'cupressacees') }} "
      icon_template: mdi:flower
  - platform: template
    sensors:
      pol_75_saule:
      friendly_name: Saule
      value_template: "{{ state_attr('sensor.pollens_paris', 'saule') }} "
      icon_template: mdi:tree
  - platform: template
    sensors:
      pol_75_frene:
      friendly_name: Frêne
      value_template: "{{ state_attr('sensor.pollens_paris', 'frene') }} "
      icon_template: mdi:tree
  - platform: template
    sensors:
      pol_75_peuplier:
      friendly_name: Peuplier
      value_template: "{{ state_attr('sensor.pollens_paris', 'peuplier') }} "
      icon_template: mdi:tree
  - platform: template
    sensors:
      pol_75_charme:
      friendly_name: Charme
      value_template: "{{ state_attr('sensor.pollens_paris', 'charme') }} "
      icon_template: mdi:tree
  - platform: template
    sensors:
      pol_75_bouleau:
      friendly_name: Bouleau
      value_template: "{{ state_attr('sensor.pollens_paris', 'bouleau') }} "
      icon_template: mdi:tree
  - platform: template
    sensors:
      pol_75_platane:
      friendly_name: Platane
      value_template: "{{ state_attr('sensor.pollens_paris', 'platane') }} "
      icon_template: mdi:tree
  - platform: template
    sensors:
      pol_75_chene:
      friendly_name: Chêne
      value_template: "{{ state_attr('sensor.pollens_paris', 'chene') }} "
      icon_template: mdi:tree
  - platform: template
    sensors:
      pol_75_graminees:
      friendly_name: Graminées
      value_template: "{{ state_attr('sensor.pollens_paris', 'graminees') }} "
      icon_template: mdi:flower
  - platform: template
    sensors:
      pol_75_oseille:
      friendly_name: Oseille
      value_template: "{{ state_attr('sensor.pollens_paris', 'oseille') }} "
      icon_template: mdi:flower
  - platform: template
    sensors:
      pol_75_urticacees:
      friendly_name: Urticacées
      value_template: "{{ state_attr('sensor.pollens_paris', 'urticacees') }} "
      icon_template: mdi:flower
  - platform: template
    sensors:
      pol_75_chataigner:
      friendly_name: Chataigner
      value_template: "{{ state_attr('sensor.pollens_paris', 'chataigner') }} "
      icon_template: mdi:tree
  - platform: template
    sensors:
      pol_75_amoise:
      friendly_name: Amoise
      value_template: "{{ state_attr('sensor.pollens_paris', 'amoise') }} "
      icon_template: mdi:flower
  - platform: template
    sensors:
      pol_75_aulne:
      friendly_name: Aulne
      value_template: "{{ state_attr('sensor.pollens_paris', 'aulne') }} "
      icon_template: mdi:tree
  - platform: template
    sensors:
      pol_75_noisetier:
      friendly_name: Noisetier
      value_template: "{{ state_attr('sensor.pollens_paris', 'noisetier') }} "
      icon_template: mdi:tree
  - platform: template
    sensors:
      pol_75_plantain:
      friendly_name: plantain
      value_template: "{{ state_attr('sensor.pollens_paris', 'plantain') }} "
      icon_template: mdi:flower
  - platform: template
    sensors:
      pol_75_olivier:
      friendly_name: Olivier
      value_template: "{{ state_attr('sensor.pollens_paris', 'Olivier') }} "
      icon_template: mdi:tree
  - platform: template
    sensors:
      pol_75_ambroisies:
      friendly_name: Ambroisies
      value_template: "{{ state_attr('sensor.pollens_paris', 'ambroisies') }} "
      icon_template: mdi:flower
  - platform: template
    sensors:
      pol_75_tilleul:
      friendly_name: Tilleul
      value_template: "{{ state_attr('sensor.pollens_paris', 'tilleul') }} "
      icon_template: mdi:tree

Tu as cherché un peu ?

désolé je débute vraiment mais en effet je suis un boulet sur le coup … désolé pour le dérangement . merci pour ta patience.

Compare avec la syntaxe de @chris60600 ça sera plus clair
image

Salut !
J’ai créé une Card qui fonctionne avec un bête sensor REST :
image

Et ma configuration :

# Alerte Pollen
  - platform: rest
    name: AlertePollens
    resource: https://www.pollens.fr/risks/thea/counties/91
    scan_interval: 86400
    value_template: '{{ value_json.riskLevel }}'
    json_attributes:
      - risks

J’avais créé la carte pour gérer mes conso d’eau.
En gros : elle crée des barres à partir de listes (soit de paires [‹ name1 ›:‹ value1 ›, ‹ name2 ›:‹ value2 ›, …], soit de d’objets [{‹ name ›:‹ name1 ›, ‹ value ›:‹ value1 ›, …}, {‹ name ›:‹ name2 ›, ‹ value ›:‹ value2 ›, …}, …]).
On peut choisir d’afficher ou non en fonction de plages de valeurs (dans mon exemple : je cache si == 0), et de coloriser par plages.
Tout est à peut près paramétrable.

Je ne l’ai pas complètement testée; je ne l’ai pas tout à fait documentée; je ne l’ai donc pas publiée.
Si ça intéresse quelqu’un, je fais cet effort. :slight_smile:

3 « J'aime »

Salut,

C’est pas mal l’idée des histogrammes horizontaux !
Et si en plus ça permet de diminuer le nombre sensor/attributs, c’est tout bénéfice

Pas moyen d’ajouter de lien…

Alors, c’est mon premier code TypeScript et ma première expérience avec Github… soyez indulgents, s’il vous plait. :slight_smile:
Mon composant est sous github : list2bars-card.
Je n’ai pas testé l’intégration via HACS encore…