在GPS修复上运行命令

时间:2017-09-30 20:20:50

标签: gpsd

我在Linux系统上运行GPSD(特别是SkyTraq Venus 6 Raspberry Pi 3,但这无关紧要)。有没有办法在GPS首次获取或丢失3D修复时触发命令,几乎与/etc/network/if-up.d/etc/network/if-down.d中的脚本相同?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

第1步:在GPSD投放时,gpspipe -w输出JSON个数据,记录为hereTPV类的值为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 |
                ||     ||