#!/bin/sh
# Extract to stdout normalised (archived, not live) solar controller load.

# The output record/line format is:
#YYYY-MM,device,coverage,exp,comment

# Input file(s) glob pattern, ALSO PARSED FROM OUTSIDE this script.
INPUTGLOB="data/powermng/20????.log.gz"

# List of candidiate archived data files, in lexical order.
CANDS="$(ls -1 $INPUTGLOB)"


# Create header.
echo "#YYYY-MM,device,coverage,exp,comment"
# List input files.
for f in $CANDS;
    do
    echo '#input,"'"$f"'"'
    done

# Simple input format, using P (power, mW) * 10 min interval:
#2026/05/01T00:00:07Z AL 0 B1 12394 B2 -1 P 11985 BV 12056 ST OK D T A1P 0 B1T 19 UC 52 A1V 89
#2026/05/01T00:10:06Z AL 0 B1 12394 B2 -1 P 12010 BV 12073 ST OK D T A1P 0 B1T 19 UC 52 A1V 7
#2026/05/01T00:20:06Z AL 0 B1 12391 B2 -1 P 12007 BV 11994 ST OK - e A1P 0 B1T 19 UC 52 A1V 0
#2026/05/01T00:30:06Z AL 0 B1 12549 B2 -1 P 891 BV 12363 ST OK - t A1P 0 B1T 19 UC 68 A1V 0
#2026/05/01T00:40:06Z AL 0 B1 12549 B2 -1 P 854 BV 12433 ST OK D e A1P 0 B1T 19 UC 67 A1V 0
#2026/05/01T00:50:07Z AL 0 B1 12372 B2 -1 P 12026 BV 12047 ST OK D T A1P 0 B1T 19 UC 48 A1V 0


# Create by-month records.
# Assume for now that:
#   * each record is 10 minutes
#   * coverage is full unless < 144 data rows per day, for 28 or 30 days min
for f in  $CANDS;
do
    gzip -d < $f | awk -v "basename=$(basename $f)" '$8=="P" && $9>=0 {
        ++n;
        P = $9;
        mWh += P / 6;
    }
    END {
        YYYY=substr(basename,1,4);
        MM=substr(basename,5,2);
        rowsperday=144
        minrows=30*rowsperday
        if("02" == MM) { minrows=28*rowsperday; }
        coverage=1
        if(n < minrows) { coverage = n / minrows; }
        printf("%s-%s,SSMPPT,%.2f,%.1f\n", YYYY, MM, coverage, (int(mWh/100000 + 0.5)/10));
    }'
done
