| 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 |