gps with jq to mqtt

master
ademant 2021-08-25 18:17:13 +02:00
parent 80a6b0b4fd
commit 9576e1353b
4 changed files with 12 additions and 24 deletions

6
gps_json_to_mqtt.sh Executable file
View File

@ -0,0 +1,6 @@
while read mess; do
outjson=$(echo $mess|./gps_pre.jq)
if [ -n "$outjson" ]; then
mosquitto_pub -h mqtt -t "gps/$(hostname)" -m $outjson
fi
done

View File

@ -51,11 +51,6 @@ pdop=-9}
/GSA/ {
gsview=gsview",\"PDOP\":"$16*1000
gsview=gsview",\"VDOP\":"$18*1000
gsview=gsview",\"SFIX\":{"
for(i=4;i<=15;i++){
if($i!="")gsview=gsview$i","
}
gsview=gsview"}"
}
/GRS/ {
tgrs=""

1
gps_pre.jq Executable file
View File

@ -0,0 +1 @@
jq 'if .mode then if .mode != 3 then empty else . end else . end'|jq 'paths as $path|(.device|split("/")) as $dev|(if .class == "GST" then ([$dev[2],"gst"]|join("/")) else $dev[2] end) as $gst|{($gst):(({(if(($path|length)==2) then [$path[0],($path[1]|tostring),$path[2]]|join("/") else if(($path|length)==1) then $path[0] else empty end end):getpath($path)}|if(.satellites or .device or .class or .status or .mode) then empty else . end|if($path[0] == "satellites") then {((["sat",(.[].PRN|tostring)])|join("/")):(.[]|del(.PRN))} else . end))}' |jq -rs 'reduce .[] as $item ({}; . * $item)'|jq -c 'leaf_paths as $path | {($path|join("/")):getpath($path)}'|jq -rs -c 'reduce .[] as $item ({}; . * $item)'|sed -e 's/{}//g'

View File

@ -2,24 +2,10 @@
export TZ=UTC
TTY=$1
STTY=$(echo $1|sed -e 's/tty//g')
if [ ! -f /tmp/${TTY}.pid ]; then
id=
hn=$(hostname)
mqtt_host=172.24.42.2
# echo $$ > /tmp/${TTY}.pid
mac=$(printf "%d\n" 0x$(cat $(find /sys/class/net -name "en*" |head -n1)/address|tr -d ':'))
uid=$(echo $(udevadm info --name=/dev/${TTY}|sed -n '/MAJOR/{s/[A-Z: =]*//;p}')*256+$(udevadm info --name=/dev/${TTY}|sed -n '/MINOR/{s/[A-Z: =]*//;p}')|bc)
vendor=$(udevadm info --name=/dev/${TTY}|sed -n '/VENDOR=/{s/[A-Z:_ =]*//;p}')
serial=$(udevadm info --name=/dev/${TTY}|sed -n '/SERIAL=/{s/[A-Z:_ =]*//;p}')
model=$(udevadm info --name=/dev/${TTY}|sed -n '/MODEL=/{s/[A-Z:_ =]*//;p}')
path=$(udevadm info --name=/dev/${TTY}|sed -n '/DEVPATH=/{s/[A-Z:_ =]*//;p}')
mosquitto_pub -h 172.24.42.2 -r -t "gpsi/$(hostname)/${uid}/vendor" -m ${vendor}
mosquitto_pub -h 172.24.42.2 -r -t "gpsi/$(hostname)/${uid}/serial" -m ${serial}
mosquitto_pub -h 172.24.42.2 -r -t "gpsi/$(hostname)/${uid}/model" -m ${model}
datutc=""
topicrmc="gps/$(hostname)/${uid}/rmc"
cat /dev/${TTY}|unbuffer -p grep -e GBS -e GST -e GSV -e GRS -e GSA -e GGA -e RMC|unbuffer -p cut -d* -f1 |unbuffer -p gawk -f ./gps_pre.awk |while read rmc; do
mosquitto_pub -h ${mqtt_host} -t ${topicrmc} -m "$rmc"
mqtt_host=mqtt
uid=$(echo $(/sbin/udevadm info --name=/dev/${TTY}|sed -n '/MAJOR/{s/[A-Z: =]*//;p}')*256+$(/sbin/udevadm info --name=/dev/${TTY}|sed -n '/MINOR/{s/[A-Z: =]*//;p}')|bc)
topicrmc="gps/$(/bin/hostname)/${uid}"
/bin/cat /dev/${TTY}|/usr/bin/unbuffer -p /bin/grep -e GBS -e GST -e GSV -e GRS -e GSA -e GGA -e RMC |/usr/bin/unbuffer -p /usr/bin/cut -d* -f1 |/usr/bin/unbuffer -p /usr/bin/gawk -f /home/pi/ragps/gps_pre.awk |while read rmc; do
/usr/bin/mosquitto_pub -h ${mqtt_host} -t ${topicrmc} -m "$(echo ${rmc}|sed -e 's/[,]*,/,/g'|sed -e 's/,}/}/g;s/:,/:null,/g;s/:}/:null}/g'|jq -c 'del(.[] | nulls)')"
done
fi
# gbs