Ikea introduced a new air quality sensor called Vindstyrka. At €40 it brings along a display, zigbee and an excellent Sensirion SEN54. The screen shows PM2.5, temperature, humidity and an indicator for tVOC.
The Sensirion Sen54 can do a bit more. Can we get it via Esphome? Answer: Yes, we can. Many thanks to Oleksii Kutuzov for his initial investigation.
Short “How to”: Open the sensor, find the pins names VCC, GND, SDA and SCL underneath the LCD connector. Connect an D1 Mini or similar to it. Do a little ESPHome YAML. Done. About 1 hour work.
As a first step, remove the protective plastic from the front, by inserting a fingernail between the screen and the box. It is lightly taped. To unscrewfrom behind, use a T6 Torx. Don’t unscrew completely at first, as you need to push an inner sensor casing out of the box. Loosen all four screws and push the inner casing out.
Locate the I2C bus connector in the lower part of the board. Carefully solder the needed wires. Pay attention to the flat ribbon connector of the LCD screen, it does not like your solder iron.
The YAML for ESPHome assumes a D1 Mini and I2C bus connections on D1 for SCL and D2 for SCA. Please adjust, if needed.
esphome:
name: vindstryka
friendly_name: Vindstryka
platform: ESP8266
board: d1_mini
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "dWh+jnSCUSii2lAHl1hWlYEIKgsl5CpO0+5SK85Q4X4="
ota:
password: "2bd359935280c9823bfdde61ec3218d"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Vindstryka Fallback Hotspot"
password: "ZGTRFg7LG63EV"
# I2C config as SEN54 is connected on that bus
i2c:
scl: D1
sda: D2
scan: true
id: bus_a
# Example configuration entry
sensor:
- platform: sen5x
id: sen54
pm_1_0:
name: " PM <1µm Weight concentration"
id: pm_1_0
accuracy_decimals: 1
pm_2_5:
name: " PM <2.5µm Weight concentration"
id: pm_2_5
accuracy_decimals: 1
pm_4_0:
name: " PM <4µm Weight concentration"
id: pm_4_0
accuracy_decimals: 1
pm_10_0:
name: " PM <10µm Weight concentration"
id: pm_10_0
accuracy_decimals: 1
temperature:
name: "Temperature"
id: Sen54_T
accuracy_decimals: 1
humidity:
name: "Humidity"
id: Sen54_H
accuracy_decimals: 0
voc:
name: "VOC"
id: tVOC
algorithm_tuning:
index_offset: 100
learning_time_offset_hours: 12
learning_time_gain_hours: 12
gating_max_duration_minutes: 180
std_initial: 50
gain_factor: 230
temperature_compensation:
offset: 0
normalized_offset_slope: 0
time_constant: 0
acceleration_mode: low
store_baseline: true
address: 0x69
update_interval: 10s
captive_portal:
This will read the I2C bus every 10 seconds. The log in ESPHome will show all SEN54 readings:
[10:00:10][D][sensor:126]: ' PM <1µm Weight concentration': Sending state 11.50000 µg/m³ with 1 decimals of accuracy
[10:00:10][D][sensor:126]: ' PM <2.5µm Weight concentration': Sending state 12.10000 µg/m³ with 1 decimals of accuracy
[10:00:10][D][sensor:126]: ' PM <4µm Weight concentration': Sending state 12.10000 µg/m³ with 1 decimals of accuracy
[10:00:10][D][sensor:126]: ' PM <10µm Weight concentration': Sending state 12.10000 µg/m³ with 1 decimals of accuracy
[10:00:10][D][sensor:126]: 'Temperature': Sending state 25.50000 °C with 1 decimals of accuracy
[10:00:10][D][sensor:126]: 'Humidity': Sending state 45.18000 % with 0 decimals of accuracy
[10:00:10][D][sensor:126]: 'VOC': Sending state 101.00000 with 0 decimals of accuracy
Looks like we have an interference with the IKEA sensor controller. There is a regular error message in the logs:
[10:02:30][E][sensirion_i2c:026]: CRC8 Checksum invalid at pos 1! 0xFE != 0xAC
But it seems not to affect the IKEA devices nor the ESPHome integration