X-Git-Url: https://zdv2.bktei.com/gitweb/EVA-2020-02.git/blobdiff_plain/1d2b85aa3aad5e487eb619e373000c047be63143..7df2db7e26e6a4361b4e960a32c88c17b5697d28:/exec/bkgpslog?ds=inline diff --git a/exec/bkgpslog b/exec/bkgpslog index 7a4487f..d425434 100755 --- a/exec/bkgpslog +++ b/exec/bkgpslog @@ -14,7 +14,7 @@ DIR_TMP_DEFAULT="/dev/shm"; # Default parent of working directory SCRIPT_TIME_START=$(date +%Y%m%dT%H%M%S.%N); PATH="$HOME/.local/bin:$PATH"; # Add "$(systemd-path user-binaries)" path in case apps saved there SCRIPT_HOSTNAME=$(hostname); # Save hostname of system running this script. -SCRIPT_VERSION="0.4.4-alpha"; # Define version of script. +SCRIPT_VERSION="0.5.3"; # Define version of script. SCRIPT_NAME="bkgpslog"; # Define basename of script file. SCRIPT_URL="https://gitlab.com/baltakatei/ninfacyzga-01"; # Define wesite hosting this script. AGE_VERSION="1.0.0-beta2"; # Define version of age (encryption program) @@ -950,8 +950,8 @@ magicBufferSleepPID() { ### PID Control factors K_P=1; # Gain for compensating buffer round lag - T_I="$((4*BUFFER_TTL_NS))"; # Consider this number of past nanoseconds to eliminate error - T_D="$((1*BUFFER_TTL_NS))"; # Predict value this number of nanoseconds into the future + T_I="$(((4)*BUFFER_TTL_NS/(1)))"; # Consider this number of past nanoseconds to eliminate error + T_D="$(((1)*BUFFER_TTL_NS/(1)))"; # Predict value this number of nanoseconds into the future # Calculate Error, errNS, in nanoseconds ## Get current time @@ -976,12 +976,18 @@ magicBufferSleepPID() { # for value in "${errorHistory[@]}"; do # errReset=$(( errReset + ( value*BUFFER_TTL_NS ) )); # done; - errReset="$(( (errReset + (errNS*BUFFER_TTL_NS)) ))" && vbm "errReset:$errReset"; + vbm "errReset(orig):$errReset" + errReset="$(( (errReset + (errNS*BUFFER_TTL_NS)) ))" && vbm "errReset(post):$errReset"; # errResetx10e3="$(( ( errResetx10e3 + ( errNSx10e3 * BUFFER_TTL_NS ) )*10**3 ))" && vbm "errResetx10e3:$errResetx10e3"; # Calculate errRate in nanoseconds per nanosecond errRate="$(( errNS / BUFFER_TTL_NS ))" && vbm "errRate:$errRate"; # errRatex10e3="$(( ( errNSx10e3 ) / BUFFER_TTL_NS ))" && vbm "errRatex10e3:$errRatex10e3"; + + # Debug + vbm "errNS :$errNS"; + vbm "errResetTerm:$((errReset/T_I))"; + vbm "errRateTerm :$((errRate*T_D))"; # Calculate PID control signal ## ADJ = K_P * (errNS + errReset/T_I + errRate*T_D) @@ -1000,13 +1006,12 @@ magicBufferSleepPID() { fi; ## Calculate nanosecond remainder ### Remove integer - BUFFER_TTL_ADJ_FLOATFRAC="$((BUFFER_TTL_ADJ_NS - (BUFFER_TTL_ADJ_INT*(10**9)) ))"; + BUFFER_TTL_ADJ_FLOATFRAC="$((BUFFER_TTL_ADJ_NS - (BUFFER_TTL_ADJ_INT*(10**9)) ))" && vbm "BUFFER_TTL_ADJ_FLOATFRAC:$BUFFER_TTL_ADJ_FLOATFRAC"; ### Calc absolute value of fraction (by removing '-' if present; see https://stackoverflow.com/a/47240327 - BUFFER_TTL_ADJ_FLOATFRAC="${BUFFER_TTL_ADJ_FLOAT_FRAC#-}" && vbm "BUFFER_TTL_ADJ_FLOATFRAC:$BUFFER_TTL_ADJ_FLOATFRAC"; + BUFFER_TTL_ADJ_FLOATFRAC="${BUFFER_TTL_ADJ_FLOATFRAC#-}" && vbm "BUFFER_TTL_ADJ_FLOATFRAC:$BUFFER_TTL_ADJ_FLOATFRAC"; ## Form float BUFFER_TTL_ADJ_FLOAT BUFFER_TTL_ADJ_FLOAT="$BUFFER_TTL_ADJ_INT"."$BUFFER_TTL_ADJ_FLOATFRAC" && vbm "BUFFER_TTL_ADJ_FLOAT:$BUFFER_TTL_ADJ_FLOAT"; vbm "STATUS:Calculated adjusted BUFFER_TTL (seconds):$BUFFER_TTL_ADJ_FLOAT"; - sleep 1 # Debug } # Calc BUFFER_TTL_ADJ_FLOAT so buffer starts every BUFFER_TTL seconds magicWriteVersion() { # Desc: Appends time-stamped VERSION to PATHOUT_TAR @@ -1051,15 +1056,15 @@ magicGatherWriteBuffer() { # Depends: magicWriteVersion(), appendFileTar() local FN + vbm "DEBUG:STATUS:$FN:Started magicGatherWriteBuffer()."; # Debug:Get function name FN="${FUNCNAME[0]}"; # Create buffer file with unique name - PATHOUT_BUFFER="$DIR_TMP/buffer$SECONDS"; + PATHOUT_BUFFER="$DIR_TMP/buffer$SECONDS" && vbm "PATHOUT_BUFFER:$PATHOUT_BUFFER"; # Fill buffer timeout "$BUFFER_TTL"s gpspipe -r -o "$PATHOUT_BUFFER" ; - timeBufferStart="$(dateTimeShort "$(date --date="$BUFFER_TTL seconds ago")")"; # Note start time - vbm "DEBUG:STATUS:$FN:Started magicWriteBuffer()."; + timeBufferStart="$(dateTimeShort "$(date --date="$BUFFER_TTL seconds ago")" )" && vbm "timeBufferStart:$timeBufferStart"; # Note start time # Determine file paths (time is start of buffer period) FILEOUT_BASENAME="$timeBufferStart""--""$bufferTTL_STR""..""$SCRIPT_HOSTNAME""_location" && vbm "STATUS:Set FILEOUT_BASENAME to:$FILEOUT_BASENAME"; ## Files saved to DIR_TMP @@ -1094,7 +1099,7 @@ magicGatherWriteBuffer() { # Remove secured chunks from DIR_TMP rm "$PATHOUT_BUFFER" "$PATHOUT_NMEA" "$PATHOUT_GPX" "$PATHOUT_KML"; - vbm "DEBUG:STATUS:$FN:Finished magicWriteBuffer()."; + vbm "DEBUG:STATUS:$FN:Finished magicGatherWriteBuffer()."; } # write buffer to disk magicParseRecipientDir() { # Desc: Updates recPubKeysValid with pubkeys in dir specified by '-R' option ("recipient directory") @@ -1253,7 +1258,7 @@ magicParseCustomTTL() { ## T: Check if argCustomBufferTTL is an integer if validateInput "$argCustomBufferTTL" "integer"; then ### T: argCustomBufferTTL is an integer - BUFFER_TTL="$argCustomBufferTTL"; + BUFFER_TTL="$argCustomBufferTTL" && vbm "Custom BUFFER_TTL from -b:$BUFFER_TTL"; else ### F: argcustomBufferTTL is not an integer yell "ERROR:Invalid integer argument for custom buffer time-to-live."; showUsage; exit 1; @@ -1266,7 +1271,7 @@ magicParseCustomTTL() { ## T: Check if argCustomScriptTTL is a time element (ex: "day", "hour") if validateInput "$argCustomScriptTTL" "time_element"; then ### T: argCustomScriptTTL is a time element - SCRIPT_TTL_TE="$argCustomScriptTTL"; + SCRIPT_TTL_TE="$argCustomScriptTTL" && vbm "Custom SCRIPT_TTL_TE from -B:$SCRIPT_TTL_TE"; else ### F: argcustomScriptTTL is not a time element yell "ERROR:Invalid time element argument for custom script time-to-live."; showUsage; exit 1; @@ -1322,13 +1327,13 @@ main() { CMD_CONV_KML="gpsbabel -i nmea -f - -o kml -F - " && vbm "STATUS:Set CMD_CONV_KML to:$CMD_CONV_KML"; # convert NMEA to KML # MAIN LOOP:Record gps data until script lifespan ends - timeBufferFirstNS="$(timeEpochNS)"; bufferRound=0; BUFFER_TTL_ADJ_FLOAT="10.0"; + timeBufferFirstNS="$(timeEpochNS)"; bufferRound=0; BUFFER_TTL_ADJ_FLOAT="$BUFFER_TTL"; while [[ "$SECONDS" -lt "$SCRIPT_TTL" ]]; do magicParseRecipientDir; magicGatherWriteBuffer & - sleep "$BUFFER_TTL_ADJ_FLOAT"; + sleep "$BUFFER_TTL_ADJ_FLOAT"; # adjusted by magicBufferSleepPID ((bufferRound++)); - magicBufferSleepPID; # Calculates BUFFER_TTL_ADJ from BUFFER_TTL given buffer expected start time vs. actual + magicBufferSleepPID; # Calculates BUFFER_TTL_ADJ_FLOAT from BUFFER_TTL given buffer expected start time vs. actual done # Cleanup