Hive.sh
/home/hivetool/hive.sh is a bash script called by cron every 5 minutes that:
- gets the hostname and date/time,
- reads sensor calibration from config.conf (ver 0.5)
- reads the hive sensors,
- downloads the weather data in xml format from Weather Underground,
- appends the data to a text file,
- inserts a row in the local database,
- uploads an xml file to the hivetool database.
/home/hivetool/hivetool.log is over written with messages each time hive.sh is run.
#!/bin/bash # ############################################################################## # hive.sh ver 0.8.4 # # Reads sensors, logs them and sends the data to hivetool.net # # May use: # hive.conf Configuration file # bme680.py Read temperature, humidity, pressure, gas resistance from Bosh BME680 # cpw200plus.sh Read weight from Adam Equipment CPW200plus scale # dht22.sh Read temperature and humidity from DHT22 (from Grove Seeed_DHT22) DOEN"T WORK IN 0.8) # dht22_adafruit.sh Read temperature and humidity from DHT22 (Replaces Grove Seeed_DHT22) # dhtxx.sh Read temperature and humidity from DHTxx # ds18b20.sh Read temperature from DS18B20 # hx711.sh Read weight from HX711 board (c/wiringPi) # hx711py.sh Read weight from HX711 board (python/pigpio) # hx711b.sh Read voltage from HX711 board (c/wiringPi) # hx711pyB.sh Read voltage from HX711 board (python/pigpio) # phidget.sh Read weight from Phidgets Bridge board # temperhum.sh Read temperature and humidity from TEMPerHUM model 2 # mysql.sh Log data to local MySQL database # sqlite.sh Log data to local SQLite database # tsl2561.sh Read lux from TSL2561 # tsl2591.sh Read lux from TSL2561 # raingauge.conf Read rain gauge # xml.sh Writes the data in XML format to upload to hivetool.org # # ############################################################################## REDIRECT=1 # comment this line to turn off redirecting stdout and stderr to hivetool.log VERBOSE=1 # set to 1 for more info export LC_NUMERIC="en_US.UTF-8" # # Get the date and time # export DATE=`date +"%Y-%m-%d %H:%M:%S"` # # Redirect stdout and stderr to logfile. Useful to check for errors when run with no console (cron). # if [ "$REDIRECT" -gt "0" ] then rm /home/hivetool/hivetool.log # delete the last log exec >>/home/hivetool/hivetool.log 2>&1 # redirect stdout and stderr to logfile fi # # delete the last server response if it exits # if [ -f "/tmp/hive_command.xml" ] then rm /tmp/hive_command.xml fi # # Read the configuration file and set the shell variables # echo echo "Starting /home/hivetool/hive.sh at $DATE" echo "Reading /home/hivetool/hive.conf configuration file." IFS="=" # set the Internal Field Separator to equal sign while read name value; do # split each line on the IFS (=) into 2 variables: name and value value=${value#\"} # remove leading " value=${value%\"} # remove trailing " export $name="$value" # export the variables to make them available to child processes done <"/home/hivetool/hive.conf" # read each line from the config file IFS=" " # set the IFS back to space or reading TEMPerHUM will fail [ ! -z HIVE_NAME ] && HIVE1_NAME="TEST1" echo echo "Hive Name: $HIVE_NAME" if [ "$SYSTEM_STATUS" == "DISABLED" ] then echo "Hivetool is DISABLED. Doing nothing." echo "" exit 1 fi # # test for PI GPIO daemon running # echo "Checking if pigpiod is running" PIGPIOD_PID=`/bin/pidof pigpiod` if [ $? -eq 0 ] then echo "Running. Process ID (pid): $PIGPIOD_PID" else echo "pigpiod is NOT running. Trying to start it." /usr/bin/pigpiod echo "pigpiod exit code: $?" fi # # Turn on pull up resistor on GPIO 7 for 1-Wire /usr/local/bin/gpio mode 7 up # # test for Maintenance Hold (hive manipulation) # QUALITY=`cat /dev/shm/quality` if [[ $QUALITY -eq 4 ]] then echo "*** MAINTENANCE MODE **" fi echo echo echo "Reading Sensors" echo " Variable Scaled Driver GPIO/device/params/ID Slope Intercept Raw" # # Read scale # case "$HIVE_WEIGHT_SENSOR" in CPW200plus) RAW_HIVE_WEIGHT=$(/home/hivetool/cpw200plus.sh $HIVE_WEIGHT_DEV) set -- junk $HIVE_WEIGHT shift RAW_HIVE_WEIGHT=$2 ;; HX711) RAW_HIVE_WEIGHT=$(/home/hivetool/hx711.sh) ;; HX711py) RAW_HIVE_WEIGHT=$(/home/hivetool/hx711py.sh) ;; Phidget) RAW_HIVE_WEIGHT=$(/home/hivetool/phidget.sh) ;; none) RAW_HIVE_WEIGHT="NULL" # Set hive weight to NULL if scale type is set to "none" # echo "No scale selected HIVE_WEIGHT_SENSOR: $HIVE_WEIGHT_SENSOR" ;; *) RAW_HIVE_WEIGHT="NULL" # Set hive weight to NULL if scale type is not set or set wrong echo "No scale selected or unknown HIVE_WEIGHT_SENSOR: $HIVE_WEIGHT_SENSOR" # and display warning ;; esac if [ $RAW_HIVE_WEIGHT != "NULL" ] then HIVE_WEIGHT=`echo "scale=3; (($RAW_HIVE_WEIGHT*$HIVE_WEIGHT_SLOPE)+$HIVE_WEIGHT_INTERCEPT)/1" | bc` printf "%-16s %12.3f %12s %24s %12.9f %8.3f %12.2f\n" "Hive Weight" "$HIVE_WEIGHT" "$HIVE_WEIGHT_SENSOR" "$HIVE_WEIGHT_DEV" "$HIVE_WEIGHT_SLOPE" "$HIVE_WEIGHT_INTERCEPT" "$RAW_HIVE_WEIGHT" else HIVE_WEIGHT="NULL" HIVE_WEIGHT_F="NULL" printf "%-16s %12s %12s %24s %12.9f %8.3f %12s\n" "Hive Weight" "$HIVE_WEIGHT" "$HIVE_WEIGHT_SENSOR" "$HIVE_WEIGHT_DEV" "$HIVE_WEIGHT_SLOPE" "$HIVE_WEIGHT_INTERCEPT" "$RAW_HIVE_WEIGHT" fi # # Read temp and humidity inside hive # case "$HIVE_TEMP_SENSOR" in TEMPerHUM) TEMPerHUM=$(/home/hivetool/temperhum.sh -d $HIVE_TEMP_DEV) set -- junk $TEMPerHUM shift RAW_HIVE_TEMP=$1 RAW_HIVE_HUMIDITY=$2 if [ -z "$RAW_HIVE_TEMP" ] then RAW_HIVE_TEMP="NULL" RAW_HIVE_HUMIDITY="NULL" fi ;; BME680) ;; DHT11) TEMPerHUM=$(/home/hivetool/dht11_adafruit.sh -d $HIVE_TEMP_DEV) set -- junk $TEMPerHUM shift RAW_HIVE_TEMP=$1 RAW_HIVE_HUMIDITY=$2 sleep 4 # fixes a weirdness with bad readings when reading 2 DHT22's in a row. (not necessary it the second temp/rh sensor is not a DHT22 ;; DHT22) # TEMPerHUM=$(/home/hivetool/dht22.sh -d $HIVE_TEMP_DEV) TEMPerHUM=$(/home/hivetool/dht22_adafruit.sh -d $HIVE_TEMP_DEV) # TEMPerHUM=$(nice --20 /usr/local/bin/Seeed_DHT22 $HIVE_TEMP_DEV S) set -- junk $TEMPerHUM shift RAW_HIVE_TEMP=$1 RAW_HIVE_HUMIDITY=$2 sleep 4 # fixes a weirdness with bad readings when reading 2 DHT22's in a row. (not necessary it the second temp/rh sensor is not a DHT22 ;; DHTxx) TEMPerHUM=$(/home/hivetool/dhtxx.sh -d $HIVE_TEMP_DEV) set -- junk $TEMPerHUM shift RAW_HIVE_TEMP=$1 RAW_HIVE_HUMIDITY=$2 ;; DS18B20) TEMPerHUM=$(/home/hivetool/ds18b20.sh -d $HIVE_TEMP_DEV) set -- junk $TEMPerHUM shift RAW_HIVE_TEMP=$1 ;; *) RAW_HIVE_TEMP="NULL" RAW_HIVE_HUMIDITY="NULL" ;; esac if [ "$RAW_HIVE_TEMP" != "NULL" ] then HIVE_TEMP=`echo "scale=2; (($RAW_HIVE_TEMP*$HIVE_TEMP_SLOPE)+$HIVE_TEMP_INTERCEPT)/1" | bc` HIVE_TEMP_F=`echo "scale=2; ((($HIVE_TEMP*9)/5)+32)/1" | bc` printf "%-16s %12.2f %12s %24s %12.9f %8.3f %12.2f\n" "Hive Temp" "$HIVE_TEMP" "$HIVE_TEMP_SENSOR" "$HIVE_TEMP_DEV" "$HIVE_TEMP_SLOPE" "$HIVE_TEMP_INTERCEPT" "$RAW_HIVE_TEMP" else HIVE_TEMP="NULL" HIVE_TEMP_F="NULL" printf "%-16s %12s %12s %24s %12.9f %8.3f %12s\n" "Hive Temp" "$HIVE_TEMP" "$HIVE_TEMP_SENSOR" "$HIVE_TEMP_DEV" "$HIVE_TEMP_SLOPE" "$HIVE_TEMP_INTERCEPT" "$RAW_HIVE_TEMP" fi if [ $RAW_HIVE_HUMIDITY != "NULL" ] then HIVE_HUMIDITY=`echo "scale=2; (($RAW_HIVE_HUMIDITY*$HIVE_HUMIDITY_SLOPE)+$HIVE_HUMIDITY_INTERCEPT)/1" | bc` printf "%-16s %12.2f %12s %24s %12.9f %8.3f %12.2f\n" "Hive Humidity" "$HIVE_HUMIDITY" "$HIVE_HUMIDITY_SENSOR" "$HIVE_HUMIDITY_DEV" "$HIVE_HUMIDITY_SLOPE" "$HIVE_HUMIDITY_INTERCEPT" "$RAW_HIVE_HUMIDITY" else HIVE_HUMIDITY="NULL" printf "%-16s %12s %12s %24s %12.9f %8.3f %12s\n" "Hive Humidity" "$HIVE_HUMIDITY" "$HIVE_HUMIDITY_SENSOR" "$HIVE_HUMIDITY_DEV" "$HIVE_HUMIDITY_SLOPE" "$HIVE_HUMIDITY_INTERCEPT" "$RAW_HIVE_HUMIDITY" fi # # Read outside temp and humidity # case "$AMBIENT_TEMP_SENSOR" in TEMPerHUM) TEMPerHUM=$(/home/hivetool/temperhum.sh -d $AMBIENT_TEMP_DEV) set -- junk $TEMPerHUM shift RAW_AMBIENT_TEMP=$1 RAW_AMBIENT_HUMIDITY=$2 if [ -z "$RAW_AMBIENT_TEMP" ] then RAW_AMBIENT_TEMP="NULL" RAW_AMBIENT_HUMIDITY="NULL" fi ;; BME680) ;; DHT11) TEMPerHUM=$(/home/hivetool/dht11_adafruit.sh -d $HIVE_TEMP_DEV) set -- junk $TEMPerHUM shift RAW_HIVE_TEMP=$1 RAW_HIVE_HUMIDITY=$2 sleep 4 # fixes a weirdness with bad readings when reading 2 DHT22's in a row. (not necessary it the second temp/rh sensor is not a DHT22 ;; DHT22) # TEMPerHUM=$(/home/hivetool/dht22.sh -d $AMBIENT_TEMP_DEV) TEMPerHUM=$(/home/hivetool/dht22_adafruit.sh -d $AMBIENT_TEMP_DEV) # TEMPerHUM=$(nice --20 /usr/local/bin/Seeed_DHT22 $AMBIENT_TEMP_DEV S) set -- junk $TEMPerHUM shift RAW_AMBIENT_TEMP=$1 RAW_AMBIENT_HUMIDITY=$2 ;; DHTxx) TEMPerHUM=$(/home/hivetool/dhtxx.sh -d $AMBIENT_TEMP_DEV) set -- junk $TEMPerHUM shift RAW_AMBIENT_TEMP=$1 RAW_AMBIENT_HUMIDITY=$2 ;; DS18B20) TEMPerHUM=$(/home/hivetool/ds18b20.sh -d $AMBIENT_TEMP_DEV) set -- junk $TEMPerHUM shift RAW_AMBIENT_TEMP=$1 RAW_AMBIENT_HUMIDITY="NULL" ;; *) RAW_AMBIENT_TEMP="NULL" RAW_AMBIENT_HUMIDITY="NULL" ;; esac if [ "$RAW_AMBIENT_TEMP" != "NULL" ] then AMBIENT_TEMP=`echo "scale=2; (($RAW_AMBIENT_TEMP*$AMBIENT_TEMP_SLOPE)+$AMBIENT_TEMP_INTERCEPT)/1" | bc` AMBIENT_TEMP_F=`echo "scale=2; ((($AMBIENT_TEMP*9)/5)+32)/1" | bc` printf "%-16s %12.2f %12s %24s %12.9f %8.3f %12.2f\n" "Ambient Temp" "$AMBIENT_TEMP" "$AMBIENT_TEMP_SENSOR" "$AMBIENT_TEMP_DEV" "$AMBIENT_TEMP_SLOPE" "$AMBIENT_TEMP_INTERCEPT" "$RAW_AMBIENT_TEMP" else AMBIENT_TEMP="NULL" AMBIENT_TEMP_F="NULL" printf "%-16s %12s %12s %24s %12.9f %8.3f %12s\n" "Ambient Temp" "$AMBIENT_TEMP" "$AMBIENT_TEMP_SENSOR" "$AMBIENT_TEMP_DEV" "$AMBIENT_TEMP_SLOPE" "$AMBIENT_TEMP_INTERCEPT" "$RAW_AMBIENT_TEMP" fi if [ "$RAW_AMBIENT_HUMIDITY" != "NULL" ] then AMBIENT_HUMIDITY=`echo "scale=2; (($RAW_AMBIENT_HUMIDITY*$AMBIENT_HUMIDITY_SLOPE)+$AMBIENT_HUMIDITY_INTERCEPT)/1" | bc` printf "%-16s %12.2f %12s %24s %12.9f %8.3f %12.2f\n" "Ambient Humidity" "$AMBIENT_HUMIDITY" "$AMBIENT_HUMIDITY_SENSOR" "$AMBIENT_HUMIDITY_DEV" "$AMBIENT_HUMIDITY_SLOPE" "$AMBIENT_HUMIDITY_INTERCEPT" "$RAW_AMBIENT_HUMIDITY" else AMBIENT_HUMIDITY="NULL" printf "%-16s %12s %12s %24s %12.9f %8.3f %12s\n" "Ambient Humidity" "$AMBIENT_HUMIDITY" "$AMBIENT_HUMIDITY_SENSOR" "$AMBIENT_HUMIDITY_DEV" "$AMBIENT_HUMIDITY_SLOPE" "$AMBIENT_HUMIDITY_INTERCEPT" "$RAW_AMBIENT_HUMIDITY" fi # # Read outside light # case "$AMBIENT_LIGHT_SENSOR" in TSL2561) LIGHT=$(/home/hivetool/2561.sh) set -- junk $LIGHT shift RAW_AMBIENT_LIGHT=$1 if [ -z "$RAW_AMBIENT_LIGHT" ] then RAW_AMBIENT_LIGHT="NULL" fi ;; TSL2591) LIGHT=$(/home/hivetool/2591.sh) set -- junk $LIGHT shift RAW_AMBIENT_LIGHT=$1 if [ -z "$RAW_AMBIENT_LIGHT" ] then RAW_AMBIENT_LIGHT="NULL" fi ;; *) RAW_AMBIENT_LIGHT="NULL" ;; esac if [ "$RAW_AMBIENT_LIGHT" != "NULL" ] then AMBIENT_LIGHT=`echo "scale=2; (($RAW_AMBIENT_LIGHT*$AMBIENT_LIGHT_SLOPE)+$AMBIENT_LIGHT_INTERCEPT)/1" | bc` printf "%-16s %12.2f %12s %24s %12.9f %8.3f %12.2f\n" "Ambient Light" "$AMBIENT_LIGHT" "$AMBIENT_LIGHT_SENSOR" "$AMBIENT_LIGHT_DEV" "$AMBIENT_LIGHT_SLOPE" "$AMBIENT_LIGHT_INTERCEPT" "$RAW_AMBIENT_LIGHT" else AMBIENT_LIGHT="NULL" printf "%-16s %12s %12s %24s %12.9f %8.3f %12s\n" "Ambient Light" "$AMBIENT_LIGHT" "$AMBIENT_LIGHT_SENSOR" "$AMBIENT_LIGHT_DEV" "$AMBIENT_LIGHT_SLOPE" "$AMBIENT_LIGHT_INTERCEPT" "$RAW_AMBIENT_LIGHT" fi # # Read rain gauge # case "$AMBIENT_RAIN_SENSOR" in yes) RAW_AMBIENT_RAIN=`cat /home/hivetool/rain_total.conf` if [ -z "$RAW_AMBIENT_RAIN" ] then RAW_AMBIENT_RAIN="NULL" fi ;; *) RAW_AMBIENT_RAIN="NULL" ;; esac if [ "$RAW_AMBIENT_RAIN" != "NULL" ] then AMBIENT_RAIN=`echo "scale=2; (($RAW_AMBIENT_RAIN*$AMBIENT_RAIN_SLOPE)+$AMBIENT_RAIN_INTERCEPT)/1" | bc` printf "%-16s %12.2f %12s %24s %12.9f %8.3f %12.2f\n" "Ambient Rain" "$AMBIENT_RAIN" "$AMBIENT_RAIN_SENSOR" "$AMBIENT_RAIN_DEV" "$AMBIENT_RAIN_SLOPE" "$AMBIENT_RAIN_INTERCEPT" "$RAW_AMBIENT_RAIN" else AMBIENT_RAIN="NULL" printf "%-16s %12s %12s %24s %12.9f %8.3f %12s\n" "Rain" "$RAW_AMBIENT_RAIN" "$AMBIENT_RAIN_SENSOR" "$AMBIENT_RAIN_DEV" "$AMBIENT_RAIN_SLOPE" "$AMBIENT_RAIN_INTERCEPT" "$AMBIENT_RAIN" fi # # Read the Battery Voltage # case "$BATTERY_VOLTAGE_SENSOR" in HX711b) VOLTAGE=$(/home/hivetool/hx711b.sh) set -- junk $VOLTAGE shift RAW_BATTERY_VOLTAGE=$1 if [ -z "$RAW_BATTERY_VOLTAGE" ] then RAW_BATTERY_VOLTAGE="NULL" fi ;; HX711pyB) VOLTAGE=$(/home/hivetool/hx711pyB.sh) set -- junk $VOLTAGE shift RAW_BATTERY_VOLTAGE=$1 if [ -z "$RAW_BATTERY_VOLTAGE" ] then RAW_BATTERY_VOLTAGE="NULL" fi ;; *) RAW_BATTERY_VOLTAGE="NULL" ;; esac if [ "$RAW_BATTERY_VOLTAGE" != "NULL" ] then BATTERY_VOLTAGE=`echo "scale=2; (($RAW_BATTERY_VOLTAGE*$BATTERY_VOLTAGE_SLOPE)+$BATTERY_VOLTAGE_INTERCEPT)/1" | bc` printf "%-16s %12.2f %12s %24s %12.9f %8.3f %12.2f\n" "Battery Voltage" "$BATTERY_VOLTAGE" "$BATTERY_VOLTAGE_SENSOR" "$BATTERY_VOLTAGE_DEV" "$BATTERY_VOLTAGE_SLOPE" "$BATTERY_VOLTAGE_INTERCEPT" "$RAW_BATTERY_VOLTAGE" else BATTERY_VOLTAGE="NULL" printf "%-16s %12s %12s %24s %12.9f %8.3f %12s\n" "Battery Voltage" "$BATTERY_VOLTAGE" "$BATTERY_VOLTAGE_SENSOR" "$BATTERY_VOLTAGE_DEV" "$BATTERY_VOLTAGE_SLOPE" "$BATTERY_VOLTAGE_INTERCEPT" "$RAW_BATTERY_VOLTAGE" fi if [ -n "$WX_STATION_ID" ] then # # Get the weather from a local wx station via weatherunderground # echo echo "Downloading data from WeatherUnderground weather station $WX_STATION_ID to /tmp/wx.xml. cURL reports:" echo curl --retry 5 http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=$WX_STATION_ID > /tmp/wx.xml WX_DOWNLOAD_EXIT_CODE=$? if [ $WX_DOWNLOAD_EXIT_CODE -eq 0 ] then echo echo "Parsing weather data from /tmp/wx.xml" WX_TEMP_F=`grep temp_f /tmp/wx.xml | grep -o "[0-9]*\.[0-9]*"` WX_TEMP_C=`grep temp_c /tmp/wx.xml | grep -o "[0-9]*\.[0-9]*"` WX_RELATIVE_HUMIDITY=`grep relative_humidity /tmp/wx.xml | grep -o "[0-9]*"` WX_WIND_DIR=`grep wind_dir /tmp/wx.xml | grep -o "[A-Z]*"` WX_WIND_DEGREES=`grep wind_degrees /tmp/wx.xml | grep -o "[0-9]*"` WX_WIND_MPH=`grep wind_mph /tmp/wx.xml | grep -o "[0-9]*\.[0-9]*"` WX_WIND_GUST_MPH=`grep wind_gust_mph /tmp/wx.xml | grep -o "[0-9]*\.[0-9]*"` WX_PRESSURE_MB=`grep pressure_mb /tmp/wx.xml | grep -o "[0-9]*\.[0-9]*"` WX_DEWPOINT_F=`grep dewpoint_f /tmp/wx.xml | grep -o "[0-9]*\.[0-9]*"` WX_DEWPOINT_C=`grep dewpoint_c /tmp/wx.xml | grep -o "[0-9]*\.[0-9]*"` WX_PRECIP_1HR_IN=`grep precip_1hr_in /tmp/wx.xml | grep -o "[0-9]*\.[0-9]*"` WX_PRECIP_TODAY_IN=`grep precip_today_in /tmp/wx.xml | grep -o "[0-9]*\.[0-9]*"` fi fi # end if [ -n "$WX_STATION_ID" ] if [ -z "$WX_TEMP_F" ]; then WX_TEMP_F="NULL"; fi if [ -z "$WX_TEMP_C" ]; then WX_TEMP_C="NULL"; fi if [ -z "$WX_RELATIVE_HUMIDITY" ]; then WX_RELATIVE_HUMIDITY="NULL"; fi if [ -z "$WX_WIND_DIR" ]; then WX_WIND_DIR="NULL"; fi if [ -z "$WX_WIND_DEGREES" ]; then WX_WIND_DEGREES="NULL"; fi if [ -z "$WX_WIND_MPH" ]; then WX_WIND_MPH="NULL"; fi if [ -z "$WX_WIND_GUST_MPH" ]; then WX_WIND_GUST_MPH="NULL"; fi if [ -z "$WX_PRESSURE_MB" ]; then WX_PRESSURE_MB="NULL"; fi if [ -z "$WX_DEWPOINT_F" ]; then WX_DEWPOINT_F="NULL"; fi if [ -z "$WX_DEWPOINT_C" ]; then WX_DEWPOINT_C="NULL"; fi if [ -z "$WX_PRECIP_1HR_IN" ]; then WX_PRECIP_1HR_IN="NULL"; fi if [ -z "$WX_PRECIP_TODAY_IN" ]; then WX_PRECIP_TODAY_IN="NULL"; fi if [[ $VERBOSE -gt 0 ]] then # This is what gets logged. echo "WS Station ID " $WX_STATION_ID echo "WS Temperature " $WX_TEMP_F echo "WS Wind Direction " $WX_WIND_DIR echo "WS Wind Degrees " $WX_WIND_DEGREES echo "WS Wind Speed " $WX_WIND_MPH echo "WS Wind Gust " $WX_WIND_GUST_MPH echo "WS Dewpoint F " $WX_DEWPOINT_F echo "WS Dewpoint C " $WX_DEWPOINT_C echo "WS Humidity " $WX_RELATIVE_HUMIDITY echo "WS Pressure " $WX_PRESSURE_MB echo "WS Precip Today " $WX_PRECIP_TODAY_IN fi # # Append everything to a local flat text log file # echo echo "Logging to /home/hivetool/$HIVE_NAME.log" echo "$DATE,$HIVE_WEIGHT,$HIVE_TEMP,$HIVE_HUMIDITY,$AMBIENT_TEMP,$AMBIENT_HUMIDITY,$AMBIENT_LIGHT,$AMBIENT_RAIN,$WX_TEMP_F,$WX_WIND_DIR,$WX_WIND_DEGREES,$WX_WIND_MPH,$WX_WIND_GUST_MPH,$WX_DEWPOINT_F,$WX_DEWPOINT_C,$WX_RELATIVE_HUMIDITY,$WX_PRESSURE_MB,$WX_PRECIP_TODAY_IN" echo -ne "\n"$DATE,$HIVE_WEIGHT,$HIVE_TEMP,$HIVE_HUMIDITY,$AMBIENT_TEMP,$AMBIENT_HUMIDITY,$AMBIENT_LIGHT,$AMBIENT_RAIN,$WX_TEMP_F,$WX_WIND_DIR,$WX_WIND_DEGREES,$WX_WIND_MPH,$WX_WIND_GUST_MPH,$WX_DEWPOINT_F,$WX_DEWPOINT_C,$WX_RELATIVE_HUMIDITY,$WX_PRESSURE_MB,$WX_PRECIP_TODAY_IN>> /home/hivetool/$HIVE_NAME.log # # Insert it into a local SQL database # if [ "$DATABASE_LOCAL" = "YES" ] then echo echo "Inserting row in table HIVE_DATA in sqlite database /home/hivetool/hivetool_raw.db" #source /home/hivetool/sql.sh source /home/hivetool/sqlite.sh else echo echo "WARNING: Logging to local database disabled." fi # # Create hive1 xml data file # echo echo "Writing /tmp/hive.xml" echo "<hive_data>" > /tmp/hive.xml source /home/hivetool/xml.sh >> /tmp/hive.xml if [[ -n "$WX_STATION_ID" && "$WX_DOWNLOAD_EXIT_CODE" -eq 0 ]] ; then cat /tmp/wx.xml|grep -v "xml" >> /tmp/hive.xml; fi echo "</hive_data>" >> /tmp/hive.xml # # Send hive1 data to hivetool # # ### REMOVE ### # HIVETOOL_UPLOAD="YES" if [ "$HIVETOOL_UPLOAD" = "YES" ] then echo "Uploading /tmp/hive.xml to HiveTool.org. cURL reports:" echo #/usr/bin/curl --retry 3 -k -u $HIVETOOL_USER:$HIVETOOL_PASSWORD -X POST --data-binary @/tmp/hive.xml https://hivetool.org/private/log_hive9.pl -H 'Accept: application/xml' -H 'Content-Type: application/xml' 1>/tmp/hive_command.xml HTTP_STATUS=$(/usr/bin/curl --write-out "%{http_code}\n" --output /tmp/hive_command.xml --retry 3 -f -k -u $HIVETOOL_USER:$HIVETOOL_PASSWORD -X POST --data-binary @/tmp/hive.xml https://hivetool.org/private/log_hive9.pl -H 'Accept: application/xml' -H 'Content-Type: application/xml') EXIT_CODE=$? # # Test for login failure and suspend uploads to avoid blacklist # # # ### REMOVE EXIT_CODE=0 when working ### # setting EXIT_CODE to zero skips the next section of code that isn't working right. # EXIT_CODE=0 if [ $EXIT_CODE -ne 0 ] then echo echo "ERROR: curl upload failed. Exit code: $EXIT_CODE Server return code= $HTTP_STATUS" if [ $HTTP_STATUS -eq 401 ] then echo "Bad user/password. Uploads suspended." sed -i -e 's/HIVETOOL_UPLOAD=YES/HIVETOOL_UPLOAD=NO/' /home/hivetool/hive.conf fi if [ $HTTP_STATUS -eq 404 ] then echo "Bad URL. Uploads suspended." sed -i -e 's/HIVETOOL_UPLOAD=YES/HIVETOOL_UPLOAD=NO/' /home/hivetool/hive.conf fi fi echo echo "The server responed:" cat /tmp/hive_command.xml # # run a remote command # echo echo "Checking for hive command" /home/hivetool/hive_command.pl else echo echo "WARNING: Data uploads are disabled." fi # # End of hive.sh DATE=`date +"%Y-%m-%d %H:%M:%S"` echo "Finished /home/hivetool/hive.sh at $DATE"