1 from datetime import datetime
3 from xively import XivelyAPIClient
4 from xively import Datastream
5 from xively import Datapoint
15 def __init__(self, config):
20 self.api = XivelyAPIClient(self.config.apikey)
21 self.feed = self.api.feeds.get(self.config.feedid)
22 self.last = datetime.utcnow()
30 if not self.api or not self.feed:
34 def append(self, state):
37 self.queue.append(state)
38 delta = datetime.utcnow() - self.last
39 if delta.total_seconds() > self.config.maxrate:
44 def split(items, limit):
47 sensors = {'acc': ['x','y','z'],
51 'a2d': ['0','1','2','3','4','5']}
54 data = getattr(state, sns)
55 for i in range(len(data)):
59 print('upload: cropping upload')
61 chan = sns + sensors[sns][i]
62 if not split.has_key(chan):
64 point = Datapoint(state.time, data[i])
65 split[chan].append(point)
70 if not self.running() or len(self.queue) == 0:
73 # Split data and limit to 500 points per upload
74 upload = split(self.queue, 500)
77 self.feed.datastreams = \
78 [ Datastream(id=chan, datapoints=upload[chan])
79 for chan in upload.keys() ]
82 self.last = datetime.utcnow()
88 except Exception as ex: