Hive.sh

From HiveTool
Revision as of 16:08, 12 May 2019 by Paul (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

/home/hivetool/hive.sh is a bash script called by cron every 5 minutes that:

  1. gets the hostname and date/time,
  2. reads sensor calibration from config.conf (ver 0.5)
  3. reads the hive sensors,
  4. downloads the weather data in xml format from Weather Underground,
  5. appends the data to a text file,
  6. inserts a row in the local database,
  7. 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"