#!/bin/bash # Author: Steven Baltakatei Sandoval #== Variable Initialization == #== Global constants == PATH="/usr/local/bin/:$PATH" # Add default OpenTimestamps path to PATH (necessary if cron used to call this script) PATH="/opt/bktei:$PATH" # Add default baltakatei script install directory to PATH (necessary for other bk scripts) SCRIPT_HOSTNAME=$(hostname) # Save hostname of system running this script. SCRIPT_VERSION="bkgpslog 0.0.1" # Define version of script. SCRIPT_TIME_SHORT="$(date +%Y%m%dT%H%M%S%z)" # Save current date & time in ISO-8601 format. SCRIPT_DATE_SHORT="$(date +%Y%m%d)" # Save current date in ISO-8601 format. #DIROUT1="/home/pi/Sync/Evanescent_Location" # Define output directory. #== Script Function Definitions == # Yell, Die, Try Three-Fingered Claw technique # Ref/Attrib: https://stackoverflow.com/a/25515370 yell() { echo "$0: $*" >&2; } die() { yell "$*"; exit 111; } try() { "$@" || die "cannot $*"; } echoerr() { echo "$@" 1>&2; # Define stderr echo function. } # Define stderr message function. showUsage() { echoerr "USAGE:" echoerr " bkgpslog.sh [ options ]" echoerr echoerr "OPTIONS:" echoerr " -h, --help" echoerr " Display help information." echoerr echoerr " --version" echoerr " Display script version." echoerr echoerr " -v, --verbose" echoerr " Display debugging info." echoerr echoerr " -o, --output [ directory ]" echoerr " Specify output directory to save logs." } # Display information on how to use this script. showVersion() { echoerr "$SCRIPT_VERSION" } # Display script version. vbm() { if [ $OPTION_VERBOSE -eq "true" ]; then echoerr "$@" fi } # Verbose message display function. processArguments() { while [ ! $# -eq 0 ]; do # While number of arguments ($#) is not (!) equal to (-eq) zero (0). echoerr "DEBUG:Starting processArguments while loop." echoerr "DEBUG:Provided arguments are:""$@" case "$1" in --h | --help) showUsage; exit 1;; # Display usage. --version) showVersion; exit 1;; # Show version --v | --verbose) OPTION_VERBOSE="true"; vbm "DEBUG:Verbose mode enabled.";; # Enable verbose mode. --o | --output) if [ -d "$2" ]; then DIROUT1="$2"; fi ;; # Define output directory. *) echoerr "ERROR: Unrecognized argument."; exit 1;; # Handle unrecognized options. esac shift done } # Argument Processing checkExecutables() { } # Check that certain executables exist. main() { processArguments # Process arguments. checkExecutables "gpspipe" # Confirm that executables necessary to run are available. } # Main function. if [[ -d "$DIROUT1" ]] && command -v "gpspipe" 1>/dev/null 2>/dev/null ; then while true; do #echoerr "DEBUG:Starting while loop." # Update time constants TIME_CURRENT="$(date --iso-8601=seconds)" ; #echoerr "DEBUG:TIME_CURRENT is:""$TIME_CURRENT" ; TIME_CURRENT_SHORT="$(date -d "$TIME_CURRENT" +%Y%m%dT%H%M%S%z)" #echoerr "DEBUG:TIME_CURRENT_SHORT is""$TIME_CURRENT_SHORT" DATE_CURRENT="$(date -d "$TIME_CURRENT" --iso-8601=date)" ; #echoerr "DEBUG:DATE_CURRENT is:""$DATE_CURRENT" ; DATE_CURRENT_SHORT="$(date -d "$TIME_CURRENT" +%Y%m%d)" ; #echoerr "DEBUG:DATE_CURRENT is:""$DATE_CURRENT_SHORT" ; DATE_TOMORROW="$(date -d "$TIME_CURRENT next day" --iso-8601=date)" ; #echoerr "DEBUG:DATE_TOMORROW is:""$DATE_TOMORROW" ; TIME_NEXT_MIDNIGHT="$(date -d "$DATE_TOMORROW" --iso-8601=seconds)" ; #echoerr "DEBUG:TIME_NEXT_MIDNIGHT is:""$TIME_NEXT_MIDNIGHT" ; SECONDS_UNTIL_NEXT_MIDNIGHT="$(( $(date +%s -d "$TIME_NEXT_MIDNIGHT") - $(date +%s -d "$TIME_CURRENT") ))" ; #echoerr "DEBUG:SECONDS_UNTIL_NEXT_MIDNIGHT is:""$SECONDS_UNTIL_NEXT_MIDNIGHT" ; if [ "$SECONDS_UNTIL_NEXT_MIDNIGHT" -eq 0 ]; then echoerr "WARNING:Is it exactly midnight?" ; continue; fi ; # Exit loop early if equal to 0 because "timeout 0s" never ends. if [ "$SECONDS_UNTIL_NEXT_MIDNIGHT" -lt 0 ]; then echoerr "ERROR:Time until midnight error." ; exit 1; fi ; # Exit script if equal to 0 because "timeout 0s" never ends. # Update output file names. DIROUTN="$DIROUT1" ; FILEOUTN="$DATE_CURRENT_SHORT""..""$(hostname)""_location.nmea" ; # Append location log until midnight. timeout "$SECONDS_UNTIL_NEXT_MIDNIGHT""s" gpspipe -r 1>> "$DIROUTN"/"$FILEOUTN" 2>>/dev/null ; # log raw nmea data done #gpspipe -r -d -l -o "$DIROUT1"/"$FILEOUT1" ; else echo "$SCRIPT_TIME_SHORT"">gpspipe or $DIROUT1 not found." >> ~/"$SCRIPT_DATE_SHORT"..error.log ; fi