
#!/bin/sh
# File	: proc_sbeam-data.sh
# By	: MaartenDeBoer.nl, 240801
# Subject	: Script to process SBEAM data for web-page
#(0.2),240802	: Add WWW_UPD
#(0.3),241001	: Upd WWW_DIR, Add FFACE & FSIZE
#(0.4),241101	: Add RCFILE, YR TTL
#(0.5),241101	: Add YR_CNT (disabled) + Some mod's
#(0.6),241230	: Upd's
PGM=`basename $0|cut -d\. -f1`
VER="0.6"
TMP="/tmp/${PGM}.$$"
CSV="/tmp/${PGM}.csv"
LOG="${HOME}/log/${PGM}.log"
RCFILE="${HOME}/etc/${PGM}.rc"

HOSTNAME=`hostname|cut -d\. -f1`

MONTH_CSV="/tmp/${PGM}_month.csv"
MAILTO="sbeam@agrarix.nl"
MAILTO=""

WWW_UPD=""
WWW_UPD=1
WWW_DIR="/mnt/nas/WWW/domains/www.agrarix.net/pages/sbeam"
HTML="${WWW_DIR}/index.html"

FFACE="verdana"
FSIZE=6

DATA_DIR="/mnt/nas/DATA/SBEAM"
FILTER="2"

if [ "${1}" != "" ]; then
  FILTER="${1}"
fi  # <> $1

DATI=`date +%Y-%m-%d-%H-%M-%S`
echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
if [ -f ${RCFILE} ]; then
  echo "  RCFILE(${RCFILE}) found. Using it"|tee -a ${LOG}
  . ${RCFILE}
fi  # RCFILE
echo "  CSV=${CSV}"
echo "  DATA_DIR=${DATA_DIR}"
echo "  DATI=${DATI}"
echo "  FILTER(1)=${FILTER}"
echo "  HOSTNAME=${HOSTNAME}"
echo "  HTML=${HTML}"
echo "  RCFILE=${RCFILE}"
echo "  MAILTO=${MAILTO}"
echo "  MONTH_CSV=${MONTH_CSV}"
echo "  WWW_DIR=${WWW_DIR}"
echo "  WWW_UPD=${WWW_UPD}"
sleep 1

if [ ! -d ${DATA_DIR} ]; then
  echo "  NO DATA_DIR (${DATA_DIR}) found. Exiting ..."|tee -a ${LOG}
  exit 4
fi  # <> DATA_DIR
if [ ! -d ${WWW_DIR} ]; then
  echo "  NO WWW_DIR (${WWW_DIR}) found. Exiting ..."|tee -a ${LOG}
  exit 5
fi  # <> DATA_DIR

touch ${TMP}.numbers
if [ ! -f ${MONTH_CSV} ]; then
  echo "  Processing month-files into MONTH_CSV(${MONTH_CSV}) ..."
  echo "# MONth ; # kWh; " > ${MONTH_CSV}

  PREV_YEAR_NUMBER=0
  LAST_YEAR_NUMBER=0
  YR_CNT=0
  YEAR=2100
  LAST_NUMBER=0

  cd ${DATA_DIR}
  ls -1 20[0-9][0-9]-[01][0-9].CSV|grep "${FILTER}"|while read CSV_FILE
  do
    echo "  ${CSV_FILE}"

# ;SN: 2002278782;SN: 2002278782
    SER_NR=`grep "SN:" ${CSV_FILE}|cut -d\; -f2 |cut -d\: -f2|sed 's/ //g'`
echo "    SER_NR=${SER_NR}"

    FIRST_DAY_LINE=`cat ${CSV_FILE}| grep -v ^#|grep '^01-*-*'`
    if [ "${FIRST_DAY_LINE}" != "" ]; then
      FIRST_DATE=`echo ${FIRST_DAY_LINE}|cut -d\; -f1`
      FIRST_NUMBER=`echo ${FIRST_DAY_LINE}|cut -d\; -f2|cut -d\, -f1`
      if [ "${FIRST_NUMBER}" = "-" ]; then
        FIRST_NUMBER=`cat ${CSV_FILE}|grep -v ^#|grep -v ${SER_NR}|cut -d\; -f2|cut -d\, -f1|grep -v ^\-|grep "^[0-9]"|head -1`
#grep -v ^#|grep -v 2002278782|cut -d\; -f2|cut -d\, -f1|grep -v ^\-|grep "^[0-9]"|head -1

