壊れたと思っていたVK-172は生きていた。

ちなみに、One Mix 3用に、もう1個 VK-172 を買っていて、これを新VK-172 とすると、死んだはずのVK-172は旧VK-172となる。

殆ど衛星しなくなり、補足衛星0 となっていた 旧VK-172 だが、今、自分のPCに接続して動かしてみると、10個位衛星を補足している。

旧VK-172 はGPS系の衛星しか補足できないので、TOPGNSS803Gみたいに、GPS+GLONASS+GALILEOとマルチバンドじゃないから、元々補足衛星数は限られたものだった。

今は、日本が打ち上げた準天頂衛星が3つあるので、従来米国のGPSしか受信できなかったが、1〜3個、補足できる衛星が増えたのは大きい。

しかし、新VK-172に比べると、補足している衛星の信号強度が弱い気がするから、これは現在運用している TOPGNSS803Gが故障した時の為の予備としてとっておくか。

新GPS

gpsd-3.24

gpsdのサイトからソース取ってきて、野良ビルドして動かしてみた。

QZSSのみちびきPRN194〜196まで使ってて、昨日は見られなかったPRN300番台のGAってのが現れているが、これは欧州のGALILEOだな。

Raspberry Pi 4 の gpsd は 3.18 なので、早く新しくならんかのう。

TOPGNSS803G到着

USBのGPSレシーバーが aliexpress から届いた。
大体、1週間ちょっとで、最近、aliexpress はやけに到着が早くなってるな。

早速動作確認してみたが、ちゃんと動いている。

Ubuntu 20.04の gpsd-3.20-8ubuntu0.4 だと、衛星の種類まで出るんだな。

GPがGPSで、SBがSBAS(衛星航法補強システム)、QZがQZSS(準天頂衛星)、GLがGLONASSでロシアの衛星。

ウクライナに侵攻してるロシアだが、結構GPSでは世話になっとったんだなあ。

車に Raspberry Pi zero 2Wを設置して、GPSにより、車の移動を検知して、メールで警告をするようにしている。

前のGPSドングルのVK-172は、平和堂で、車を駐車場に停めてる時に、100m以上の誤差が出て、警告メールが飛んできた。

北へ100.55m移動したと誤警報。

こういう誤差による誤検知でメールが飛ばないように、100m越えにしてるのだが、TOPGNSS803G は現状では大体誤差20m位に収まってるから、誤検知が出ないのに期待したい。

【Raspberry Pi zero 2 W】motion 多重起動問題の対策

【Raspberry Pi zero 2 W】motion多重起動問題解決

結局、 motion が多重起動するのは防げないっぽいので、daemon モードで常駐させて、web_connect で start と pause の指令を motion に送って対応する事にした。

今までは、 motion の起動と終了で動体検知を管理してたけど、常駐した motion に start と pause の指令を送る事で、動体検知ON/OFFを管理するようにした。

MOTION_STATUS=`curl -s http://localhost:8080/0/detection/status |grep “Detection status” | /bin/sed -r ‘s/.*Detection status (.*).*/\1/’`

MOTION_STATUS に ACTIVE か PAUSE が入るので、その状態によって、start か pause かの指令を送る方式。

これで bluetooth ヘッドフォン接続したら、動体検知OFFになればいいけど、暫く様子見。

あと、昼頃に会社から車の rx7pi へ ssh 接続してると通信途絶する事があって、携帯電話のUSBテザリングが終了してる事がある問題がある。

これの対策は bluetooth テザリングとか試してみたけど、リブートしたら自動で再接続しない等問題がある。

あとはWiFiテザリング位しか残された道が無いけど、電力食うのは嫌なんだよなあ。

【Raspberry Pi zero 2 W】motion多重起動問題解決

【Raspberry Pi zero 2 W】motion多重起動問題

結局の所、ロックファイルがあれば起動しない処理だったけど、なぜか起動するという事はファイルが無くなっているという事。

プロセスを終了させて、ファイルを消している処理があるので、そこでプロセスが完全に終了するまで待つ事にした。

元は、kill -TERM `cat ${MOTION_PID}`て処理だったけど、それよりも先にファイル削除になって、PIDがkill に渡らないから生存しつづけて、多重起動になっとったんかなあ。

linux ってファイルを処理に渡したら、削除しても内容は消えずに渡ると思ってたが、あれは通常のファイルシステムの話で、RAM DISK上のファイルは違うのかねえ。

とりあえず、プロセス終了を待ってからファイル削除で多重起動しなくなったから、ま、いっか。

