You didn't specify what you already have, so I have to ask some questions. :)
OpenHAB can subscribe to MQTT, you have a lot of options.
How big area you want to cover? Wall thickness, is there an outdoor sensor? What do you already have? Do you have a Pi, or something that can listen to BLE advertisements?
For temperature and humidity there are a lot of options. Personally would stay away from [DHT11]https://www.espruino.com/DHT11 and DHT22, those are inaccurate and annoying in my experience.
CO2 sensor question: Do you want to use it for indoor sensing to check CO2 created by humans, or do you have a greenhouse for example?
In the first case, you can use a chip like CCS811 that's relatively low power, and can indicate the presence of CO2 created by humans. This does not measure CO2, but uses some MEMS magic to "guess" CO2 levels. But fairly useful if the source is humans. And does have low-power mode & that is supported by the module.
If you have a greenhouse or anything else where the CO2 source is not humans, you would need a real CO2 sensor. I have an MHZ19, and did some initial testing based on this pull, and got it working with some datasheet reading and tweaking, but did not clean up my code.
Distance and walls: If you have thin walls, simply using EspruinoHUB on for example a Raspberry to listen for BLE advertisements and sending measurements via BLE should work. BLE Espruinos go to sleep by default, so you should have a long battery life.
Wifi uses a lot more power, and takes time to connect, and in my experience it doesn't have much longer range thru walls than BLE. But if you have multiple access points that could cover your house.
If you must cover longer range, you would probably have to use an ISM radio. Or LoRa - probably it would be an overkill, but for example a cheap-ish TTGO Lora32 can act as a ready-to-use gateway with OpenMQTTGateway.
LoRa would have a massive range and work even if you have a massive greenhouse. Espruino lib for LoRa
Did some testing: MDBT42Q + RFM95W sending messages to TTGOLora32 "gateway", and that sends messages to my MQTT broker running on a Pi. And it does work. But don't have a full writeup...