Initial import of onewire-to-usb bridge
[onewire] / readtemp.sh
1 #!/bin/bash
2
3 DEV=/dev/ttyUSB0
4 TIMEOUT=5
5 LOCK=/var/tmp/readtemp.lock
6
7 SYSDEV=/sys/bus/usb/devices
8 for i in $SYSDEV/*
9 do
10 if [ -f "$i/interface" ]
11 then
12         if grep -q "CP2102 USB to UART" "$i/interface"
13         then
14                 DEV=/dev/$(basename `ls -d $i/ttyUSB* `)
15                 # dont break here, keep going so we get the last one
16                 # break
17         fi
18 fi
19 done
20
21 if ! lockfile -r 3 -l 5 $LOCK
22 then
23 echo "Failed to obtain lock"
24 exit;
25 fi
26
27 if ! stty --file=$DEV | grep -q 'speed 19200'
28 then
29 stty --file=$DEV 19200
30 sleep 1
31 fi
32
33 if ! stty --file=$DEV | grep -q '-echo'
34 then
35 stty --file=$DEV -echo
36 sleep 1
37 fi
38
39 echo -n "t" >> $DEV
40
41 MODE=plain
42 if [ $# -ge 1 ] && [ "$1" == "-c" ]; then
43 MODE=cacti
44 fi
45
46 while read -t $TIMEOUT -u 3 CODE ID TEM OTH; do
47 # last one
48         if [ "$CODE" == "END" ]; then 
49                 break;
50         fi
51
52 # not a valid line
53         if [ "$CODE" != "TEMP" ]; then
54                 echo "ERROR CODE=$CODE ID=$ID TEM=$TEM"
55                 continue;
56         fi
57
58 # truncate for paranoia
59         TEM=${TEM:0:4}
60
61 # calculate degrees from the hex code
62         DEGC=`echo "16 i $TEM A i 4 k 0.0625 * p" | dc`
63 # display the result
64 if [ $MODE == "cacti" ]; then
65         printf "id:%s temp:%s\n", "$ID" "$DEGC"
66 else
67         printf "%s %s degC\n" "$ID" "$DEGC";
68 fi
69 done 3< $DEV
70
71 rm -f $LOCK