【皇紀2682年11月17日 追記】

今日、会社の帰りに車に乗ったら二重起動が発生。

もう、どこが悪いのか分かんね。

【/皇紀2682年11月17日 追記】

【Raspberry Pi zero 2 W】motion多重起動問題

車載のRaspberry Pi zero 2 W(以下rx7pi) で、bluetoothヘッドフォン接続時に、motion の動体検知録画を止め、切断時に動体検知録画ONになるようにしている。

だが、確認してみると、朝、車に乗る前に、bluetoothヘッドフォン接続したのに、通勤時の動画が一杯記録されてた。

VPN経由でrx7piへログインしてみたところ、

三重起動しとる……。

記録されとるのは、一番最後のプロセスIDなので、多重起動防止を突破しとるようだ。

あと、motion が二重起動してる事があって、何でだろうと考えたが、motion -n &でバックグラウンド起動してるので、process IDを出力する前に、ループで二週目の呼び出しで二重起動になってるんだろう。

という事で、process IDが出力する前に、touch でファイルを作成しておき、二重呼び出しにならないようにした。

情報源: raspberry pi – Yuji Noizumi’s blog

と、対策はしたのだが、なぜに多重起動する!?

9:29 と 9:34 に起動してるが、ドアの開閉でルームランプのLEDライトが点灯した時にLEDのノイズで接続が切れてるのかもしれんな。

しかし、それでも論理的に多重起動するのはあり得んのだが、状況を整理しよう。

  • /etc/default/motion でstart_motion_daemon=noとしてある
  • bluetoothヘッドフォン接続前は、motionのプロセスは1個のみ。
  • rx7piとbluetoothヘッドフォン接続して、車に乗り込んで発進。
  • 駅について、録画ファイルを確認すると、ドアを開けてルームランプが点灯してる動画から始まり、運転中のものが記録されている。

これはやっぱりLEDライト点灯による bluetooth 接続断がくさいが、もしかすると、motion の起動完了にすごく時間が掛かってて、sleep 1 のwaitでは足らないのかもしれない。

という事で、 恐らく、touch したファイルは、リダイレクト指定したら削除されて、ファイルが存在しないから多重呼び出し可能になってしまうのだろう。

そこで、リダイレクトのファイルが作成されるまで待つ処理を入れてみて、様子を見るとしよう。

【Raspberry Pi zero 2 W】スクリプト調整

【Raspberry Pi zero 2 W】gpsドングル追加

会社からVPN使ってRX-7搭載Raspberry Pi zero 2 W(以下ラズパイ)へログインして、状態を確認していた所、GPSからデータが一切流れて来ていない。

alarm_monito.sh をKILLして、スクリプト弄ってたら、通信途絶した。

帰宅してWiFi経由でログインしても、別に異常は無いし、何が原因かよく分からん。

とりあえず、GPSがハングアップした時の為に、timeout を入れるのと、応答を良くする為に、gpspipe のパラメータを弄った。

gpspipe は -n 4 指定で、TPVの行が出て、終了するので、多分、これが一番速い。

GPSがハングアップしてても、1秒でタイムアウトなので、警戒監視スクリプトでデッドロックする事もあるまい。

あと、motion が二重起動してる事があって、何でだろうと考えたが、motion -n &でバックグラウンド起動してるので、process IDを出力する前に、ループで二週目の呼び出しで二重起動になってるんだろう。

という事で、process IDが出力する前に、touch でファイルを作成しておき、二重呼び出しにならないようにした。

それと、GPSハングアップに備えて、GPSのデータ参照してる所は、空白データの時に処理しないFail safeを入れた。

まあ、GPSドングルが壊れてる可能性もあるので、TOPGNSSの11.11セールで売ってたものをポチっておいた。

情報源: Topgnss usb gps glonass受信機アンテナモジュールusb出力プロトコル、互換交換BU353S4|GPS レシーバー & アンテナ| – AliExpress

前に買った奴が結構いいので、再び購入したが、前が1,500円位だったのに、今はセールで2,200円になっとるから、円安は海外通販には痛いのう。

【Raspberry Pi zero 2 W】gpsドングル追加

今の車載Raspberry Pi zero 2 W は、車載警報装置のイヤホンマイクをGPIOに接続して、発報すると、イヤホンマイクスイッチがONになるので、それをトリガにメール&SMS送信するようになっている。

加えて、カメラを追加して、bluetooth ヘッドホンの Open Run Proが接続していないと、motion をスタートさせて、動体検知記録する。

