Home Assistant Monitoring of Furnace Filter
General Description of Problem
I have a typical high efficiency natural gas furnace in my house, controlled by an Ecobee 3. My issue is that overtime the furnace filter gets clogged. When this happens, the flame inside the furnace heats up to the point where it trips itself out, forces the flame off, and keeps the air running on low to make sure the furnace is fine. On the surface, this might seem like something to just set a reminders every 3 months on my phone to change the filter, but, since we don't have AC, the furnace doesn't run during the summer months. This means that I would actually have to just inspect the filter ( which would be time consuming ), or push it off until the next week ( and then completely forget about it ).
How to Solve
- Install a sensor with a light that will turn on when the pressure differential across the filter is too great. This will work in theory, however, I will still have to check the light, as well as finding and installing the differential sensor. This will be a backup plan.
- Install a sensor to monitor either the fan or the flame sensor on the furnace. Both of these methods have the same problem, they would both mean that I would need to design and build a one time use circuit.
My Solution
Since I don't want to be installing any custom sensors, I thought about just using what I already have. My Ecobee is already controlling the furnace, it knows when it is requesting heat, and it knows when the fan is on. Enter Home Assistant. It will allow me to monitor the Ecobee, and will send me an alert if the fan is on for X amount of time. If the fan is on for over 20 minutes, it probably means that the furnace has tripped, and it is time to replace the filter to allow the furnace to breath.
Home Assistance Setup
I did this the easy way, using a script from https://tteck.github.io/Proxmox/ Since you should never just run scripts that you find on the internet on your machines, I first looked at the code. The code seemed to do what it promised, namely to download and extract the current KVM ( qcows2 ) image from Home Assistant, and then ask how and where to set it up on the machine. As soon as the script finished, I was able to find the local IP of the Home Assistant server under the summary page of the node it had just created.
After that was setup, I went to that IP on port 8123. Created my local username and password, and then I was greeted by a bunch of integrations I could setup. I saw that Ecobee was in the list, so I clicked and entered in the correct details to link it to my cloud Ecobee account. I then setup another integration of my Slack server so I can be notified when the fan has been running. At this point, I thought just setup an automation that will notify me when the fan has been running for over 5 minutes. This will allow me to test that the Slack integration is working, and that Home Assistance knows that the fan has been running for 5 minutes. This is when I ran into 2 problems.
- I couldn't select the fan as a trigger. The Ecobee knows that that fan is on from the screen, however, it is not exposing that to Home Assistant through the cloud integration. I am assuming this is to save on the data it sends to the cloud.
- Even when I did select something that I could trigger on, the heat coming on, the update time is too slow to be of any practical usage other then logging. This is because Home Assistant is talking to the Ecobee cloud server which is getting updates from my home Ecobee. Less then ideal.
So, how to solve these issues. Well, as it turns out, with a bit of Googling, they are both able to be solved, and even improved upon when you connect the Ecobee to Home Assistant via the Apple HomeKit integration. This will allow the Ecobee to directly talk to the Home Assistant server, so even if my home internet goes out, I will still be connected. I might not be able to get the notifications, but, I will still be able to log in Home Assistant. I accomplished this by going into the menu on the Ecobee, and starting the Homekit setup. This displayed a QR code, and a string of numbers at the top. When you go back into Home Assistant, you input those numbers, and it will connect.
At this point, I thought I could just go to the automation tab, and pull in the automation, since using the Homekit connection will allow me to see the current hvac_action parameter. Unfortunately, this is not the case as it only has a limited selection of things that it will automatically pull in. However, I can now see the state that I want to monitor, so we can make an automation, just not with the nice GUI that it provides. Below is the code that I used.
alias: Slack Notify When Filter Clogged
description: "provides notification on a slack channel when hvac_action - heating has been on for over 20 minutes "
trigger:
- platform: state
entity_id: climate.my_ecobee_2
attribute: hvac_action
from: idle
to: heating
for:
minutes: 20
action:
- service: notify.SlackChannel
data:
message: The filter needs changing
title: Furnace
target: home-automation
mode: single
This code will monitor the hvac_action state. If it has been in the state of "heating" for 20 minutes, it will send out a notification on the slack channel provided. To test this, first I put the time to 5 minutes to see if it would trigger, as well as putting in my old clogged filter to make sure that it will trigger.
I know that most people will simply just set a reminder to change the filter every 3 months, but, this is a simple automation that will notify me when the filter actually needs changing because it is too clogged to allow air through it anymore.