More HVAC monitoring

I have been interested in home energy efficiency for a while so I decided to put together some sensors with an ESP8266 (NodeMCU) to monitor my home’s HVAC system performance. The sensors measure the temperature and humidity of the air on both the return and supply side of the furnace and AC. It also measures the Total External Static Pressure for the duct system.

The temperature and humidity is measured with two DHT22s and for the static pressure I am using an Amphenol All Sensors DLHR-L02D-E1BD-C-NAV8. I wanted to practice soldering so I put everything on a little breakout board. Normally when measuring static pressure one would hook up a couple magnetic pressure probes to a digital manometer with 1/8" ID tubing. The ports on the DLHR sensor are much smaller and require 1/16" ID tubing. So I ended up going from the sensor to 1/16" ID tubing, to a 1/8" x 1/16" ID barbed plastic reducer, to 1/8" ID tubing, to the pressure probes. The pressure probes are inserted into two existing, I think 3/8", holes in the duct on the return side after the filter, and the supply side after the A/C coil (technically I think you are supposed to measure before the A/C coil). I mounted the DHT22s on two metal corner brackets with electrical tape and put those in two 7/8" holes drilled in the supply and return ducts. I didn’t want to leave two giant holes in my ducts so I covered that with foil tape.


For the software I originally tried using micropython to post my measurements to MQTT, but it would only run for a few hours before seeming to get disconnected from Wifi and would have to be rebooted. I switched to ESPHome which proved to be much more reliable. It was quite easy to get the DHTs reporting with the included code for reading those sensors, but I had to write my own code for the DLHR sensor. The sensor supports both I2C and SPI, but I wrote the code to just use SPI. The code can be found here https://github.com/jaminh/esphome_allsensorsdlhr. Here is what the ESPHome config file looks like:

esphome:
  name: hvac-monitor

esp8266:
  board: nodemcuv2

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: "**********"

ota:
  password: "**********"

wifi:
  ssid: "**********"
  password: "***********"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Hvac-Monitor Fallback Hotspot"
    password: "***********"
captive_portal:

external_components:
  - source: external-components

spi:
  clk_pin: GPIO14
  mosi_pin: GPIO13
  miso_pin: GPIO12
    
sensor:
  - platform: dht
    pin: D1
    temperature:
      name: "HVAC Monitor Temp 1"
    humidity:
      name: "HVAC Monitor Humidity 1"
    update_interval: "10s"
  - platform: dht
    pin: D2
    temperature:
      name: "HVAC Monitor Temp 2"
    humidity:
      name: "HVAC Monitor Humidity 2"
    update_interval: "10s"
  - platform: allsensorsdlhr
    pressure:
      name: "Hvac Monitor Pressure"
      unit_of_measurement: "inH2O"
      pressure_range: 2.0
      pressure_type: 2.0
    temperature:
      name: "Hvac Monitor Temp P"
    cs_pin: GPIO15
    update_interval: "10s"

For the most part all I have done so far is make some pretty graphs about how my HVAC is running. I have tried closing the vents in my basement since it gets really cold down there with the AC running otherwise, and used the pressure readings to make sure I wasn’t restricting air flow too much. I have also noticed I can see how the pressure readings slowly increase as the filter gets dirty so I can kind of see when I should change my filter out. Once we get to heating season I’m hoping I can use the information to better estimate the design heating load for my house. I have runtime information from my Z-Wave thermostat, but I have a two stage furnace and the thermostat does not distinguish between the two stages. My hope is I can use the values from these sensors to be able to tell which stage it is running on and then be able to get a better estimate for my energy consuption.

4 Likes

Looks like a great project, thank you for sharing.

Curious, how does the pressure work? I ask, because most residential HVAC MFG’s duct design recommendations are .5 iwc and generally max out @ .8 - 1.0 iwc.

The sensor I got has a range of -2 to 2 iwc. I compared the readings from the sensor to what I got with my cheapie digital manometer and they seemed pretty close. When my AC is running I’m measuring around .80-.85iwc with a clean filter and it creeps up towards .9 when it gets dirty. You are right about the mfg specs but I think if you actually measure most systems, at least in the US, most exceed that. From what I understand as long as it isn’t significantly outside that range the worst that will happen is the fan will use more electricity and it might run a little louder. I have been considering changing the settings to 350cfm/ton to bring the pressure down, and use the sensors to make sure I’m not going to freeze the coil. Ideally I should probably get a smaller AC system based on the duty cycle data I’ve observed, but that is a much more expensive solution.

