+++ /dev/null
-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))
-
-
-