-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpoll-city.py
executable file
·86 lines (73 loc) · 2.44 KB
/
poll-city.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/env python
# # -*- coding: utf-8 -*-
""" Smogdance
An open-source collection of scripts to collect, store and graph air quality data
from publicly available sources.
This polls SQL for the latest values of all sensors from a given city.
gnd, 2017 - 2018
"""
import os
import sys
import MySQLdb
import ConfigParser
from tabulate import tabulate
### load config
settings_file = os.path.join(sys.path[0], 'settings_python')
config = ConfigParser.ConfigParser()
config.readfp(open(settings_file))
args = 2 # $0, sensor_id
all_substances = ["co","no2","o3","pm10","pm25","so2"]
#//TODO - allow for single substance selection (like in poll-sensor)
### check if proper arguments
if (len(sys.argv) < args):
sys.exit("Not enough arguments.\nUsage: poll-city.py <city>")
else:
#//TODO - sanitize input in poll-city
city = sys.argv[1]
#substance = sys.argv[2]
#if (substance not in substances):
# sys.exit("Unknown substance: %s\nUsage: poll-city.py <city> <substance | all>" % (substance))
### connect to the db
DB_HOST = config.get('database', 'DB_HOST')
DB_USER = config.get('database', 'DB_USER')
DB_PASS = config.get('database', 'DB_PASS')
DB_NAME = config.get('database', 'DB_NAME')
DB_TABLE = config.get('database', 'DB_TABLE')
DATA_TABLE = config.get('database', 'DATA_TABLE')
db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME, use_unicode=True, charset="utf8")
cur = db.cursor()
### get list of sensors for the city
query = "SELECT id, name, substances from %s WHERE city = \"%s\"" % (DB_TABLE, city)
try:
cur.execute(query)
except:
sys.exit("Something went wrong: " + query)
table = []
table.append(["id","city","name"] + all_substances)
### get last data for the sensors
for line in cur.fetchall():
row = []
sensor_id = line[0]
name = line[1]
sensor_substances = line[2]
row.append(sensor_id)
row.append(city)
row.append(name)
query_substances = ', '.join([str(x) for x in all_substances])
query = "SELECT %s from %s_temp WHERE sensor_id = %d" % (query_substances, DATA_TABLE, sensor_id)
try:
cur.execute(query)
except:
sys.exit("Something went wrong: " + query)
data = cur.fetchone()
i = 0
for substance in all_substances:
if substance in sensor_substances:
row.append(data[i])
else:
row.append('-')
i+=1
table.append(row)
db.close()
### print output
print tabulate(table)