Sunday, August 2, 2020
Temperature Collection for Rasp PI / Linux USB Attached probes
It all starts with Cron. I use it pretty heavily :)
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/digitemp/bs.s0 1> /dev/null 1,6,11,16,21,26,31,36,41,46,51,56 * * * * /home/digitemp/bs.s1 1> /dev/null
Gotta have a remote drive mounted with Samba…
/cp1/digitemp /home/digitemp cifs user=timc,pass=[password],vers=3.0 0 0
Gotta call a shell script that calls the reader and the conf file
root@bs:~# cat /home/digitemp/bs.s0 # # 1/19/19 TimC - rm digitemp file to put clean number in # updated via cron every 5 minutes # # use /etc/digitemp directory for conf files & exec of this # use /tmp for current temp reading # /usr/bin/rm /home/digitemp/bs.s0.temp /usr/bin/digitemp -c /home/digitemp/bs.s0.conf -a -l /home/digitemp/bs.s0.temp
conf file
root@bs:~# cat /home/digitemp/bs.s0.conf TTY /dev/ttyUSB0 READ_TIME 1000 LOG_TYPE 1 LOG_FORMAT "%.2F" CNT_FORMAT "%b %d %H:%M:%S Sensor %s #%n %C" HUM_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F H: %h%%" SENSORS 1 ROM 0 0x28 0xFF 0x64 0x1E 0x1D 0xC6 0x77 0x54 root@bs:~#
which results in a single value (temperature)
root@bs:~# cat /home/digitemp/bs.s0.temp 101.97 root@bs:~#
Then of course it’s on a remote drive cp1:/home/digitemp
which is also using cron :)
4,9,14,19,34,29,34,39,44,49,54,59 * * * * /home/mrtg/temp/temp.sh &> /dev/null
which calls mrtg
root@cp1:/home/digitemp# cat /home/mrtg/temp/temp.sh /bin/mrtg /home/mrtg/temp/temp.cfg root@cp1:/home/digitemp#
mrtg config :)
root@cp1:/home/digitemp# cat /home/mrtg/temp/temp.cfg # 10/12/18 added /bin/cfgmaker public@lo 10/12/18 ### Global Config Options WorkDir: /home/mrtg/temp/ Options[_]: gauge pngdate expscale fixunit nomax nototal nopercent unknaszero noo MaxBytes[_]: 125 ABSMax[_]: 125 YLegend[_]: Fahrenheit ShortLegend[_]: Fahrenheit LegendI[_]: Temperature Legend1[_]: Temperature Options[_]: integer, gauge, nopercent Colours[_]: RED#FF0000, WHATEVER#123456, DARKRED#800000, WHATEVER2#654321 Background[_]: #0a0a0a0 TimeStrPos[_]: RU #Unscaled[_]: ymwd # # # ................ # LOTS OF OTHER TEMPERATURE CFGssss # #--------------------------------------------------------------- # bs 1 - Attic # USB RS485 serial port ttyUSB0 #--------------------------------------------------------------- Target[bs-s1]: `/home/mrtg/temp/bs.s1.temp.sh` Title[bs-s1]: Behind Freezer Temp sensor PageTop[bs-s1]: <H1>Behind Freezer Sensor</H1> PNGTitle[bs-s1]: Behind Commercial Freezer Temperature
which calls another script to gett it into the proper oid and 4 values for MRTG…
root@cp1:/home/digitemp# cat /home/mrtg/temp/bs.s0.temp.sh
#!/bin/bash
#
# 4 The external command must return 4 lines of output:
# Line 1
# current state of the first variable, normally 'incoming bytes count'
# Line 2
# current state of the second variable, normally 'outgoing bytes count'
# Line 3
# string (in any human readable format), telling the uptime of the target.
# Line 4
# string, telling the name of the target.
#
HOST=bs
SEN=s0
#
#
DATE=`/usr/bin/date +%m%d%g`
SNMPGET="/usr/bin/snmpget -v 1 -c public"
OID="1.3.6.1.2.1.1.3.0"
AWK="/usr/bin/awk -F"
#AWK1="/usr/bin/awk -F '=' '{print $2}' "
#AWK2="/usr/bin/awk -F ')' '{print $2}' "
ECHO=/usr/bin/echo
TEMP=`/usr/bin/cat /home/digitemp/$HOST"."$SEN".temp"`
#echo $AWK1
#echo $AWK2
UPTIME=`$SNMPGET $HOST $OID | $AWK '=' '{print $2}' | $AWK ')' '{print $2}'`
#UPTIME=`$SNMPGET $HOST $OID | $AWK1 | $AWK2`
#
$ECHO $TEMP
$ECHO $TEMP
$ECHO $UPTIME
$ECHO $HOST
root@cp1:/home/digitemp#
Which results in the following data set that mrtg can read
root@cp1:/home/mrtg/temp# ./bs.s0.temp.sh 101.97 101.97 9:28:50.05 bs root@cp1:/home/mrtg/temp#
Simple really :) A lot of moving parts perhaps. Yeah, I like scripting I guess. It has some pretty cool graphs. I have about 15 of the probes measuring different parts of the house and then I have a web page running on cp1 that displays all of the temperatures. Most are running on pi zero’s but I have had a lot of problems with USB reliability on the Zero’s. Well I’m not actually sure if it’s a problem with the zero or a problem with the cheap ass USB probes. - Prolific Technology, Inc. PL2303 Serial Port which is essentially a single wire RS-485. I’ve tried unsuccessfully to get a multi-point RS-485 working, and finally just gave up over the abundantly prolific probes. for $10 a PI (zero w/header and wireless) and $3 for a probe. I can turn a new one up for under $15.00 with tax / shipping et all and it’s completely self contained. I’ve put a bunch into a 2 gang electrical outlet, that I hang off of a room outlet. It give me room to put in a cheap 2amp power supply with a couple cables and the probe and the zero.
I’ve also played around with Relays…. More on that later. I’m controlling my irrigation system and outside light timer using Zero’s…
If the above logic is confusing… The relays are even worse. A lot of it’s the same. But much of it’s different. I also have a few motion sensors and light meters and GPSs using the same zero’s But that’s all stuff for another post.
Questions? It’s not a how to, just a what ive done. If you want a how to go somewhere else.