2017-09-30 6 views
-1

私はGPSDをLinuxシステムで実行しています(具体的にはSkyTraq Venus 6Raspberry Pi 3ですが、問題はありません)。 GPSが最初に3D修正を取得または紛失したときにコマンドをトリガする方法はありますか?/etc/network/if-up.d/etc/network/if-down.dのスクリプトとほとんど同じですか?GPSでコマンドを実行する

答えて

0

私は解決策を見つけた:

ステップ1GPSDランニング、gpspipe -w出力JSONデータとをhereを記録しました。

  • 0 =不明モード
  • 1 =無修正
  • 2 = 2D修正
  • 3 = 3D修正
TPVクラスは、これらの値のいずれかをとることができる mode値を持ちます

ステップ2

gpsfix.pyと呼ばれる小さなプログラムを書きます3210
#!/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

#!/usr/bin/env bash 

# Wait for first 3D fix 
gpspipe -w | ./gpsfix.py | grep 3D -m 1 

# Do something nice 
cowsay "TARGET LOCATED" 

をし、それを実行します:bashスクリプトに入れ

$ ./act_on_gps_fix.sh 

3D 
________________ 
< TARGET LOCATED > 
---------------- 
     \ ^__^ 
     \ (oo)\_______ 
      (__)\  )\/\ 
       ||----w | 
       ||  || 
関連する問題