🌬️ IKEA ALPSTUGA E2495 Air Quality Sensor (Matter)

Pro-grade automation for the IKEA ALPSTUGA E2495 Matter Air Quality sensor. This blueprint allows you to trigger specific actions when any environmental metric (CO2, PM2.5, Air Quality Index, Temperature, or Humidity) crosses your custom thresholds.

[!NOTE]
The Air Quality entity is a general “Air Quality Index” (AQI) calculated by the device (usually based on PM2.5 and CO2 levels). While the ALPSTUGA does not have a dedicated VOC sensor, this summary state is a great way to trigger whole-room air clear actions.

Import Blueprint to My Home Assistant

:hammer_and_wrench: Manual Import URL

If the button above doesn’t work, you can copy the URL below and paste it into the “Import Blueprint” dialog in Home Assistant:
https://github.com/aledziko/HA-blueprints/blob/main/IKEA/Matter/ikea-alpstuga-e2495/ikea-alpstuga-e2495-matter-air-quality-sensor.yaml

:glowing_star: Key Features

  • Five Environmental Triggers: Dedicated actions for CO2, PM2.5, Air Quality summary, Temperature, and Humidity.
  • Dual-Phase Actions: Set numeric cutoffs (CO2, PM2.5, Temp, Humidity) or state lists (AQI Summary) for both “Alert” and “Normal” phases. This allows you to start and stop devices automatically as conditions change.
  • Stabilization Time: Prevent notification “flapping” by requiring states to remain active for a configurable duration (e.g., 30 seconds).
  • Parallel Execution: Handles multiple environmental shifts concurrently (e.g., boosting the air purifier while notifying about high CO2).

:light_bulb: Example Use Cases

  • :leaf_fluttering_in_wind: Air Purification:
    • Air Quality High: Automatically boost your air purifier to “High” when the general air quality index drops.
    • PM2.5 High: Trigger targeted actions for dust or smoke levels above 25 Âľg/mÂł.
  • :bed: Healthy Sleep & Focus:
    • CO2 High: Receive an alert or flash a light in your office or bedroom when CO2 levels exceed 1000 ppm, signaling it’s time to open a window.
  • :bathtub: Ventilation & Recuperation:
    • High Humidity: Automatically trigger the bathroom fan or a whole-home recuperation system when humidity levels spike.
  • :office_building: HVAC Control:
    • High Temp: Turn on cooling when the room hits 26°C (79°F).
    • Low Temp: Activate heating when it drops below 18°C (64°F).

:light_bulb: Pro Tip: Dynamic Notifications

You can make your alerts smarter by including the actual sensor value or state in your message. When setting up a notification action, use the following template in your message text:

  • For CO2/PM2.5: CO2 level is now {{ trigger.to_state.state }} ppm
  • For Air Quality: Air quality status is now {{ trigger.to_state.state }}

:shield: Preventing “Notification Storms”

If you are receiving too many notifications in a short time, it’s usually caused by the sensor “flapping” between states. To fix this:

  1. Adjust Trigger States: In the Air Quality settings, ensure you unselect “Good” and “Fair”. This prevents getting an alert every time the air improves back to normal.
  2. Use Stabilization Time: Increase the Stabilization Time (e.g., to 30 or 60 seconds). The blueprint will then wait for the sensor to stay at the new state for that duration before alerting you.

:hammer_and_wrench: Requirements

  • IKEA ALPSTUGA (E2495) sensor connected via Matter.
  • Entities for CO2, PM2.5, Air Quality Index, Temperature, and Humidity.

:page_facing_up: License

Licensed under the MIT License.


:warning: Troubleshooting

:warning: Troubleshooting

Preventing Repeated Actions?
If you notice actions firing multiple times (e.g., your ventilation toggling on/off or receiving duplicate alerts) even when the air quality is stable, this blueprint has robust filtering built-in:

  • Strict Logic: Actions only trigger if the value actually crosses the threshold. If CO2 drops from 798 to 797 (both below the default 800 limit), the automation ignores it.
  • Blip Filtering: Brief “Unavailable” states from the sensor are automatically filtered out.
  • Optimization: Use the Action Trigger Stabilization Time (e.g., 30s) to further smooth out noisy data. This ensures your siren or fan doesn’t toggle rapidly due to minor sensor fluctuations.

:link: More Blueprints & Community

Check out my other blueprints for IKEA Matter devices on the Home Assistant Community:

:backhand_index_pointing_right: Explore all my blueprints on the HA Forum

4 Likes

Update: Fixed “Notification Storms” & Save Errors

Hey everyone, just pushed a solid update to the whole IKEA Matter collection (ALPSTUGA, TIMMERFLOTTE, etc.).

If you’ve been getting hammered with duplicate notifications or your fans toggling on/off rapidly, this fixes it.

  1. Added “Action Trigger Stabilization Time”: A new global setting (default 0s) to prevent flapping.

  2. Smarter Logic: The blueprints now ignore those 1-second “Unavailable” blips that happen on Thread networks, so you won’t get false alarms anymore.

  3. Config Fix: You can now leave optional sensors layout blank (like Battery or Illuminance) without getting a save error.

Hi @aledziko,

could You add active hours please?
So the automation could only work between hours you set (for example 8-22).

Hi! @ostrymiecz :wave:
Thanks for the suggestion! This is a great improvement! It definitely makes sense to silence notifications during sleep hours. I just added the changes to the repo.
Whats new:

  • Added an “Enable Active Hours?” toggle (default OFF).
  • Added Start Time and End Time inputs.
    If you switch the toggle to ON, the automation will strictly run only between those hours. If you leave it OFF, it works 24/7 as before.
    Please re-import the blueprint and give it a try! :rocket:
2 Likes

Hi @aledziko :wave:t2:

Thank You for adding Active hours. Love it! :heart:

I thought about another (small) feature which could be useful.
Currently we have triggers for HIGH and LOW threshold values for:

  • CO2
  • PM2.5
  • Air Quality
  • Temperature
  • Humidity

There is also Action Trigger Stabilization Time which is great, but one thing is missing. :sweat_smile:

I thought about adding a checkbox for LOW thresholds – Do not trigger if HIGH threshold is not exceeded again. Such option would be for each LOW threshold to prevent spamming with LOW only triggers fluctuations.

Why such option? Imagine a situation where you have a HIGH threshold for CO2 set to 1200 ppm and a LOW threshold set to 600 ppm. The high threshold triggers, so you ventilate the room and the level drops to 550 ppm, triggering the low threshold. Then the level rises to 610 ppm, then drops again to 590 ppm, triggering the low threshold again!

In such case when fluctuations triggers only low threshold, unnecessary ‘loops’ would occur. This option would help stop triggering them.

On second thought – the same thing could happen with HIGH treshold(s)?
So maybe it should be global checkbox? For all thresholds maybe – Do not trigger if one threshold won’t exceed other again. What do You think?

1 Like

Hi @ostrymiecz (Rafał) :waving_hand:

Thank you so much for the brilliant suggestion! You were spot on. Sensor fluctuations near the thresholds were causing unnecessary actions/notification “loops,” especially when values hovered just over or below the limit.

I have just released an update for the entire IKEA Matter collection (ALPSTUGA and TIMMERFLOTTE that introduces a feature called Threshold Bind). Active time window also is ported to other IKEA blueprints.

:shield: How it works:

It implements exactly what you described: a “One-Cycle” logic.

  • Once a HIGH threshold is crossed, the alert is “latched.”

  • The automation will not trigger another alert until the LOW (Safe) threshold is reached.

  • This creates a strict alternating cycle that completely eliminates the chatter loops.

:brain: Why the Helpers are needed:

To make this work, I’ve added an option to select a Toggle Helper (input_boolean).

Because Home Assistant blueprints are “stateless” templates, they don’t have a way to remember if they already sent a notification five minutes ago. The Helper acts as the persistent memory for the automation, allowing it to “lock” its state across triggers and even Home Assistant restarts.

:warning: A quick tip on setup:

If you use this feature, please make sure to create a unique Toggle helper for each automation. If you share one helper between two different rooms, one room’s humidity might “lock” the alerts for the other!

I’ve updated the READMEs for both blueprints with a detailed setup guide. Let me know how it works for you! :rocket:

Best,
aledziko

1 Like

Hi @aledziko :wave:t2:

Wow! Great! :heart:
Re-imported, helper created and testing.

1 Like

Hi @aledziko

I have 3x ALPSTUGA in 3 different rooms. I have air ventilation in the home with heat exchanger meaning that all “water rooms” have air extraction and the other rooms have air insufflation. This is where the problems begin …
I have nasty neighbors who don’t know how to use their wood stove so they generate crazy amounts of fumes that end up being injected in the house by the air ventilation.
This kills the air quality, even dirties the ceilings!
I wondered if you had the idea of linking different ALPSTUGA to take an action if several are showing similar reading changes.
If only the living room PM2.5 value explodes then it’s probably because I’ve been adding wood in my own wood stove that sits in the living room.
But if 2 ALPSTUGA in the sleeping rooms also have big PM2.5 increase then I need to take action and stop the air ventilation for one hour then restart it hoping the smoke outside is gone.

