annotate service/air_particles/air_particles.py @ 1462:2b29f14eb6bd

try new graph+view widget Ignore-this: d5f9c5dc52f04324368716ba2f604fdb darcs-hash:44e85a5c075ef73c34a58deaa3a3c1e8390dae52
author drewp <drewp@bigasterisk.com>
date Sun, 24 Nov 2019 00:01:00 -0800
parents 025ad7fef554
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1177
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 from __future__ import print_function
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
2 import sys
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3 import logging
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
4 import serial
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
5 import time
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
6 from influxdb import InfluxDBClient
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
7
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
8 logging.basicConfig(level=logging.INFO)
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
9 log = logging.getLogger()
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
10
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11 location, = sys.argv[1:]
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
12 min_period = 5
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
13
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
14 ser_port = "/dev/ttyUSB0"
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
15 ser = serial.Serial(ser_port, baudrate=9600, stopbits=1, parity="N", timeout=2)
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
16
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17 influx = InfluxDBClient('bang6', 9060, 'root', 'root', 'main')
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
19 last_write = 0
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
20 while True:
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
21 ser.flushInput()
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
22 s = map(ord, ser.read(32))
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
23 if s[:2] != [0x42, 0x4d]:
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
24 log.warn('unknown packet header: %s' % s)
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
25 continue
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
26
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
27 cs = (s[30] * 256 + s[31]) # check sum
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
28 check = 0
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
29 for i in range(30):
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
30 check += s[i]
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
31 if check != cs:
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
32 log.warn('checksum mismatch: %s' % s)
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
33 continue
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
34
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
35 sample = {
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
36 # PM1, PM2.5 and PM10 values for standard particle in ug/m^3
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
37 'pm1_0_std': s[4] * 256 + s[5],
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
38 'pm2_5_std': s[6] * 256 + s[7],
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
39 'pm10_0_std': s[8] * 256 + s[9],
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
40
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
41 # PM1, PM2.5 and PM10 values for atmospheric conditions in ug/m^3
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
42 'pm1_0_atm': s[10] * 256 + s[11],
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
43 'pm2_5_atm': s[12] * 256 + s[13],
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
44 'pm10_0_atm': s[14] * 256 + s[15],
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
46 # Number of particles bigger than 0.3 um, 0.5 um, etc. in #/cm^3
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
47 'part_0_3': s[16] * 256 + s[17],
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
48 'part_0_5': s[18] * 256 + s[19],
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
49 'part_1_0': s[20] * 256 + s[21],
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
50 'part_2_5': s[22] * 256 + s[23],
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
51 'part_5_0': s[24] * 256 + s[25],
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
52 'part_10_0': s[26] * 256 + s[27],
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
53 }
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
54
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
55 now = int(time.time())
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
56 if now < last_write + min_period:
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
57 continue
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
58 if last_write == 0:
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
59 log.info('sending first sample: %s', sample)
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
60 last_write = now
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
61 influx.write_points([{'measurement': 'air_particles',
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
62 "fields": sample,
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
63 "time": now,
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
64 }],
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
65 tags=dict(location=location),
025ad7fef554 pms5003 -> ttyUSB -> influxdb
drewp <drewp@bigasterisk.com>
parents:
diff changeset
66 time_precision='s')