IKEA VINDSTYRKA Zigbee Air quality sensor

To get more frequent updates, install zha_toolkit

alias: Update vindstyrka
description: fijnstof update
trigger:
  - platform: time_pattern
    seconds: "30"
condition: []
action:
  - service: zha_toolkit.attr_read
    data:
      ieee: sensor.ikea_of_sweden_vindstyrka_particulate_matter
      use_cache: false
      force_update: true
      endpoint: 1
      cluster: 1066
      attribute: 0
mode: single
6 Likes

Hi!
This is working great!
Do you think that thereā€˜s any chance to use zha_toolkit for accessing the tVOC measurement cluster?
This could be a workaround until ZHA implements the pull requestā€¦

Unfortunately itā€™s turning out to be a bit more complicated to implement this into ZHA. The VOC attribute is not actively reported by the device and thus needs to be actively polled by ZHA, which complicates stuff.

Also there seems to be some issue with the unit, the SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS expects a specific unit, but since this ā€œVOC indexā€ is some manufacturer specific thing it doesnā€™t really have one.

Figuring out how ZHA actually works and how this stuff is all integrated into HA is going to take some more time. The developer documentation for HA core is OK, but figuring out how ZHA works with the quirks stuff and zigpy library is pretty much a reverse-engineering effort :slight_smile:

1 Like

Hi
This is great news!
How often the device sends data to HA?
How about accuracy for temperature? According to your screenshots, it doesnā€™t look like it is decimal.

Thank you.

thats not accurate, the VOC index cluster pushes values just as the PM2.5 cluster does. working great for me with zigbee2mqtt since over 2 months,

the VOC values are indeed no real VOC values, but a ā€žVOC indexā€œ that is sensirion specific (the manufacturer of the build in sensor). it shows values between 0 and 500; you can read about it here: https://sensirion.com/media/documents/02232963/6294E043/Info_Note_VOC_Index.pdf

2 Likes

The value not updating is a ZHA specific issue, other Zigbee libraries/brokers indeed have no problem seeing it. You can read up on the discussion in the pull request: Add support for IKEA VINDSTYRKA Air quality Sensor by just-oblivious Ā· Pull Request #2315 Ā· zigpy/zha-device-handlers Ā· GitHub

As for the unit: I currently have the sensor defined as class SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS without a unit specified; this causes HA to log a warning about missing units. Itā€™s a minor hurdle to overcome, but one that needs to be addressed.

1 Like

Indeed, I was set on buying one until I noticed this. I was hoping it could replace the simple room temperature sensor I have for my radiators, but it really should have 0.1Ā° resolution to work well for that, at least for the data reported over Zigbee. (I could live with whole numbers on the display.) Iā€™m not so optimistic itā€™s possible, but if thereā€™s a way to change it to 0.1Ā° resolution, Iā€™d love to hear about it!

3 Likes

Iā€™m hoping for the same!

Iā€™m just using the ZHA integration, and all I can get from it is the Temp and Humidity.

Am I reading the comments right that the only way to get the VOC and PM2.5 readings in HA at the moment is via Deconz or Zigbee2mqtt?

Does this work with the old TrƄdfri hub?
(As I have no other zigbee devices at the moment (yet))

2 Likes

I got this to kind of work for my purposes with the help given in this thread.

There most certainly is a better way to do this. Perhaps someone more experienced could help to improve this method. Iā€™m a beginner with YAML and HA :slight_smile:

  1. Install ZHA toolkit from HACS
  2. Create a template sensor
    #template for the IKEA TVOC kitchen
  - platform: template
    sensors:
      keittio_ilmanlaatu_tvoc:
        friendly_name: "Keittiƶ ilmanlaatu TVOC"
        unit_of_measurement: "TVOC index"
        icon_template: mdi:weather-dust
        value_template: ""
  1. Create a automation that calls ZHA Toolkit: attr_read service once a minute and set it to write the value to state_id previously created
