
#!/bin/bash
# File	: upload_sunnybeam_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),190921	: Mod --recurring (--recursive), When EC<>0, the EX=1 (do onot save file)
#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=""
EX=""

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 "     --recurring : RECURRING (= 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  ;;
    '--recurring')  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

# 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 "EX=${EX}"
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 ..."
touch ${TMP}.ex

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(1) ...  "|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}"
    echo ${EC} > ${TMP}.ex
  done  # cat
# when ExicCode (of upload is 0 = OK), then save date in UPLOADED
  EX=`cat ${TMP}.ex`
  if [ ${EX} -eq 0 ]; then
    basename ${FILENAME}|tee -a ${UPLOADED}
  fi
fi  # DAYFILE

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

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

rm ${TMP}.ex
exit 0