1 Like

Ok so the resolution of the device is high enough for it’s intended purpose. Thank You.

As a side note. I actually do measure quite a few systems (my day job), and you are correct about a lot of systems (I would not say most) run at > .7 iwc. This is primarily a duct design issue in most cases, but some are caused by contractors not installing the correct sized equipment, especially with multi-stage equipment.

The end result is not optimal, not just for energy consumption, but, IMO more for drive and bearing life when an ECM motor is in use.

Here one example from a ECM driven Rheem AHU.

Yeah I think according to the spec sheet it has 18-bit resolution and accuracy of ±0.25%. Sounds like you probably know a lot more about this sort of stuff than me, just a nerdy homeowner. I feel like there isn’t a whole lot I can do to fix the duct design at this point unfortunately, especially on the return side which appears to be where most of the restriction is. If you have any other advice on what I can do to improve things I would love to hear it.

@jaminh Thank you for sharing! I have been wanting to build something like this for a few years now as I have had a few failures on my 2 HVAC systems that could have been caught sooner had I been monitoring the HVAC performance.

This is what I was planning on building:

  • ESP32 based
  • Water leak sensor for pan
  • Supply and Return temperature probe, and humidity too if built into same probe. I prefer the probe to be similar to a DS18B20 (steel shaft) to keep the hole as small as possible. My supply and return boxes are made of insulation board so I need some way to hold the sensors in place but allowing them to be easily removed without damage so AC techs can insert their probe there without poking other holes (I hate that they don’t even ask me!)
  • Static pressure of supply and return to see delta
  • HVAC on/off (I can get this from other devices but prefer not to make this system dependent from others)
  • Local display, usually off to preserve power and display
  • Ethernet and POE would be nice instead of wifi. I am not a fan of having cheap power supplies in the 40-45C attic in the summer
  • HVAC power consumption (just the unit in the attic so mostly the blower as the compressor is powered from main 240V panel outside the house). I could get this from the switch that reports power that feeds the HVAC unit in the attic but, as above, I prefer all in one solution.
  • Water tight enclosure (how to deal with summer heat??)
  • Attic temperature? Might give some insight on how hard unit must work…

My two systems cover one floor of the house each and are nearly the same size. I am not certain but I think they are 4 and 4.5ton or 3.5 and 4 ton. The heating furnace uses gas so I was also considering a gas sensor to detect leaks but it seems there are no reasonable long term NG sensors.

@jaminh Do you have suggestions after running your system for 6 months?

Edit: example sensor I was looking at but worried about the limited cable length (which may not be possible to extend): I2C Temperature & Humidity Sensor Stainless Steel Shell Arduino - DFRobot Electronics (unfortunately no esphome support)

I’ve been able to use several consumer products with HA integrations for temperature and power. Using a govee 5198 grill thermometer and the Emporia Vue for current and power. The Govee HA integration is straight forward. The Emporia integration was a little more work but did get it running. The search for a suitable differential pressure led me here. I’m currently monitoring pressure old school, with a Dwyer 0-1” WC gauge with a blink camera aimed at it. Glad to see others have had success.

Is this integration via ESPHome, or via the original Emporia cloud integration?

I used the HACS integration written by magico13.
https://github.com/magico13/ha-emporia-vue
Here’s a video walk through by another person that was helpful: Home Assistant Energy Dashboard // Add Emporia Monitor, Dash Setup & Hacks - YouTube

Have you made any progress on this? I’ve got this kind of project in my backlog, but I haven’t worked on it much in the past few years.

Here’s a project I was going to base mine off of, which has very similar specs as yours…

Nice solution that’s an expensive sensor to practice soldering on :stuck_out_tongue:

@shbatm - I have a breadboard prototype that uses 2 DS18B20 temperature probes (so no humidity measurement in supply and return) and an HTU21D for attic environment and an LM393 based comparator sensor for leak detection.

I am not sure whether to add a display as I am worried about it surviving the attic temperature… It would have to be something that can easily operate at 50C. Any suggestions?

