Loading examples/campbell.conf +3 −0 Original line number Diff line number Diff line Loading @@ -39,4 +39,7 @@ connection_retry_interval = 25 logfile = campbell.log localdb = campbell.db examples/campbell.db 0 → 100644 +7 KiB File added.No diff preview for this file type. View file examples/datalogger.py +97 −27 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ import logging import json import datetime import sqlite3 #logging.basicConfig(filename="PyPakLogging.log", level=logging.DEBUG) #log = logging.getLogger("DataLogger") Loading Loading @@ -41,13 +42,14 @@ class tblcache: class DataLogger: #def __init__(self, number, socket, my_node_id, metric_id, pakbus_id): def __init__(self, socket, my_node_id, metric_id, pakbus_id, def __init__(self, db, socket, my_node_id, metric_id, pakbus_id, data_callback = None, security_code = 0x1111): #self.number = number self.log = logging.getLogger(__name__) self.db = sqlite3.connect(db) self.socket = socket self.my_node_id = my_node_id self.metric_id = metric_id Loading Loading @@ -80,6 +82,65 @@ class DataLogger: self.last_collect = {"ts": None, "NextRecNbr": None} self.check_db() def check_db(self): c = self.db.cursor() sql = "CREATE TABLE IF NOT EXISTS campbell (" +\ "ID INTEGER PRIMARY KEY," +\ "SERIALNO INT NOT NULL" +\ ");" c.execute(sql) self.db.commit() # now get my ID for this datalogger or create sql = "SELECT ID FROM campbell WHERE SERIALNO = ?" c.execute(sql, (self.serno,)) rslt = c.fetchone() if not rslt: sql = 'INSERT INTO campbell VALUES (Null, ?)' c.execute(sql, (self.serno,)) self.dbid = c.lastrowid self.db.commit() self.log.debug("Created datalogger in table with id {}".format(self.dbid)) else: self.dbid = rslt[0] self.log.debug("Datalogger ID in localdb is {}".format(self.dbid)) sql = "CREATE TABLE IF NOT EXISTS datalogger (" +\ "ID INTEGER PRIMARY KEY," +\ "campbell_id INTEGER NOT NULL," +\ "last_upload timestamp," +\ "last_recno INTEGER);" c.execute(sql) self.db.commit() sql = "SELECT last_upload, last_recno FROM datalogger WHERE campbell_id = ?" c.execute(sql, (self.dbid,)) rslt = c.fetchone() if rslt and rslt[0] and rslt[1]: self.last_collect["ts"] = rslt[0] self.last_collect["NextRecNbr"] = rslt[1] self.log.debug("Datalogger resuming from recnumber {} last uploaded on {}".format(rslt[1], rslt[0])) else: self.update_local_db("Null", "Null") def update_local_db(self, timestamp, nextrecnumber): sql = "INSERT INTO datalogger VALUES (Null, ?, ?, ?)" self.db.execute(sql, (self.dbid, timestamp, nextrecnumber)) self.db.commit() self.log.debug("Updated localdb with last record {} @ {}".format(nextrecnumber, timestamp)) def stop(self): self.db.commit() self.db.close() def __repr__(self): return "Metric ID: " + str(self.metric_id) + "; PakBus ID: " + str(self.pakbus_id) + \ "; Table List: " + str(self.list_of_tables) Loading Loading @@ -128,18 +189,22 @@ class DataLogger: self.log.debug("Collecting all from {}.{}".format(self.metric_id, tbl.name)) more_flag = True # collect most recent record data, more_flag = pakbus.collect_data(self.socket, self.pakbus_id, self.my_node_id, self.tabledef, tbl.name, CollectMode = 0x03) if data and len(data) > 0: self.last_collect['ts'] = datetime.datetime.now() # compute next record to collect self.last_collect['NextRecNbr'] = data[0]['BegRecNbr'] + data[0]['NbrOfRecs'] self.emit_all(tbl, data[0]['RecFrag']) self.update_local_db(self.last_collect['ts'], self.last_collect['NextRecNbr']) #if self.data_callback: #for rec in data[0]['RecFrag']: #self.data_callback(self, rec) Loading @@ -164,10 +229,15 @@ class DataLogger: CollectMode = 0x04, P1 = self.last_collect['NextRecNbr']) if data and len(data) > 0: self.last_collect['ts'] = datetime.datetime.now() # compute next record to collect self.last_collect['NextRecNbr'] = data[0]['BegRecNbr'] + data[0]['NbrOfRecs'] # possible loss of data, we should wait for emit all to complete before # committing this... but forget it for now. self.update_local_db(self.last_collect['ts'], self.last_collect['NextRecNbr']) self.emit_all(tbl, data[0]['RecFrag']) if more_flag: Loading @@ -177,7 +247,8 @@ class DataLogger: #if self.data_callback: #for rec in data[0]['RecFrag']: #self.data_callback(tbl.dic_of_sensorTags, rec) else: self.log.warn("Collecting data but got no records.") def collect(self): if self.last_collect['ts'] == None: Loading @@ -193,7 +264,6 @@ class DataLogger: def collectData(self, addition_size, num_dataloggers): ''' Collect data from datalogger up to "addition_size" number of records ''' raise Exception ("depreciated") up_to_date = False Loading examples/datalogger.pyc +2.34 KiB (9.89 KiB) File changed.No diff preview for this file type. View original file View changed file examples/ring.py +3 −1 Original line number Diff line number Diff line Loading @@ -119,6 +119,7 @@ def main(): # get time frequency to update database connections connection_retry_interval = int(cf.get('pakbus', 'connection_retry_interval'), base = 0) localdb = cf.get('pakbus', 'localdb') dataloggers = json.loads(cf.get('pakbus', 'datalogger_pakbus_id')) sec_codes = json.loads(cf.get('pakbus', 'datalogger_security_code')) Loading Loading @@ -165,7 +166,8 @@ def main(): #replace the pakbus address with an instance of datalogger for metric, address in dataloggers.iteritems(): dataloggers[metric] = DataLogger(skt, dataloggers[metric] = DataLogger(localdb, skt, my_node_id, metric, address, Loading Loading
examples/campbell.conf +3 −0 Original line number Diff line number Diff line Loading @@ -39,4 +39,7 @@ connection_retry_interval = 25 logfile = campbell.log localdb = campbell.db
examples/datalogger.py +97 −27 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ import logging import json import datetime import sqlite3 #logging.basicConfig(filename="PyPakLogging.log", level=logging.DEBUG) #log = logging.getLogger("DataLogger") Loading Loading @@ -41,13 +42,14 @@ class tblcache: class DataLogger: #def __init__(self, number, socket, my_node_id, metric_id, pakbus_id): def __init__(self, socket, my_node_id, metric_id, pakbus_id, def __init__(self, db, socket, my_node_id, metric_id, pakbus_id, data_callback = None, security_code = 0x1111): #self.number = number self.log = logging.getLogger(__name__) self.db = sqlite3.connect(db) self.socket = socket self.my_node_id = my_node_id self.metric_id = metric_id Loading Loading @@ -80,6 +82,65 @@ class DataLogger: self.last_collect = {"ts": None, "NextRecNbr": None} self.check_db() def check_db(self): c = self.db.cursor() sql = "CREATE TABLE IF NOT EXISTS campbell (" +\ "ID INTEGER PRIMARY KEY," +\ "SERIALNO INT NOT NULL" +\ ");" c.execute(sql) self.db.commit() # now get my ID for this datalogger or create sql = "SELECT ID FROM campbell WHERE SERIALNO = ?" c.execute(sql, (self.serno,)) rslt = c.fetchone() if not rslt: sql = 'INSERT INTO campbell VALUES (Null, ?)' c.execute(sql, (self.serno,)) self.dbid = c.lastrowid self.db.commit() self.log.debug("Created datalogger in table with id {}".format(self.dbid)) else: self.dbid = rslt[0] self.log.debug("Datalogger ID in localdb is {}".format(self.dbid)) sql = "CREATE TABLE IF NOT EXISTS datalogger (" +\ "ID INTEGER PRIMARY KEY," +\ "campbell_id INTEGER NOT NULL," +\ "last_upload timestamp," +\ "last_recno INTEGER);" c.execute(sql) self.db.commit() sql = "SELECT last_upload, last_recno FROM datalogger WHERE campbell_id = ?" c.execute(sql, (self.dbid,)) rslt = c.fetchone() if rslt and rslt[0] and rslt[1]: self.last_collect["ts"] = rslt[0] self.last_collect["NextRecNbr"] = rslt[1] self.log.debug("Datalogger resuming from recnumber {} last uploaded on {}".format(rslt[1], rslt[0])) else: self.update_local_db("Null", "Null") def update_local_db(self, timestamp, nextrecnumber): sql = "INSERT INTO datalogger VALUES (Null, ?, ?, ?)" self.db.execute(sql, (self.dbid, timestamp, nextrecnumber)) self.db.commit() self.log.debug("Updated localdb with last record {} @ {}".format(nextrecnumber, timestamp)) def stop(self): self.db.commit() self.db.close() def __repr__(self): return "Metric ID: " + str(self.metric_id) + "; PakBus ID: " + str(self.pakbus_id) + \ "; Table List: " + str(self.list_of_tables) Loading Loading @@ -128,18 +189,22 @@ class DataLogger: self.log.debug("Collecting all from {}.{}".format(self.metric_id, tbl.name)) more_flag = True # collect most recent record data, more_flag = pakbus.collect_data(self.socket, self.pakbus_id, self.my_node_id, self.tabledef, tbl.name, CollectMode = 0x03) if data and len(data) > 0: self.last_collect['ts'] = datetime.datetime.now() # compute next record to collect self.last_collect['NextRecNbr'] = data[0]['BegRecNbr'] + data[0]['NbrOfRecs'] self.emit_all(tbl, data[0]['RecFrag']) self.update_local_db(self.last_collect['ts'], self.last_collect['NextRecNbr']) #if self.data_callback: #for rec in data[0]['RecFrag']: #self.data_callback(self, rec) Loading @@ -164,10 +229,15 @@ class DataLogger: CollectMode = 0x04, P1 = self.last_collect['NextRecNbr']) if data and len(data) > 0: self.last_collect['ts'] = datetime.datetime.now() # compute next record to collect self.last_collect['NextRecNbr'] = data[0]['BegRecNbr'] + data[0]['NbrOfRecs'] # possible loss of data, we should wait for emit all to complete before # committing this... but forget it for now. self.update_local_db(self.last_collect['ts'], self.last_collect['NextRecNbr']) self.emit_all(tbl, data[0]['RecFrag']) if more_flag: Loading @@ -177,7 +247,8 @@ class DataLogger: #if self.data_callback: #for rec in data[0]['RecFrag']: #self.data_callback(tbl.dic_of_sensorTags, rec) else: self.log.warn("Collecting data but got no records.") def collect(self): if self.last_collect['ts'] == None: Loading @@ -193,7 +264,6 @@ class DataLogger: def collectData(self, addition_size, num_dataloggers): ''' Collect data from datalogger up to "addition_size" number of records ''' raise Exception ("depreciated") up_to_date = False Loading
examples/datalogger.pyc +2.34 KiB (9.89 KiB) File changed.No diff preview for this file type. View original file View changed file
examples/ring.py +3 −1 Original line number Diff line number Diff line Loading @@ -119,6 +119,7 @@ def main(): # get time frequency to update database connections connection_retry_interval = int(cf.get('pakbus', 'connection_retry_interval'), base = 0) localdb = cf.get('pakbus', 'localdb') dataloggers = json.loads(cf.get('pakbus', 'datalogger_pakbus_id')) sec_codes = json.loads(cf.get('pakbus', 'datalogger_security_code')) Loading Loading @@ -165,7 +166,8 @@ def main(): #replace the pakbus address with an instance of datalogger for metric, address in dataloggers.iteritems(): dataloggers[metric] = DataLogger(skt, dataloggers[metric] = DataLogger(localdb, skt, my_node_id, metric, address, Loading