Beta Testers Needed For New Air Quality Sensor! The Apollo Automation AIR-1!

It’s great to hear your AIR-1 has arrived and we really appreciate your feedback!

  1. We do not include a power adapter so I am not sure about this one.
  2. We aim for stability with our updates so we’ll work to keep future changes minimal to protect your data as well as make an announcement.
  3. Thanks for bringing this to our attention and also for posting it to GitHub.
  4. I will talk with Trevor about this one.
  5. Thanks for your feedback about your ESPHome experience.
  6. We can make a General Tips page on our wiki and include different placement options. We can also ask the community to see what their preferences are.
  7. Providing a clear table for CO2, VOC, and other measurements is a great idea. We’ll add this information to our wiki to help users interpret their data better.
  8. The firmware along with the changelog is available on our GitHub.
  9. We spoke with Open-Circuit today and they have agreed to buy more stock so it should be there within a couple of weeks.

Cheers,
Justin
Apollo Automation

Justin, thanks. The power adapter is the one that opencircuit sells as bundle with the AIR-1. It’s labelled as “Universal USB-C Power Supply - 5.1V 3A”. I guess they don’t have any other adapter. I will search for a more compact adapter in white, with a white cable. What exactly are the requirements for the power supply? I couldn’t find any information on your website.

As for the firmware, this is more a remark regarding user-friendliness with ESPHome. I starred the github repo and will probably notice if there’s something I should install, but many people might not even habe a github account and would appreciate if Home Assistant will inform you about firmware upgrades (including the changes), exactly like the software updates in HA are presented. I’m not sure if ESPHome addon can do that, probably not. Which is why it might be a helpful information in the setup guide on how to update the firmware (e.g. the device that I received yesterday had a firmware of January and there might have been relevant changes/fixes since, which is why I installed the update).

Justin, regarding the VOC text sensor: I suggest not to use values like “improved” or “abnormal” but to use a standard scale such as “good, moderate, unhealthy for sensitive groups, unhealthy, very unhealthy, hazardous”, because:

“Improved” signals that something has improved recently, which it might not have, the VOC level can rise from 50 to 79 over 12 hours and it will read “improved” although VOC actually increased.

Also a VOC state of >120 might be high but completely normal and within the long term norm in a household, so it’s wrong to call it “abnormal”. I consider “abnormal” to be something like 2 standard deviations above the long term mean.

By the way, does anyone know of a script/automation/blueprint/chart/notification… that uses all the readings for CO2, VOC, PM,… and makes the data easily interpretable? E.g. “The CO2 levels are above 1000, consider opening a window”, “The VOC levels are abnormally high, check what might cause this”, “PM levels have risen strongly over the past hour, identify the source and close the windows if it might come from outside”.

Thanks!

text_sensor:
- platform: template
  name: VOC Quality
  id: voc_quality
  icon: mdi:air-filter
  lambda: !lambda "if (id(sen55_voc).state < 80) {\n  return std::string(\"Improved\"\
    );} \nelse if (id(sen55_voc).state < 120) {\n  return std::string(\"Normal\");}\
    \ \nelse if (id(sen55_voc).state < 200) {\n  return std::string(\"Abnormal\");}\
    \ \nelse if (id(sen55_voc).state < 300) {\n  return std::string(\"Very abnormal\"\
    );} \nelse {\n  return std::string(\"Extremely abnormal\");}"
  disabled_by_default: false
  update_interval: 60s

I bought one device a few weeks ago, I like the form factor and the setup was very easy.

I want to add air quality sensors to 4 more environments, and eventually setup some automations, but I am not an air quality expert and neither a Home Assistant veteran.
I watched and read all there is on the wiki and I am a bit overwhelmed… I am afraid it will take me months (yes, I am slow) to figure out everything and come up with clever ways to display the data in a useful way.

I have used an Airnote for a few years and never had a thought about the technical aspects of its readings, it just make sense: Airnote Dashboard — Airnote-12
I aim to have something similar, but for indoor and with the ability for other devices to interact with the data, that is how I found the AIR-1

I believe I am not alone on this, my feedback is that I would greatly benefit from a step by step tutorial or a template to set up a dashboard in Home Assistant to visually make sense of the air quality around the device.

Justin, regarding the issue with missing units of measurement: the team of home-assistant/core said that the issue needs to be resolved on your side, not within the ESPHome addon. I’d therefor like to bring issue #115311 to your attention, hoping you can resolve it.

