【Raspberry Pi Zero 2 W】プログラム変更

どうも、/dev/shm をRAM DISKとして使用すると、ファイルが勝手に消されてしまうようで、そのせいで、lock file したつもりだったが、それが消されてしまい、motion が多重起動してしまっていたようだ。

そこで、明示的にRAM DISKを作成する事にした。

/ramdisk に tmpfs をマウントするようにした。
motion の動画もRAM DISKに作成するようにし、micro SDカードにやさしい運用に 🙂

一応、donedone エントリープラン 128kbps でネットワーク回線が繋がっていて、動画作成後にすぐに家のサーバーに転送するようにしてるので、RAM DISKのパンクは無い想定。

motion の設定で、on_movie_end で実行するコマンドを指定できるので、それでVPN経由でのファイル転送をやっている。

rsync の –remove-source-files で転送元ファイルを削除するので、RAM DISKにはファイルが貯まらない(はず)。

RAM DISK作成に伴い、車載監視プログラムも /ramdisk を使用するように変更。

追加してる処理は、AB Shutter3 用 triggerhappy 再起動で、AB Shutter3 が接続してない状態だと、/dev/input/event* が作られておらず、triggerhappy が起動しても、監視対象デバイスが無い状態。

接続後は、デバイスファイルが作成されるので、その時点で triggerhappyを再起動すれば、設定通り動くようになる。

ちなみに、AB Shutter3 用の設定は次の通り。

わしの買った AB Shutter3 は長押しのキーコードが出なかったので、上と下だけ。

triggerhappy は root 権限で動いてるので、sudo は要らんけど、まあ、念の為、付けておいた。

他には、gpsd の出力で、”TPV” の行に、lat と lon が存在しない場合があって、緯度、経度が正しく出力されていない事があったので、その対策をした。

新しいガレージライト

※画像貼るのが面倒なのでアフィリエイトを使っています。

折角、負荷端子付きのチャージコントローラーを買ったので、aliexpress で、2個 $1.57(220.34円)のCOBデイライトを買った。

設定は、ソーラーパネル入力消失後、6時間負荷ONにしたので、大体、午前0時位に電灯が消える。

Amazonでも同じものと思われるものが売られてるけど、作りがチャチなので、500円以上出す気がしない製品

どれくらいチャチなのかと言えば、カバーを外すと細っそい線が出てきて、商品紹介には、6Wと書かれていたので、こいつに12V 0.5A位流したら、火吹くんじゃね?位の細さ。

さすがにこのまま使う気がしないので、エーモンの線と付け替えた。

電球とスタンド

前は、光センサースイッチで、スタンドにはめた電球を光らせていたけど、今回はチャージコントローラーで、ソーラー入力消失で負荷ONにする機能があるから、それを使った。

あと、スタンドが経年劣化の錆で朽ちて、車の天井に落下する恐れがあるので、もっと軽量なものにした訳だな。

【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付きにしたので、クリックすれば、車の位置がすぐ分かるようになっている。座標の方は、すり替えておいたのさ 🙂

カーポートソーラー改良

車のバッテリにケーブルを接続したまま、発進とやって、ソーラー蓄電用バッテリのケースの蓋の重しに乗せていたコンクリートブロックが車体に激突し、150万掛けて塗り直ししたのに、もう凹み傷ができてしまった。

ケーブルを張り詰めておいて、テンションが掛かると、コネクタが抜けて、カーポートソーラーの設備が損傷しないようにした訳だ。

 

使ったのはこのコネクタ

※写真貼るのが面倒なのでアフィリエイトを使ってます

以前は、こんな感じだったけど、クーラーボックスの紐で縛り、蓋が風で飛ばないようにして、コンクリートブロックは乗せないようにした。

前にカーバッテリにケーブル着けたまま発進した時は、運良くコンクリートブロックは車体に衝突しなかったが、ケーブルをネジ止めしている蓄電用バッテリが引っ張られ、損傷して、電極から粉噴いてお陀仏となった。

【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 の監視スクリプトも結構な長さになったなあ。