Spis treści

  1. Rejestracja
  2. Dostęp do danych
  3. Pyły zawieszone
    1. SDS021/SDS011
      1. Python
      2. Bash
      3. NodeJS
    2. PMS7003/PMS5003
      1. Python
      2. Bash
      3. NodeJS
  4. Temperatura, wilgotność, ciśnienie
    1. BME280
      1. Python
      2. Bash
      3. NodeJS
  5. CO2, TVOC
    1. CCS811
      1. Python
      2. Bash
      3. NodeJS

Rejestracja

Pamiętaj aby wypełnić formularz celem uzyskania X-Api-Key

Po 24h wykresy na https://metrics.airmonitor.pl powinny być widoczne. 24 godziny pozwolą na wyznaczenie średniej ruchomej celem wygładzenia wykresu z pomiarami.

Każdy klucz API ma przydzielony limit miesięcznych operacji w wysokości 20000. W przeliczeniu na godzinę daje to wartość 27,8 żądań. Stąd też ważne jest aby używać jeden klucz na urządzenie. W odmiennym przypadku może dojść do ograniczenia przyjmowania metryk z powodu wysycenia limitów.

Dostępne jest również REST API do wysyłania pomiarów o adresie https://airmonitor.pl/prod/measurements

Dostęp do danych

Dostęp do danych jest bezpłatny.

Aby uzyskać dostęp do API należy zarejestrować się poprzez formularz celem uzyskania klucza API

Przykład kodu w języku Python

import requests
url = "https://airmonitor.pl/prod/measurements"
payload = {}
headers = {
  'X-Api-Key': 'KLUCZ API'
}
response = requests.request("GET", url, headers=headers, data = payload)
print(response.text.encode('utf8'))

Pyły zawieszone

SDS021/SDS011

Python

import json  
import requests  
data = {  
    "lat": str(55.000),  
    "long": str(15.000),  
    "pm25": 25,  
    "pm10": 10,  
    "sensor": "SDS021"  
    }  
url = 'https://airmonitor.pl/prod/measurements'  
resp = requests.post(url, timeout=10, data=json.dumps(data), headers={"X-Api-Key": X-Api-Key, "Content-Type": "application/json"})  
resp.status_code

Bash

curl -X POST -H "Content-Type: application/json" -d '{  
        "lat": "55.000",  
        "long": "15.000",  
        "pm25": 25,  
        "pm10": 10,  
        "sensor": "SDS021"  
}' https://airmonitor.pl/prod/measurements

NodeJS

const request = require('request');  
let data = {  
    lat: "55.000",  
    long: "15.000",  
    pm25: 25,  
    pm10: 10,  
    sensor: "SDS021"  
};  

let options = {  
    uri: "https://airmonitor.pl/prod/measurements",  
    method: "POST",  
    json: data  
};  

request(options, (error, response) => {  
    if (error) {  
        return console.log(error);  
}  
if (response.statusCode === 200) {  
    // Success  
}  
});

PMS7003/PMS5003

Python

import json
import requests  
data = {
    "lat": str(55.000),
    "long": str(15.000),
    "pm1": 1,
    "pm25": 25,
    "pm10": 10,
    "sensor": "PMS7003"
   }
url = ('https://airmonitor.pl/prod/measurements')
resp = requests.post(url, timeout=10, data=json.dumps(data), headers={"X-Api-Key": X-Api-Key, "Content-Type": "application/json"})
resp.status_code

Bash

curl -X POST -H "Content-Type: application/json" -d '{
        "lat": "55.000",
        "long": "15.000",
        "pm1": 1,
        "pm25": 25,
        "pm10": 10,
        "sensor": "PMS7003"
}' https://airmonitor.pl/prod/measurements

NodeJS

const request = require('request');

let data = {
    lat: "55.000",
    long: "15.000",
    pm1: 1,
    pm25: 25,
    pm10: 10,
    sensor: "PMS7003"
};


let options = {
    uri: "https://airmonitor.pl/prod/measurements",
    method: "POST",
    json: data
};


request(options, (error, response) => {
  if (error) {
    return console.log(error);
  }
  if (response.statusCode === 200) {
    // Success
  }
});

Jak widać powyżej, jedyną różnicą między wersją dla sensorów SDS a PMS jest dodatkowa linia wysyłająca wartość pyłu zawieszonego PM1.

Temperatura, wilgotność, ciśnienie

BME280

Python

import json
import requests

data = {
       "lat": str(55.000),
        "long": str(15.000),
        "pressure": 1000,
        "temperature": 25,
        "humidity": 55,
        "sensor": "BME280"
       }

url = 'https://airmonitor.pl/prod/measurements'
resp = requests.post(url, timeout=10, data=json.dumps(data), headers={"X-Api-Key": X-Api-Key, "Content-Type": "application/json"})
resp.status_code

Bash

curl -X POST -H "Content-Type: application/json" -d '{
            "lat": "55.000",
            "long": "15.000",
            "pressure": 1000.10,
            "temperature": 25.2,
            "humidity": 55,
            "sensor": "BME280"
}' https://airmonitor.pl/prod/measurements

NodeJS

const request = require('request');

let data = {
  lat: "55.000",
  long: "15.000",
  pressure: 1000.10,
  temperature: 25.2,
  humidity: 55,
  sensor: "BME280"
};

let options = {
  uri: "https://airmonitor.pl/prod/measurements",
  method: "POST",
  json: data
};

request(options, (error, response) => {
  if (error) {
    return console.log(error);
  }
  if (response.statusCode === 200) {
    // Success
  }
});

CO2, TVOC

CCS811

Python

import json
import requests

data = {
        "lat": str(55.000),
        "long": str(15.000),
        "co2": 400,
        "tvoc": 0.1,
        "sensor": "CCS811"
       }

url = 'https://airmonitor.pl/prod/measurements'
resp = requests.post(url, timeout=10, data=json.dumps(data), headers={"X-Api-Key": X-Api-Key, "Content-Type": "application/json"})
resp.status_code

Bash

curl -X POST -H "Content-Type: application/json" -d '{
            "lat": "55.000",
            "long": "15.000",
            "co2": 400.0,
            "tvoc": 0.1,
            "sensor": "CCS811"
}' https://airmonitor.pl/prod/measurements

NodeJS

const request = require('request');

let data = {
  lat: "55.000",
  long: "15.000",
  co2: 400.0,
  tvoc: 0.1,
  sensor: "CCS811"
};

let options = {
  uri: "https://airmonitor.pl/prod/measurements",
  method: "POST",
  json: data
};

request(options, (error, response) => {
  if (error) {
    return console.log(error);
  }
  if (response.statusCode === 200) {
    // Success
  }
});

NodeJS wymaga biblioteki request, instalacja - npm install --save request