How to Measure Indoor Air Quality with a Raspberry Pi, RuuviTags and PMS7003
joshefin.xyz
joshefin.xyz
It's not limited to particulate matter either. You can get devices with reasonably accurate basics like temperature and humidity but as soon as you get into the actual air quality stuff like CO2, things start to fall apart. There are tons of devices that use wildly inaccurate TVOC sensors or fake their CO2 measurements (they estimate it based on H2 instead).
If you want anything remotely close to accuracy, I strongly recommend buying something that actually tells you which sensors it has inside it. Get datasheets for the sensors and check that their specs are reasonable for what you want. For example make sure that if you want to actually measure CO2 to buy something with an NDIR sensor like the Senseair S8 inside.
I wanted something I could plug into my home Prometheus/InfluxDB/Grafana setup so I bought [1] from Taobao. It lists all the sensors it uses, which are fairly good for the price. The device has a pretty simple TCP API that gives you JSON. Everything is Chinese but the measurements themselves are labelled in English and Google Translate works pretty well on the documentation.
0: https://www.sciencedaily.com/releases/2018/08/180822091022.h...
And the CO2 sensor isn't much use to me without a way to read the sensor with a computer though and the device you linked doesn't have any kind of machine-readable interface.
I appreciate the option you linked and wish there was an English version of it. If you were to build a consumer product, which air quality sensors would you want in it?
For low cost, I'd go with the Senseair S8 Residential. It's not fantastically accurate but it's still a "real" sensor and you can get it for $20 from China.
For other aspects of air quality, I haven't finished researching the options yet.
If it's difficult for you to get the cheap S8s for some reason though, per that thread it looks like an MH-Z19B with calibration off is a decent choice.
Under $50, nice touch screen, WiFi, TVOC, PM2.5, CO2, temp, humidity. Have one by a laser cutter (particulate), one in a paint booth(TVOC), and one in the office conference room (when the CO2 is higher than 1200 its time for a fresh air). A+ product and so much better than what I could build myself at that price point. If you find yourself in mainland China do yourself a favor and drop into a Xiaomi store.
[0]: https://detail.tmall.com/item.htm?id=582112668204
[1]: https://www.superbuy.com/en/page/query/freight/#areaId%3D3%2...
That's hilarious. Where I am from, in winter it's always at least 1500 ppm outside, and more than 2000 ppm after ~19:00.
0: https://smartairfilters.com/en/blog/xiaomi-particle-counter-...
1: https://www.sensirion.com/en/environmental-sensors/gas-senso...
[0] https://www.jaredwolff.com/finding-the-best-tvoc-sensor-ccs8...
[1]: https://www.j-sens-sens-syst.net/7/373/2018/ (pdf on the right)
"A regression analysis was performed to improve the accuracy of the Foobot FBT0002100 data relative to the GrayWolf data. Field calibration equations were then produced from the calibration dataset using the results from the GrayWolf instruments as dependent variables and the Foobot FBT0002100 as independent variables and tested on the validation dataset. An analysis in SPSS of the linear, quadratic, and cubic models was performed individually for each parameter to find the most accurate equation."
You can't do that unless you happen to have access to a different research quality sensor. If the Foobot had that out of the factory it'd be nice though.
"Field calibration equations were then produced from the calibration dataset [...]" (emphasis mine).
Table 3 shows the calibration dataset for tVOC, which at least to me looks rather ok except for the outlier E.
If privacy is your concern, I wouldn't recommend them. If stability is your concern, I wouldn't recommend them.
The light bulb works with an app only (probably to remove the need for a separate hub), the camera could be rooted to work offline-only (which is why I bought it, but I gave up after a couple of shots and it's currently sitting in my drawer), and the TV box is by far the noisiest device in my local network. It's like 60% of all DNS requests blocked by my Pi-hole.
Their devices are also the most unstable devices I own, to the point where I'm considering just throwing them in the trash and re-investing in another camera and a TV box. I've already replaced the bulb I've purchased with a Philips Hue system. Quite more expensive, but truly works locally.
Hmmm, does this by chance require an internet connection to operate?
Something that I can either query over the network (any protocol), or that uploads to some cloud service that I can inspect. This was the original selling point of ZigBee, but it sounds like it only exists for industrial applications. Does anyone know of a $10-$30 network-capable thermometer?
I know they're relatively easy to hack together, as the OP project (and so many others like it) shows, but I'm specifically looking for a turnkey consumer solution, not something I'll have to spend a couple hours and multi-sourced parts to put together.
You can get a zigbee radio that can serve as a hub for a few bucks, but if you want the turnkey consumer experience, you also need Xiaomi's zigbee hub which runs around 50 bucks. With that you also get an iOS app that integrates with homekit. Xiaomi makes a lot of other zigbee products at a similar price range that work with it.
You're not going to find any acceptable wifi solutions in the battery powered sensor category (there are a lot of other reasons that make wifi non-ideal for this), so unfortunately a hub is probably in your future for any option.
EDIT: BTLE devices may also be an option, but IoT applications my tldr option is that BT is too complicated to be worth it unless you need something you can't get elsewhere.
I don't trust Xiaomi for anything connected directly to my network, but zigbee devices connected through something that I (kind of) trust works for me.
I recently purchased Wyze's sensor starter kit and have been quite impressed. The contactless sensors are tiny and have decent range to the corresponding bridge. Now Wyze just needs a documented, public API.
I made a thermometer/barometer/hydrometer using an ESP-8266 wifi microcontroller ($5 on ebay) and a single BME280 sensor ($1 on ebay). Plugged into one of my left-over old 500mA phone chargers, it makes a wireless indoor weather station that speaks HTTP.
I bought the sensor on a breakout board, soldered a couple of wires, flashed micropython to the ESP-8266 (NodeMCU), and wrote wrote Python to POST my server with the temperature data, schedule a wakeup, then go to sleep.
But as you say, it took me a weekend of hacking around to build. This seems like exactly the kind of thing that should be available for $10 on eBay yet I can't find anything at all open.
Completely standalone, no WiFi, or other concerns. And because they're battery powered I think they're safe enough in the sauna!
From there I can get the readings via a USB-attached SDR dongle, and also sniff the radio-transmissions via a WiFi connected ESP8266 device with a radio-receiver.
* Under $10.
* Works with zigbee.
* Works out of the box with open source zigbee hubs. I personally have conbee II/deconz.
And the whole setup of these open source zigbee solutions usually just consists of plugging in the USB device and starting a docker container. It's not not the tedious open source setup as it often is with open source projects.
As a bonus you can use different zigbee devices from different manufacturers all together.
The actual device is here: https://flair.co/products/puck
There is a full fledged API (api.flair.co), desktop (my.flair.co) and apps of course. For what you are looking for, there is plenty of plotting built in but you can also export the data from the app as a csv/spreadsheet or grab it from the api.
Anyhow, it's definitely over your targeted price point but functionality wise, I think it does everything you might want.
I think there is an opportunity to grow your market if your Puck (or a new kind of Puck) can incorporate air quality sensors and make the data available. If you go this route, please see the recommendations in this comment as accuracy is key (https://news.ycombinator.com/item?id=20642939). I would certainly purchase multiple Pucks if they provided accurate data in a format that I could query myself if I wanted (no subscription BS please). People are concerned about air quality yet have no easy way to accurately measure it in their homes.
The bonus is that if I've got Pucks already, I would be more likely to purchase your Smart Vent products.
Build an Air Quality Monitor with InfluxDB, Grafana and Docker on a Raspberry Pi https://news.ycombinator.com/item?id=19506983
This particular article & comments read like a collection of referral links to Taobao and Ali-Express.
This is not only an Android problem, Apple is equally guilty of this. Arguably, more so.
Nor is it a Java problem. Some extremely speed-sensitive high perfomance code used by high speed trading algorithms use Java. This is in an environment where micro-seconds count.
With this setup, I have aggregated more than 4 years of in-home data, ranging from radio-thermostats, 15 thermometers, continuous electricity usage, around 10 z-wave devices, 15 zigbee sensors, Philips Hue Lighting (8 bulbs, 8 switches), local weather updates, InfluxDB storage and a fairly complicated setup for climate control (including presence detection using OwnTracks / WiFi and operation of roller-shutters and sunscreens).
Many people don't realize but for a garbage collected language it can be quite efficient in terms of memory used. I have a long running web server that's forced to not exceed 50 MB of heap, having an up time of one year, which means no leaks.
And the great part of Java processes is that they can be fat and handle multiple things at the same time, so you only need one Java process for anything you'd like to do.
It's actually hard to achieve such stats with other garbage collected languages, including Python which in my experience is a memory hog and does reference counting AFAIK, along with relying on shitty C libraries, Python processes being leaky.
The other advantage that Java has, over compiled languages like Rust or Haskell is that you can compile your JAR on your workstation and then distribute just that.
This is less of a concern with interpreters like Python, however anybody that tried compiling stuff with something like Haskell for RPi knows how challenging that can be. And even for Python you often end up depending on native libraries that need to be compiled from source.
I mean, every Python beginner hates PostgreSQL just because of how hard it can be to install psycopg2 via pip/easy_install.
In my experience Java's ease of deployment is better than anything else. You just copy a JAR and that's it.
For example, Vienna air was so clean (<= 10 pm10 ug/m^3), that you don't need any purifiers or anything like that.
How accurate is PMS7003? If for example, you need to know the precise and exact concentration of particulate matter in the air - then currently available low-cost PM sensors are not to be considered accurate. But, if you need to know if the air quality in your home is good, fair, moderate, poor or very poor, then it's good enough.
I bought a cheap soil sensor from microcenter that is absolute garbage. According to a few YouTubers it would corrode in a couple weeks. They recommended some higher quality sensors.
Can't I just put this one outdoors in an out-of-the-rain-and-sun area and call it an outdoor air quality monitor?
Although there is an old joke about their accuracy: "how do you use a cheap pressure sensor to determine altitude? Drop it out the window and count how long it takes to hit the ground."
There are also affordable gas concentration sensors which can be useful for this sort of thing. Some are even marketed as 'air quality sensors' because they exhibit sensitivity to several different types of gases, but they aren't always useful because the output is usually just the sum of the sensor's response to each individual gas. Still, if you want a project to probably depress you in 10 years, get a CO2 sensor like the MH-Z19B and make yourself a datalogger. (Keep in mind that it's a little power-hungry, up to 150mA @5V = 0.75W)
It's also fairly expensive, on the order of $10 rather than $1 last I checked.
These sensors are not as accurate as more expensive professional devices but are good enough to give an idea of the pollution in the air.
From my experience so far, PMS7003 measurements are comparable to official government air quality measurements available for my neighborhood.
Quickly turned it off. It has a tiny fan that goes bzzzz. No thanks - my peace & quiet trumps my need to know air particle count