
#!/bin/bash
# File	: upload_sbeam_data_to_graphite.sh
# By	: MaartenDeBoer.nl, 2015-01-17
# Subject	: Script to upload SunnyBream data to Graphite
#(0.3)	: Add; search for SBEAM
#(0.4)	: Added GHOST, GPORT, RECUR
#(0.5),190417	: find in styead of `ls -l1`
#(0.6),191225	: Update name & Check DATADIR before running (to check is SunnyBEAM is connected to this system)
#set -x
PGM="`basename $0|cut -d\. -f1`"
VER="0.6"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
RESULT=""
UPLOADED="${HOME}/data/${PGM}.uploaded"
FILENAME=""
DAYFILE=""
MONTHFILE=""
YEARMON="`date +%Y-%m`"
GHOST="192.168.178.7"
GPORT="2003"
RECUR=""

DATADIR="/media/SBEAM/SBEAM"

USAGE()
{
  echo "Usage: ${PGM} [options]"
  echo "Options        : "
  echo "     -h        : This help"
  echo "     -v        : Verbose"
  echo "     -V        : Version"
  echo "     --day     : Day-file processing (yy-mm-dd.CSV)"
  echo "     --datadir : other DATADIR (${DATADIR})"
  echo "     --gport   : other Graphite HOST (${GHOST})"
  echo "     --ghost   : other Graphite PORT (${GPORT})"
  echo "     --recursive  : RECURSIVE (= ongoing)"
}

while [ ${#} -gt 0 ]
do
  case "${1}" in
    '-h')  USAGE; exit 1 ;;
    '-x')  set -x ;;
    '-V')  echo "Version=${VER}" ; exit 1 ;;
    '--day')  DAYFILE=1 ;;
    '--datadir')  DATADIR=${2}; shift  ;;
    '--ghost')  GHOST=${2}; shift  ;;
    '--gport')  GPORT=${2}; shift  ;;
    '--recursive')  RECUR=1  ;;
    *) echo "Option ${1} not found." ; USAGE; exit 1 ;;
  esac 
  shift
done

if [ "${DAYFILE}" == "" ] && [ "${MONTHFILE}" == "" ]; then
  echo "`date` No Day-file of Month-file choise made. Exiting ..."|tee -a ${LOG}
  USAGE
  exit 2
fi
if [ ! -d ${DATADIR} ]; then
  echo "`date` DATADIR (${DATADIR}) NOT found. Exiting ..."|tee -a ${LOG}
  exit 3
fi  # DATADIR

# Search for correct SunnyBEAM dir
DATADIR="`find /media -name SBEAM|head -1`"

echo "`date` ${PGM} v${VER} started. (DAYFILE=${DAYFILE}, MONTHFILE=${MONTHFILE})"|tee -a ${LOG}
echo "DATADIR=${DATADIR}"
echo "DAYFILE=${DAYFILE}"
echo "FILENAME=${FILENAME}"
echo "MONTHFILE=${MONTHFILE}"
echo "GHOST=${GHOST}"
echo "GPORT=${GPORT}"
echo "PGM=${PGM}"
echo "RECUR=${RECUR}"
echo "VER=${VER}"
sleep 1

touch ${UPLOADED}

echo "  Finding the next day ..."

if [ ${DAYFILE} ]; then
  FILENAME=`find ${DATADIR} -name "1?-??-??.CSV"|egrep -vf ${UPLOADED}| head -1`
  echo "  FILENAME=${FILENAME}."|tee -a ${LOG}
  if [ "${FILENAME}" == "" ]; then
    echo "Empty FILENAME. Exiting ...  "|tee -a ${LOG}
    exit 1
  fi
  echo "  FILENAME=${FILENAME}"
  cat ${FILENAME}|grep '0\;'|grep -v '\---'|while read LINE
  do
    echo ${LINE}
    YR="20`basename ${FILENAME}|cut -d\- -f1`"
    MON="`basename ${FILENAME}|cut -d\- -f2`"
    DAY="`basename ${FILENAME}|cut -d\- -f3|cut -d\. -f1`"
    HR="`echo ${LINE}|cut -d\; -f1|cut -d\: -f1`"
    MIN="`echo ${LINE}|cut -d\; -f1|cut -d\: -f2`"
    GEN="`echo ${LINE}|cut -d\; -f2|sed 's/,//g'`"
    EPOCH=`date +%s -d"${YR}-${MON}-${DAY} ${HR}:${MIN}"`
    echo "  ${YR}${MON}${DAY} ${HR}:${MIN} (${EPOCH}) ${GEN}"|tee -a ${LOG}

    echo "domotica.nl.agrarix.solar.generated ${GEN} ${EPOCH}"|nc ${GHOST} ${GPORT}
    EC="${?}"
    echo "EC=${EC}"
  done  # cat
  basename ${FILENAME}|tee -a ${UPLOADED}
fi  # DAYFILE

echo "`date` ${PGM} finished."|tee -a ${LOG}

if [ ${RECUR} ]; then
  $0 --day --recursive
fi

exit 0

