Pollen-Sensor (Austria) - json_attributes

Hi Guys,

I’m currently experimenting with a pollen-rest-sensor feeded from “polleninformation.at” which gives a JSON-result. My current rest_senor configuration is as follows:

- name: pollen_report_klagenfurt_alternaria
  unique_id: '7ab1d681-c43c-45bd-aed9-8241fb45ddce'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=23&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  scan_interval: 600
  value_template: '{{ value_json.result.contamination[0].contamination_1 }}'
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

However - I don’t know how to “fix” that - it looks like the value of “contamination_1/2/3” get’s inserted as string at HA and not as an integer.

image

Do you guys have any ideas to fix that?

Cheers Flo

I did it another way - I made a template for better readability →

- name: pollen_report_klagenfurt_alternaria
  unique_id: '7ab1d681-c43c-45bd-aed9-8241fb45ddce'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=23&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}'
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

Just for the records for anyone who want’s to use this as well in Austria. For sure you’ve to adapt the lat/long values in the URL if you want to have another city as Klagenfurt. Here is the configuration for all available Pollen-values from this service:

- name: pollen_report_klagenfurt_alternaria
  unique_id: '7ab1d681-c43c-45bd-aed9-8241fb45ddce'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=23&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}'
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

- name: pollen_report_klagenfurt_ambrosia
  unique_id: 'ba37ca74-3cd4-43bf-b8d3-848dd64fea08'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=6&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}'
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

- name: pollen_report_klagenfurt_cupressaceae
  unique_id: 'f38c3e37-0610-479a-827e-3dd3839b62f2'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=17&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}'
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

- name: pollen_report_klagenfurt_alnus
  unique_id: 'dec6752b-5444-4255-8d76-84e970888b7e'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=1&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}'  
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

- name: pollen_report_klagenfurt_corylus
  unique_id: '70908007-a814-4eac-b8c9-f5166932a315'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=3&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}'  
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

- name: pollen_report_klagenfurt_fraxinus
  unique_id: 'd3266144-1cc6-4169-b5e6-066a55c1f6eb'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=4&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}'  
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

- name: pollen_report_klagenfurt_betula
  unique_id: '725668f6-2582-4874-b996-afedfbbf324c'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=2&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}'  
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

- name: pollen_report_klagenfurt_platanus
  unique_id: '54a01331-abeb-4631-a38e-a3244df13593'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=16&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}'  
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

- name: pollen_report_klagenfurt_poaceae
  unique_id: 'a6795ac2-af47-44e6-88fc-2e613eca3470'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=5&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}' 
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

- name: pollen_report_klagenfurt_secale
  unique_id: 'f7a92206-15df-481b-9f21-1b899550d2cd'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=291&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}'  
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

- name: pollen_report_klagenfurt_urticaceae
  unique_id: '9a8cfa04-7361-45a6-b871-16cf420f6f42'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=15&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}'  
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

- name: pollen_report_klagenfurt_olea
  unique_id: '81a74482-bf0e-404b-a035-b85b0c75798b'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=18&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}'  
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title

- name: pollen_report_klagenfurt_artemisia
  unique_id: '1e6790ee-898a-4f05-a260-9406e6abd168'
  resource: 'https://www.polleninformation.at/index.php?eID=appinterface&pure_json=1&lang_code=de&lang_id=0&action=getFullContaminationData&type=gps&value[latitude]=46.628&value[longitude]=14.309&show_polls=7&country_id=1&personal_contamination=false&sensitivity=0&country=AT&sessionid='
  platform: rest
  icon: mdi:flower-pollen-outline
  scan_interval: 600
  value_template: '
    {% if value_json.result.contamination[0].contamination_1 == 0 -%}Keine
    {%- elif value_json.result.contamination[0].contamination_1 == 1 -%}Niedrig
    {%- elif value_json.result.contamination[0].contamination_1 == 2 -%}Mittel
    {%- elif value_json.result.contamination[0].contamination_1 == 3 -%}Hoch
    {%- elif value_json.result.contamination[0].contamination_1 == 4 -%}Sehr Hoch
    {%- endif %}'
  json_attributes_path: "$.result.contamination[0]"
  json_attributes:
    - contamination_2
    - contamination_3
    - poll_title