alias: Read keittiƶ TVOC
description: Use ZHA_toolkit
trigger:
  - platform: time_pattern
    seconds: "0"
    minutes: "/1"
condition: []
action:
  - service: zha_toolkit.attr_read
    data:
      ieee: <censored>
      endpoint: 1
      cluster: 64638
      attribute: 0
      manf: 4476
      state_id: sensor.keittio_ilmanlaatu_tvoc
mode: single

With this method Iā€™m able to get some values to HA. Iā€™m really not sure how the template sensor should be created for this use case where ZHA toolkit writes the value :man_shrugging: Without the state_id


Iā€™ve edited this post to correct some of my original mistakes

6 Likes

works like a charmā€¦

1 Like

I started reversing the way IKEA implements the SEN54 sensor in VINDSTYRKA, as they seem to be doing some funky processing on raw and undocumented valuesā€¦

The way ESPHome implements this sensor yields different (inaccurate!) results for temperature/humidity when compared to the values reported by VINDSTYRKA (as reported here: IKEA Vindstyrka & ESPHome Integration - #4 by Laess3r).

I hope to come up with some sort of compensation value/slope that can be used to correct the sensor output.

Docs:

4 Likes

I am a bit confused. Where have i to put this code?
I am a bloody newby, so perhaps i ask something ridiculous
Greatings
Christoph

Itā€™s an automation.

if you have zha toolkit installed GitHub - mdeweerd/zha-toolkit: šŸ§° Zigbee Home Assistant Toolkit - service for "rare" Zigbee operations using ZHA on Home Assistant then you can go to automations and create it.
Or you can add it to the appropriate yaml file.

1 Like

Has anyone had any luck contacting IKEA about technical specs of this device beyond those in the ā€˜assemblyā€™ document? Specifically, I am trying to figure out what type of PM2.5 sensor is being usedā€“I am most familiar with Plantower laser sensors but this one appears to be different.

As mentioned before, IKEA VINDSTYRKA contains a Sensirion SEN54 sensor module. There is plenty of documentation available on the website of the manufacturer: Smart sensor solutions.

Great post, thank you.

Iā€™m new to IKEA smart home products, and wondering if I can add a Vindstyrka to my HA ecosystem by itself, or must I also add their Dirigera hub?

Thanks again.

You can add it as a Zigbee device either with ZHA or Zigbee2MQTT. You will obtain Temp, Humidity and PM2.5 data from the unit into HA. However, as this thread defines, there is an issue with obtaining the VOC index in ZHA which is an issue that I have. Apparently it works with Z2MQTT but I have not gone there. I am a ZHA user.

I am hoping for a resolution in the VOC index as my intention is to use my IKEA unit in a 3D Print Enclosure to control carbon filtration blowers installed in the enclosure.

2 Likes

This is my automation to poll for updates every 15 seconds from multiple sensors, and does not require modifying quirks or patching HASS. Hope this is useful!

Edited to add allow_create: true and removed duplicate attr_read.
Edit: Turns out manf is critical when quirks arenā€™t set.

alias: "Climate: Fetch AQI data"
mode: single
description: poll for AQI data
trigger:
  - platform: time_pattern
    seconds: "/15"
condition: []
action:
  - parallel:
      - repeat:
          for_each: # list your sensors here
            - lounge_aqi
            - office_aqi
            - balcony_aqi
            - bathroom_aqi
          sequence:
            - service: zha_toolkit.attr_read
              data:
                ieee: sensor.{{ repeat.item }}_particulate_matter
                endpoint: 1
                manf: 4476
                cluster: 1066
                attribute: 0
                state_id: sensor.{{ repeat.item }}_particulate_matter
                allow_create: true
            - service: zha_toolkit.attr_read
              data:
                ieee: sensor.{{ repeat.item }}_particulate_matter # Intentional, because the VOC index parameter may not exist
                endpoint: 1
                manf: 4476
                cluster: 64638
                attribute: 0
                state_id: sensor.{{ repeat.item }}_voc_index
                allow_create: true
7 Likes