
#!/bin/bash
# File	: post_sunnybeam_data_to_pvoutput.sh
# By	: MaartenDeBoer.nl, 2015-01-17
# Subject	: script to upload SunnyBream data to PVoutput.org
#(0.2)	: Added status (Power post)
#(0.3)	: Add USAGE & options
#(0.4}	: Check lessthen 90 days
#(0.5)	: Added --datadir
#(0.6)	: Add FILENAME (month) grep -v Y-M
#(0.7)	: Mod. UPLOADED; ls -1 MONTHFILES
#(0.8)	: Mod. Search for correct SBEAM dir for DATADIR
#(0.9),170726	: Update with touch ${UPLOADED}
#set -x
PGM="`basename $0|cut -d\. -f1`"
VER="0.9"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
RESULT=""
UPLOADED="${HOME}/data/${PGM}.uploaded"
FILENAME=""
DAYFILE=""
MONTHFILE=""
YEARMON="`date +%Y-%m`"

DATADIR="/media/SBEAM/SBEAM"

CURLTIMEOUT=60
PVOUTPUTKEY="1673227d21b19ecc40be377923276447b2a0a17d"
PVOUTPUTSID="25735"

touch ${UPLOADED}


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 "     --month   : Month-file processing (yyyy-mm.CSV)"
  echo "     --datadir : other DATADIR (${DATADIR})"
}

while [ ${#} -gt 0 ]
do
  case "${1}" in
    '-h')  USAGE; exit 1 ;;
    '-x')  set -x ;;
    '-V')  echo "Version=${VER}" ; exit 1 ;;
    '--day')  DAYFILE=1 ;;
    '--month')  MONTHFILE=1 ;;
    '--datadir')  DATADIR=${2}; shift  ;;
    *) 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 SBEAM dir
DATADIR="`find /media -name SBEAM|tail -1`"
DATADIR="`find /mnt -name SBEAM|tail -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 "PGM=${PGM}"
echo "VER=${VER}"


if [ ${MONTHFILE} ]; then
# Latest file first
  FILENAME="`ls -1 ${DATADIR}/20??-??.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
  cat ${FILENAME}|grep '\-20'|grep -v '\---'|while read LINE
  do
    echo ${LINE}
    YR="`echo ${LINE}|cut -d\; -f1|cut -d\- -f3`"
    MON="`echo ${LINE}|cut -d\; -f1|cut -d\- -f2`"
    DAY="`echo ${LINE}|cut -d\; -f1|cut -d\- -f1`"
    GEN="`echo ${LINE}|cut -d\; -f3|sed 's/,//g'`"
    echo "  ${YR}${MON}${DAY} ${GEN}"|tee -a ${LOG}
#   For day-data, kWhr
#   http://pvoutput.org/help.html#api-addoutput
  PVOUTPUTURL="http://pvoutput.org/service/r2/addoutput.jsp"
#   Output
#   d=Output Date [yyymmdd, date]
#   g=Generated [number, watt hours]
    RESULT=$(/usr/bin/curl -s -S --max-time $CURLTIMEOUT  -d "d=${YR}${MON}${DAY}" -d "g=${GEN}" -H "X-Pvoutput-Apikey: $PVOUTPUTKEY" -H "X-Pvoutput-SystemId: $PVOUTPUTSID" $PVOUTPUTURL 2>&1)

    echo "  ${RESULT} "|tee -a ${LOG}
  done  # cat
# when the filename is same as this YEAR-MONth, then do not save
  basename ${FILENAME}|grep -v ${YEARMON}|tee -a ${UPLOADED}
fi  # MONTH


if [ ${DAYFILE} ]; then
  FILENAME="`ls -1r ${DATADIR}/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
  YEARMONDAY="201`echo ${FILENAME}|cut -d1 -f2|cut -d\. -f1|sed 's/\-//g'`"
  DAYS90="`date +%Y%m%d --date="-90 days"`"
  if [[ "${YEARMONDAY}" < "${DAYS90}" ]]; then
    echo "  Date is olther then 90 days. Exiting ...  "|tee -a ${LOG}
    basename ${FILENAME} | tee -a ${HOME}/data/${PGM}.uploaded
    exit 3
  fi

  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'`"
    echo "  ${YR}${MON}${DAY} ${HR}:${MIN} ${GEN}" |tee -a ${LOG}

#   http://pvoutput.org/help.html#api-addstatus
    PVOUTPUTURL="http://pvoutput.org/service/r2/addstatus.jsp"
#   Status
#   d=Output Date [yyymmdd, date]
#   t=Time [hh:mm	time]
#   v2=Power Generation [number, watts]
    RESULT=$(/usr/bin/curl -s -S --max-time $CURLTIMEOUT  -d "d=${YR}${MON}${DAY}" -d "t=${HR}:${MIN}" -d "v2=${GEN}" -H "X-Pvoutput-Apikey: $PVOUTPUTKEY" -H "X-Pvoutput-SystemId: $PVOUTPUTSID" $PVOUTPUTURL 2>&1)

    echo "  ${RESULT} "|tee -a ${LOG}
  done  # cat
  basename ${FILENAME}|tee -a ${UPLOADED}
fi  # DAYFILE

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