8 Likes

Thank you!

1 Like

Hi
that sound perfect, the sesaion is geting started
how can i bring the code into HA? should i paste it in the Yaml.config?

thanks

Hi @bwth,

I‘ve put this onfig in my sensors.yaml.

Cheers

PS: I‘ve added this to my main dashboard with a custom:auto-entities code like this

 - type: horizontal-stack
    cards:
      - type: custom:auto-entities
        card:
          square: false
          columns: 2
          type: grid
        card_param: cards
        filter:
          include:
            - entity_id: '*pollen_report*'
              options:
                type: tile
                vertical: false
                color: pink
          exclude:
            - state: Keine
            - state: unknown
        show_empty: true

Sure, you can strip down the yaml above to the pollen you are allergic to - makes sense I guess :slight_smile:

3 Likes

Danke für deine Hilfe,
lg aus Graz

1 Like

Hallo! Könntest du mir vl. dabei helfen, den Sensor einzurichten. Bin was Yaml betrifft nicht so gut drauf. -.- LG aus Graz

Hi!
This is working like a charm. I want to take it a step further and want to color depending on the state

type: horizontal-stack
cards:
  - type: custom:auto-entities
    card:
      square: false
      columns: 2
      type: grid
    card_param: cards
    filter:
      include:
        - entity_id: '*pollen_report*'
          options:
            type: tile
            vertical: false
            color: |
              {% set state = states('this.entity_id') %}
              {% if state == 'Sehr Hoch' %}
                darkred
              {% elif state == 'Hoch' %}
                red
              {% elif state == 'Niedrig' %}
                orange
              {% elif state == 'Keine' %}
                yellow
              {% else %}
                green
              {% endif %}
      exclude:
        - state: Keine
        - state: unknown
    show_empty: true

which sadly is not working.
I also tried the easier version with just a card an fixed entity

type: tile
entity: sensor.pollen_report_innsbruck_birke
color: >
  {% set state = states('sensor.pollen_report_innsbruck_birke') %} {% if state
  == 'Sehr Hoch' %}
    blue
  {% elif state == 'Hoch' %}
    red
  {% elif state == 'Niedrig' %}
    orange
  {% elif state == 'Keine' %}
    yellow
  {% else %}
    green
  {% endif %}

But also no luck!
Any ideas - really can’t find a solution.

Thanks in advance

Steeeve

Welche Hilfe brauchst du denn? LG

Maybe an conditional can be your solution? Like so:

type: horizontal-stack
cards:
  - type: conditional
    conditions:
      - condition: state
        entity: sensor.pollen_report_klagenfurt_betula
        state: Niedrig
    card:
      type: tile
      entity: sensor.pollen_report_klagenfurt_betula
      color: green
  - type: conditional
    conditions:
      - condition: state
        entity: sensor.pollen_report_klagenfurt_betula
        state: Sehr Hoch
    card:
      type: tile
      entity: sensor.pollen_report_klagenfurt_betula
      color: pink
  - type: conditional
    conditions:
      - condition: state
        entity: sensor.pollen_report_klagenfurt_betula
        state: Hoch
    card:
      type: tile
      entity: sensor.pollen_report_klagenfurt_betula
      color: orange

I have reduced the output to pollen to which I am actually allergic, so that the configuration is not too complicated.

Configuration:

Result (now):
image

1 Like

Thank you very much, this is an good solution! Sorry for late reply, didn’t get a notification about your answer!

1 Like

Hello @florianmulatz
how do you achieve that the attribute poll_title is used as title for the auto-entities lovelace item instead of the entityID ?

