hazyair - air quality monitoring tool.
hazyair is a handy tool that enables to retrieve measurments of the:
- dust conectration in the air (PM1.0, PM2.5, PM10),
- temperature,
- humidity,
- pressure,
from the sensors and optionally store them to the simple database. It can also visualize the measurement results on the charts that can be accessed from the web browsers.
Configuration
Hardware -hazyair was orginally developed on Raspberry Pi Zero W but it should work on any version of Raspberry Pi. Following sensors are supported:
- dust sensors - Plantower sesors, SDS011 (not tested), SDS018 (not tested), SDS021 (not tested),
- temperature sensors - DS18B20,
- temperature, pressure and optionally humidity combo sensors - BME280, BMP280,
- builtin dust, temperature, humidity sensors - Xiaomi Air Purifier 2.
Installation
Common Steps
Install node
.
sudo apt-get install nodejs
Install npm
.
sudo apt-get install npm
sudo npm install -g npm@latest
sudo apt-get remove npm
sudo apt-get autoremove
Development
git clone https://github.com/\
hazyair/hazyair.git
cd hazyair
npm install
Production
Create node_modules
folder.
mkdir node_modules
Install hazyair
module.
npm install hazyair
Use as a service
Browse to hazyair
folder.
cd node_modules/hazyair
Run desired sensor configuration script (examples below).
npm run plantower PMS7003 \
/dev/serial0
npm run nova SDS011 \
/dev/serial0
npm run maxim
npm run bosch BME280 1 119
npm run xiaomi AirPurifier2 \
192.168.0.1
Deploy hazyair
service.
npm run deploy
Run web browser and open charts under following link http://<ip_address>:8081
.
API
Use as a module -const Hazyair =
require('hazyair');
// Initialize hazyair.
hazyair = new Hazyair([{
parameter: 'dust',
model: 'PMS7003',
persistent: true,
options: {
device: '/dev/serial0'
}
}]);
// Optionally handle incoming
// measurements.
hazyair.on('dust', (data) => {
// New measurement result
// available.
});
// Optionally send out incoming
// data to the ThingSpeak™
// service once available.
hazyair.thingspeak({
api_key:
'XXXXXXXXXXXXXXXX',
parameters: {
dust: {
concentration_pm10_normal:
'field1'
}
}
});
// Optionally send out incoming
// data to the dweet.io
// service once available.
hazyair.dweet({
thing:
'XXXXXXXXXXXXXXXX',
parameters: {
dust: {
concentration_pm10_normal:
'PM10'
}
}
});
// Start collecting
// measurements data.
hazyair.start();
// Optionally start http server
// and make data accessible to
// the web browsers.
hazyair.listen({
port: 8081
}, () => {
// Additional code goes
// here.
});
License
MIT License
Copyright (c) 2018-2019 Marcin Sielski