Skip to content

Instantly share code, notes, and snippets.

@michilehr
Last active May 31, 2023 09:26
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save michilehr/7ce7431f97e82523336a120b50d0ebe2 to your computer and use it in GitHub Desktop.
Save michilehr/7ce7431f97e82523336a120b50d0ebe2 to your computer and use it in GitHub Desktop.
Home Assistant Ambee Pollen API
### Ambee Pollen
# Must be added in sensor.yml
# replace LAT, LONG and API-KEY with your values
- platform: rest
scan_interval: 3600
resource: https://api.ambeedata.com/latest/pollen/by-lat-lng?lat=LAT&lng=LONG
name: "Ambee Pollen"
headers:
content-type: "application/json"
x-api-key: "API-KEY"
json_attributes_path: "$.data.['Risk']"
json_attributes:
- tree_pollen
- grass_pollen
- weed_pollen
- platform: template
sensors:
ambee_pollen_tree:
icon_template: "mdi:tree-outline"
friendly_name: "tree"
value_template: >-
{% set state = state_attr('sensor.ambee_pollen', 'tree_pollen') %}
{% if state == "Low" %}Niedrig
{% elif state == "Moderate"%}Mittel
{% elif state == "High"%}Hoch
{% elif state == "Very High"%}Sehr hoch
{% else %}Unbekannt{% endif %}
- platform: template
sensors:
ambee_pollen_weed:
icon_template: "mdi:nature"
friendly_name: "weed"
value_template: >-
{% set state = state_attr('sensor.ambee_pollen', 'weed_pollen') %}
{% if state == "Low" %}Niedrig
{% elif state == "Moderate"%}Mittel
{% elif state == "High"%}Hoch
{% elif state == "Very High"%}Sehr hoch
{% else %}Unbekannt{% endif %}
- platform: template
sensors:
ambee_pollen_grass:
icon_template: "mdi:grass"
friendly_name: "grass"
value_template: >-
{% set state = state_attr('sensor.ambee_pollen', 'grass_pollen') %}
{% if state == "Low" %}Niedrig
{% elif state == "Moderate"%}Mittel
{% elif state == "High"%}Hoch
{% elif state == "Very High"%}Sehr hoch
{% else %}Unbekannt{% endif %}
@huizebruin
Copy link

huizebruin commented May 4, 2021

i made with your file and a little help an dutch version with a little more information.
https://github.com/huizebruin/Home-Assistant-Config/blob/main/sensors/ambee-nl.yaml

ambee-hooikoort-homeassistant

@michilehr
Copy link
Author

@huizebruin: Great! Thanks for sharing! Didn't know about the secret usage.

@steverumsby
Copy link

Thank you for this. Works perfectly! And I've extended it to pick up the air quality data from the Ambee API also, in the obvious way. This is all useful to have in a Home Assistant dashboard when the home in question has asthma sufferers in it.

This would be great to turn into a proper hass integration, but that's beyond my knowledge currently.

@michilehr
Copy link
Author

@steverumsby great! Feel free to fork it and add your extended version! A hass integration is on my list - but I don't have free time for this now.

@huizebruin
Copy link

@godfreym29
Copy link

Hi,
I'm getting this error in the server log "homeassistant.exceptions.InvalidStateError: Invalid state encountered for entity ID: sensor.ambee_pollen. State max length is 255 characters."

I suspect it's probably an error message being returned by Ambee, but I cant see what is being returned.

I've changed the Lat & Long .
I've added the API and can see the number of API calls going up on Ambee with every server restart.

I don't believe theres's anything wrong with the template section, as they are being created but the "State" is empty

Heres my config:

  • platform: rest
    resource: https://api.ambeedata.com/latest/pollen/by-lat-lng?lat=...&lng=...
    name: "Ambee Pollen"
    scan_interval: 3600
    headers:
    content-type: "application/json"
    x-api-key: "API has been added"
    json_attributes_path: "$.data.['Risk']"
    json_attributes:

    • tree_pollen
    • grass_pollen
    • weed_pollen
  • platform: template
    sensors:
    ambee_pollen_tree:
    icon_template: "mdi:tree-outline"
    friendly_name: "Tree"
    value_template: >-
    {% set state = state_attr('sensor.ambee_pollen', 'tree_pollen') %}
    ambee_pollen_weed:
    icon_template: "mdi:nature"
    friendly_name: "Weed"
    value_template: >-
    {% set state = state_attr('sensor.ambee_pollen', 'weed_pollen') %}
    ambee_pollen_grass:
    icon_template: "mdi:grass"
    friendly_name: "Grass"
    value_template: >-
    {% set state = state_attr('sensor.ambee_pollen', 'grass_pollen') %}
    ambee_pollen_last_updated:
    icon_template: "mdi:clock"
    friendly_name: "Last update"
    device_class: timestamp
    value_template:
    "{{ state_attr('sensor.ambee.pollen', 'updatedAt') }}"

Thanks

@michilehr
Copy link
Author

@godfreym29 can you please paste the code via the "insert code" button :)
Screenshot 2021-06-28 at 18 11 55

@godfreym29
Copy link

Thanks michilehr

Heres the offending code
I'm using a include_dir_merge_list as you suggested in your blog

### Ambee Pollen Count

- platform: rest
  resource: https://api.ambeedata.com/latest/pollen/by-lat-lng?lat=52.651983&lng=0.779117
  name: "Ambee Pollen"
  scan_interval: 3600
  headers:
    content-type: "application/json"
    x-api-key: "... API key ..."
  json_attributes_path: "$.data.['Risk']"
  json_attributes:
    - tree_pollen
    - grass_pollen
    - weed_pollen  
   
- platform: template
  sensors:
    ambee_pollen_tree:
      icon_template: "mdi:tree-outline"
      friendly_name: "Tree"
      value_template: >-
        {% set state = state_attr('sensor.ambee_pollen', 'tree_pollen') %}
    ambee_pollen_weed:
      icon_template: "mdi:nature"
      friendly_name: "Weed"
      value_template: >-
        {% set state = state_attr('sensor.ambee_pollen', 'weed_pollen') %}
    ambee_pollen_grass:
      icon_template: "mdi:grass"
      friendly_name: "Grass"
      value_template: >-
        {% set state = state_attr('sensor.ambee_pollen', 'grass_pollen') %}

@huizebruin
Copy link

I've been updated it to get a lot more options.
I passed it on GitHub as well.
It's hase Dutch names. And information as well in dutch.

https://www.github.com/huizebruin/Home-Assistant-Config/tree/main/sensors%2Fambee_pollen.yaml

@michilehr
Copy link
Author

@godfreym29 you didn't output anything in your state.

Check out if this works

### Ambee Pollen Count

- platform: rest
  resource: https://api.ambeedata.com/latest/pollen/by-lat-lng?lat=52.651983&lng=0.779117
  name: "Ambee Pollen"
  scan_interval: 3600
  headers:
    content-type: "application/json"
    x-api-key: "... API key ..."
  json_attributes_path: "$.data.['Risk']"
  json_attributes:
    - tree_pollen
    - grass_pollen
    - weed_pollen  
   
- platform: template
  sensors:
    ambee_pollen_tree:
      icon_template: "mdi:tree-outline"
      friendly_name: "Tree"
      value_template: >-
        {{ state_attr('sensor.ambee_pollen', 'tree_pollen')  }}
    ambee_pollen_weed:
      icon_template: "mdi:nature"
      friendly_name: "Weed"
      value_template: >-
        {{ state_attr('sensor.ambee_pollen', 'weed_pollen') }}
    ambee_pollen_grass:
      icon_template: "mdi:grass"
      friendly_name: "Grass"
      value_template: >-
        {{ state_attr('sensor.ambee_pollen', 'grass_pollen')  }}

@godfreym29
Copy link

@michilehr I've tried your suggestion but I'm still getting the same error in the log
File "/usr/src/homeassistant/homeassistant/core.py", line 906, in init raise InvalidStateError(
homeassistant.exceptions.InvalidStateError: Invalid state encountered for entity ID: sensor.ambee_pollen. State max length is 255 characters.

@michilehr
Copy link
Author

@suyenish
Copy link

suyenish commented Jun 8, 2022

Hiiiiii! Can I ask if you know how to get this data in JS? For example, I would like to get the count of grass pollen like this
const grass_num = data.Count.grass_pollen But I am having errors and I don't know how to deal with it 😭
{ "message": "success", "lat": 35.23373019999984, "lng": 129.07596150000015, "data": [ { "Count": { "grass_pollen": 46, "tree_pollen": 25, "weed_pollen": 18 }, "Risk": { "grass_pollen": "Moderate", "tree_pollen": "Low", "weed_pollen": "Low" }, "updatedAt": "2022-06-08T10:06:36.000Z" } ] }
Thank you for your time! Hope you will answer

@michilehr
Copy link
Author

@suyenish like this?

let res = '{ "message": "success", "lat": 35.23373019999984, "lng": 129.07596150000015, "data": [ { "Count": { "grass_pollen": 46, "tree_pollen": 25, "weed_pollen": 18 }, "Risk": { "grass_pollen": "Moderate", "tree_pollen": "Low", "weed_pollen": "Low" }, "updatedAt": "2022-06-08T10:06:36.000Z" } ] }';

let json = JSON.parse(res);

console.log('your data: ' + json.data[0].Count.grass_pollen);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment