from datetime import datetime, timedelta import redis r = redis.StrictRedis(host='192.168.1.242', port=6379, db=1) class BaseSensorPost(object): def __init__(self, sq, sensor_type, table,**kwargs): self.last_values = [None,None] self.last_measurement = None self.last_insert = datetime.utcnow() self.sq = sq self.heartbeat_interval = 15*60 self.sensor = sensor_type self.table = table; self.kwargs = kwargs def insert_heartbeat(self, time_init): return True # ins = self.sq['t'][self.table].insert().values( # when_timestamp = time_init, what = self.sensor) # self.sq['s'].execute(ins) class Temperature(BaseSensorPost): def insert_temperature(self, time_init, temperature): if time_init is not None and temperature is not None: self.sq.executemany('INSERT INTO nuggets.temperature (when, temperature, where) values ',[{'when':time_init, 'temperature':temperature, 'where':self.kwargs['where']}]) # ins = self.sq['t'][self.table].insert().values(temperature = temperature, when_timestamp = time_init, where_id=self.kwargs['where']) # self.sq['s'].execute(ins) def parse(self, time_init,string): string = string.strip(','); string = string.split(':')[1]; curr_temp = float(string) self.insert_temperature(time_init, curr_temp) # self.insert_temperature(time_init,string) # if (time_init - self.last_insert).seconds > self.heartbeat_interval: # self.insert_heartbeat(time_init) # self.last_insert = time_init class Odometer(BaseSensorPost): def insert_speeds(self, time_init, transittime = None, heartbeat = False): if transittime is None or transittime < 0: isclockwise = 0 else: isclockwise = 1 if time_init is not None: self.sq.executemany('INSERT INTO nuggets.odometer (when, who, speed, clockwise) values ',[{'when':time_init, 'who':self.kwargs['who'], 'speed':abs(transittime), 'clockwise':isclockwise}]) # ins = self.sq['t'][self.table].insert().values( # when_timestamp = time_init, speed = abs(transittime), who_id = self.kwargs['who'], # clockwise = isclockwise ) # self.sq['s'].execute(ins) def parse(self, time_init,string): string = string.strip(','); string = string.split(':')[1]; string = string.split(',') for speed, offset in zip(string[0::2],string[1::2]): speed = int(speed) if speed != 0: time_actual = time_init + timedelta(milliseconds = int(offset)) self.insert_speeds(time_actual, transittime = speed) r.incr('nugget_run_counts') if (time_init - self.last_insert).seconds > self.heartbeat_interval: self.insert_heartbeat(time_init ) self.last_insert = time_init self.last_measurement = time_init # %%