+++ /dev/null
-import sys\r
-import os\r
-import os.path\r
-import subprocess\r
-import io\r
-import time\r
-import math\r
-import shutil\r
-\r
-toolstr="/home/muto/owtools/src/owtools USB1 DC "\r
-devdict={}\r
-devwholist=[]\r
-f=open("DEVLIST.txt","r")\r
-for l in f.readlines():\r
- ls=l.split(" ")\r
- if (len(ls)>1):\r
- devdict[ls[0]]=l.replace("\n","")\r
- devwholist.append(ls[0])\r
-f.close()\r
-\r
-def id2string(id):\r
- s=""\r
- for i in range(8):\r
- s=s+"%02X" %(id[7-i])\r
- return s\r
-\r
-def string2id(s):\r
- for i in range(8):\r
- bl=[]\r
- i2=14-i*2;\r
- bl.append(int(s[i2:i2+2],16))\r
- return bl\r
-\r
-\r
-def calculateValues(code, V, vn):\r
- if code==1:\r
- return V[vn] / 16.0; \r
- elif code==2:\r
- return V[vn]/1.6; \r
- elif code==3:\r
- return V[vn]*0.2 + 700; \r
- elif code==4:\r
- return math.exp(V[vn] / 160.0); \r
- elif code==5:\r
- return V[vn]*62.5 + 55000; \r
- elif code==6:\r
- return V[vn] / 256.0; \r
- elif code==7:\r
- if V[1]!=0:\r
- return ((float(V[2]) / float(V[1]) - 0.16) / 0.0062) / (1.0546 - 0.00216*V[0]/256.0); \r
- else:\r
- return 0\r
- elif code==8:\r
- return V[vn] / 100.0; \r
- elif code==9:\r
- return V[vn] / 65535.0*5.1; \r
- elif code==10:\r
- return V[vn] / 65535.0*2.55; \r
- elif code==11:\r
- return V[vn] / 65535.0*1.1; \r
- elif code==12:\r
- return V[vn] / 10.0; \r
- elif code==13:\r
- return V[vn]; \r
- elif code==14:\r
- return (V[vn] - 32767.0) / 100.0; \r
- elif code==15:\r
- return math.exp((V[vn]-32767.0)/1000.0); \r
- elif code==16:\r
- return V[vn]/32.0; \r
- else:\r
- return 0;\r
-\r
-def getName(code ):\r
- if code==1:\r
- return ["Temperatur","C"]\r
- if code==2:\r
- return ["Druck","hPa"]\r
- if code==3:\r
- return ["Beleuchtungsstaerke","lux"]\r
- if code==4:\r
- return ["Luftfeuchte","%%"]\r
- if code==5:\r
- return ["Konstante",""]\r
- if code==6:\r
- return ["Spannung","V"]\r
- if code==7:\r
- return ["Strom","mA"]\r
- if code==8:\r
- return ["VOC","ppm"]\r
- if code==9:\r
- return ["Counter",""]\r
- return []\r
-\r
-\r
-def owCom(dev,send,rcount):\r
- cmd=toolstr+id2string(dev)\r
- #for i in range(8):\r
- # cmd=cmd+"%02X" %(dev[7-i])\r
- cmd=cmd+" "\r
- for b in send:\r
- cmd=cmd+"%02X" % (b)\r
- for i in range(rcount):\r
- cmd=cmd+"FF"\r
- #print(cmd.split(' '));\r
- p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)\r
- p.wait()\r
- s=p.stdout.read().decode("utf-8")\r
- l=s.split("\n");\r
- #print(l[2])\r
- bl=[]\r
- for i in range(int(len(l[2])/2)):\r
- i2=i*2;\r
- bl.append(int(l[2][i2:i2+2],16))\r
- return bl\r
-\r
-def owComStr(dev,sendstr):\r
- cmd=toolstr+id2string(dev)\r
- #for i in range(8):\r
- # cmd=cmd+"%02X" %(dev[7-i])\r
- cmd=cmd+" "+sendstr\r
- p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)\r
- p.wait()\r
- s=p.stdout.read().decode("utf-8")\r
- #print(s);\r
- ll=s.split("\n");\r
- bll=[]\r
- for l in ll[2:]:\r
- bl=[]\r
- for i in range(int(len(l)/2)):\r
- i2=i*2;\r
- bl.append(int(l[i2:i2+2],16))\r
- bll.append(bl)\r
- return bll\r
-\r
-def getValues(dev,voc):\r
- pl=[]\r
- #print(id2string(dev[0]),voc)\r
- if dev[0][0]==0x26:\r
- vnok=1\r
- rc=0\r
- while (vnok):\r
- sbl=owComStr(dev[0],"4E000F_RB4_R_P7044_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_R4E0000_RB4_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_RBE03FFFFFFFFFFFFFFFFFF")\r
- #print(sbl)\r
- sb=sbl[4]\r
- VDD=(sb[5]+sb[6]*256)\r
- sb=sbl[8]\r
- VAD=(sb[5]+sb[6]*256)\r
- Temp=(sb[3]+sb[4]*256)\r
- if (sb[4] & 0x80):\r
- Temp-=0x10000\r
- curr=sb[7]+sb[8]*256\r
- if (sb[8] & 0x80):\r
- curr-=0x10000\r
- vals=[Temp,VDD,VAD,curr]\r
- formellist=[6,8,7,8]\r
- if dev[1][0]!=0xFF:\r
- formellist=[]\r
- for i in range(4):\r
- if (dev[1][i*2+1])!=0:\r
- formellist.append(dev[1][i*2+1])\r
- else:\r
- break\r
- cvals=[]\r
- for i in range(len(formellist)):\r
- cvals.append(calculateValues(formellist[i],vals,i))\r
- if (cvals[2]<=110):\r
- vnok=0\r
- else:\r
- rc=rc+1\r
- if (rc==3):\r
- vnok=0\r
- cvals[2]=100\r
- if voc!=0:\r
- #R0,VS,Corr,cmode,RS,RSR0,VOC1,VOC2\r
- sb=sbl[9]\r
- R0=(sb[2]+sb[3]*256)/100.0\r
- VS=(sb[4]+sb[5]*256)/10000.0\r
- Corr=(sb[7]+sb[8]*256)/1000.0\r
- cmode=sb[6]\r
- RS=(3/VS-1)*30\r
- RSR0=(RS/R0)\r
- VOC1=RSR0*Corr\r
- VOC2=RSR0/Corr\r
- cvals.append(R0)\r
- cvals.append(VS)\r
- cvals.append(Corr)\r
- cvals.append(cmode)\r
- cvals.append(RS)\r
- cvals.append(RSR0)\r
- cvals.append(VOC1)\r
- cvals.append(VOC2)\r
- return cvals\r
- if dev[0][0]==0x28:\r
- sbl=owComStr(dev[0],"44_R_PFF_PFF_PFF_PFFBEFFFFFFFFFFFFFFFFFF")\r
- Temp=sbl[1][1]+sbl[1][2]*256\r
- if (sbl[1][2] & 0x80):\r
- Temp=-(Temp&0x7FFF)\r
- if dev[1][0]!=0xFF:\r
- return [calculateValues(dev[1][1],[Temp],0)]\r
- else:\r
- return [calculateValues(1,[Temp],0)]\r
- return []\r
-\r
- \r
-def owList(): \r
- cmd=toolstr[0:-3]\r
- print(cmd)\r
- p = subprocess.Popen(["./owtools","USB1"], shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)\r
- p.wait()\r
- s=p.stdout.read()\r
- l=s.split("\n")\r
- #print(l);\r
- l=l[1:-1]\r
- devlist=[]\r
- ic=0\r
- for d in l:\r
- dev=[]\r
- bl=[]\r
- for i in range(8):\r
- i2=14-i*2;\r
- bl.append(int(d[i2:i2+2],16))\r
- dev.append(bl)\r
- #print(bl)\r
- config=owCom(bl,[0x85],18)\r
- #print(config)\r
- if (config[1]==0xFF):\r
- if (bl[0]==0x26):\r
- config=[0,1,6,6,8,4,7,7,8,0]\r
- if (bl[0]==0x28):\r
- config=[0,1,1,0,0,0,0,0,0,0]\r
- dev.append(config[1:])\r
- bls=id2string(bl)\r
- cs="%i: " %(ic)\r
- ic=ic+1\r
- cs=cs+bls+": "\r
- if bls in devdict:\r
- cs=cs+devdict[bls].split(",")[0].split(" ")[1]+" "\r
- for i in range(4):\r
- c=config[i*2+1]\r
- if (c==0xFF):\r
- cs=cs+"Noconfig "\r
- if (bl[0]==0x26):\r
- config=[0,1,6,6,8,4,7,7,8,0]\r
- if (bl[0]==0x28):\r
- config=[0,1,1,0,0,0,0,0,0,0]\r
- break\r
- if (c==0):\r
- break\r
- cs=cs+getName(c)[0]+" "\r
- voc=0\r
- if bls in devdict:\r
- if "VOC" in devdict[bls]:\r
- voc=1\r
- l=getValues([bl,config[1:]],voc)\r
- for v in l:\r
- cs=cs+" %0.2f " %(v)\r
- print(cs)\r
- ddev=0\r
- vm=0\r
- if config[1]==0x08:\r
- vm=1\r
- #print("Test_configs")\r
- i=0\r
- for dv in devlist:\r
- #print("c",dv[1][9:16])\r
- #print("d",bl[0:7])\r
- if dv[1][9:16]==bl[0:7]:\r
- print("Double Device")\r
- ddev=1\r
- dv.append(dev[0])\r
- dv.append(dev[1])\r
- #if vm==1:\r
- #voc_marker[i]=2\r
- i=i+1\r
- if ddev==0:\r
- devlist.append(dev)\r
- #voc_marker.append(vm)\r
- #print("devlist",devlist)\r
- return devlist\r
-\r
-dl=owList()\r
-#for d in dl:\r
-# print(d)\r
-\r
-#while (1):\r
-# for d in dl:\r
-# ds=id2string(d[0])\r
-# print(ds)\r
- \r
- \r
-
\ No newline at end of file