Senzor de Calitate a Aerului PureAware

Referinta API
Firmware V1.027

1. API HTTP Status (Port 80)

Public, nu necesita autentificare.

GET /
Returneaza dashboard-ul HTML cu date senzor in timp real si grafice pe 24h.
GET /data.json
Returneaza citirile curente ale senzorului ca JSON.

Format Raspuns JSON

{
  "co2":    845,
  "pm1":    3.2,
  "pm25":   5.8,
  "pm4":    7.1,
  "pm10":   8.4,
  "voc":    127,
  "nox":    15,
  "tvocw":  342,
  "temp":   23.5,
  "hum":    55.2,
  "press":  1013.2,
  "rssi":   -52,
  "uptime": 86400,
  "fw":     "PureAware_V1.027",
  "hw":     "AQS-PureAware-R1.2",
  "build":  "2026-03-14",
  "model":  "PureAQS66",
  "sn":     "AQS2608-8A0DE8",
  "host":   "pureaware-8a0de8",
  "mac":    "AA:BB:CC:DD:EE:FF",
  "ip":     "192.168.1.100",
  "lang":   "en",
  "wifi_mode": 1,
  "wifi_ok":   true,
  "mqtt_ok":   false,
  "email_en":  false,
  "email_cfg_ok": false,
  "sleep_en":     0,
  "sleep_active": false,
  "aq_level": 0,
  "alarms": [
    {"param":"co2","trigger":1000,"hyst":50,"state":0,"en":1,"val":845},
    {"param":"","trigger":0,"hyst":0,"state":0,"en":0,"val":0},
    {"param":"","trigger":0,"hyst":0,"state":0,"en":0,"val":0}
  ]
}

Referinta Campuri

CampTipUnitateDescriere
co2integerppmConcentratie CO2
pm1floatµg/m³Concentratie masica PM1.0
pm25floatµg/m³Concentratie masica PM2.5
pm4floatµg/m³Concentratie masica PM4.0
pm10floatµg/m³Concentratie masica PM10
vocintegerIndex VOC (1–500)
noxintegerIndex NOx (1–500)
tvocwintegerppbEchivalent TVOC (WELL/Mølhave)
tempfloat°CTemperatura
humfloat%RHUmiditate relativa
pressfloathPaPresiune barometrica
rssiintegerdBmPutere semnal WiFi
uptimeintegersecundeTimp de functionare dispozitiv
fwstringVersiune firmware
hwstringRevizie hardware
buildstringData compilarii
modelstringModel produs
snstringNumar de serie
hoststringHostname dispozitiv
macstringAdresa MAC
ipstringAdresa IP curenta
langstringLimba interfata (en/ro/hu/no/ja)
wifi_modeinteger0=AP, 1=STA, 2=OFFLINE
wifi_okbooleanWiFi conectat
mqtt_okbooleanMQTT conectat
email_enbooleanNotificari email activate
email_cfg_okbooleanConfigurare email valida
sleep_enintegerRepaus WiFi activat (0/1)
sleep_activebooleanMod repaus activ in prezent
aq_levelintegerNivel global calitate aer
alarmsarray3 obiecte alarma cu param, trigger, hyst, state, en, val
GET /log
Returneaza date istorice din buffer-ul RAM (288 inregistrari, 24h). Raspuns HTTP fragmentat.

Exemplu: cURL

# Obtinere citiri curente
curl http://192.168.1.100/data.json

# Obtinere date log
curl http://192.168.1.100/log

Exemplu: Python

import requests
import json

resp = requests.get("http://192.168.1.100/data.json")
data = resp.json()

print(f"CO2:         {data['co2']} ppm")
print(f"PM2.5:       {data['pm25']} ug/m3")
print(f"Temperature: {data['temp']} C")
print(f"Humidity:    {data['hum']} %RH")
print(f"VOC Index:   {data['voc']}")
print(f"Pressure:    {data['press']} hPa")

Exemplu: JavaScript

async function getSensorData() {
  const resp = await fetch('http://192.168.1.100/data.json');
  const data = await resp.json();

  document.getElementById('co2').textContent = data.co2 + ' ppm';
  document.getElementById('pm25').textContent = data.pm25 + ' ug/m3';
  document.getElementById('temp').textContent = data.temp + ' C';
}

// Interogare la fiecare 30 secunde
setInterval(getSensorData, 30000);
getSensorData();

2. API HTTP Configurare (Port 8080)

Autentificare: HTTP Basic Auth — admin / pureaware

GET /config/export
Exporta configuratia curenta ca fisier JSON.
POST /config/import
Importa o configuratie completa din fisier JSON (non-blocant).
POST /setting
Actualizeaza unul sau mai multi parametri de configurare. Date formular codificate URL.

