- OWINIT save Register used in C
[owSlave2.git] / stest / find.py
diff --git a/stest/find.py b/stest/find.py
new file mode 100644 (file)
index 0000000..5c28895
--- /dev/null
@@ -0,0 +1,292 @@
+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 "
+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 "
+                               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]
+                               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):
+#      for d in dl:
+#              ds=id2string(d[0])
+#              print(ds)
+               
+       
+       
\ No newline at end of file