br
Mario

I’ll be honest - I don’t understand your question. What do you want to do?

Cheers Mate

What about using the data from accuweather, u get detailed information about the pollen and health data.

if OP wants i can post the multiscrape code right here.
regards

@florianmulatz in your screenshot in post 6 the tiles on your dashboard show the proper names (e.g. Erle (Alnus)). When I configure the code you posted as love-lace it looks like this, taking the sensor_id as caption for the tile

The JSON sensor you created also stores the value of poll_title as a json_attribute.
Somehwere a piece of configuration is missing to tell config:auto-entities to use this json_attribute as caption for the tile.

Ah now I got it … to be honest I’ve put the friendly-name manually into the entities :open_mouth:

:slight_smile: understand, looks a bit different but with the following code and by involving “custom:template-entity-row” I have achieved to name it based on the JSON attribute (involves also a second set of sensors for the next-day forecast)

type: vertical-stack
cards:
  - type: custom:auto-entities
    card:
      square: false
      columns: 1
      type: grid
      title: Aktuell
    card_param: cards
    filter:
      include:
        - entity_id: '*pollen_report*current*'
          sort:
            method: attribute
            attribute: contamination_1
            reverse: true
          options:
            type: custom:template-entity-row
            vertical: false
            name: '{{ state_attr(config.entity, ''poll_title'') }}'
            color: |
              {% set state = states('this.entity_id') %}
              {% if state == 'Sehr Hoch' %}
                darkred
              {% elif state == 'Hoch' %}
                red
              {% elif state == 'Mittel' %}
                orange                
              {% elif state == 'Niedrig' %}
                yellow
              {% elif state == 'Keine' %}
                green
              {% else %}
                green
              {% endif %}
      exclude:
        - state: Keine
        - state: unknown
    show_empty: true
  - type: custom:auto-entities
    card:
      square: false
      columns: 1
      type: grid
      title: Vorhersage
    card_param: cards
    filter:
      include:
        - entity_id: '*pollen_report*forecast*'
          sort:
            method: attribute
            attribute: contamination_2
            reverse: true
          options:
            type: custom:template-entity-row
            vertical: false
            name: '{{ state_attr(config.entity, ''poll_title'') }}'
            color: |
              {% set state = states('this.entity_id') %}
              {% if state == 'Sehr Hoch' %}
                darkred
              {% elif state == 'Hoch' %}
                red
              {% elif state == 'Mittel' %}
                orange                
              {% elif state == 'Niedrig' %}
                yellow
              {% elif state == 'Keine' %}
                green
              {% else %}
                green
              {% endif %}
      exclude:
        - state: Keine
        - state: unknown
    show_empty: true

image

1 Like

Hi Guys,

Another way to sort this out. (I didn’t like the “custom:template-entity-row” way because it didn’t honor my theme-background - it just used a darker one and that didn’t fit into my dashboard :slight_smile: )

Therefore I used a custom:mushroom-template-card now:

type: custom:auto-entities
card:
  square: false
  type: grid
  columns: 2
card_param: cards
filter:
  include:
    - entity_id: '*pollen_report*'
      options:
        type: custom:mushroom-template-card
        primary: '{{ state_attr(config.entity, ''poll_title'') }}'
        secondary: '{{ states(config.entity) }}'
        icon: mdi:flower-pollen-outline
        tap_action: none
        icon_color: |
          {% set contamination = state_attr(config.entity, 'contamination_2') %}
          {% if contamination == 3 %}
            red
          {% elif contamination == 2 %}
            red
          {% elif contamination == 1 %}
            yellow
          {% else %}
            default
          {% endif %}
  exclude:
    - state: Keine
    - state: unknown
show_empty: false
sort:
  method: state

image

Have fun guys!

Hey, muss ich für diesen Sensor irgendwas in Hone Assistant einrichten? Ich bekomm das einfach nicht zum laufen