X-Git-Url: http://git.smho.de/gw/?p=owSlave2.git;a=blobdiff_plain;f=stest%2Flog_all1.py;fp=stest%2Flog_all1.py;h=70b3e171fcc1cbc78990e36f7187d93ee245bf5e;hp=323d6fa87e360e6650fc3bcc0c87721695c7ecb2;hb=a6a04f58e4afd20f206fdf4a8a7b3ce4062f1b67;hpb=cd92472e6fd63693741f8e168123a4182802651b diff --git a/stest/log_all1.py b/stest/log_all1.py index 323d6fa..70b3e17 100644 --- a/stest/log_all1.py +++ b/stest/log_all1.py @@ -1,341 +1,341 @@ -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 +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