#! /usr/bin/python from datetime import datetime import time import mysql.connector as mysqlcon from pycomm.ab_comm.clx import Driver as ClxDriver import micro800 as u800 import traceback import pickle with open('/root/tag-server/python/mysql_cfg.pickle', 'rb') as cfgFile: mysql_cfg = pickle.load(cfgFile) con = mysqlcon.connect(**mysql_cfg) def readTag(addr, tag): time.sleep(0.01) c = ClxDriver() if c.open(addr): try: v = c.read_tag(tag) # print(v) return v except Exception: print("ERROR RETRIEVING TAG: {}".format(tag)) err = c.get_status() c.close() print traceback.print_exc() pass c.close() class Tag(): global readTag, con def __init__(self, name, tag, db_id, data_type, change_threshold, guarantee_sec, mapFn=None, device_type='CLX', ip_address='192.168.1.10'): self.name = str(name) self.tag = str(tag) self.data_type = str(data_type) self.value = None self.last_value = None self.guarantee_sec = guarantee_sec self.chg_threshold = change_threshold self.last_send_time = 0 self.mapFn = mapFn self.device_type = device_type self.readFn = readTag self.db_id = db_id if self.device_type == "u800": self.readFn = u800.readTag self.ip_address = ip_address def read(self, forceSend): writeToDB = False if self.tag: v = self.readFn(self.ip_address, self.tag) if v: if self.data_type == 'BOOL' or self.data_type == 'STRING': val = v[0] if self.mapFn: val = self.mapFn[val] if (self.last_send_time == 0) or (self.value is None) or not (self.value == val) or ((time.time() - self.last_send_time) > self.guarantee_sec) or (forceSend == True): self.last_value = self.value self.value = val writeToDB = True else: writeToDB = False else: if (self.last_send_time == 0) or (self.value is None) or (abs(self.value - val) > self.chg_threshold) or ((time.time() - self.last_send_time) > self.guarantee_sec) or (forceSend == True): self.last_value = self.value self.value = val writeToDB = True else: writeToDB = False if forceSend == False: writeToDB = False if writeToDB: self.sendToDB() return self.value def sendToDB(self): # TODO: Datetime query = "INSERT INTO poconsole.tag_vals (dtime, tagID, val) VALUES ('{}', '{}', {})".format(time.strftime('%Y-%m-%d %H:%M:%S'), self.db_id, self.value) self.last_send_time = time.time() print query # TODO: CHECK ON THIS LOGIC -- with con: con.connect() cur = con.cursor() cur.execute(query) con.commit() cur.close()