我在Linux系统上运行GPSD
(特别是SkyTraq Venus 6
Raspberry Pi 3
,但这无关紧要)。有没有办法在GPS首次获取或丢失3D修复时触发命令,几乎与/etc/network/if-up.d
和/etc/network/if-down.d
中的脚本相同?
答案 0 :(得分:0)
我找到了解决方案:
第1步:在GPSD
投放时,gpspipe -w
输出JSON
个数据,记录为here。 TPV
类的值为mode
,可以采用以下值之一:
第2步:编写一个名为gpsfix.py
的小程序:
#!/usr/bin/env python
import sys
import errno
import json
modes = {
0: 'unknown',
1: 'nofix',
2: '2D',
3: '3D',
}
try:
while True:
line = sys.stdin.readline()
if not line: break # EOF
sentence = json.loads(line)
if sentence['class'] == 'TPV':
sys.stdout.write(modes[sentence['mode']] + '\n')
sys.stdout.flush()
except IOError as e:
if e.errno == errno.EPIPE:
pass
else:
raise e
对于每TPV
个句子,gpspipe -w | ./gpsfix.py
将打印该模式。
第3步:使用grep 3D -m 1
等待第一次修复,然后退出(将SIGPIPE
发送到管道中的所有其他进程)。
gpspipe -w | ./gpsfix.py | grep 3D -m 1
会在第一次修复时打印3D
。
第4步:加入bash脚本:
#!/usr/bin/env bash
# Wait for first 3D fix
gpspipe -w | ./gpsfix.py | grep 3D -m 1
# Do something nice
cowsay "TARGET LOCATED"
运行它:
$ ./act_on_gps_fix.sh
3D
________________
< TARGET LOCATED >
----------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||