- OWINIT save Register used in C
[owSlave2.git] / stest / log_all.py
diff --git a/stest/log_all.py b/stest/log_all.py
new file mode 100644 (file)
index 0000000..a6ca49d
--- /dev/null
@@ -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))
+
+
+