74
75
self.today = datetime.datetime(2013,5,30)
76
77
def setup(self, db_name, db_server, db_host):
79
79
self.name = db_name
80
80
self.server = db_server
81
81
self.host = db_host
83
83
self.query_template = \
84
"http://%s/adei/services/%s?db_server=%s&db_name=%s" % (
85
db_host, '%s', db_server, db_name)
84
"http://%s/adei/services/%s?db_server=%s&db_name=%s"\
85
% (db_host, '%s', db_server, db_name)
88
88
groups = dictvalues(self.listGroup(), 'db_group')
89
dates = map(self.groupLastStamp, groups)
94
} for (g, d) in zip(groups, dates) ]
97
sensors = self.listSensor([g])
98
names = dictvalues(sensors, 'column')
99
id_ = dictvalues(sensors, 'value')
100
self.sensors.extend([ {
104
} for i in range(len(sensors)) ])
91
date = self.groupLastStamp(g)
96
'axis2_value': s['axis2_val']
97
} for s in self.listSensor(g)
105
for k, v in sensors.iteritems():
108
self.sensors.append(v)
111
for k, v in self.groups.iteritems():
113
for s, ss in sorted(v['sensors'].items()):
106
117
if not self.groups:
107
118
raise RuntimeError("no group found")
110
raise RuntimeError("no sensor found")
120
128
def listGroup(self):
121
query_str = self.query_template % "list.php" + "&target=groups"
122
return xmlparser(urllib.urlopen(query_str))
124
def listSensor(self, groups=[]):
129
url = self.query_template % "list.php" + "&target=groups"
130
return xmlparser(urllib.urlopen(url))
133
def listSensor(self, group):
126
135
url = self.query_template % "list.php" + "&target=items"
131
# groups = dictvalues(self.groups, 'name')
133
for g in groups or dictvalues(self.groups, 'name'):
137
for g in [group] or self.groups.keys():
134
138
url += "&db_group=%s&info=1" % g
135
139
res.extend( xmlparser(urllib.urlopen(url)) )
139
def updateSensor(self, newkey, attr):
140
for g in dictvalues(self.groups, 'name'):
141
ids = dictvalues(self.listSensor([g]), 'value')
142
attrs = dictvalues(self.listSensor([g]), attr)
144
for id_, a_ in zip(ids, attrs):
145
for i in range(len( self.sensors )):
146
if id_ == self.sensors[i]['id'] and g == self.sensors[i]['group']:
147
self.sensors[i][newkey] = a_
143
# def updateSensor(self, newkey, attr):
144
# for g in dictvalues(self.groups, 'name'):
145
# ids = dictvalues(self.listSensor([g]), 'value')
146
# attrs = dictvalues(self.listSensor([g]), attr)
148
# for id_, a_ in zip(ids, attrs):
149
# for i in range(len( self.sensors )):
150
# if id_ == self.sensors[i]['id'] and g == self.sensors[i]['group']:
151
# self.sensors[i][newkey] = a_
150
154
def groupLastStamp(self, group, fmt='sec'):
174
def sensorFilter(self, ss):
175
pattern = "^%s.[0-9]{3}$" % ss
178
def sensorFilter(self, sensorName, groupName):
179
pattern = "^%s.[0-9]{3}$" % sensorName
176
180
prog = re.compile(pattern)
177
pattern2 = "^%s$" % ss
181
pattern2 = "^%s$" % sensorName
178
182
prog2 = re.compile(pattern2)
181
for i, sensor in enumerate(self.sensors):
185
for i, sensor in self.groups[groupName]['sensors'].iteritems():
182
186
if prog.match(sensor['name']) or prog2.match(sensor['name']):
187
def getSensorData(self, id_, starttime, deltatime=86400, resample=10):
191
def getSensorData(self, id_, groupname, starttime, deltatime=86400, resample=10):
188
192
endtime = starttime + deltatime
190
194
url = self.query_template % "getdata.php"
191
url += "&db_group=%s" % self.sensors[id_]['group']
192
url += "&db_mask=%s" % self.sensors[id_]['id']
195
url += "&db_group=%s" % groupname
196
url += "&db_mask=%s" % id_
193
197
url += "&window=%s-%s" % (starttime, endtime)
194
198
url += "&resample=%s" % resample
196
200
url += "&cache=0"
198
202
res = csvparser(urllib.urlopen(url))
199
205
return res[1][1:]
201
def getSensorTime(self, id_, starttime, deltatime=86400, resample=10):
207
def getSensorTime(self, id_, groupname, starttime, deltatime=86400, resample=10):
202
208
endtime = starttime + deltatime
204
210
url = self.query_template % "getdata.php"
205
url += "&db_group=%s" % self.sensors[id_]['group']
206
url += "&db_mask=%s" % self.sensors[id_]['id']
211
url += "&db_group=%s" % groupname
212
url += "&db_mask=%s" % id_
207
213
url += "&window=%s-%s" % (starttime, endtime)
208
214
url += "&resample=%s" % resample
214
220
return map(utcsecond, res[0][1:])
217
def getSensorTimeData(self, id_, starttime, deltatime=86400, resample=10):
223
def getSensorTimeData(self, id_, groupname, starttime, deltatime=86400, resample=10):
218
224
endtime = starttime + deltatime
220
226
url = self.query_template % "getdata.php"
221
url += "&db_group=%s" % self.sensors[id_]['group']
222
url += "&db_mask=%s" % self.sensors[id_]['id']
227
url += "&db_group=%s" % groupname
228
url += "&db_mask=%s" % id_
223
229
url += "&window=%s-%s" % (starttime, endtime)
224
230
url += "&resample=%s" % resample
239
def getMaskList(self, ss, group=''):
240
pattern = "^%s.[0-9]{3}$" % ss
241
prog = re.compile(pattern)
242
pattern2 = "^%s$" % ss
243
prog2 = re.compile(pattern2)
246
for sensor in self.sensors:
248
if (prog.match(sensor['name']) or prog2.match(sensor['name'])) and group == sensor['group']:
249
maskstr += ("%s" if maskstr == "" else ",%s") % sensor['id']
251
if prog.match(sensor['name']) or prog2.match(sensor['name']):
252
maskstr += ("%s" if maskstr == "" else ",%s") % sensor['id']
255
maskList = [int(x) for x in maskstr.split(',')]
261
def getDataByMask(self, mask, grp, stime, deltatime=86400):
263
et = stime + deltatime
265
maskstr = ','.join([str(n) for n in mask])
267
query_str = "http://%s/adei/services/getdata.php?" % self.host
268
query_str += "db_server=%s" % self.server
269
query_str += "&db_name=%s" % self.name
270
query_str += "&db_group=%s" % grp
271
query_str += "&db_mask=%s" % maskstr
272
query_str += "&window=%s-%s" % (st, et)
274
F = urllib.urlopen(query_str)
276
csvreader = csv.reader(F, skipinitialspace=True)
277
except Exception as ex:
278
sys.stdout.write('{"error": "%s", ' % 'unable to get ADEI data')
279
sys.stdout.write('"exception": "%s"}\n' % type(ex).__name__)
285
for n, row in enumerate(csvreader):
286
time.append(utcsecond(row[0]))
288
#print "%8d record read from adei" % (n+1)
290
data = np.array(data, dtype='f')
291
return [time, data.transpose()]
245
# def getMaskList(self, ss, group=''):
246
# pattern = "^%s.[0-9]{3}$" % ss
247
# prog = re.compile(pattern)
248
# pattern2 = "^%s$" % ss
249
# prog2 = re.compile(pattern2)
252
# for sensor in self.sensors:
254
# if (prog.match(sensor['name']) or prog2.match(sensor['name'])) and group == sensor['group']:
255
# maskstr += ("%s" if maskstr == "" else ",%s") % sensor['id']
257
# if prog.match(sensor['name']) or prog2.match(sensor['name']):
258
# maskstr += ("%s" if maskstr == "" else ",%s") % sensor['id']
261
# maskList = [int(x) for x in maskstr.split(',')]
267
# def getDataByMask(self, mask, grp, stime, deltatime=86400):
269
# et = stime + deltatime
271
# maskstr = ','.join([str(n) for n in mask])
273
# query_str = "http://%s/adei/services/getdata.php?" % self.host
274
# query_str += "db_server=%s" % self.server
275
# query_str += "&db_name=%s" % self.name
276
# query_str += "&db_group=%s" % grp
277
# query_str += "&db_mask=%s" % maskstr
278
# query_str += "&window=%s-%s" % (st, et)
280
# F = urllib.urlopen(query_str)
282
# csvreader = csv.reader(F, skipinitialspace=True)
283
# except Exception as ex:
284
# sys.stdout.write('{"error": "%s", ' % 'unable to get ADEI data')
285
# sys.stdout.write('"exception": "%s"}\n' % type(ex).__name__)
291
# for n, row in enumerate(csvreader):
292
# time.append(utcsecond(row[0]))
293
# data.append(row[1:])
294
# #print "%8d record read from adei" % (n+1)
296
# data = np.array(data, dtype='f')
297
# return [time, data.transpose()]