This is a place to show off what went into building my AQI measuring station. https://www.lpb-air.com/
Go to file
simon adde5b75c4 some housekeeping 2021-07-07 19:18:06 +07:00
.vscode some housekeeping 2021-07-07 19:18:06 +07:00
aqi_monitor point to new api endpoints 2021-07-07 19:16:33 +07:00
env added postgres to docker for later integration 2021-02-16 17:57:25 +07:00
helper_scripts some housekeeping 2021-07-07 19:18:06 +07:00
nginx major app rebuild into a single flask application 2021-07-07 19:08:46 +07:00
postgres indexing on epoch_time for faster where queries 2021-07-07 19:17:26 +07:00
web major app rebuild into a single flask application 2021-07-07 19:08:46 +07:00
.gitignore major app rebuild into a single flask application 2021-07-07 19:08:46 +07:00
LICENSE.md minimum viable product 2021-02-16 10:40:22 +07:00
README.md showing nice social preview img on top 2021-05-09 12:27:51 +07:00
deploy.sh major app rebuild into a single flask application 2021-07-07 19:08:46 +07:00
docker-compose.yml major app rebuild into a single flask application 2021-07-07 19:08:46 +07:00

README.md

AQI sensor project

alt text This is a place to show off what went into building my AQI measuring station currently publishing to:

lpb-air.com

This is under constant development. The main purpose is educational.

The webserver is a simple VPS, provisioned with docker-compose.yml.

aqi_monitor

aqi_monitor.ino is the arduino script running on the nodeMCU ESP8266 microcontroller. The microcontroller posts data to the flask backend on a regular interval. Connected to that is:

  • SDS011: pm2.5 and pm10 sensor from Nova Fitness.
  • BME280: Pressure Humidity Temperature Sensor Module.

backend

A flask based application that takes the data from the ESP8266 for processing and storage.
Postgres handles the storage of the measurements. The data is split up into two different tables, one for aqi related data and one for the weather data.
Python interacts with Postgres with the help of the psycopg library.
The flask app is recreating the graphs to visualize the aqi, PM 2.5 and PM 10 values on an interval. Aggregating is done with the Pandas Python library and the graphs are created with matplotlib.
The backend runs on a separate subdomain so it could easily be scaled horizontaly onto a separate server in the future.

frontend

A simple web site that gets AQI values from the backend to publish it nicely to see. Mostly build with HTML/CSS/JS and a little bit of PHP.
New data is pulled from the backend on a interval with JavaScript and XMLHttpRequest library.
The Lightbox to take a closer look at the graphs is curtesy of Lokesh Dhakar.