#!/bin/sh
# Logs intraday grid-tie-PV generation samples in form:
#    20170822T14:00Z 2089
#    20170822T14:01Z 1737
#    20170822T14:03Z 1699
#    20170822T14:04Z 1367
#    20170822T14:05Z 1713
#    
#    # Note: sunnybeamtool may sometimes produce garbled output
#    # which may recover after a limited number of retries.

# Log directory.
LOGDIR=/var/log/SunnyBeam
#LOGDIR=/rw/docs-public/www.hd.org/Damon/Env/data/SunnyBeam


# Path within target dir.
TARGETFILE=`date -u +%Y%m%d`.log
# File containing last record; useful for make.
# May not be updated if latest data not 'interesting'.
LASTDATAFILE=LASTDATA.flag
# File owner
TARGETOWNER=dhd.dhd
# Path to 'dark' flag that indicates when there is no generation.
DARKFLAG=${LOGDIR}/DARK.flag
# Path to 'low' flag that indicates when too little to cover phantom loads.
LOWFLAG=${LOGDIR}/LOW.flag

# Binary.
SBTBIN=/usr/local/bin/sunnybeamtool

# Extract current generation in Watts.
W=`$SBTBIN | awk '/^pac: .* W$/ { print 0+$2 }'`

if [ -z "$W" ]; then exit 1; fi

# Set dark flag when not generating.
if [ "0" = "$W" ]; then
  if [ ! -e $DARKFLAG ]; then touch $DARKFLAG; fi
  if [ ! -e $LOWFLAG ]; then touch $LOWFLAG; fi
else
  rm -f $DARKFLAG
  # Low threshold chosen to cover mean 'base' loads, eg phantoms + fridge.
  LOWTHRESH=100
  if [ "$LOWTHRESH" -gt "$W" ]; then
    if [ ! -e $LOWFLAG ]; then touch $LOWFLAG; fi
  else
    rm -f $LOWFLAG;
  fi
fi

# TODO: take lock round this to avoid races.
# Append to logs.
# UNLESS file exists, this entry would be 0, and last entry was also zero,
# to save some space and storage traffic and energy, especially early morning.
if [ ! -e ${LOGDIR}/${TARGETFILE} -o "0" != "$W" -o "0" != "`tail -1 < ${LOGDIR}/${TARGETFILE} | awk '{print $2}'`" ]; then
    DATA="`date -u +%Y%m%dT%H:%MZ` $W"
    echo $DATA >> ${LOGDIR}/${TARGETFILE}
    # Try to ensure that log is globally readable.
    chmod a+r ${LOGDIR}/${TARGETFILE} ${LOGDIR}/${LASTDATAFILE}
fi

# Only update last-data flag on a change to save some effort/energy.
# Use this also to limit pushes to public data repo.
if [ ! -e ${LOGDIR}/${LASTDATAFILE} -o "`awk < ${LOGDIR}/${LASTDATAFILE} '{print $2}'`" != "$W" ]; then
    echo $DATA > ${LOGDIR}/${LASTDATAFILE}.tmp
    mv -f ${LOGDIR}/${LASTDATAFILE}.tmp ${LOGDIR}/${LASTDATAFILE}
    chmod a+r ${LOGDIR}/${LASTDATAFILE}
    # Send data out to public DB/repo.
    #mosquitto_pub -h opensensors.io -i 1128 -t '/users/DamonHD/16WW%20PV%20Grid-tie%20Generation' -m "$W" -u DamonHD -P `cat /local/ha/SunnyBeam/pass.1128.txt`
fi

# Hand over ownership.
chown -f ${TARGETOWNER} ${LOGDIR}/${TARGETFILE} ${LOGDIR}/${LASTDATAFILE}

exit 0