Parametri de Configurare

WiFi si Retea

ParametruTipValoriDescriere
ssidstringSSID WiFi
passwordstringParola WiFi
wifi_modeint0=AP, 1=STA, 2=OFFLINEMod de operare
hostnamestringBaza hostname mDNS
static_ip_enint0/1Activare IP static
static_ipstringx.x.x.xAdresa IP statica
static_gwstringx.x.x.xAdresa gateway
static_snstringx.x.x.xMasca de subretea
static_dnsstringx.x.x.xServer DNS

MQTT

ParametruTipImplicitDescriere
mqtt_enint0Activare MQTT (0/1)
mserverstringnimicHost/IP broker
mportint1883Port broker
muserstringnimicUtilizator
mpassstringnimicParola
mtopicstringTopic de publicare
mintervalint60Interval (sec, minim 10)

Zabbix

ParametruTipImplicitDescriere
zbx_enint1Activare Zabbix (0/1)
zserverstringmonitor.microelemente.roHost server
zportint55051Port server
zhoststringPureAware_DefaultID host Zabbix
zbx_intint60Interval (sec, minim 10)

BACnet/IP

ParametruTipImplicitDescriere
bacnet_enint0Activare BACnet (0/1)
bacnet_idint0 (auto)Instanta Dispozitiv (0=auto din MAC)

Email / SMTP

ParametruTipImplicitDescriere
email_enint0Activare globala email
smtp_serverstringServer SMTP
smtp_portint587Port SMTP (587=STARTTLS, 465=SSL)
smtp_tlsint1Activare TLS (0/1)
smtp_userstringUtilizator SMTP
smtp_passstringParola SMTP
smtp_fromstringEmail expeditor
smtp_tostringEmail destinatar

Alarme (N = 0, 1, 2)

ParametruTipDescriere
aN_enintActivare alarma N (0/1)
aN_paramstringParametru: co2, pm25, pm1, pm4, pm10, voc, nox, tvocw, temp, hum, press
aN_triggerfloatPrag de declansare
aN_hystfloatBanda moarta histerezis
aN_dirintDirectie: 1=peste, 0=sub

Repaus WiFi

ParametruTipImplicitDescriere
sleep_enint0Activare repaus WiFi (0/1)
sleep_startstring22:00Ora de inceput (format HH:MM)
sleep_endstring06:00Ora de sfarsit (format HH:MM)

Afisaj si Limba

ParametruTipImplicitDescriere
led_enabledint1Activare LED NeoPixel
tft_dimint50Luminozitate afisaj (0–100)
langstringenLimba: en, ro, hu, no, ja

Exemplu: Actualizare Setari MQTT

# Activare MQTT si setare broker
curl -u admin:pureaware -X POST \
  http://192.168.1.100:8080/setting \
  -d "mqtt_en=on&mserver=mqtt.local&mport=1883&mtopic=sensors/aq1&minterval=60"

Exemplu: Export / Import Configuratie

# Export configuratie
curl -u admin:pureaware http://192.168.1.100:8080/config/export -o config-backup.json

# Import configuratie
curl -u admin:pureaware -X POST \
  http://192.168.1.100:8080/config/import \
  -H "Content-Type: application/data.json" \
  -d @config-backup.json

Exemplu: Setare Alarma

# Alarma 0: CO2 peste 1000 ppm cu histerezis de 50 ppm
curl -u admin:pureaware -X POST \
  http://192.168.1.100:8080/setting \
  -d "a0_en=1&a0_param=co2&a0_trigger=1000&a0_hyst=50&a0_dir=1"

3. API HTTP OTA (Port 8081)

GET /
Formular de incarcare pentru fisierul firmware .bin.
POST /update
Incarcare binar firmware. Date formular multipart, numele campului: firmware.

Exemplu: Incarcare Firmware

curl -X POST http://192.168.1.100:8081/update \
  -F "firmware=@PureAware_SEN66_V1.027.bin"

# Python
import requests
with open('PureAware_SEN66_V1.027.bin', 'rb') as f:
    requests.post('http://192.168.1.100:8081/update',
                  files={'firmware': f})
Avertisment: Dispozitivul reporneste automat dupa o incarcare reusita. Nu intrerupeti alimentarea in timpul acestui proces.

4. API HTTP Nextion (Port 8082)

GET /
Formular de incarcare pentru firmware-ul de afisaj Nextion .tft.
POST /upload
Incarcare binar Nextion TFT. Date formular multipart.
curl -X POST http://192.168.1.100:8082/upload \
  -F "file=@pureaware_v3.tft"