I am also still undecided on what connectors to use to keep this thing small and serviceable without removing the whole thing (so sensors needs plugs for example). I found some M8 DIN style connectors but have not purchased any yet. They may even be too small so M12 should be the next step up.

https://www.te.com/usa-en/products/connectors/circular-connectors/intersection/m8m12.html?tab=pgp-story

The pressure sensor below is quite interesting but I just saw it now… unless I install this system next year I might have to build v 2.0 with it…

I also have one of these:

…but I know see there is a new version so I have to look into that. This would alert you to condensate overflow issues and should be easy to install. The legacy one is a simple switch, and I assume the new one is too so all you need is a GPIO.

So… no not much progress… but still moving forward.

I at least went with the through hole version instead of surface mount ¯_(ツ)_/¯. After gaining confidence on this project I soldered the wires from a Z-Wave garage door controller to the button on the wall, that was more of a challenge.

Be careful with these. I had a neighbor who’s HVAC company installed some of these that were below the level of the emergency overflow (usually goes to a pan and out to the roof eves). When the line plugged with algae close to the drain, like they always do, the condensate backed up to this sensor and flowed out the top of the T, where the wires go in. This happened while they were on a two week vacation. The “monitoring” actually caused significant water damage that would have been a non-event if the condensate drain had just backed up to the emergency overflow. So install one very close to the evaporator and make sure the top of the T it is not below the emergency overflow.

I have been working on this setup for some time after I found this original post. Kudos to the OP for getting that all worked out. Admittedly, I used 2 BME280 sensors as they are just better than the DHT22s both from my experience and the experience of others reading online. That isn’t to be disrespectful to the OP, just stating the differences.

The tricky part with the BME280s is getting the addressing correct. I bought these ones, and setting SD0 to VCC on one of them sets its address to 0x77, where the default is 0x76. You can see a purple wire on the top sensor that is connecting SD0 to VCC in the picture.

I have 2 Dallas DS18b20 sensors as well for measuring the ambient temperatures in my attic at 2 different locations (I have an upper and lower attic). My attic is also fully sealed and insulated under the decking and only gets to ~88 tops in the Texas summer.

Here is the YAML config. Also a pic of the test bed. I will be installing it once some 4 conductor 22AWG cabling arrives so I can extend the temperature sensor leads sufficiently. I have the vinyl tubing, same as used by the OP.

esphome:
  name: esp-attic2
  platform: ESP8266
  board: nodemcuv2

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: !secret api_encryption_key

ota:
  password: !secret ota_password

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp-Attic Fallback Hotspot"
    password: "redacted"

time:
  - platform: homeassistant
    id: homeassistant_time

captive_portal:

external_components:
  - source: .esphome/components

i2c:
  sda: GPIO4 #D2 
  scl: GPIO5 #D1 
  frequency: 200kHz
# Example configuration entry

spi:
  clk_pin: GPIO14
  mosi_pin: GPIO13
  miso_pin: GPIO12
    
dallas:
- id: "dallas_hub_1"
  pin: D0

sensor:
  # Uptime sensor
  - platform: uptime
    name: "Attic room uptime"

  # WiFi Signal sensor
  - platform: wifi_signal
    name: "Attic wifi signal"
    update_interval: 60s

  # AC Temps and Humidity
  - platform: bme280
    temperature:
      name: "Temperature - AC Return"
      oversampling: 16x
    pressure:
      name: "Pressure - AC Return"
    humidity:
      name: "Humidity - AC Return"
    address: 0x77
    update_interval: 10s

  - platform: bme280
    temperature:
      name: "Temperature - AC Output"
      oversampling: 16x
    pressure:
      name: "Pressure - AC Output"
    humidity:
      name: "Humidity - AC Output"
    address: 0x76
    update_interval: 10s

  # AC Static Pressure
  - platform: allsensorsdlhr
    pressure:
      name: "Static Pressure - AC"
      unit_of_measurement: "inH2O"
      pressure_range: 2.0
      pressure_type: 2.0
    temperature:
      name: "Temperature - AC"
    cs_pin: GPIO15
    update_interval: "10s"

  # Attic Temps
  - platform: dallas
    address: 0xf20b22819bfc3d28
    name: "Temperature - Upper Attic"
    dallas_id: dallas_hub_1

  - platform: dallas
    address: 0xe00b228195b03728
    name: "Temperature - Lower Attic"
    dallas_id: dallas_hub_1