-import sys
-import os
-import os.path
-import subprocess
-import io
-import time
-import datetime
-import math
-import shutil
-
-toolstr="/home/muto/owtools/src/owtools USB1 DC "
-devdict={}
-devwholist=[]
-f=open("DEVLIST.txt","r")
-for l in f.readlines():
- ls=l.split(" ")
- if (len(ls)>1):
- devdict[ls[0]]=l.replace("\n","")
- devwholist.append(ls[0])
-f.close()
-
-def id2string(id):
- s=""
- for i in range(8):
- s=s+"%02X" %(id[7-i])
- return s
-
-def string2id(s):
- for i in range(8):
- bl=[]
- i2=14-i*2;
- bl.append(int(s[i2:i2+2],16))
- return bl
-
-
-def calculateValues(code, V, vn):
- if code==1:
- return V[vn] / 16.0;
- elif code==2:
- return V[vn]/1.6;
- elif code==3:
- return V[vn]*0.2 + 700;
- elif code==4:
- return math.exp(V[vn] / 160.0);
- elif code==5:
- return V[vn]*62.5 + 55000;
- elif code==6:
- return V[vn] / 256.0;
- elif code==7:
- if V[1]!=0:
- return ((float(V[2]) / float(V[1]) - 0.16) / 0.0062) / (1.0546 - 0.00216*V[0]/256.0);
- else:
- return 0
- elif code==8:
- return V[vn] / 100.0;
- elif code==9:
- return V[vn] / 65535.0*5.1;
- elif code==10:
- return V[vn] / 65535.0*2.55;
- elif code==11:
- return V[vn] / 65535.0*1.1;
- elif code==12:
- return V[vn] / 10.0;
- elif code==13:
- return V[vn];
- elif code==14:
- return (V[vn] - 32767.0) / 100.0;
- elif code==15:
- return math.exp((V[vn]-32767.0)/1000.0);
- elif code==16:
- return V[vn]/32.0;
- else:
- return 0;
-
-def getName(code ):
- if code==1:
- return ["Temperatur","C"]
- if code==2:
- return ["Druck","hPa"]
- if code==3:
- return ["Beleuchtungsstaerke","lux"]
- if code==4:
- return ["Luftfeuchte","%%"]
- if code==5:
- return ["Konstante",""]
- if code==6:
- return ["Spannung","V"]
- if code==7:
- return ["Strom","mA"]
- if code==8:
- return ["VOC","ppm"]
- if code==9:
- return ["Counter",""]
- return []
-
-
-def owCom(dev,send,rcount):
- cmd=toolstr+id2string(dev)
- #for i in range(8):
- # cmd=cmd+"%02X" %(dev[7-i])
- cmd=cmd+" "
- for b in send:
- cmd=cmd+"%02X" % (b)
- for i in range(rcount):
- cmd=cmd+"FF"
- #print(cmd.split(' '));
- p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- p.wait()
- s=p.stdout.read().decode("utf-8")
- l=s.split("\n");
- #print(l[2])
- bl=[]
- for i in range(int(len(l[2])/2)):
- i2=i*2;
- bl.append(int(l[2][i2:i2+2],16))
- return bl
-
-def owComStr(dev,sendstr):
- cmd=toolstr+id2string(dev)
- #for i in range(8):
- # cmd=cmd+"%02X" %(dev[7-i])
- cmd=cmd+" "+sendstr
- p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- p.wait()
- s=p.stdout.read().decode("utf-8")
- #print(s);
- ll=s.split("\n");
- bll=[]
- for l in ll[2:]:
- bl=[]
- for i in range(int(len(l)/2)):
- i2=i*2;
- bl.append(int(l[i2:i2+2],16))
- bll.append(bl)
- return bll
-
-def getValues(dev,voc):
- pl=[]
- #print(id2string(dev[0]),voc)
- if dev[0][0]==0x26:
- vnok=1
- rc=0
- while (vnok):
- sbl=owComStr(dev[0],"4E000F_RB4_R_P7044_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_R4E0000_RB4_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_RBE03FFFFFFFFFFFFFFFFFF")
- #print(sbl)
- sb=sbl[4]
- VDD=(sb[5]+sb[6]*256)
- sb=sbl[8]
- VAD=(sb[5]+sb[6]*256)
- Temp=(sb[3]+sb[4]*256)
- if (sb[4] & 0x80):
- Temp-=0x10000
- curr=sb[7]+sb[8]*256
- if (sb[8] & 0x80):
- curr-=0x10000
- vals=[Temp,VDD,VAD,curr]
- formellist=[6,8,7,8]
- if dev[1][0]!=0xFF:
- formellist=[]
- for i in range(4):
- if (dev[1][i*2+1])!=0:
- formellist.append(dev[1][i*2+1])
- else:
- break
- cvals=[]
- for i in range(len(formellist)):
- cvals.append(calculateValues(formellist[i],vals,i))
- if (cvals[2]<=110):
- vnok=0
- else:
- rc=rc+1
- if (rc==3):
- vnok=0
- cvals[2]=100
- if voc!=0:
- #R0,VS,Corr,cmode,RS,RSR0,VOC1,VOC2
- sb=sbl[9]
- R0=(sb[2]+sb[3]*256)/100.0
- VS=(sb[4]+sb[5]*256)/10000.0
- Corr=(sb[7]+sb[8]*256)/1000.0
- cmode=sb[6]
- RS=(3/VS-1)*30
- RSR0=(RS/R0)
- VOC1=RSR0*Corr
- VOC2=RSR0/Corr
- cvals.append(R0)
- cvals.append(VS)
- cvals.append(Corr)
- cvals.append(cmode)
- cvals.append(RS)
- cvals.append(RSR0)
- cvals.append(VOC1)
- cvals.append(VOC2)
- return cvals
- if dev[0][0]==0x28:
- sbl=owComStr(dev[0],"44_R_PFF_PFF_PFF_PFFBEFFFFFFFFFFFFFFFFFF")
- Temp=sbl[1][1]+sbl[1][2]*256
- if (sbl[1][2] & 0x80):
- Temp=-(Temp&0x7FFF)
- if dev[1][0]!=0xFF:
- return [calculateValues(dev[1][1],[Temp],0)]
- else:
- return [calculateValues(1,[Temp],0)]
- return []
-
-
-def owList():
- cmd=toolstr[0:-3]
- print(cmd)
- p = subprocess.Popen(["./owtools","USB1"], shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- p.wait()
- s=p.stdout.read()
- l=s.split("\n")
- #print(l);
- l=l[1:-1]
- devlist=[]
- ic=0
- for d in l:
- dev=[]
- bl=[]
- for i in range(8):
- i2=14-i*2;
- bl.append(int(d[i2:i2+2],16))
- dev.append(bl)
- #print(bl)
- config=owCom(bl,[0x85],18)
- #print(config)
- if (config[1]==0xFF):
- if (bl[0]==0x26):
- config=[0,1,6,6,8,4,7,7,8,0]
- if (bl[0]==0x28):
- config=[0,1,1,0,0,0,0,0,0,0]
- dev.append(config[1:])
- bls=id2string(bl)
- cs="%i: " %(ic)
- ic=ic+1
- cs=cs+bls+": "
- if bls in devdict:
- cs=cs+devdict[bls].split(",")[0].split(" ")[1]+" "
- for i in range(4):
- c=config[i*2+1]
- if (c==0xFF):
- cs=cs+"Noconfig "
- config=[0,0,0,0,0,0,0,0,0,0]
- break
- if (c==0):
- break
- cs=cs+getName(c)[0]+" "
- #voc=0
- #if bls in devdict:
- # if "VOC" in devdict[bls]:
- # voc=1
- #l=getValues([bl,config[1:]],voc)
- #for v in l:
- # cs=cs+" %0.2f " %(v)
- print(cs)
- ddev=0
- vm=0
- if config[1]==0x08:
- vm=1
- #print("Test_configs")
- i=0
- for dv in devlist:
- #print("c",dv[1][9:16])
- #print("d",bl[0:7])
- if dv[1][9:16]==bl[0:7]:
- print("Double Device")
- ddev=1
- dv.append(dev[0])
- dv.append(dev[1])
- #if vm==1:
- #voc_marker[i]=2
- i=i+1
- #if ddev==0:
- devlist.append(dev)
- #voc_marker.append(vm)
- #print("devlist",devlist)
- return devlist
-
-dl=owList()
-#for d in dl:
-# print(d)
-
-while (1):
- lt = time.localtime()
- vline=time.strftime("%d#%m#%Y %H:%M:%S\t", lt)
- n = datetime.datetime.now()
- unix_timestamp = time.mktime(n.timetuple())# works if Python >= 3.3
- for d in dl:
- ds=id2string(d[0])
- bezeichnung="not in List"
- if ds in devdict:
- bezeichnung=devdict[ds].split(",")[0].split(" ")[1]+" "
- vnames=[]
- for i in range(4):
- c=d[1][i*2]
- if (c==0):
- break
- name=getName(c)
- if name!=[]:
- vnames.append(name[0])
- voc=0
- if "VOC" in bezeichnung:
- voc=1
- vnames.append("R0")
- vnames.append("VS")
- vnames.append("Corr")
- vnames.append("cmode")
- vnames.append("RS")
- vnames.append("RSR0")
- vnames.append("VOC1")
- vnames.append("VOC2")
- #print(ds)
- l=getValues([d[0],d[1]],voc)
- s=vline+"%i" %(unix_timestamp)
- for i in range(len(l)):
- print("%s %s: %0.2f " %(bezeichnung,vnames[i],l[i]))
- s=s+"\t%0.4f" % (l[i])
- fname="log_%s.ow1" %(ds)
- writeheader=1
- if os.path.exists(fname):
- writeheader=0
- f=open(fname,"a")
- if writeheader==1:
- sh="time\tunixtime"
- for i in range(len(l)):
- sh=sh+"\t%s" % (vnames[i])
- f.write(sh+"\n")
- f.write(s.replace(".",",").replace("#",".")+"\n")
- f.close()
- #execfile("separate1.py")
- os.system("python separate1.py")
- print("--------------------")
- n = datetime.datetime.now()
- unix_timestamp1 = time.mktime(n.timetuple())# works if Python >= 3.3
- d=unix_timestamp1-unix_timestamp
- print (d)
- print("--------------------")
- time.sleep(120-d)
-
+import sys\r
+import os\r
+import os.path\r
+import subprocess\r
+import io\r
+import time\r
+import datetime\r
+import math\r
+import shutil\r
+\r
+toolstr="/home/muto/owtools/src/owtools USB1 DC "\r
+devdict={}\r
+devwholist=[]\r
+f=open("DEVLIST.txt","r")\r
+for l in f.readlines():\r
+ ls=l.split(" ")\r
+ if (len(ls)>1):\r
+ devdict[ls[0]]=l.replace("\n","")\r
+ devwholist.append(ls[0])\r
+f.close()\r
+\r
+def id2string(id):\r
+ s=""\r
+ for i in range(8):\r
+ s=s+"%02X" %(id[7-i])\r
+ return s\r
+\r
+def string2id(s):\r
+ for i in range(8):\r
+ bl=[]\r
+ i2=14-i*2;\r
+ bl.append(int(s[i2:i2+2],16))\r
+ return bl\r
+\r
+\r
+def calculateValues(code, V, vn):\r
+ if code==1:\r
+ return V[vn] / 16.0; \r
+ elif code==2:\r
+ return V[vn]/1.6; \r
+ elif code==3:\r
+ return V[vn]*0.2 + 700; \r
+ elif code==4:\r
+ return math.exp(V[vn] / 160.0); \r
+ elif code==5:\r
+ return V[vn]*62.5 + 55000; \r
+ elif code==6:\r
+ return V[vn] / 256.0; \r
+ elif code==7:\r
+ if V[1]!=0:\r
+ return ((float(V[2]) / float(V[1]) - 0.16) / 0.0062) / (1.0546 - 0.00216*V[0]/256.0); \r
+ else:\r
+ return 0\r
+ elif code==8:\r
+ return V[vn] / 100.0; \r
+ elif code==9:\r
+ return V[vn] / 65535.0*5.1; \r
+ elif code==10:\r
+ return V[vn] / 65535.0*2.55; \r
+ elif code==11:\r
+ return V[vn] / 65535.0*1.1; \r
+ elif code==12:\r
+ return V[vn] / 10.0; \r
+ elif code==13:\r
+ return V[vn]; \r
+ elif code==14:\r
+ return (V[vn] - 32767.0) / 100.0; \r
+ elif code==15:\r
+ return math.exp((V[vn]-32767.0)/1000.0); \r
+ elif code==16:\r
+ return V[vn]/32.0; \r
+ else:\r
+ return 0;\r
+\r
+def getName(code ):\r
+ if code==1:\r
+ return ["Temperatur","C"]\r
+ if code==2:\r
+ return ["Druck","hPa"]\r
+ if code==3:\r
+ return ["Beleuchtungsstaerke","lux"]\r
+ if code==4:\r
+ return ["Luftfeuchte","%%"]\r
+ if code==5:\r
+ return ["Konstante",""]\r
+ if code==6:\r
+ return ["Spannung","V"]\r
+ if code==7:\r
+ return ["Strom","mA"]\r
+ if code==8:\r
+ return ["VOC","ppm"]\r
+ if code==9:\r
+ return ["Counter",""]\r
+ return []\r
+\r
+\r
+def owCom(dev,send,rcount):\r
+ cmd=toolstr+id2string(dev)\r
+ #for i in range(8):\r
+ # cmd=cmd+"%02X" %(dev[7-i])\r
+ cmd=cmd+" "\r
+ for b in send:\r
+ cmd=cmd+"%02X" % (b)\r
+ for i in range(rcount):\r
+ cmd=cmd+"FF"\r
+ #print(cmd.split(' '));\r
+ p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)\r
+ p.wait()\r
+ s=p.stdout.read().decode("utf-8")\r
+ l=s.split("\n");\r
+ #print(l[2])\r
+ bl=[]\r
+ for i in range(int(len(l[2])/2)):\r
+ i2=i*2;\r
+ bl.append(int(l[2][i2:i2+2],16))\r
+ return bl\r
+\r
+def owComStr(dev,sendstr):\r
+ cmd=toolstr+id2string(dev)\r
+ #for i in range(8):\r
+ # cmd=cmd+"%02X" %(dev[7-i])\r
+ cmd=cmd+" "+sendstr\r
+ p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)\r
+ p.wait()\r
+ s=p.stdout.read().decode("utf-8")\r
+ #print(s);\r
+ ll=s.split("\n");\r
+ bll=[]\r
+ for l in ll[2:]:\r
+ bl=[]\r
+ for i in range(int(len(l)/2)):\r
+ i2=i*2;\r
+ bl.append(int(l[i2:i2+2],16))\r
+ bll.append(bl)\r
+ return bll\r
+\r
+def getValues(dev,voc):\r
+ pl=[]\r
+ #print(id2string(dev[0]),voc)\r
+ if dev[0][0]==0x26:\r
+ vnok=1\r
+ rc=0\r
+ while (vnok):\r
+ sbl=owComStr(dev[0],"4E000F_RB4_R_P7044_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_R4E0000_RB4_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_RBE03FFFFFFFFFFFFFFFFFF")\r
+ #print(sbl)\r
+ sb=sbl[4]\r
+ VDD=(sb[5]+sb[6]*256)\r
+ sb=sbl[8]\r
+ VAD=(sb[5]+sb[6]*256)\r
+ Temp=(sb[3]+sb[4]*256)\r
+ if (sb[4] & 0x80):\r
+ Temp-=0x10000\r
+ curr=sb[7]+sb[8]*256\r
+ if (sb[8] & 0x80):\r
+ curr-=0x10000\r
+ vals=[Temp,VDD,VAD,curr]\r
+ formellist=[6,8,7,8]\r
+ if dev[1][0]!=0xFF:\r
+ formellist=[]\r
+ for i in range(4):\r
+ if (dev[1][i*2+1])!=0:\r
+ formellist.append(dev[1][i*2+1])\r
+ else:\r
+ break\r
+ cvals=[]\r
+ for i in range(len(formellist)):\r
+ cvals.append(calculateValues(formellist[i],vals,i))\r
+ if (cvals[2]<=110):\r
+ vnok=0\r
+ else:\r
+ rc=rc+1\r
+ if (rc==3):\r
+ vnok=0\r
+ cvals[2]=100\r
+ if voc!=0:\r
+ #R0,VS,Corr,cmode,RS,RSR0,VOC1,VOC2\r
+ sb=sbl[9]\r
+ R0=(sb[2]+sb[3]*256)/100.0\r
+ VS=(sb[4]+sb[5]*256)/10000.0\r
+ Corr=(sb[7]+sb[8]*256)/1000.0\r
+ cmode=sb[6]\r
+ RS=(3/VS-1)*30\r
+ RSR0=(RS/R0)\r
+ VOC1=RSR0*Corr\r
+ VOC2=RSR0/Corr\r
+ cvals.append(R0)\r
+ cvals.append(VS)\r
+ cvals.append(Corr)\r
+ cvals.append(cmode)\r
+ cvals.append(RS)\r
+ cvals.append(RSR0)\r
+ cvals.append(VOC1)\r
+ cvals.append(VOC2)\r
+ return cvals\r
+ if dev[0][0]==0x28:\r
+ sbl=owComStr(dev[0],"44_R_PFF_PFF_PFF_PFFBEFFFFFFFFFFFFFFFFFF")\r
+ Temp=sbl[1][1]+sbl[1][2]*256\r
+ if (sbl[1][2] & 0x80):\r
+ Temp=-(Temp&0x7FFF)\r
+ if dev[1][0]!=0xFF:\r
+ return [calculateValues(dev[1][1],[Temp],0)]\r
+ else:\r
+ return [calculateValues(1,[Temp],0)]\r
+ return []\r
+\r
+ \r
+def owList(): \r
+ cmd=toolstr[0:-3]\r
+ print(cmd)\r
+ p = subprocess.Popen(["./owtools","USB1"], shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)\r
+ p.wait()\r
+ s=p.stdout.read()\r
+ l=s.split("\n")\r
+ #print(l);\r
+ l=l[1:-1]\r
+ devlist=[]\r
+ ic=0\r
+ for d in l:\r
+ dev=[]\r
+ bl=[]\r
+ for i in range(8):\r
+ i2=14-i*2;\r
+ bl.append(int(d[i2:i2+2],16))\r
+ dev.append(bl)\r
+ #print(bl)\r
+ config=owCom(bl,[0x85],18)\r
+ #print(config)\r
+ if (config[1]==0xFF):\r
+ if (bl[0]==0x26):\r
+ config=[0,1,6,6,8,4,7,7,8,0]\r
+ if (bl[0]==0x28):\r
+ config=[0,1,1,0,0,0,0,0,0,0]\r
+ dev.append(config[1:])\r
+ bls=id2string(bl)\r
+ cs="%i: " %(ic)\r
+ ic=ic+1\r
+ cs=cs+bls+": "\r
+ if bls in devdict:\r
+ cs=cs+devdict[bls].split(",")[0].split(" ")[1]+" "\r
+ for i in range(4):\r
+ c=config[i*2+1]\r
+ if (c==0xFF):\r
+ cs=cs+"Noconfig "\r
+ config=[0,0,0,0,0,0,0,0,0,0]\r
+ break\r
+ if (c==0):\r
+ break\r
+ cs=cs+getName(c)[0]+" "\r
+ #voc=0\r
+ #if bls in devdict:\r
+ # if "VOC" in devdict[bls]:\r
+ # voc=1\r
+ #l=getValues([bl,config[1:]],voc)\r
+ #for v in l:\r
+ # cs=cs+" %0.2f " %(v)\r
+ print(cs)\r
+ ddev=0\r
+ vm=0\r
+ if config[1]==0x08:\r
+ vm=1\r
+ #print("Test_configs")\r
+ i=0\r
+ for dv in devlist:\r
+ #print("c",dv[1][9:16])\r
+ #print("d",bl[0:7])\r
+ if dv[1][9:16]==bl[0:7]:\r
+ print("Double Device")\r
+ ddev=1\r
+ dv.append(dev[0])\r
+ dv.append(dev[1])\r
+ #if vm==1:\r
+ #voc_marker[i]=2\r
+ i=i+1\r
+ #if ddev==0:\r
+ devlist.append(dev)\r
+ #voc_marker.append(vm)\r
+ #print("devlist",devlist)\r
+ return devlist\r
+\r
+dl=owList()\r
+#for d in dl:\r
+# print(d)\r
+\r
+while (1):\r
+ lt = time.localtime()\r
+ vline=time.strftime("%d#%m#%Y %H:%M:%S\t", lt)\r
+ n = datetime.datetime.now()\r
+ unix_timestamp = time.mktime(n.timetuple())# works if Python >= 3.3\r
+ for d in dl:\r
+ ds=id2string(d[0])\r
+ bezeichnung="not in List"\r
+ if ds in devdict:\r
+ bezeichnung=devdict[ds].split(",")[0].split(" ")[1]+" "\r
+ vnames=[]\r
+ for i in range(4):\r
+ c=d[1][i*2]\r
+ if (c==0):\r
+ break\r
+ name=getName(c)\r
+ if name!=[]:\r
+ vnames.append(name[0])\r
+ voc=0\r
+ if "VOC" in bezeichnung:\r
+ voc=1\r
+ vnames.append("R0")\r
+ vnames.append("VS")\r
+ vnames.append("Corr")\r
+ vnames.append("cmode")\r
+ vnames.append("RS")\r
+ vnames.append("RSR0")\r
+ vnames.append("VOC1")\r
+ vnames.append("VOC2")\r
+ #print(ds)\r
+ l=getValues([d[0],d[1]],voc)\r
+ s=vline+"%i" %(unix_timestamp)\r
+ for i in range(len(l)):\r
+ print("%s %s: %0.2f " %(bezeichnung,vnames[i],l[i]))\r
+ s=s+"\t%0.4f" % (l[i])\r
+ fname="log_%s.ow1" %(ds)\r
+ writeheader=1\r
+ if os.path.exists(fname):\r
+ writeheader=0\r
+ f=open(fname,"a")\r
+ if writeheader==1:\r
+ sh="time\tunixtime"\r
+ for i in range(len(l)):\r
+ sh=sh+"\t%s" % (vnames[i])\r
+ f.write(sh+"\n")\r
+ f.write(s.replace(".",",").replace("#",".")+"\n")\r
+ f.close()\r
+ #execfile("separate1.py")\r
+ os.system("python separate1.py")\r
+ print("--------------------")\r
+ n = datetime.datetime.now()\r
+ unix_timestamp1 = time.mktime(n.timetuple())# works if Python >= 3.3\r
+ d=unix_timestamp1-unix_timestamp\r
+ print (d)\r
+ print("--------------------")\r
+ time.sleep(120-d)\r
+ \r
\ No newline at end of file