5. Protocol BACnet/IP (UDP 47808)

5.1 Transport

ParametruValoare
StandardASHRAE 135-2020, Anexa J
Port47808 (0xBAC0) UDP
BVLCOriginal-Unicast (0x0A), Original-Broadcast (0x0B), Forwarded (0x04)
Max APDU480 octeti
SegmentareNesuportata

5.2 Servicii Suportate

ServiciuTipDirectie
Who-IsNeconfirmatReceptie → Raspuns cu I-Am
I-AmNeconfirmatTransmisie (unicast + broadcast)
ReadPropertyConfirmatReceptie → Raspuns
ReadPropertyMultipleConfirmatReceptie → Raspuns
WritePropertyConfirmatReceptie → Raspuns

5.3 Harta Obiectelor

Tip ObiectInstantaNumeUnitati (ID)
Device (8)auto/manualhostname
Analog Input (0)0CO2ppm (96)
Analog Input (0)1PM1.0µg/m³ (165)
Analog Input (0)2PM2.5µg/m³ (165)
Analog Input (0)3PM4.0µg/m³ (165)
Analog Input (0)4PM10µg/m³ (165)
Analog Input (0)5VOC Indexno-units (95)
Analog Input (0)6NOx Indexno-units (95)
Analog Input (0)7TVOCppb (97)
Analog Input (0)8Temperatura°C (62)
Analog Input (0)9Umiditate%RH (29)
Analog Input (0)10PresiunehPa (133)

5.4 ID-uri Proprietati

ProprietateIDSe Aplica La
Object_Identifier75Toate
Object_Name77Toate
Object_Type79Toate
Present_Value85AI, BI, BO
Status_Flags111AI, BI, BO
Event_State36AI, BI, BO
Out_Of_Service81AI, BI, BO
Units117AI
Reliability103AI
Description28AI
Vendor_Name121Device
Vendor_Identifier120Device
Model_Name70Device
Firmware_Revision44Device
Application_Software_Version12Device
Protocol_Version98Device
Protocol_Revision139Device
Max_APDU_Length_Accepted62Device
Segmentation_Supported107Device
System_Status112Device
Object_List76Device
Database_Revision155Device

6. Harta Registrelor Modbus TCP (TCP 502)

6.1 Conexiune

ParametruValoare
Port502
Clienti Max3 (configurabil, maxim hard 10)
Timeout Inactivitate60 secunde
Unit IDOricare (ignorat, dispozitiv unic)

6.2 Coduri de Functie Suportate

FCHexDenumireZona de Date
010x01Read CoilsCoils (16)
020x02Read Discrete InputsInputs (16)
030x03Read Holding RegistersHolding (16)
040x04Read Input RegistersInput Regs (12)
050x05Write Single CoilCoils
060x06Write Single RegisterHolding
150x0FWrite Multiple CoilsCoils
160x10Write Multiple RegistersHolding

6.3 Registre de Intrare (FC 04) — Date Senzor

AdresaConstantaParametruUnitateScalare
0IR_DEVICE_TYPETip DispozitivFix: 1
1IR_VOCVOC Index1:1 (1–500)
2IR_NOXNOx Index1:1 (1–500)
3IR_PM1PM1.0µg/m³1:1
4IR_PM25PM2.5µg/m³1:1
5IR_PM4PM4.0µg/m³1:1
6IR_PM10PM10µg/m³1:1
7IR_TEMP_X10Temperatura°C × 10÷ 10
8IR_HUM_X10Umiditate%RH × 10÷ 10
9IR_CO2CO2ppm1:1
10IR_TVOCWTVOC (WELL)µg/m³1:1
11IR_PRESS_X10PresiunehPa × 10÷ 10

6.4 Coils (FC 01/05/0F)

16 coils la adresa de baza 0. Disponibile pentru controlul iesirilor digitale personalizate.

6.5 Intrari Discrete (FC 02)

16 intrari discrete la adresa de baza 0. Disponibile pentru starea intrarilor digitale personalizate.

6.6 Registre Holding (FC 03/06/10)

16 registre holding la adresa de baza 0. Disponibile pentru parametri R/W personalizati.

7. Format Mesaje MQTT

7.1 Structura Topic-urilor

Dispozitivul publica pe un topic unic per dispozitiv:

{mtopic}/{mac6}/data

Unde {mtopic} este topic-ul de baza configurat si {mac6} sunt ultimele 6 cifre hexazecimale ale adresei MAC ESP32.

Exemplu: PureAware_Office/8a0de8/data

7.2 Parametri de Publicare