echo "    FIRST_NUMBER=${FIRST_NUMBER}"
      fi
      FIRST_DAY=`echo ${FIRST_DAY_LINE}|cut -d\; -f3|cut -d\, -f1`
      if [ "${FIRST_DAY}" = "-" ]; then
        FIRST_DAY=0
      fi

      LAST_DAY_LINE=`cat ${CSV_FILE}| tail -1`
      LAST_DATE=`echo ${LAST_DAY_LINE}|cut -d\; -f1`
      LAST_NUMBER=`echo ${LAST_DAY_LINE}|cut -d\; -f2|cut -d\, -f1`

      FROM_NUMBER=`expr ${FIRST_NUMBER} - ${FIRST_DAY}`
      TO_NUMBER="${LAST_NUMBER}"
      MON_DIFF=`expr ${TO_NUMBER} - ${FROM_NUMBER}`

      echo "  FIRST_DAY_LINE=${FIRST_DAY_LINE}"
      echo "  LAST_DAY_LINE=${LAST_DAY_LINE}"
      echo "  FIRST_DATE=${FIRST_DATE} FIRST_NUMBER=${FIRST_NUMBER} FIRST_DAY=${FIRST_DAY}"
      echo "  LAST_DATE=${LAST_DATE} LAST_NUMBER=${LAST_NUMBER}"
      echo "  TO_NUMBER=${TO_NUMBER} - FROM_NUMBER=${FROM_NUMBER} = MON_DIFF=${MON_DIFF}"

      echo "LAST_NUMBER=${LAST_NUMBER}" > ${TMP}.numbers
      echo "YEAR=${YEAR}" >> ${TMP}.numbers
      echo "PREV_YEAR_NUMBER=${PREV_YEAR_NUMBER}" >> ${TMP}.numbers

      MON=`echo ${CSV_FILE}|cut -d\. -f1`
      echo "${MON};${MON_DIFF};"|tee -a ${MONTH_CSV}

      if [ "${MON_DIFF}" != "" ] && [ ${MON_DIFF} -gt 0 ]; then
        YR_CNT=`expr ${YR_CNT} + ${MON_DIFF}`
        echo "  YR_CNT=${YR_CNT} "
      fi  # 

  # Find last total value /year
      YEAR=`echo ${CSV_FILE} |cut -d\- -f1`
      echo "  YEAR=${YEAR}"
      if [ "${CSV_FILE}" = "${YEAR}-12.CSV" ]; then
        LAST_YEAR_NUMBER="${LAST_NUMBER}"
        DIFF_YEAR_NUMBER=`expr ${LAST_YEAR_NUMBER} - ${PREV_YEAR_NUMBER}`
        echo "  ${YEAR}-12.csv : ${LAST_YEAR_NUMBER} - ${PREV_YEAR_NUMBER} = ${DIFF_YEAR_NUMBER}"

#        echo "${YEAR}-Cnt;${YR_CNT};"|tee -a ${MONTH_CSV}
        echo "${YEAR}-gr.ttl;${LAST_YEAR_NUMBER};"|tee -a ${MONTH_CSV}
        echo "${YEAR}-Y.ttl;${DIFF_YEAR_NUMBER};"|tee -a ${MONTH_CSV}


        PREV_YEAR_NUMBER="${LAST_YEAR_NUMBER}"
        YR_CNT=0
      fi  # CSV_FILE=YEAR}-12.csv

    fi  # ${FIRST_DAY_LINE}" != ""

  done  # CSV_FILE

# Last kWh number
  LAST_NUMBER=`cat ${TMP}.numbers|grep "^LAST_NUMBER"|cut -d\= -f2`
  PREV_YEAR_NUMBER=`cat ${TMP}.numbers|grep "^PREV_YEAR_NUMBER"|cut -d\= -f2`
  YEAR=`cat ${TMP}.numbers|grep "^YEAR"|cut -d\= -f2`

  LAST_GR_TTL_CSV=`grep "*gr.ttl" ${MONTH_CSV}|tail -1`
  if [ "${LAST_GR_TTL_CSV}" = "" ]; then
    LAST_GR_TTL_CSV=0
  fi  # "" 
  
  DIFF_YEAR_NUMBER=`expr ${LAST_NUMBER} - ${PREV_YEAR_NUMBER}`
# kWh = gr.ttl (Grant Total)
echo "LAST_GR_TTL_CSV=${LAST_GR_TTL_CSV}"
echo "LAST_NUMBER=${LAST_NUMBER}"
  if [ ${LAST_GR_TTL_CSV} -eq ${LAST_NUMBER} ]; then
# No need for saving. The last 2 CSV-entries are the same.
    echo "${YEAR}-kWh;${LAST_NUMBER};"|tee -a ${MONTH_CSV}
    echo "${YEAR}-Ttl;${DIFF_YEAR_NUMBER};"|tee -a ${MONTH_CSV}
  fi  # LAST .. = LAST

  sleep 1
