IKEA VINDSTYRKA Zigbee Air quality sensor

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.

3 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

I hooked this up through Deconz on Home assistant, and I’m definitely confused about what item is what on the output:

image
The PPB only showed up this morning :stuck_out_tongue:

1 Like

The ppb is definitely interesting. I don’t get a ppb numer via Zigbee2mqtt. The VOC Index is on a different scale, unfortunately not an absolute number in ppb so I wonder what that is all about…

Where is that button? On the device’s diagnostic panel in ZHA I only have an Identify button.

image

after updating to hassio 2023.10, the tvoc sensor created in this way:
sensors:
keittio_ilmanlaatu_tvoc:
friendly_name: “Keittiö ilmanlaatu TVOC”
icon_template: mdi:weather-dust
value_template: “”

and the automation suggested by @chendo give me back an error message

Any idea?

I am using ZHA with conbee 2

There was an update to ZHA-toolkit
ZHA toolkit -service call broken?

If you want (long term) statistics for the sensor, you have to set the device class. It will also show the history not as state changes but as a graph. Also, set unit to empty and the initial value to None so that it doesn’t try to interpret the empty string as a number on start and throw a warning:

    vindstyrka_tvoc_index:
      unique_id: vindstyrka_tvoc_index
      friendly_name: Vindstyrka TVOC Index
      device_class: aqi
      unit_of_measurement: ''
      icon_template: mdi:weather-dust
      value_template: '{{ None }}'
2 Likes

Thanks for this.
This solves my ‘entities not available’ when doing a quick reload.

Can I suggest that @jonixx updates their post with these changes to the template sensor?

I have a more general question. How to interpret these values: In ther morning they are normal because the window was open during the night. Then the values increase sharply until I open the window. What can cause these high values?

Bildschirmfoto 2023-10-19 um 11.27.24

what you see is proprietary Sensirion’s VOC Index, basically it say’s when it’s rising that your VOC load increases while it decreases with an open window. these are no absolute values, but relative values. a value of 100 indicates that the VOC load (or „smell“) of the room is fine. values below indicate fresh air, open window (decreasing „smell“). the values are relative on a flexible scale and are supposed to mimic how our nose works/smells.

basically sensirion recommends to clean the air with a air cleaner/purifier with minimum fan power when the index is between 150 and 250, with medium fan power between 250 and 400 and maximum power above 400. or in other words: open the window when the index is above 400. values up to 300 like your graph shows should be absolutly fine (and only indicate that the room is slightly more „smelly“ than fresh air).

this is all explained in more detail in https://sensirion.com/media/documents/02232963/6294E043/Info_Note_VOC_Index.pdf

9 Likes

OK. Thank you for your quick reply. I understand the values as such but I do not understand the source of the VOC load. Does it only come from my breathing? There are no other sources in the room but myself.

it’s a VOC sensor :slight_smile:
sources are anthropomorphic (sweating, breathing, farting, burping) but also evaporate from food or cooking, from solvents in cosmetics or disolved paint, after-shave and so on. more or less things that smell.

2 Likes

For those who don’t speak or read German, this is the English equivalent:

Has anyone been successful getting one of these to connect with ZHA and an HA SkyConnect? I picked up a VINDSTYRKA last night and it’s been no joy on linking to HA.

1 Like

@Skyman64 Try factory-resetting the device by: “quick-press the pairing button 4 times to perform a factory reset”.

2 Likes

Is there any way to improve the resolution on the temperature sensor? Seems like it is just an integer in degC, which is not very useful in tracking trends.

No. This is by design.

https://www.zigbee2mqtt.io/devices/E2112.html#device-is-not-reporting-with-decimal-points-precision

Good to know. I guess the only way would be if IKEA provides a firmware update.

Thanks for making me retry this. I had been doing longer and deliberate button presses and that wasn’t working but by going very quick, it linked right up.