#!/usr/bin/bash
#
# Copyright (c) 2019 Mike Centola <mcentola@appliedengdesign.com>
#
# Please make sure the paths below are correct.
# Alternatively you can put them in $0.conf, meaning if you've named
# this script gpsd.sh then it must go in gpsd.sh.conf .
#
#
################################################################
# Don't change anything unless you know what are you doing     #
################################################################

BIN_GPIPE='/usr/bin/gpspipe'
BIN_GREP='/usr/bin/grep'
BIN_PYTHON='/usr/bin/python3'
LINES=20

# Check for config file
CONFIG=$0".conf"
if [ -f "$CONFIG" ]; then
    # shellcheck disable=SC1090
    . "$CONFIG"
fi

# Create Temp File
TMPFILE=$(mktemp)
trap 'rm -f $TMPFILE' 0 2 3 15

# Write GPSPIPE Data to Temp File
$BIN_GPIPE -w -n $LINES > "$TMPFILE"

# Parse Temp file for GPSD Data
VERSION=$(cat "$TMPFILE" | $BIN_GREP -m 1 "VERSION" | $BIN_PYTHON -c 'import sys,json;print(json.load(sys.stdin)["rev"])' 2> /dev/null)
GPSDMODE=$(cat "$TMPFILE" | $BIN_GREP -m 1 "TPV" | $BIN_PYTHON -c 'import sys,json;print(json.load(sys.stdin)["mode"])' 2> /dev/null)
HDOP=$(cat "$TMPFILE" | $BIN_GREP -m 1 "SKY" | $BIN_PYTHON -c 'import sys,json;print(json.load(sys.stdin)["hdop"])' 2> /dev/null)
VDOP=$(cat "$TMPFILE" | $BIN_GREP -m 1 "SKY" | $BIN_PYTHON -c 'import sys,json;print(json.load(sys.stdin)["vdop"])' 2> /dev/null)
LAT=$(cat "$TMPFILE" | $BIN_GREP -m 1 "TPV" | $BIN_PYTHON -c 'import sys,json;print(json.load(sys.stdin)["lat"])' 2> /dev/null)
LONG=$(cat "$TMPFILE" | $BIN_GREP -m 1 "TPV" | $BIN_PYTHON -c 'import sys,json;print(json.load(sys.stdin)["lon"])' 2> /dev/null)
ALT=$(cat "$TMPFILE" | $BIN_GREP -m 1 "TPV" | $BIN_PYTHON -c 'import sys,json;print(json.load(sys.stdin)["alt"])' 2> /dev/null)
SATS=$(cat "$TMPFILE" | $BIN_GREP -m 1 "SKY" | $BIN_PYTHON -c 'import sys,json;print(len(json.load(sys.stdin)["satellites"]))' 2> /dev/null)
SATSUSED=$(cat "$TMPFILE" | $BIN_GREP -m 1 "SKY" | $BIN_PYTHON -c 'import sys,json;print(len([sat for sat in json.load(sys.stdin)["satellites"] if sat["used"]]))' 2> /dev/null)

if [ -z "$SATS" ]; then
    SATS=0;
fi

if [ -z "$SATSUSED" ]; then
    SATSUSED=0;
fi

# Output info for SNMP Extend
echo '{"data":{"mode":"'"$GPSDMODE"'", "hdop":"'"$HDOP"'", "vdop":"'"$VDOP"'", "latitude":"'"$LAT"'", "longitude":"'"$LONG"'", "altitude":"'"$ALT"'", "satellites":"'"$SATS"'", "satellites_used":"'"$SATSUSED"'"}, "error":"0", "errorString":"", "version":"'"$VERSION"'"}'

rm "$TMPFILE"
