We’re doing a kitchen & bathrooms renovation, and the construction is generating a lot of dust, to the point that I was changing the HVAC filter twice a week. I wanted to see just how much garbage is in the air, so I started looking around for air quality sensors. Naturally I wanted one that I could integrate into my Home Assistant so I could generate notifications if the air was extra filthy.

Most of the sensors I found were either over priced, didn’t expose their data via a local API, or both.

Ikea has a very cheap ($15 US) VINDRIKTNING sensor that measures 2.5 µm particles in the air, and after looking around online, I realized that I could splice an ESP8266 or ESP32 into it and transform it from something that just displays relatively useless green, red & orange LED lights to something I could scrape more meaningful data into my Home Assistant installation and potentially trigger automations.

I decided to use Tasmota because it already has support for the VINDRIKTNING’s air sensor baked into the all-sensors version of the firmware, and also supports i2c so that in addition to the VINDRIKTNING’s 2.5 µm sensor, I added a BME680 from my parts box and get temperature, humidity, dew point and VOC measurements too.

Parts List

  • Small Phillips screwdriver
  • Wemos D1 Mini - Any ESP32 or ESP8266 will do, this is what I had in my parts bin
  • Ikea VINDRIKTNING air sensor
    • USB C cable & power brick to power the VINDRIKTNING, it doesn’t come with them
    • BME688 (optional)
  • qwiic cable for cannibalization (optional)

Pre-requisites

  • A MQTT server
  • Home Assistant configured to use MQTT

Software Setup

First, flash the D1 - it’s easier to do when it isn’t wired into the Ikea unit. I used Tasmota’s online tool to flash my board and chose the Tasmota all-sensors build - make sure you use all-sensors, not the sensors build at the top of the popup menu or it won’t have the VINDRIKTNING support baked in.

Next, make sure it’s connecting to your WIFI and you can reach the web UI panel. Get this working now so that you don’t have to open up the case later to reflash it. You want to be sure the board is working before you do all the soldering to embed it into the VINDRIKTNING.

Configuration

Tasmota defaults to sending metrics to MQTT every 600 seconds. Given that the VINDRIKTNING is powered by a USB brick and I don’t have to care about battery life, I set mine to report every 60 seconds so my graphs will be smoother. To do that, connect to the Tasmota’s web ui, select the console, and enter TelePeriod 60 (or whatever interval in seconds you prefer).

Set up MQTT

Go to the web ui and go into the configuration menu, then MQTT. The topic you specify will be the device name in Home Assistant.

tasmota mqtt configuration

Set up pins

Next, go into the configuration menu and configure what pins are going to be used for what. Here’s what my working setup looks like:

tasmota configuration

Hardware Setup

We’re not going to replace the Ikea’s electronics. Instead, we’re going to tap into it like a symbiote so that the VINDRIKTNING supplies power and data to our 8266, and the original board remains fully functional to drive the LED display.

Steps

Open up the VINDRIKTNING

Unfortunately the screws holding it together are in annoyingly deep holes, so you’ll need a eyeglass-style screwdriver like this one that came with a fan kit for one of my Raspberry Pis (AirPods Pro for scale).

mini screwdriver

Open it gently - the screws are tapped into the plastic case and it is easy to strip the holes.

Once it’s open, carefully unsnap the two cables connecting the sensor and the motherboard. It’ll look like this when you’re done:

opened vindriktning

I didn’t bother to unscrew the IKEA motherboard from the case, there aren’t that many connections to make to it and they’re pretty easily accessible.

Wire up the ESP8266

Connect a QWIIC cable to the Wemos I2C Bus (Optional)

If you’re not going to use the i2c bus to connect another sensor, you can skip this step.

I happened to have a BME688 in my parts bin that I could add to the sensor, so I cut a QWIIC cable in half and soldered that onto the Wemos before I connected that to the Ikea.

Connect the wires as follows:

  • Red wire -> 3v3
  • Black wire -> Ground G
  • Yellow -> D1
  • Blue -> D2

Here’s a picture of the D1 with the QWIIC cable - ignore the green wire, I forgot to take a picture before starting the next step

wemos+qwiic cable

Connect the ESP 8266 to the VINDRIKTNING

You only need to connect 3 wires for this.

  • Connect D5 on the D1 to REST on the VINDRIKTNING (Blue wire in pic)
  • Connect G on the D1 to GND on the VINDRIKTNING (Green wire in pic)
  • Connect 5V on the D1 to +5V on the VINDRIKTNING (Red wire in pic)

Now you can reconnect the cables from the VINDRIKTNING sensor to its motherboard, and it should look very similar to this image.

wemos+qwiic cable

Reassembly

Plug in the USB-C power cable and make sure that you can access the Tasmota web ui and that it is reading the sensors before you put any screws back in.

If you have a BME688 in yours, it’ll look like:

wemos+qwiic cable

otherwise it’ll only have the VINDRIKTNING reading.

Now you can carefully put the D1 (and the BME 688 if you added one) into the empty space in the case, then screw everything shut.

Connecting to Home Assistant

If you don’t already have the Tasmota integration, you’ll need to add it. Go into Settings, Devices & Services, then Integrations. Click Add Integration, pick the Tasmota Integration and configure it. It’ll ask for the MQTT server, user and password.

Home Assistant should detect your new sensor and let you add the device.

Congratulations, you’ve successfully DIYed an air sensor!