Files
CommonCode/track.py
2025-09-04 22:48:15 -04:00

82 lines
3.1 KiB
Python
Executable File

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
# %%