Thanks for all your work on that project!

@ApolloAutomation Justin & Trevor, a question regarding VOC:

Is >200 really “abnormal” and >300 “extremly abnormal”? I frequently have values of ~200 in my bedroom after a few hours of closed windows, even when no one is at home. And usually multiple times a day I’m seeing VOC climb to 250 or spike to 400-500. There’s no fresh paint here, the furniture is many years old, no air fresheners, no dry cleaned clothes. It doesn’t smell “abnormal” either. The building is >100 years old. I have no ideal what the source is, but maybe everything is okay and it’s just the labels of the scale that are wrong?

I’m wondering if I’m the only one seeing “extremely abnormal” VOC on a daily basis or if the text_sensor is a bit misleading and levels of 200-400 are quite common?

Thanks!

This is exactly what I’ve been looking for! I’ve been using pm2.5 counts from the WAQI integration to conditionally circulate inside air through our HVAC air filter. It’s a must-have during wildfire season on the West Coast, IMO. But the WAQI data is still just a proxy for what really matters: indoor air quality.

My summer project was going to be assembling an indoor AQI sensor for HASS, likely using an SPS30. Although I love technical projects, I’m more of a software guy so working with microcontrollers and sensors isn’t really my jam. I’m certain I could’ve eventually pieced together a working solution, but then I’d need to find a suitable case. Sooooo much rather pay a reasonable price for a turn-key solution like this. :smiley:

So I bought an AIR-1 and will gladly provide feedback! If all goes well, I’ll probably buy a second sensor for our basement too. Thank you @ApolloAutomation!

1 Like

My AIR-1 arrived today, and I’ve got some feedback for your team @ApolloAutomation:

  1. Before my purchase, I was looking at a few of your other sensors to see if they might interest me. It wasn’t always clear which connection protocol each one uses (WiFi? BT? Something else?). Consider adding a little WiFi icon + text to make this extra clear.

  2. The instructions say “Plug the sensor into a quality power brick.” Two things: I suggest adding “using a USB-C cable” in the instructions. It’s on the product details page, but that’s long been forgotten when the device is finally in-hand. Also, what are the power requirements for the sensor? I have a handful of old USB wall warts lying around; will a 5v 1.0 amp work? Does it need different voltage or more/less power? Guessing this is suitable, but :man_shrugging:. Please at least add these details to the wiki and product details pages.
    This is also an opportunity to upsell: maybe offer a power adapter + USB-C cable for ~$6-8? I assume these would be pretty high margin items, and it would simplify the experience for some customers. Especially the ones who don’t have a box (boxes?) full of unused cables :wink:

  3. On the captive portal web UI where I enter my wifi credentials, please give us an option to remove input masking on the password field. Those of us with longer wifi passwords appreciate it :slight_smile:

  4. Man, those LEDs are bright! Thanks for including a toggle to disable them on startup.

  5. I echo @aleco’s question about physical placement. Within any given room, are there areas to avoid? All I can think of is avoiding spots directly it in the path of air vents / registers.

  6. The default units for pm2.5 (ug/m3) are difficult for me to parse. This is probably the standard way of measuring pm2.5, but I wouldn’t expect a layperson to be able to interpret this reading. As a West Coast resident, I’m quite familiar with the EPA’s AQI levels, as are most of my neighbors – including the non-technical ones. Is there an easy way to translate ug/m3 to an AQI reading? (No need for the AQI meter’s color thresholds, as those should probably be different for indoors vs outdoors anyway.)

Even though it’s only been a few hours, I am already certain this was a great purchase! Excited to build some new automations :smiley:

1 Like

I stumbled upon this thread last night while looking for a more comprehensive air quality sensor to pair with my air filters and I’m thrilled somebody made such a device that integrates with home assistant. I immediately bought one with the gas sensor for my main floor and once I get it, I’ll probably purchase 1 or 2 more for other floors. I’m trying to replace my amazon sensors because I can’t get the data out of Amazon and automating it this way is messy and redundant. I can’t wait to get the device and provide feedback.

1 Like

Thanks for the suggestion. There aren’t any notifications on ESPHome when we have an update that I know about and I don’t know of a way to make one display as a sensor either. We do have automated posts in our Discord about firmware changes Apollo Automation I wish there was an easier way in ESPHome though.

