Through my recent experiences with watching my home's air quality I have come to realize that "Air quality" is a very complex concept. Listening to builders such as Matt Risinger on YouTube, I learned that homes contain lots of "off gassing" products used in their building materials. NASA had a famous study about plants that will absorb some of these household chemicals. This is what got me interested in monitoring "VOC" which are Volatile Air Compounds. (As much as I want to bring up PM2.5 particles that are said to cause health issues, I'll stay focused on VOCs)
These VOCs are numerous chemical vapours and there are sensors that can detect some chemicals like Oxygen or CO... it seems those specific sensors require frequent calibration and replacements.
There are TVOC (Total Volatile Organic Compoounds) sensors such as the BME680 from Bosch. These sensors while they are fairly cheap, and do show changes in the environment they are not precise enough to tell me which chemical is really in the air. Since they are only measuring the TOTAL concentration of all the gasses we aren't measuring a single particular gas. The BME680 has code in ESPHome that reports "CO2 Equivalent", but obviously it isn't really measuring CO2 it is just calulating ((I call it "guessing at") it from an abstract calculated value. Reading some documents from Bosch's forums


As one can see the IAQ number is calculated from "Gas Resistance" (a true value from the device itself) with some other hard coded numbers, which they will not detail. Once we have an IAQ, we can estimate the concentration of CO2 and possibly other chemicals (if we knew how to calculate this) In other words... we are using an estimated number from a vague metric that is calculated from a real value of resistance. Finding this out got me a little dissapointed in that I will not easily be able to use this to find issues in my air quality if it could be almost anything. I did find some really good articles that detail the problem and how these type of sensors work, but basically the sensors are fairly cheap, less maintenance, and while they aren't able to give us precise measurements of gasses they do tell us if something is good or bad.
https://learn.kaiterra.com/en/resources/how-tvoc-sensor-work
https://learn.kaiterra.com/en/resources/defining-tvoc-why-is-tvoc-so-difficult-to-explain
On the other had we have another sensor to give us air quality... we can base the Air Quality on the number of PM2.5 particles! PM2.5 particles are said to be from molds, spores, pollens, fires, exhausts, etc. https://learn.kaiterra.com/en/air-academy/particulate-matter-pm
Another good article on what PM2.5 is... https://www.acsh.org/news/2020/04/03/air-pollution-what%E2%80%99s-so-special-about-pm25-14683
We can calculate Air quality index based on PM2.5 as seen here. Keep in mind this AQI is measuring particles NOT gasses! The key is we see that up to 12ug/m3 in 24 hours is good. Now I don't know if that means maximum exposure of one instance or an average for the entire 24 hours. Many articles haven't really made that clear to me.

So let's summerize what we have talked about so far. We have a group of chemicals that we call VOCs, we have PM2.5 floating in the air particles, Carbon Monoxide and a bunch of other nasty chemicals. The Adafruit air quality monitor project that I put together doesn't monitor all of the chemicals I care about. To monitor other chemicals I need to get MQ type sensors like this MQ7, which is made for detecting CO. Using this MQ-7 sensor appears to be a lot of work as this tutorial shows. Despite the work involved, I think it will be worth writing a custom add on to ESPHome to handle it. There are some that discuss the difficulties of the process, but obviously not insurmountable. Apparently even more people working on it... https://community.home-assistant.io/t/esphome-based-smoke-alarm/110221
I have to point out his other "air quality" and fume project, while is a worthy project in itself, from adafruit says "air quality" but looking at the sensors it is only the VOC component. If you're like me and were hoping it would have also had CO and PM2.5 you'd be dissapointed. This is why I thought it was important to point this out about air quality.
maybe the real different between the VOC type air quality vs the PM2.5 is in the abbreviation? IAQ vs AQI? Originally I thought they were the same, but this may not be the case.
Looking at my home assistant dashboard I can see the IAQ from VOCs and with my particulate sensor I can see the PM2.5 concentration. There are times the IAQ is good, but the PM2.5 is very bad. How I am now interpreting this is that if either one is showing air is bad then I know it's bad.... if both are good... I only know that VOC and PM2.5 is good... I can't tell about anything else. Note that in this image, I captured it at a time when both IAQ and PM2.5 particles aren't great, but not bad, so in this case both are in agreement.

Until I get an MQ-7 sensor set up and calibrated, I'll just stick with any CO sensor I can find on Amazon.
Other interesting links:
https://www.epa.gov/air-trends/air-quality-cities-and-counties
https://www.epa.gov/air-trends/air-quality-national-summary
https://www.apogeeinstruments.com/oxygensensor/
https://learn.kaiterra.com/en/air-academy/particulate-matter-pm
https://pubmed.ncbi.nlm.nih.gov/33924624/
https://www.instructables.com/Arduino-CO-Monitor-Using-MQ-7-Sensor/
In the image above each machine is at a different location. One might be in Texas while another could be in Washington. The "Wireguard VPN" is the only one that we can directly talk to on the internet. In other words, it's the only one exposed publically. This machine is running on a cloud provider such as vultr.com or you can run it on amazon's cloud too. Vultr has machines with 1GB ram down to around $5, so I've been using them.
What we can see in this image is that I own the xyz123.net on my account. That's the domain I own. I can add subdomains by clicking on "Manage" then click on "Advanced DNS". When the page loads click on "Add new Record" you want to make sure you pick "A+ Dunamic DNS Record" then for host you'd put the subdomain you want like "wireguard". When you try to access it, you would go to "wireguard.xyz123.net"... btw we aren't done on this page yet. We have to make sure we enable dynamic DNS clients...





As of today, there are some issues with this syncing. First one is that if a user A shared their files with another user B, that user B will immediately start downloading the files whether they want them or not. There is a feature you can enable to prevent automatically downloading if the filesize is too large. This helps mitigate issues but not completely. If someone really wanted to mess with others they could create shares up to that limit and simply spam the targeted user forcing them to download a ton of files just under that limit... I think the fix to this is to default to always asking the user if they want to accept a share and what to do with it, or even simply accept it but don't auto download.
