TL;DR: Zwave and Zigbee are (almost) always local first. Home Assistant is great. Almost all CO2 sensors are bad.

I have the same goals with my setup, and I've been tinkering with home automation for a couple decades now, so I'll share what I've learned so far.

First, specifically for indoor air quality, and especially for real CO2, the options are terrible. eCO2 sensors are a dime a dozen, but they are awful. For real CO2 everything seems to be super industrial or cloud junk.

I'm using a variation on https://hackaday.io/project/186682-co2-buddy for CO2. It uses a high quality sensor and is really just three parts, or two if you don't want LEDs. You flash the ESP32 with esphome and then Home Assistant does the rest. Someone, maybe me, should build and sell these.

For PM2.5 I use a bunch of modified Vindriktning from IKEA. I added a tiny ESP32 board, soldered four wires, and installed esphome. I modified four in about an hour one evening. Someone, maybe me, should build and sell these.

For temperature and humidity I love the "Aqara Temperature and Humidity Sensor". I sprinkle these liberally around the house. They are Zigbee, so local by default. In fact, when shopping for home automation stuff, if you see something that "requires Hub" it usually means its either Zwave or ZigBee and will work just fine directly.

Home Assistant for control, data storage, graphing, dashboards, etc. It's free, open source, gets high quality monthly updates, good looking and responsive iOS and Android apps, great web interface, and most important to your question: has extremely good documentation when it comes to what is supported.

Take a look at the Integration page for Phillips Hue, for instance: https://www.home-assistant.io/integrations/hue/. It's marked as "Local Push" which is the keyword you want for stuff that doesn't need someone else's cloud.

https://www.home-assistant.io/blog/2016/02/12/classifying-th...

So, when I am shopping for a new class of device, I always first check the Home Assistant integration page for it and see what the support is like. There will often be helpful comments and FAQs on the page.

In general, if something is Zwave or Zigbee it will be trivial to get it working local first. If it's WiFi there's probably going to at least be an app and a cloud that you have to use to setup and it's a toss up whether you can then use it without a constant cloud connection.

If you've made it this far, here's some other recommendations for solid local first Home Assistant compatible goodies:

- Hue lights. I've tried Feit, Sengled, LiFX, Hue, and various big box store white label junk. Hue just works. They are expensive, but they work great and I never, ever have a single problem with them. Phillips doesn't make it obvious but Hue's hub is just Zigbee and you can talk Zigbee directly from Home Assistant to Hue lights. You can do the initial setup over Bluetooth using their app and then never use it again. LiFX are WiFi and are a solid runner up, but basically the same price.

- Zooz wall switches and dimmers.

- Zooz 4-in-1 Sensor is a great temperature, humidity, illuminance, and motion sensor. I use these in places where I want motion sensing in place of the Aqara temperature and humidity.

- Zooz Water Leak Sensors.

- Zooz window and door open sensors.

- Bond Bridge for 400MHz RF remotes - ceiling fans in my case. Like Hue, set it up using the app, then just run it with Home Assistant.

- Minoston Z-Wave Plug with Energy Monitor for plug in switches with energy monitoring.