X-Git-Url: http://git.smho.de/gw/?p=owSlave2.git;a=blobdiff_plain;f=stest%2Flog_all.py;fp=stest%2Flog_all.py;h=a6ca49d10e7a058a4e558319fb93ad7ad0b91d4c;hp=0000000000000000000000000000000000000000;hb=cd92472e6fd63693741f8e168123a4182802651b;hpb=0f5b4d994ac87afdd294f6fc79692bcf92e337de diff --git a/stest/log_all.py b/stest/log_all.py new file mode 100644 index 0000000..a6ca49d --- /dev/null +++ b/stest/log_all.py @@ -0,0 +1,482 @@ +import sys +import os +import os.path +import subprocess +import io +import time +import math +import shutil + +toolstr="/home/muto/owtools/src/owtools USB1 DC " + +gplist=[] + +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 + +voc_marker=[] + +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=[] + 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) + dev.append(config[1:]) + 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 + +def getProperties(dev,voc): + pl=[] + if dev[0][0]==0x26: + pl=["Temperatur","Spannung","Luftfeuchte","Strom"] + if dev[1][0]!=0xFF: + pl=[] + for i in range(4): + name=getName(dev[1][i*2]) + if len(name)!=0: + pl.append(name[0]) + if voc!=0: + #R0,VS,Corr,cmode,RS,RSR0,VOC1,VOC2 + pl.append("R0") + pl.append("VS") + pl.append("Corr") + pl.append("cmode") + pl.append("RS") + pl.append("RSR0") + pl.append("VOC1") + pl.append("VOC2") + if dev[0][0]==0x28: + pl=["Temperatur"] + if dev[1][0]!=0xFF: + pl=[] + for i in range(4): + name=getName(dev[1][i*2]) + if len(name)!=0: + pl.append(name[0]) + return pl + +def getValues(dev,voc): + pl=[] + #print(id2string(dev[0]),voc) + if dev[0][0]==0x26: + vnok=1 + 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) + curr=sb[7]+sb[8]*256 + if (sb[8] & 0x80): + curr=-(curr&0x7FFF) + 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: + print(cvals) + vnok=0 + 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 gp_makefile(name,i): + f=open("gpscript%i.dem" %(i),"w") + #f.write("set decimalsign ','\n") + f.write('set decimalsign locale\n') + f.write('set timefmt "%d.%m.%Y %H:%M:%S"\n') + f.write('set xdata time\n') + f.write('set datafile separator "\\t" \n') + f.write('set terminal png size 1024,600\n') + f.write('set format x "%d.%m\\n%H:%M"\n') + f.write("set output '%s'\n" % (name)) + f.write("set grid ytics\n") + f.write("set terminal postscript landscape\n") + f.write('set object 1 rectangle from screen 0,0 to screen 1,1 fillcolor rgb"#FFFFFF" behind\n') + #set output 'Temperatur.ps' + return f + + +def gnuplot(): + rl=["Temperatur","Luftfeuchte","Druck","VOC","Beleuchtungsstaerke"] + rlf=[] + rls=[] + rllc=[] + for i in range(len(rl)): + rlf.append("") #begin of plotline + rls.append('') #plotline + rllc.append('') #lineconfig + li=0 + for c in gplist: + for i in range(len(rl)): + if c[0]==rl[i]: + li=li+1 + cl=c[2].split(",") + rls[i]=rls[i]+" %s using 1:%i with linespoints ls %i title \"%s\" ," % (rlf[i],c[1],li,cl[0]) + rllc[i]=rllc[i]+ "set style line %i %s\n" % (li,cl[1]) + rlf[i]='""' + for i in range(len(rl)): + f=gp_makefile(rl[i]+".ps",i) + f.write(rllc[i]) + f.write('plot "log22.txt" '+rls[i]+"\n") + f.write("set output '%s'\n" % (rl[i]+"_l.ps")) + f.write('plot "< tail -n 100 log22.txt" '+rls[i]+"\n") + f.close() + p = subprocess.Popen(["gnuplot","gpscript%i.dem" %(i)], shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + p.wait(); + cmd="convert -size 2048x1600 -depth 8 %s.ps -rotate 90 -resize 1024x800 -depth 8 %s.png" %(rl[i],rl[i]) + p = subprocess.Popen(cmd.split(" "), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + p.wait(); + cmd="convert -size 2048x1600 -depth 8 %s_l.ps -rotate 90 -resize 1024x800 -depth 8 %s_l.png" %(rl[i],rl[i]) + print cmd.split(" ") + p = subprocess.Popen(cmd.split(" "), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + p.wait(); + shutil.copyfile(rl[i]+".png","/var/www/html/"+rl[i]+".png") + shutil.copyfile(rl[i]+"_l.png","/var/www/html/"+rl[i]+"_l.png") + +devlist=owList() +print(voc_marker) +tline1="\t" +tline2="time\t" +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]) + +i=0 +col=1 + + +devlist1=[] +devlistn=[] +voc_marker1=[] + +for d in devwholist: + i=0 + print(d) + for dd in devlist: + if id2string(dd[0])==d: + print("->",id2string(dd[0])) + devlist1.append(dd) + devlist.remove(dd) + voc_marker1.append(voc_marker[i]) + del voc_marker[i] + break + i=i+1 +for d in devlist: + devlist1.append(d) + +devlist=devlist1 +voc_marker=voc_marker1 + + +print devlist + +print voc_marker + + + +for d in devlist: + print(d[0]) + prop=getProperties(d,voc_marker[i]) + if len(prop)>0: + tline1=tline1+id2string(d[0]) + for p in prop: + tline2=tline2+p+"\t" + tline1=tline1+"\t" + col=col+1 + dn=id2string(d[0]) + if dn in devdict: + dn=devdict[dn] + gplist.append((p,col,dn)) + if (len(d)>2): + print("->",d[2]) + prop=getProperties(d[2:],voc_marker[i]) + tline1=tline1+id2string(d[2]) + for p in prop: + tline2=tline2+p+"\t" + tline1=tline1+"\t" + col=col+1 + dn=id2string(d[2]) + if dn in devdict: + dn=devdict[dn] + gplist.append((p,col,dn)) + i=i+1 + +#if os.path.exists("log22.txt"): +# lt = time.localtime() +# ts=time.strftime("%Y%m%d%H%M%S", lt) +# os.rename("log22.txt","log22_"+ts+".txt") + +f=open("log22h.txt","a") +f.write(tline1+"\n") +f.write(tline2+"\n") +f.close() +print(tline1) +print(tline2) + +while (1): + lt = time.localtime() + vline=time.strftime("%d#%m#%Y %H:%M:%S\t", lt) + i=0 + for d in devlist: + #print(d[0]) + vals=getValues(d,voc_marker[i]) + for v in vals: + vline=vline+"%0.5f\t" % (v) + if (len(d)>2): + vals=getValues(d[2:],voc_marker[i]) + for v in vals: + vline=vline+"%0.5f\t" % (v) + i=i+1 + print(vline) + f=open("log22.txt","a") + f.write(vline.replace('.',',').replace('#','.')+"\n") + #f.write(vline+"\n") + f.close() + gnuplot() + time.sleep(90) + + + + +id=[0x26,0xA3,0xD9,0x84,0x00,0x16,0x05,0x67] +print("VDD\tVAD\tTemp\tHum\tR0\tVS\tCorr\tcm\tRS\tRSR0\tVOC1\tVOC2"); +print(owComStr(id,"85FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")); +#print(owComStr(id,"4E000F_RB4_R_P7044_R_P70B8_RBE00FFFFFFFFFFFFFFFFFF_R4E0000_RB4_R_P70BE00FFFFFFFFFFFFFFFFFF_RBE03FFFFFFFFFFFFFFFFFF")) + +while(0): + sbl=owComStr(id,"4E000F_RB4_R_P7044_R_P70B8_RBE00FFFFFFFFFFFFFFFFFF_R4E0000_RB4_R_P70BE00FFFFFFFFFFFFFFFFFF_RBE03FFFFFFFFFFFFFFFFFF") + #owCom(id,[0x4E,0x00,0x0F],0) + #owCom(id,[0xB4],0) + #time.sleep(0.1) + #owCom(id,[0x44],0) + #time.sleep(0.1) + #owCom(id,[0xB8],0) + #sb=owCom(id,[0xBE,0x00],11) + sb=sbl[4] + VDD=(sb[5]+sb[6]*256)/100.0 + #owCom(id,[0x4E,0x00,0x00],0) + #owCom(id,[0xB4],0) + #time.sleep(0.1) + #owCom(id,[0xB8],0) + #sb=owCom(id,[0xBE,0x00],11) + sb=sbl[7] + VAD=(sb[5]+sb[6]*256)/100.0 + Temp=(sb[3]+sb[4]*256)/256.0 + #sb=owCom(id,[0xBE,0x03],11) + sb=sbl[8] + 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 + Hum=(VAD/VDD-0.16)/0.0062 + Hum=(Hum)/(1.0546-0.00216*(Temp)) + f=open("log.txt","a") + print("%0.3f\t%0.3f\t%0.3f\t%0.3f\t%0.3f\t%0.3f\t%0.3f\t%i\t%0.3f\t%0.3f\t%0.3f\t%0.3f" %(VDD,VAD,Temp,Hum,R0,VS,Corr,cmode,RS,RSR0,VOC1,VOC2)) + f.write("%0.3f\t%0.3f\t%0.3f\t%0.3f\t%0.3f\t%0.3f\t%0.3f\t%i\t%0.3f\t%0.3f\t%0.3f\t%0.3f\n" %(VDD,VAD,Temp,Hum,R0,VS,Corr,cmode,RS,RSR0,VOC1,VOC2)) + f.close() + time.sleep(30) + +#cmd="owtools.exe usb1 DC 6705160084D9A326 BE00FFFFFFFFFFFFFFFFFFFF" +#print(owCom([0x26,0xA3,0xD9,0x84,0x00,0x16,0x05,0x67],[0xBE,0x00],11)) + + +