ParametruValoare
Topic{mtopic}/{mac6}/data
QoS0
RetainNu
PayloadJSON (toate valorile ca siruri)
IntervalConfigurabil (minim 10s, implicit 60s)
Client IDPureAware-{mac6}

7.3 Payload JSON

CampTipUnitateDescriere
device_typestringIntotdeauna "SEN66"
namestringNume senzor (optional, doar daca este configurat)
co2stringppmConcentratie CO2
pm1stringµg/m³Concentratie masica PM1.0
pm25stringµg/m³Concentratie masica PM2.5
pm4stringµg/m³Concentratie masica PM4.0
pm10stringµg/m³Concentratie masica PM10
vocstringIndex VOC (1–500)
noxstringIndex NOx (1–500)
tvocwstringµg/m³TVOC (standard WELL)
tempstring°CTemperatura (1 zecimala)
humstring%RHUmiditate relativa (1 zecimala)
pressstringhPaPresiune barometrica (1 zecimala)
rssistringdBmPutere semnal WiFi

7.4 Exemplu Payload

{
  "device_type": "SEN66",
  "name":   "Office Sensor",
  "co2":    "845",
  "pm1":    "3",
  "pm25":   "5",
  "pm4":    "7",
  "pm10":   "8",
  "voc":    "127",
  "nox":    "15",
  "tvocw":  "342",
  "temp":   "23.5",
  "hum":    "55.2",
  "press":  "1013.2",
  "rssi":   "-52"
}
Nota: Toate valorile sunt transmise ca siruri JSON (intre ghilimele). Campul name este inclus doar daca un Nume de Senzor este configurat in setarile dispozitivului.

7.5 Exemple de Abonare

# Abonare la un dispozitiv specific
mosquitto_sub -h broker.emqx.io -t "PureAware_Office/8a0de8/data" -v

# Abonare la toate dispozitivele de pe acelasi topic de baza
mosquitto_sub -h broker.emqx.io -t "PureAware_Office/#" -v

8. Protocol Zabbix Sender

8.1 Format Mesaj

Protocol standard Zabbix Sender JSON prin TCP:

{
  "request": "sender data",
  "data": [
    {"host": "PureAware_Office", "key": "device_type", "value": "PureAQS66"},
    {"host": "PureAware_Office", "key": "co2",   "value": "845"},
    {"host": "PureAware_Office", "key": "pm1",   "value": "3"},
    {"host": "PureAware_Office", "key": "pm25",  "value": "5"},
    {"host": "PureAware_Office", "key": "pm4",   "value": "7"},
    {"host": "PureAware_Office", "key": "pm10",  "value": "8"},
    {"host": "PureAware_Office", "key": "voc",   "value": "127"},
    {"host": "PureAware_Office", "key": "nox",   "value": "15"},
    {"host": "PureAware_Office", "key": "tvocw", "value": "342"},
    {"host": "PureAware_Office", "key": "temp",  "value": "23.5"},
    {"host": "PureAware_Office", "key": "hum",   "value": "55.2"},
    {"host": "PureAware_Office", "key": "press", "value": "1013.2"},
    {"host": "PureAware_Office", "key": "rssi",  "value": "-52"}
  ]
}

8.2 Chei Element Zabbix

CheieTipUnitate
co2Numeric (float)ppm
pm1Numeric (float)µg/m³
pm25Numeric (float)µg/m³
pm4Numeric (float)µg/m³
pm10Numeric (float)µg/m³
vocNumeric (float)
noxNumeric (float)
tvocwNumeric (float)µg/m³
tempNumeric (float)°C
humNumeric (float)%
pressNumeric (float)hPa

9. Comenzi Serial UART

9.1 Interfata Serial2

ParametruValoare
UARTSerial2 (RX: GPIO 14, TX: GPIO 27)
Rata Baud115200
Format8N1
DetectieFereastra glisanta de 6 octeti

9.2 Comenzi de Schimbare Mod

Comanda (hex)Actiune
01 01 01 FF FF FFComutare in modul AP (Access Point)
02 02 02 FF FF FFComutare in modul STA (Station)
03 03 03 FF FF FFComutare in modul OFFLINE

Firmware-ul mentine un buffer cu fereastra glisanta de 6 octeti (window6[6]). Cand fereastra se potriveste cu unul dintre modelele de comanda, dispozitivul schimba modul si reporneste.

9.3 Interfata Serial1 (RS-485)

ParametruValoare
UARTSerial1 (RX: GPIO 16, TX: GPIO 17)
Rata Baud19200
Format8N1
Control DirectieGPIO 2 (HIGH = transmisie)
ProtocolModbus RTU