Of course I can do my own custom automation to handle this but I wanted to share the use case if you find it interesting and it gives you some ideas to further develop your blueprint or create a new one around ALPSTUGA.

Regards
Marc

This is really good. It turns alpstuga data in to actionable automation action!

A related thing to consider is keeping the display turned off. Because HA takes the alpstuga’s data and deals with it via exhaust, hvac fan cycling or reminder to open a window, I don’t need the distraction of the display

For guests it can be confusing: “What is that number mean?”, “Does it say it’s ok?”. Or my favorite, “You need to set that clock”. I didn’t buy it to be a clock and I don’t need to see anything and would like keep the display shut off. I know I can turn it off, but if it gets unplugged or there’s a power blip, it auto comes back on.

The thought is an option to manage the on/off toggle for the monitor with the option to keep it off.

@paulbates Unfortunately ALPSTUGA doesn’t expose the entity to turn the display off over matter. It has some built-in option that dimms the display during night hours (I don’t remember which exactly they are). You need to have the time set on the device to make it work. There is no build in functionality to sync time for Matter devices in Homeassistant but fortunately @Loweack came up with the solution. Please check out his Matter Time Sync add-on on HACS - [MATTER] Sync Time with Matter Devices (e.g. IKEA ALPSTUGA)

Hi @mfo38 your scenario with nasty neighbours is tricky, since normally when PM2.5 is high you’d like to ventilate the house even more, but in your scenario it makes the situation even worse. I don’t have the solution out of the box but I’ll think if there is an option to link multiple devices as a trigger into one blueprint. for now you could create a simple automation manually in “Automations and Scenes” section in settings, which have possibility multiple triggers/ IF conditions.

Hi Marc!

Blueprints are generally designed for a 1-to-1 relationship (one sensor per automation) to keep the configuration simple and clean for most users. Adding “Multi-Sensor” logic directly into the ALPSTUGA blueprint would make the UI too complex for 99% of its users.

However, there is one option you can use right now that is much more robust than a custom automation. You can create a Template Binary Sensor (Go to Settings > Devices & Services > Helpers > Create Helper > Template > Template a binary sensor).

This allows you to treat multiple ALPSTUGAs as a single “Smoke Alert” entity based on your specific logic.

Use this State Template:

{% set alpstugas = [
  states('sensor.alpstuga_air_quality_monitor_pm2_5_1'),
  states('sensor.alpstuga_air_quality_monitor_pm2_5_2'),
  states('sensor.alpstuga_air_quality_monitor_pm2_5_3')
] %}
{# Check if at least 2 ALPSTUGA sensors are above 35 Âľg/mÂł (High PM2.5 threshold) #}
{{ alpstugas | map('float', 0) | select('>', 35) | list | count >= 2 }}

(Just replace the entity IDs with the actual pm2_5_density names from your ALPSTUGA devices).

Use Cases for this Logic:
This “2-out-of-3” logic perfectly distinguishes between your stove and the neighbor’s:

  • Case 1: Local Spike (e.g. Cooking/Your Stove): Only 1 sensor (Living Room) triggers. The count is 1, so the sensor stays OFF. Your ventilation keeps running (good for clearing your own indoor smoke).
  • Case 2: Global Spike (e.g. Neighborhood Smoke): PM2.5 rises in multiple rooms (Bedrooms AND Living Room) as the ventilation pulls in smoke from outside. The count hits 2 (or more), and the sensor turns ON.

Creating the Automation:
Once you have this new helper (e.g., binary_sensor.outdoor_smoke_warning), you just need one simple automation to react to it:

Trigger: When binary_sensor.outdoor_smoke_warning goes to on.
Action: Stop your ventilation.
Action: Wait for 1 hour (or until the sensor goes back to off).
Action: Restart ventilation.
This keeps your logic clean and centralized, ensuring your house stays smoke-free!

Hi @paulbates,

I have a great update regarding your request to keep the ALPSTUGA display turned off.

Previously, I mentioned that the device didn’t seem to reliably expose the entity to turn off the display over Matter. When I tested it back then, triggering the switch manually didn’t work. However, there have been a few Thread and Matter updates in Home Assistant recently, and it appears this functionality is now fully working!

I have just released v2.1 of the ALPSTUGA blueprint which adds a new “Keep Display Off” feature. You can now select your display switch entity and enable this toggle. The blueprint will automatically intercept the event and force the screen to turn back off if it ever turns on (for example, after a power blip or if toggled manually).

Enjoy the update and the distraction-free display!

1 Like

That’s a very good suggestion, thank you very much for the wealth of details you shared for setting it up, kudos to you !!!

fwiw, consumer reports did a review of “Indoor Air Quality Monitors” and the Alpstuga was the worse one.