The Why

Filthy air filters

This is one of the most common problems (and one of the biggest threats) in ordinary HVAC systems. The traditional approach of changing it every X months is not only inconvenient but also highly inefficient because it doesn't take into consideration the many variables that influence the durability of the filter (overall degradation of the HVAC system itself, outside temperature, ambient dust, seasons, etc...)
This project attempted to develop a prototype of an system that can, in real time, detect anomalies with your Air Filter installation as well as give you advance notice of when you really need to change it.

Knowing when to change the filter right away has a direct impact in the utility bill by reducing the electricity consumed by the HVAC system in the generation air intake suction. It also would help you and your family to breath cleaner air

The How


  • Air flow across an HVAC Air Filter follows the Bernoulli's principle:
    " increase in the speed of a fluid occurs simultaneously with a decrease in pressure or a decrease in the fluid's potential energy..."

  • Timing or visual inspection are not effective ways of knowing when to replace the filter. Detection of pressure drop across the filter is the accepted method:

    "...Overall degradation of the HVAC system itself, outside temperature, ambient dust, seasons, etc... are variables that affect the filter selection and contribute to the problem of determining when a filter has reached the tolerable limit of its effective life span as a result of the accumulation of contaminants. Because of wide variation in contaminant load in the air being filtered, time is an uncertain measurement. Visual inspection of the condition of the filter tells little or nothing. The most widely used method of checking filter condition is to measure pressure drop across the filter..." [1]

    "...In the past, typical residential HVAC systems had ordinary thermostats with a “timer,” allowing users to select the filter change cycle length in days. Some companies use system run time as an indicator of when to change the filter. Unfortunately, these solutions neglect to address the rudimentary need for filter replacement – a decline in system efficiency...." [2]

Data generation (SFR-Device)

A real implementation using a raspberry pi, connects two low pressure MS5540 sensors to it and places each one on each side of the air filter to collect static pressure.
Let's consider this setup (raspberry pi + sensors) our SFR-Device
For our demo, we are going to use the equation that derives from the Bernoulli's principle and reasonable assumptions as the basis for simulated pressure values. Details about the implementation of the Bernoulli's equation can be found in the Bernoullis class file. The simulated values also take into consideration the progressive, delayed, non linear and asymptotic clogging of an HVAC Air Filter under normal conditions

SFR-Device Onboarding

A proposal for a real life IoT solution like this would require shipping the SFR-Device to customers. After the manufacturing phase, the device would be shipped with the SFR-Device app already deployed on it and a config file with the customer Id its assigned to a it's serial number. With this information, the device would attempt to on-board itself the first time the SFR-Device app runs. This process happens via an Api endpoint (backed by a lambda function) provided by the SFR-lambda-data-access-provisioning app service. The onboarding process validates the incoming customerId | serialNumber against a list of known devices an if good, provisions an IoT Thing and certificate for it.

Data samples collection and processing

After the automatic onboarding phase, the SFR-Device will use its certificate to send the pressure samples to app specific IoT Topic via MQTT protocol. This samples are pass through a catch all IoT Rule with two actions associated with it:

  • Anomaly detection:

Injects all the incoming samples into the Anomalies Kinesis stream for further processing

Anomaly detection

Provided by the SFR-data-lambda-processing app; the Anomalies Kinesis stream is used as the input stream for the Real Time Anomaly detection Kinesis Analytics app which, by processing the incoming data samples in a time window, detects the following anomalies in the across Air Filter pressure:

  • Drastically low pressure caused by:

    • The air filter is letting almost no air to pass through.
    • The air duct is obstructed. The air filter might have been sucked into the duct.
    • If pressure = 0 the avg will quickly drop; it means that the sensor is broken; pressure = 0 its an absolute vacuum... not even in outer space :-)
  • Pressure equalization with atmosphere:

    • Atmospheric pressure is 10332 mmH20 so if this happens, there is no filter or the filter broke and the air if flowing directly without ALMOST ANY resistance
  • Normal wear|degradation. The filter is almost exhausted:

    • Filter need to be replaced when pressure drops under 10326.5 mmH2O but not less than 1000 mmH2O

When an anomaly is detected, the Real Time Anomaly detection Kinesis Analytics app injects the resulting samples into a Anomalies Output Kinesis Stream which in turns has the SFR-data-lambda-processing lambda as a consumer and, upon receiving the anomaly records, will issue a SMS notification to the related customer via an SNS topic.

The Future

There are multiple additions that can be done to this project but were left out at this stage:

  • Mobile app to present the data samples and to receive push notifications (instead of SMS) when an anomaly is detected
  • Custom domain name (with AWS ACM certificate) for data access and provisioning Api endpoints
  • Lambda service for getting the device's serial numbers and assigned customerId after coming out the manufacturing line
  • Lambda service for customer's info access (mobile phone in this case)
  • JWT tokens for passing a full SFR-device profile during onboarding and for customer auth during access to the data samples
  • Clean up of unused IoT certificates

Built With

  • aws-api-gateway
  • aws-cloudformation
  • aws-dynamodb
  • aws-iot
  • aws-kinesis-analytics
  • aws-kinesis-streams
  • aws-lambda
  • aws-sn
  • node.js
Share this project: