我GPSD
在 Linux 系统上运行(特别SkyTraq Venus 6
是在 a 上Raspberry Pi 3
,但这不重要)。有没有办法在 GPS 首次获取或丢失 3D 修复时触发命令,就像和 中的脚本/etc/network/if-up.d
一样/etc/network/if-down.d
?
问问题
1286 次
1 回答
0
我找到了一个解决方案:
第 1 步:GPSD
运行,gpspipe -w
输出JSON
数据,记录在此。该类TPV
有一个mode
值,它可以采用以下值之一:
- 0=未知模式
- 1=没有修复
- 2=2D 修复
- 3=3D 修复
第 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 |
|| ||
于 2017-09-30T21:20:27.760 回答