Skip to content

hazyair/hazyair

Repository files navigation

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.

Hardware - Configuration

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.

Use as a module - API

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