つまり、車に乗って、bluetooth ヘッドホンを接続していれば、動体検知はOFFで、車から離れて、bluetooth接続が切れたら、動体検知ONになるようにしている。

今回やろうとしてるのは、動体検知ONの時に、GPSで現在位置を保存して、定期的に車の移動距離を測定し、車が100m移動してたらメールを飛ばそうというもの。

【rx7pi新スペック】

  • 車載警報装置 発報でガラケーのイヤホンマイクスイッチをONにしてくれるやつで、ラスタバナナのステレオ変換アダプタに接続して、GPIOに配線。
  • LTE回線 donedone ASUS zenfone max pro(m2)に挿して、USBテザリング
  • カメラOV5647
  • USB GPSドングルVK172

※写真貼るのが面倒なので、アフィリエイト利用

とりあえず、USBのGPSドングルが余っていたので、Raspberry Pi zero 2 Wへ接続。

VK172って、2019年に1,090円で買ったけど、円安のせいで値上がりしとるなあ。

gpsd をインストール。

既定の動作の設定

VPN経由で、FoxtrotGPSや、xgps、gpsmonが自端末で見れるようにListenStream=0.0.0.0:2947 にする。

設定ファイルの再読込と、サービスの再起動

ガレージを中心にそこそこの精度。

今回、新規作成した gpsd の出力から、緯度、経度を抜き出すプログラム。巷で出回ってるGPS出力から時間を抜くスクリプトの改造版(笑)

そして、2点の緯度経度から、距離を計算するプログラムだが、これは、次のページのpythonプログラムをシェルスクリプト用に書き直した。

情報源: Python で2点の緯度経度から距離を計測する方法 – GIS奮闘記

ありがとうございます。

distance.sh 緯度1,経度1 緯度2,経度2 で距離(m)を出力する。

元のページは km 単位で、最後に1,000で割ってたけど、わしが欲しいのはメートル単位なので、1,000では割ってない。

ただ、 bc で、平方根使うと、小数点以下20位まで有効になるので、最後に scale=2を指定して、1で割り算して、小数点以下2桁までにしている。

どうせ、GPSの測定誤差が数十メートル単位で出るので、メートルの小数点以下はほぼ無意味だけどね。 🙂

上の2つを新たに組み込んだ車載警報装置モニタプログラムがこちら。

そして、1m以上移動で異常にして、強引にメール送信させてみた。

google maps のURL付きにしたので、クリックすれば、車の位置がすぐ分かるようになっている。座標の方は、すり替えておいたのさ 🙂

【Raspberry Pi zero 2 W】遠隔で車を見れるのがいいな

ブラウザで http://192.168.40.1:8081/ でアクセスすると、駐車中の車のリアルタイム映像が見れるのがいいな。

ただ、スマホのUSBテザリングの省電力機能のせいで、アクセス開始するまで、最大10分待たされるけど 🙁

結局、bluetooth 連携は、bluetoothctl に connect コマンドを発行すると、sshの入力がプチフリーズするからやめた。

スマートフォンから、Raspberry Pi zero 2 Wへ bluetooth接続する事で当面はやってみようと思う。

【Raspberry Pi zero 2 W】動体検知とbluetooth連携

※商品画像貼るの面倒なので、アフィリエイト使用

結局、Amazonで調達したチルト機能付きカメラはこんな感じに設置した。

証拠というよりは、車に乗り込まれたかどうかを判定する程度。

結局の所、カメラケーブル50cmでは、自由な位置に取り付けができなかったのだ。

で、RX-7搭載のRaspberry Pi zero 2 Wは、わしの携帯電話のbluetoothに接続を試み、接続できた場合は、カメラの動体検知OFFで、運転中のノイズをカット。

駐車場に停めて、車から離れて、bluetooth接続が切れたら、動態検知ONというようにした。

車から離れたら動体検知ONになって欲しいのだが、わしの部屋から車庫までの距離だと、ギリギリbluetooth接続できてしまうので、動体検知がOFFになってしまう。

まあ、家では他に監視カメラがあるので、特に問題は無いけど、ゆくゆくは信号強度見て判断できるようになったらいいなとは思っている。

【機能】

  • 車載警報装置の発報で、GPIO26 が 0になるので、メールとSMSを送信。
  • わしの携帯のbluetoothとの接続が切れたら、カメラの動体検知ON、接続したら、動体検知OFF

車載Raspberry Pi zero 2 W の監視スクリプトも結構な長さになったなあ。