fi  # ! -f ${MONTH_CSV}


# Proc Month_numbers
echo "# Months =>" > ${TMP} 
echo -n "   ;" >> ${TMP} 

cat ${MONTH_CSV}|grep -v ^#|cut -d\; -f1|cut -d\- -f2|sort -u|while read MONTH
do
  echo -n " ${MONTH} ;"|tee -a ${TMP}
done  # MONTH
echo ""|tee -a ${TMP}

cat ${MONTH_CSV}|grep -v ^#|cut -d\; -f1|cut -d\- -f1|sort -u|while read YEAR
do
  echo -n "${YEAR};"|tee -a ${TMP}
  cat ${MONTH_CSV}|grep -v ^#|cut -d\; -f1|cut -d\- -f2|sort -u|while read MONTH
  do
    YR_MON_VALUE=`grep "^${YEAR}-${MONTH}" ${MONTH_CSV}|cut -d\; -f2|head -1`
    echo -n "${YR_MON_VALUE};" |tee -a ${TMP}
  done  # MONTH
  echo ""|tee -a ${TMP}
done  # YEAR
echo ""|tee -a ${TMP}

cat ${TMP}

if [ ${WWW_UPD} ]; then
  echo "  Updating WWW (${HTML})"|tee -a ${LOG}
  echo "<HTML>" > ${HTML}
  echo "  <HEAD>" >> ${HTML}
  echo "  <META NAME=\"generator\" content=\"Agrarix.IT:${PGM} v${VER}\" /> " >> ${HTML}
  echo "  <META NAME=\"up-date\" content=\"${DATI}\" /> " >> ${HTML}
  echo "  </HEAD>" >> ${HTML}
  echo "  <TITLE>SunnyBEAM DATA</TITLE>" >> ${HTML}
  echo "  <LINK REL=\"icon\" HREF=\"Agrarix-Pingu_2017.jpg\" TYPE=\"image/jpg\"> " >> ${HTML}

  echo "  <BODY>" >> ${HTML}

  echo "    <H1>SunnyBEAM DATA</H1>" >> ${HTML}
  echo "    <H2>Numbers in kWh</H2>" >> ${HTML}
  echo "    <HR>" >> ${HTML}

  echo "    <TABLE border=1>" >> ${HTML}

  echo "      <TR>" >> ${HTML}
  echo "        <TH><FONT FACE=${FFACE} SIZE=${FSIZE}>YR/mn</FONT></TH>" >> ${HTML}
  cat ${MONTH_CSV}|grep -v ^#|cut -d\; -f1|cut -d\- -f2|sort -u|while read MONTH
  do
    echo "        <TH><FONT FACE=${FFACE} SIZE=${FSIZE}>${MONTH}</FONT></TH>" >> ${HTML}
  done  # MONTH
  echo "      </TR>" >> ${HTML}

  echo "      <TR>" >> ${HTML}

  cat ${MONTH_CSV}|grep -v ^#|cut -d\; -f1|cut -d\- -f1|sort -u|while read YEAR
  do
    echo "${YEAR}"
    echo "        <TD><FONT FACE=${FFACE} SIZE=${FSIZE}>${YEAR}</FONT></TD>"  >> ${HTML}
    cat ${MONTH_CSV}|grep -v ^#|cut -d\; -f1|cut -d\- -f2|sort -u|while read MONTH
    do
      YR_MON_VALUE=`grep "^${YEAR}-${MONTH}" ${MONTH_CSV}|cut -d\; -f2`
      echo "      <TD><FONT FACE=${FFACE} SIZE=${FSIZE}>${YR_MON_VALUE}</FONT></TD>"  >> ${HTML}
    done  # MONTH

    echo "      </TR>"  >> ${HTML}
  done  # YEAR

  echo "    </TABLE>" >> ${HTML}


  echo "<HR>" >> ${HTML}
  echo "  <H6>`date` ${PGM} v${VER} at ${HOSTNAME} </H6>" >> ${HTML}
  echo "  </BODY>" >> ${HTML}
  echo "</HTML>" >> ${HTML}
fi  # WWW_UPD

if [ "${MAILTO}" != "" ]; then
  cp ${TMP} ${CSV}
  date | mailx -s "SunnyBEAM anal [${PGM} v${VER}]" -A ${CSV} "${MAILTO}"
  echo "  Mailed to ${MAILTO}"|tee -a ${LOG}
fi

cat ${TMP}.numbers

rm ${TMP} ${TMP}.numbers
echo "`date` ${PGM} v${VER} finished."|tee -a ${LOG}
exit 0