-Trevor

The VOC index scale comes from Sensirion https://sensirion.com/media/documents/ACD82D45/6294DFC0/Info_Note_Integration_VOC_NOx_Sensor.pdf

We didn’t really want to use words like unhealthy because we wanted to stay away from health recommendations since the VOC is an index.

Yes if VOC rises from 50 to 79 it will still read improved because the VOC index is based on 24 hours with 100 being the “normal”. So the text wording is compared to the 24hr reading.

Thanks for the questions and feedback, sorry we took so long to reply we had notifications off for some reason here.

Thanks,
Trevor

This is a good idea, especially with how many air quality parameters the AIR-1 can show it can be overwhelming. We can get it on the todo list, if anyone knows a way to make a dashboard that is easy to share and select your device please let us know. Otherwise we can just post raw YAML and the user would have to switch the device ID to theirs.

Thanks very much for the feedback.

-Trevor

VOC levels frequently over 400 is not normal. The VOC is an index so it will adjust itself over 24 hours and then that average is represented as 100. So frequently being up to 400 means it is reading something. There are many sources for VOCs and these sensors are very sensitive. Here is a graph of the AIR-1 in our workshop, I used a little IPA to clean a printer’s plate maybe 15 ft from the AIR-1 and the VOC spiked to 500 and took the rest of the day to recover.

And then here is a full week showing spikes from time to time for various reasons

Thank you for all the feedback!!! That is much appreciated since it is easy for us to assume a lot of things.

  1. I’ve updated our product descriptions to say wifi, ESPHome, and home assistant.

  2. I’ve also updated the setup guide to talk about the power requirements.
    “They require 5v and under an amp so most phone chargers will be fine. ESP devices are sensitive to power fluctuations and users have had some issues with really cheap power bricks. If your device is restarting or unavailable please try a different power brick”
    We’ve been looking at sourcing power adapters and USB C cables and will hopefully offer them within a month or two for a better “out of the box” experience! This has been a frequent question so hopefully we can help make it easier.

  3. Unfortunately that portal is part of the ESPHome code so we can’t adjust on our own. I can forward the request though.

  4. Good question, the air in a room is generally pretty well mixed so placement isn’t that big of a deal.

  5. This guide might be a good starting point for us in giving a AQI. I really like this idea, we’ll get it on our todo list.

I genuinely appreciate you taking the time to leave detailed information. The perspective of a first time user is very valuable and we have a lot of take aways from your post. If you use discord, it is a great place to chat with us and other users and see what we are working on. Apollo Automation

Thanks!!!
Trevor

Thanks for the nice comment! We are excited for you to start playing with the AIR-1, there is a LOT of data coming from it.

-Trevor

Oh, VOC isn’t an absolute value but a relative value, the comparison of the current reading with the average of the past 24 hours? Is there any way to access the absolute reading? I’m really struggling to interpret the values and have recently implemented a notification that alerts me when VOC has been rising >20/minute over the past 5 minutes (via a derivative sensor). But that seems to be the wrong approach, as then I’d be interpreting the slope of a slope of a normalised value.

I’d really appreciate if you could expose the “raw” VOC reading, instead of only the ratio to the 24 hours average. I can’t yet understand why you chose to do so, because with the same arguments one could probably also convert all other sensors to relative values over the past 24 hours.

Personally I like to interpret data by looking at the standardised z-score: (current-average)/standard_deviation). I can’t do this for VOC if that’s already a ratio and not a raw value.

EDIT: Here’s what makes the current VOC reading so difficult to interpret. Over the time period of this graph noone was at home. All doors and windows in the room of the sensor were closed. The heating was turned off. The outdoor temperature was pretty constant with min/max of 5/12° C. The VOC reading is swinging up and down. Probably the raw sensor itself reads exactly the same amount of particles, but this ratio index is swinging as it’s always trying to revert to 100, so when it was <100 for some hours it has to increase to above 100 to hit the average of 100, but once it was above it has to fall below again.

Whatever someone attempted to make VOC readings easier by returning a ratio, I think it’s very counter-productive in its current implementation and will start to ignore the VOC values as I do not find this swinging index interpretable. Unfortunately, because I love the AIR-1, so I hope a firmware update will fix the issue.

