--- /dev/null
+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)
+
+
\ No newline at end of file