323d6fa87e360e6650fc3bcc0c87721695c7ecb2
[owSlave2.git] / stest / log_all1.py
1 import sys
2 import os
3 import os.path
4 import subprocess
5 import io
6 import time
7 import datetime
8 import math
9 import shutil
10
11 toolstr="/home/muto/owtools/src/owtools USB1 DC "
12 devdict={}
13 devwholist=[]
14 f=open("DEVLIST.txt","r")
15 for l in f.readlines():
16         ls=l.split(" ")
17         if (len(ls)>1):
18                 devdict[ls[0]]=l.replace("\n","")
19                 devwholist.append(ls[0])
20 f.close()
21
22 def id2string(id):
23         s=""
24         for i in range(8):
25                 s=s+"%02X" %(id[7-i])
26         return s
27
28 def string2id(s):
29         for i in range(8):
30                 bl=[]
31                 i2=14-i*2;
32                 bl.append(int(s[i2:i2+2],16))
33         return bl
34
35
36 def calculateValues(code, V, vn):
37         if code==1:
38                 return V[vn] / 16.0; 
39         elif code==2:
40                 return V[vn]/1.6; 
41         elif code==3:
42                 return V[vn]*0.2 + 700; 
43         elif code==4:
44                 return math.exp(V[vn] / 160.0); 
45         elif code==5:
46                 return V[vn]*62.5 + 55000; 
47         elif code==6:
48                 return V[vn] / 256.0; 
49         elif code==7:
50                 if V[1]!=0:
51                         return ((float(V[2]) / float(V[1]) - 0.16) / 0.0062) / (1.0546 - 0.00216*V[0]/256.0); 
52                 else:
53                         return 0
54         elif code==8:
55                 return V[vn] / 100.0; 
56         elif code==9:
57                 return V[vn] / 65535.0*5.1; 
58         elif code==10:
59                 return V[vn] / 65535.0*2.55; 
60         elif code==11:
61                 return V[vn] / 65535.0*1.1; 
62         elif code==12:
63                 return V[vn] / 10.0; 
64         elif code==13:
65                 return V[vn];  
66         elif code==14:
67                 return (V[vn] - 32767.0) / 100.0;  
68         elif code==15:
69                 return math.exp((V[vn]-32767.0)/1000.0); 
70         elif code==16:
71                 return V[vn]/32.0; 
72         else:
73                 return 0;
74
75 def getName(code        ):
76         if code==1:
77                 return ["Temperatur","C"]
78         if code==2:
79                 return ["Druck","hPa"]
80         if code==3:
81                 return ["Beleuchtungsstaerke","lux"]
82         if code==4:
83                 return ["Luftfeuchte","%%"]
84         if code==5:
85                 return ["Konstante",""]
86         if code==6:
87                 return ["Spannung","V"]
88         if code==7:
89                 return ["Strom","mA"]
90         if code==8:
91                 return ["VOC","ppm"]
92         if code==9:
93                 return ["Counter",""]
94         return []
95
96
97 def owCom(dev,send,rcount):
98         cmd=toolstr+id2string(dev)
99         #for i in range(8):
100         #       cmd=cmd+"%02X" %(dev[7-i])
101         cmd=cmd+" "
102         for b in send:
103                 cmd=cmd+"%02X" % (b)
104         for i in range(rcount):
105                 cmd=cmd+"FF"
106         #print(cmd.split(' '));
107         p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
108         p.wait()
109         s=p.stdout.read().decode("utf-8")
110         l=s.split("\n");
111         #print(l[2])
112         bl=[]
113         for i in range(int(len(l[2])/2)):
114                 i2=i*2;
115                 bl.append(int(l[2][i2:i2+2],16))
116         return bl
117
118 def owComStr(dev,sendstr):
119         cmd=toolstr+id2string(dev)
120         #for i in range(8):
121         #       cmd=cmd+"%02X" %(dev[7-i])
122         cmd=cmd+" "+sendstr
123         p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
124         p.wait()
125         s=p.stdout.read().decode("utf-8")
126         #print(s);
127         ll=s.split("\n");
128         bll=[]
129         for l in ll[2:]:
130                 bl=[]
131                 for i in range(int(len(l)/2)):
132                         i2=i*2;
133                         bl.append(int(l[i2:i2+2],16))
134                 bll.append(bl)
135         return bll
136
137 def getValues(dev,voc):
138         pl=[]
139         #print(id2string(dev[0]),voc)
140         if dev[0][0]==0x26:
141                 vnok=1
142                 rc=0
143                 while (vnok):
144                         sbl=owComStr(dev[0],"4E000F_RB4_R_P7044_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_R4E0000_RB4_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_RBE03FFFFFFFFFFFFFFFFFF")
145                         #print(sbl)
146                         sb=sbl[4]
147                         VDD=(sb[5]+sb[6]*256)
148                         sb=sbl[8]
149                         VAD=(sb[5]+sb[6]*256)
150                         Temp=(sb[3]+sb[4]*256)
151                         if (sb[4] & 0x80):
152                                 Temp-=0x10000
153                         curr=sb[7]+sb[8]*256
154                         if (sb[8] & 0x80):
155                                 curr-=0x10000
156                         vals=[Temp,VDD,VAD,curr]
157                         formellist=[6,8,7,8]
158                         if dev[1][0]!=0xFF:
159                                 formellist=[]
160                                 for i in range(4):
161                                         if (dev[1][i*2+1])!=0:
162                                                 formellist.append(dev[1][i*2+1])
163                                         else:
164                                                 break
165                         cvals=[]
166                         for i in range(len(formellist)):
167                                 cvals.append(calculateValues(formellist[i],vals,i))
168                         if (cvals[2]<=110):
169                                 vnok=0
170                         else:
171                                 rc=rc+1
172                                 if (rc==3):
173                                         vnok=0
174                                         cvals[2]=100
175                         if voc!=0:
176                                 #R0,VS,Corr,cmode,RS,RSR0,VOC1,VOC2
177                                 sb=sbl[9]
178                                 R0=(sb[2]+sb[3]*256)/100.0
179                                 VS=(sb[4]+sb[5]*256)/10000.0
180                                 Corr=(sb[7]+sb[8]*256)/1000.0
181                                 cmode=sb[6]
182                                 RS=(3/VS-1)*30
183                                 RSR0=(RS/R0)
184                                 VOC1=RSR0*Corr
185                                 VOC2=RSR0/Corr
186                                 cvals.append(R0)
187                                 cvals.append(VS)
188                                 cvals.append(Corr)
189                                 cvals.append(cmode)
190                                 cvals.append(RS)
191                                 cvals.append(RSR0)
192                                 cvals.append(VOC1)
193                                 cvals.append(VOC2)
194                 return cvals
195         if dev[0][0]==0x28:
196                 sbl=owComStr(dev[0],"44_R_PFF_PFF_PFF_PFFBEFFFFFFFFFFFFFFFFFF")
197                 Temp=sbl[1][1]+sbl[1][2]*256
198                 if (sbl[1][2] & 0x80):
199                         Temp=-(Temp&0x7FFF)
200                 if dev[1][0]!=0xFF:
201                         return [calculateValues(dev[1][1],[Temp],0)]
202                 else:
203                         return [calculateValues(1,[Temp],0)]
204         return []
205
206         
207 def owList(): 
208         cmd=toolstr[0:-3]
209         print(cmd)
210         p = subprocess.Popen(["./owtools","USB1"], shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
211         p.wait()
212         s=p.stdout.read()
213         l=s.split("\n")
214         #print(l);
215         l=l[1:-1]
216         devlist=[]
217         ic=0
218         for d in l:
219                 dev=[]
220                 bl=[]
221                 for i in range(8):
222                         i2=14-i*2;
223                         bl.append(int(d[i2:i2+2],16))
224                 dev.append(bl)
225                 #print(bl)
226                 config=owCom(bl,[0x85],18)
227                 #print(config)
228                 if (config[1]==0xFF):
229                         if (bl[0]==0x26):
230                                 config=[0,1,6,6,8,4,7,7,8,0]
231                         if (bl[0]==0x28):
232                                 config=[0,1,1,0,0,0,0,0,0,0]
233                 dev.append(config[1:])
234                 bls=id2string(bl)
235                 cs="%i: " %(ic)
236                 ic=ic+1
237                 cs=cs+bls+": "
238                 if bls in devdict:
239                         cs=cs+devdict[bls].split(",")[0].split(" ")[1]+" "
240                 for i in range(4):
241                         c=config[i*2+1]
242                         if (c==0xFF):
243                                 cs=cs+"Noconfig "
244                                 config=[0,0,0,0,0,0,0,0,0,0]
245                                 break
246                         if (c==0):
247                                 break
248                         cs=cs+getName(c)[0]+" "
249                 #voc=0
250                 #if bls in devdict:
251                 #       if "VOC" in devdict[bls]:
252                 #               voc=1
253                 #l=getValues([bl,config[1:]],voc)
254                 #for v in l:
255                 #       cs=cs+" %0.2f " %(v)
256                 print(cs)
257                 ddev=0
258                 vm=0
259                 if config[1]==0x08:
260                         vm=1
261                 #print("Test_configs")
262                 i=0
263                 for dv in devlist:
264                         #print("c",dv[1][9:16])
265                         #print("d",bl[0:7])
266                         if dv[1][9:16]==bl[0:7]:
267                                 print("Double Device")
268                                 ddev=1
269                                 dv.append(dev[0])
270                                 dv.append(dev[1])
271                                 #if vm==1:
272                                         #voc_marker[i]=2
273                         i=i+1
274                 #if ddev==0:
275                 devlist.append(dev)
276                         #voc_marker.append(vm)
277                 #print("devlist",devlist)
278         return devlist
279
280 dl=owList()
281 #for d in dl:
282 #       print(d)
283
284 while (1):
285         lt = time.localtime()
286         vline=time.strftime("%d#%m#%Y %H:%M:%S\t", lt)
287         n = datetime.datetime.now()
288         unix_timestamp = time.mktime(n.timetuple())# works if Python >= 3.3
289         for d in dl:
290                 ds=id2string(d[0])
291                 bezeichnung="not in List"
292                 if ds in devdict:
293                         bezeichnung=devdict[ds].split(",")[0].split(" ")[1]+" "
294                 vnames=[]
295                 for i in range(4):
296                         c=d[1][i*2]
297                         if (c==0):
298                                 break
299                         name=getName(c)
300                         if name!=[]:
301                                 vnames.append(name[0])
302                 voc=0
303                 if "VOC" in bezeichnung:
304                         voc=1
305                         vnames.append("R0")
306                         vnames.append("VS")
307                         vnames.append("Corr")
308                         vnames.append("cmode")
309                         vnames.append("RS")
310                         vnames.append("RSR0")
311                         vnames.append("VOC1")
312                         vnames.append("VOC2")
313                 #print(ds)
314                 l=getValues([d[0],d[1]],voc)
315                 s=vline+"%i" %(unix_timestamp)
316                 for i in range(len(l)):
317                         print("%s %s: %0.2f " %(bezeichnung,vnames[i],l[i]))
318                         s=s+"\t%0.4f" % (l[i])
319                 fname="log_%s.ow1" %(ds)
320                 writeheader=1
321                 if os.path.exists(fname):
322                         writeheader=0
323                 f=open(fname,"a")
324                 if writeheader==1:
325                         sh="time\tunixtime"
326                         for i in range(len(l)):
327                                 sh=sh+"\t%s" % (vnames[i])
328                         f.write(sh+"\n")
329                 f.write(s.replace(".",",").replace("#",".")+"\n")
330                 f.close()
331         #execfile("separate1.py")
332         os.system("python separate1.py")
333         print("--------------------")
334         n = datetime.datetime.now()
335         unix_timestamp1 = time.mktime(n.timetuple())# works if Python >= 3.3
336         d=unix_timestamp1-unix_timestamp
337         print (d)
338         print("--------------------")
339         time.sleep(120-d)
340         
341