Unfortunately the index is how all VOC sensors report, I understand your point of wanting the raw value and the that poses some difficulties with your automations. I’ve not seen any VOC sensor that gives the raw value, they all have a learning index. You can tweak the parameters in the VOC index calculation though: Sen5x Series Environmental sensor — ESPHome shows the params for “algorithm_tuning”.

Yeah with your automation there is some difficulty with tracking the rising over time, if your VOC detects an index of 50 all day it will slowly adjust that to 100 because that is the new average. Those swings in your picture aren’t very large though, 150 is the cutoff where it switches to abnormal (in the latest firmware we did tweak the values very slightly to align to the Sensirion documentation better). Something as small of a jump in those graphs could be from washing machines, dishwashers, air freshener, air from a previous shower circulating. It can also swing slightly with humidity changes but I don’t think it’d swing that much.

I think you’d get some better automations by increasing your VOC change per minute or putting a minimum of 150 in it. Also if you want to see the sensitivity, put on some cologne/perfume, spray some cleaning supplies, or air freshener somewhere in the room and see the spikes from that.

Hopefully that helps explain the VOC some, it is very complicated with the sensitivity and the learning index so happy to answer any follow up questions.

-Trevor

Trevor, thanks a lot for the detailed explanation. Would I place the configuration variables for the sen55 sensor in the ESP32 yaml file that opens when clicking “EDIT”, so something like the below?

As for the swings in the picture: they aren’t large, but large enough to range from “abnormal” to “improved”. And this in a bedroom with nearly zero activity for a week, as I was on vacation and no one was at home. Only twice a neighbor came to water the plants for a few minutes (April-21 5:30pm and April-24 11:30am). All doors (and windows) were closed, no electric devices, only furniture that’s at least a few years old. Below you can see the temperature and humidity in that room. I would assume that there aren’t changes in VOC in such conditions that justify “abnormal” readings.

Spikes from air freshener cause a jump to ~400. But I want to figure out why sometimes the VOC rises from <100 to >200 within less than an hour. I’ve purchased the sensor to be able to optimise the air quality, so I’m looking for actionable results. And currently the VOC readings usually just swing wildly without any observable cause. So I think the sen55 algorithm has room for improvement.

substitutions:
  name: …
  friendly_name: Apollo AIR-1
packages:
  ApolloAutomation.AIR-1: github://…
esphome:
  name: ${name}
  name_add_mac_suffix: false
  friendly_name: ${friendly_name}
api:
  encryption:
    key: …

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

sensor:
- platform: sen5x
    id: sen54  ## probably sen55 for the AIR-1?
    voc:
      name: "VOC"
      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

EDIT: Trevor, the config values the AIR-1 currently is using aren’t ideal, based on the documentation. Because e.g. for learning_time_gain_hours the documentation reads: “The default value is 12 h. We recommend setting this parameter to the same value as “Learning Time Offset Hours”. In the case of indoor air quality monitoring, a time of 72h works optimal.”

I fail to upload the config, I’m not very familiar with YAML, I get the error “Must be string, got <class ‘esphome.helpers.EList’>. did you forget putting quotes around the value?.” for the following in my ESPHome addon yaml config for the device:

substitutions:
  name: apollo-air-1-…
  friendly_name: Apollo AIR-1
  sensor:
    - platform: sen5x
      id: sen55
      voc:
        name: "SEN55 VOC"
        id: sen55_voc
        algorithm_tuning:
          learning_time_offset_hours: 72
          learning_time_gain_hours: 72

packages:
  ApolloAutomation.AIR-1: github://…

And with a different yaml indentation I get: “ID sen55_voc redefined! Check sensor->5->voc->id.”

substitutions:
  name: apollo-air-1-…
  friendly_name: Apollo AIR-1

sensor:
  - platform: sen5x
    voc:
      id: sen55_voc
      algorithm_tuning:
        learning_time_offset_hours: 72
        learning_time_gain_hours: 72

When leaving out id: sen55_voc I get the error: “At least one of ‘id:’ or ‘name:’ is required!.”

Love the responsiveness to feedback! You guys are doing things the right way.

Another consideration for the AIR-1 product page @ApolloAutomation. The topmost feature shown in the Details tab is its … Bluetooth tracker? Should that really be at the top? Feels like the air quality sensors should be first and foremost here.

Love mine btw, and will likely be purchasing a second one for the basement in the near future.