From 528b62bcbb1344041b0b2677f88db5570521fdc2 Mon Sep 17 00:00:00 2001 From: Patrick McDonagh Date: Thu, 7 Apr 2016 17:06:55 -0500 Subject: [PATCH] reading tags from mysql and writing values to mysql --- python/mysql_cfg.pickle | 2 +- python/pycomm.log | 2 +- python/pycomm_micro/__init__.pyc | Bin 195 -> 192 bytes python/pycomm_micro/ab_comm/__init__.pyc | Bin 234 -> 231 bytes python/pycomm_micro/ab_comm/clx.pyc | Bin 24962 -> 24375 bytes python/pycomm_micro/cip/__init__.pyc | Bin 199 -> 196 bytes python/pycomm_micro/cip/cip_base.pyc | Bin 29398 -> 27697 bytes python/pycomm_micro/cip/cip_const.pyc | Bin 10713 -> 10710 bytes python/pycomm_micro/common.pyc | Bin 1306 -> 1297 bytes python/tag_mysql.py | 22 +++++---- python/tagserver_MySQL.py | 8 ++-- www/dbcreate_MySQL.sql | 58 +++++++++++++++++------ 12 files changed, 64 insertions(+), 28 deletions(-) diff --git a/python/mysql_cfg.pickle b/python/mysql_cfg.pickle index b5c07ec..2ba82cb 100644 --- a/python/mysql_cfg.pickle +++ b/python/mysql_cfg.pickle @@ -11,4 +11,4 @@ sS'user' p5 S'website' p6 -s. \ No newline at end of file +s. diff --git a/python/pycomm.log b/python/pycomm.log index d83c3a7..7363b30 100644 --- a/python/pycomm.log +++ b/python/pycomm.log @@ -1 +1 @@ -pycomm.ab_comm.clx WARNING 2016-01-25 14:45:25,488 (5, 'forward_close returned False') +pycomm.cip.cip_base WARNING 2016-04-07 16:14:59,861 (5, 'forward_close returned False') diff --git a/python/pycomm_micro/__init__.pyc b/python/pycomm_micro/__init__.pyc index a2df465900e44f20dd30cff645774776abf5b792..bc5fab50c91c527deb86cdfad8b663c628f13a23 100644 GIT binary patch delta 64 zcmX@icz}_e`7=BG!6BER=6Y~<2^Yc;?^>Z?l^b0CWGV=3`^vv~(GfPr+ W3lfvF6Vp?Rf#S*exw#YPDFFcIG8a$) diff --git a/python/pycomm_micro/ab_comm/__init__.pyc b/python/pycomm_micro/ab_comm/__init__.pyc index fc534df1e7e92e1777b09331f0cfcf8af2128101..d6cb62ccdb01963b6e42d40de55ba5acd2a5daeb 100644 GIT binary patch delta 82 zcmaFG_?(fQ`7CDf)?diOKnSDT(?y onMwKul_eSZc}9BX`o)9uzfcDC6w&qPIRw<9raVEm1ZdMTGAjU)m zQH{-WCBHBeHWBR3-?9st#EMxM7#Q6B{arK|fsA5iAmQZbGI_N^K9Q!hD845mLN*^z z7vLb$L@R?7B1{B(fy1nji%3%+J3MD2QmKi@Ct`vd6xS1c*AN@r%L1PesdTb`EbHc< up|6NZ8U~SDi8OVye{41pDSh$*b;ZdV@mGloE1Ah@3Db#EDLXkmQ5pazcVYbi delta 1578 zcmdnKkFn`6BRlhFUM`1+MH|^8Ss7C&C$fr}xfJCWB;{8qXn3UN6;&z(l;##_>IWp2 z6lEr7EBGe6lGgEBJd+%CZZY_=5r&7#K7dfkaRc zkeGZ+KA&PYZl0m=p5nwPyZM^hXLicnBB7r`1-G0wDdeKuE#3Cd*(f*VpxY-Zq-iFf zHB?ALfBm0O!4!j#_mt(Y&4J-tDR;+YgAmruQPF9XmtK?kV{cL#(K3_G;-*t-i0ovU GcxeFPCm+86 diff --git a/python/pycomm_micro/cip/__init__.pyc b/python/pycomm_micro/cip/__init__.pyc index cf7519b876ed293ab9c05c2bbd77c7e8ed2bdd6c..ba3f8dd1ed2020b47afc947d70d8e315ce3920a9 100644 GIT binary patch delta 64 zcmX@kc!ZIi`7=BH96BER=6Y~<2^Yc;?^>Z?l^b0CWGV=3`^vv~(GfPr+ W3lfvF6Vp?Rf#S*exw#YPsR01$5*J_q diff --git a/python/pycomm_micro/cip/cip_base.pyc b/python/pycomm_micro/cip/cip_base.pyc index 81635c40e8d67285488eb2427504a9bbd0d845e7..1ac6ff78f9e5d0f8c27c96ce337b1c83e84b30a1 100644 GIT binary patch delta 2697 zcmb8vPe_w-7zc1(_v&=%D{Jd*wA^73%R^WRnh@mDOiN=mLOs|P@tZUBb$eZgVC0aH zQbc+p4MIurxM2PY>=05X0}Xeu^g0Nm=wOD2PQA~;`?vdt=O54WeEFtiw-mc=ugu}i z{Lb3X!ik<^9SK_1Z_8CY9=uhz!B;P_RKz|+2Kv__Vb~EfcL|WMh6xT< zYp(&hTfPY>o;+ti@67y%jvQWs^)evS?yrD4sP*%aX-vxveM|xAN6$-?emZue0E_xm zsPajLsbX4o`_F-arQ^gbN?j*=3c&()POX4LAm`~HKv3)X$k-Wy1Z7%N-2-+-8@ftb z4f3$~0orRXgVnyP)sSkfU6g0*9wLL~{Kqd$0Qq^rxv!)3QBddW6QFz_d<4qO#Uv;n zH^c#%cKa#XxQI!ax@1G<&)br3Y6U61XbuDUdH(G!otTu~E9+o-8E%y*Oi_T5TfnF*pAK_GaK( delta 4391 zcmb`~-Ahwp90zcgM`yOpX(Cp1JPb!2%xum=NbQA%uY-{n(@5Nzow>2&b~r6-XrzT+ zMZtd13#egI;f3UQf+^m4wTPgL%4lAAQ4o<=Ue#55{)X@Q2R?j%-{(2cd7kVy%h#V4 zYstR7V)xq3taZP{5}_Ge?Kz*3)WgX;(#dW$VWg$Nt#Ms$4k#%jHX4`wqrPN98H+Xt zm6U2oK~>YFfRa!(^7M(+D~#aCUqQ!^C8tOmr3oBaa|kq9_5_C%>oXkbDSwV5EeD_C z$dQT#94R~W0!8GEZ5lSHV4Fe_k>1!haAeJqLlK#_DpygYfC4gYSHUSn`dkf{D$}pS z*p6q}npYOI5RtvEoi{hit`Zg1?+;=USpy=*cDLfJBZhkZKOSfAxlmd9qrI?<3sD?txVQo%?D!=sxZU_in7Z7LE9CSI zzylHU4WWpOg|58E=V9qCW`Z)+^8izrr_YNC#Gf4ewXoiwN6Qu2C;uK8hi^H1AP=7V zTyYQF2G2=;+Wr}QY{G@(!*Ctg3(w*m83q;J%WlYzE6aDo;1cnHKHiwXqYy=2Vmr6k d3eAoMF@%3dr=mL;!q;ao_6{tCN4XyV@*f@j`QZQn diff --git a/python/pycomm_micro/cip/cip_const.pyc b/python/pycomm_micro/cip/cip_const.pyc index 130af936caee38ec4876a0c521f567b294e27ac5..ced24b97b43a3728c20fbaeacb199f72b53d86b3 100644 GIT binary patch delta 85 zcmcZ^d@Y!r`7#s`$< m7U-8GrURwRQj7EpDoZl*^MF)xer|4jZf0^({^mDoZd^4Dx`7iOHy?U5|gtN(^G*ODwFebb2qj>Si>Mt diff --git a/python/pycomm_micro/common.pyc b/python/pycomm_micro/common.pyc index 727654649251c3963600e3f479aaca616c924e2b..26cab345ffcbde9445f36b5f32a1d0b1b726a4d8 100644 GIT binary patch delta 221 zcmbQmHIa**`7#s`$< z7U-8GrURwRQj7EpDoZl*^MF)xer|4jZf0^({^q}o^C>oD@;&AwlsaVc6BaW70@+gs delta 230 zcmbQpHH(X#`7{}R}JQx@l^h1kNi;DFN5=)9Qle4pOlT-8)^AeNu^HLJ^ zb25|k3o1)8^7D-J%=L>iOHy?U5|gtN(^G*ODwFebb2tBDoKFpNCf{H_LIvkczRh9= E0Q*EzE&u=k diff --git a/python/tag_mysql.py b/python/tag_mysql.py index aa84957..e13a86b 100644 --- a/python/tag_mysql.py +++ b/python/tag_mysql.py @@ -13,6 +13,10 @@ with open('mysql_cfg.pickle', 'rb') as cfgFile: con = mysqlcon.connect(**mysql_cfg) + +PLC_IP_ADDRESS = "10.10.10.3" + + def readTag(addr, tag): time.sleep(0.01) c = ClxDriver() @@ -25,17 +29,17 @@ def readTag(addr, tag): print("ERROR RETRIEVING TAG: {}".format(tag)) err = c.get_status() c.close() - print err + print traceback.print_exc() pass c.close() class Tag(): - global readTag, con + global readTag, con, PLC_IP_ADDRESS - def __init__(self, name, tag, data_type, change_threshold, guarantee_sec, mapFn=None, plc_type='CLK'): - self.name = name - self.tag = tag - self.data_type = data_type + def __init__(self, name, tag, data_type, change_threshold, guarantee_sec, mapFn=None, plc_type='CLX'): + 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 @@ -50,7 +54,7 @@ class Tag(): def read(self, forceSend): writeToDB = False if self.tag: - v = readFn(PLC_IP_ADDRESS, self.tag) + v = self.readFn(PLC_IP_ADDRESS, self.tag) if v: if self.data_type == 'BOOL' or self.data_type == 'STRING': val = v[0] @@ -73,7 +77,9 @@ class Tag(): self.sendToDB() def sendToDB(self): - query = "INSERT INTO tag_vals (dtime, name, val) VALUES ({}, '{}', {})".format(time.time(), self.name, self.value) + # TODO: Datetime + query = "INSERT INTO poconsole.tag_vals (dtime, name, val) VALUES ('{}', '{}', {})".format(time.strftime('%Y-%m-%d %H:%M:%S'), self.name, self.value) + self.last_send_time = time.time() print query # TODO: CHECK ON THIS LOGIC -- with con: cur = con.cursor() diff --git a/python/tagserver_MySQL.py b/python/tagserver_MySQL.py index 0754035..661a42b 100644 --- a/python/tagserver_MySQL.py +++ b/python/tagserver_MySQL.py @@ -10,6 +10,7 @@ import mysql.connector as mysqlcon import pickle from tag_mysql import Tag import traceback +import time with open('mysql_cfg.pickle', 'rb') as pickleconfig: mysql_cfg = pickle.load(pickleconfig) @@ -22,14 +23,15 @@ tag_store = {} def main(): db.connect() cur = db.cursor() - query = "SELECT * FROM poconsole.tags" + query = "SELECT * FROM poconsole.tags WHERE class = 5 AND deleted = 0" cur.execute(query) tags = cur.fetchall() - #(1, u'card_type', 1, u'Card_Past[1].Card_Type', u'STRING', 0.0, 3600, u'card_type_map') + print tags + # [(1, u'Century Counter Up', 5, u'Century_Counter_Up', u'REAL', 10.0, 3600, None, 0)] db.disconnect() for t in tags: - tag_store[t[1]] = Tag(t[1], t[2], t[3], t[4], t[5], mapFn=t[6]) + tag_store[t[1]] = Tag(t[1], t[3], t[4], t[5], t[6], mapFn=t[7]) PLC_IP_ADDRESS = "10.10.10.3" # MAKE THIS A db VALUE diff --git a/www/dbcreate_MySQL.sql b/www/dbcreate_MySQL.sql index 4bf0cd6..df73678 100644 --- a/www/dbcreate_MySQL.sql +++ b/www/dbcreate_MySQL.sql @@ -1,18 +1,46 @@ -CREATE DATABASE TagData; -CREATE TABLE `TagData`.`tags` ( - `id` INT NOT NULL AUTO_INCREMENT, - `tagName` VARCHAR(128) NULL, - `dateAdded` timestamp NULL DEFAULT CURRENT_TIMESTAMP, - `units` VARCHAR(16) NULL, - `deleted` INT NULL DEFAULT 0, - PRIMARY KEY (`id`)); +CREATE DATABASE poconsole; +CREATE TABLE IF NOT EXISTS poconsole.tag_classes( + id int(11) NOT NULL AUTO_INCREMENT, + tag_class varchar(64), + description varchar(64), + PRIMARY KEY (id) +); -CREATE TABLE `TagData`.`values` ( - `id` INT NOT NULL AUTO_INCREMENT, - `tagID` INT NULL, - `val` FLOAT NULL, - `dateAdded` timestamp NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`)); +CREATE TABLE IF NOT EXISTS poconsole.tags( + id int(11) NOT NULL AUTO_INCREMENT, + name TEXT, + class int(11), + tag varchar(128), + data_type varchar(32), + change_threshold float, + guarantee_sec integer(11), + map_function varchar(64), + deleted INT NULL DEFAULT 0, + PRIMARY KEY (id) +); + + +CREATE TABLE IF NOT EXISTS poconsole.tag_vals( + id int(11) NOT NULL AUTO_INCREMENT, + dtime datetime, + name varchar(128), + val float, + PRIMARY KEY (id) +); + +CREATE TABLE IF NOT EXISTS poconsole.config ( + id INT NOT NULL AUTO_INCREMENT, + parameter varchar(128), + val varchar(128), + dateAdded TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id) +); + +INSERT INTO poconsole.tag_classes (id, tag_class, description) VALUES (1, 'stroke', 'Stroke Information'); +INSERT INTO poconsole.tag_classes (id, tag_class, description) VALUES (2, 'history', 'Historical Data'); +INSERT INTO poconsole.tag_classes (id, tag_class, description) VALUES (3, 'gaugeoff', 'Gauge Off Data'); +INSERT INTO poconsole.tag_classes (id, tag_class, description) VALUES (4, 'welltest', 'Well Test Data'); +INSERT INTO poconsole.tag_classes (id, tag_class, description) VALUES (5, 'custom', 'Custom tags'); CREATE USER 'website'@'localhost' IDENTIFIED BY 'henrypump'; GRANT ALL ON *.* TO 'website'@'localhost'; @@ -20,4 +48,4 @@ CREATE USER 'admin'@'localhost' IDENTIFIED BY 'henrypump'; GRANT ALL ON *.* to 'admin'@'localhost'; CREATE USER 'admin'@'%' IDENTIFIED BY 'henrypump'; GRANT ALL ON *.* to 'admin'@'%'; -FLUSH PRIVILEGES; \ No newline at end of file +FLUSH PRIVILEGES;