npm.io
0.1.0 • Published 1 month ago

@serialpilot/driver-plantower

Licence
MIT
Version
0.1.0
Deps
1
Size
24 kB
Vulns
0
Weekly
3.2K

@serialpilot/driver-plantower

Plantower PM sensor driver for SerialPilot. Reads particulate matter data from PMS5003, PMS1003, and PMS3003 sensors.

Active mode only — the sensor sends readings automatically every ~1 s; the driver listens, frames, parses, and emits typed events. No write API in v0.1.

Install

npm install serialpilot @serialpilot/driver-plantower

Quick start

import { SerialPilot } from 'serialpilot'
import { Plantower } from '@serialpilot/driver-plantower'

const port = new SerialPilot({ path: '/dev/ttyUSB0', baudRate: 9600 })
const sensor = new Plantower({ transport: port })

sensor.on('reading', r => {
  console.log(`PM2.5: ${r.pm2_5} μg/m³, PM10: ${r.pm10} μg/m³`)
})
sensor.on('reading-compact', r => {
  console.log(`PMS3003 — PM2.5: ${r.pm2_5} μg/m³`)
})
sensor.on('parse-error', e => console.warn('bad frame:', e.reason))

await sensor.open()
await sensor.start()

// later: await sensor.stop(); await sensor.close()

Events

Event Payload Notes
'reading' Reading PMS5003 / PMS1003 13-field frame
'reading-compact' CompactReading PMS3003 7-field frame (no atmospheric, no particle counts)
'reading-raw' RawReading Every valid frame, regardless of model
'parse-error' ParseError Bad start bytes, length mismatch, failed checksum
Inherited 'open' | 'close' | 'state' | 'error' | 'data' From Device

Limitations (v0.1)

  • Active mode only. No passive-mode read/sleep/wake commands.
  • PMS5003 and PMS1003 are indistinguishable on the wire. Both produce 32-byte frames with the same field layout. RawReading.model defaults to 'PMS5003' for 32-byte frames.
  • No PMS5003ST support. That variant adds an HCHO field; deferred.
  • No inter-frame timing. Frames are detected by start bytes + length, which is reliable for single-sensor active mode.

License

MIT

Keywords