何
ねこちゃんごはんもぐもぐ動体検知システムです pic.twitter.com/4GnxJpymf6
— Hotaru (@fluorite2411) January 11, 2022
Raspberry Pi Zero W + Motion + Slackを使った動体検知→ビデオ通知システムを作りました。
背景として、うちのネコちゃんの様子が最近あまりよくなく、食事量や時間帯のモニタリングをしたかったので作りました。なのでもぐもぐシステムです。
まあそういう話はよくて、久々のモノづくりと初めてのツールだったのでチョイチョイ困らされることがありました。
備忘録として、ハマったところをまとめておこうと思います。
ハマり所
1. レガシーカメラ問題
別記事に詳しく。今回使ったのがV2カメラだったので、設定の存在に気づくまで暗い画像しかキャプチャできなくて困った…
2. 2プロセスからのカメラ同時アクセスできない問題
最初、画質を良くしたかったので、Motionでイベント検知→別ツールで写真・動画撮影、という構成を検討した。
ところが mmal
から始まるエラーに阻まれて出来ず…
mmal: mmal_vc_component_enable: failed to enable component: ENOSPC mmal: camera component couldn't be enabled mmal: main: Failed to create camera component mmal: Failed to run camera app. Please check for firmware updates
原因を調べると、複数のプロセスから同時にカメラモジュールにアクセスすることができないそうだ。
前述の構成をするためには一度Motionを止めて撮影し、撮影後に再開する手間が必要とのこと。
めんどくせーってなったので廃案。
こちらに助けられました。 raspberrypi.stackexchange.com
また、上記スレッドによると、MotionからGPIOアクセスをしようとしたときにも似たエラーが出るらしい。理由はmotionがgpioアクセスのパーミッションを持たないから。
対処法も上記スレッドにあります。
3. ユーザーパーミッション問題
MotionのScript Execution系コマンドから何かを呼ぶ場合、それらのコマンドはユーザー motion
によって実行される。
そのため、いつものとおりユーザー pi
だけで動作確認をするとだいたい途中でpermission errorが発生する。
具体的には以下のポイントで手を焼かされた。
4. Slackの認証うまくいかない問題
curlやrequestsでtokenがなぜかうまく認証できなかった。仕方ないのでpythonでslack_sdkを使ったら解決。
なんだったんだろう。原因不明
そのほか
thresholdの調整
いまのところ 15000
で様子見中。
今回の使い方はかなりカメラと対象物が近い+窓から近い場所にあるので、10000以下だと人が横切ったときの影で反応して通知がうるさくなってしまう。
ユースケースやカメラの能力によると思うが、今回くらいの対象物だとガンガン数値上げちゃってよさそう。
ハードウェア
たまたまクレラップが空いたのでクレラップの芯にラズパイを詰め込んだ限界ギリギリシステムである。揺らすと倒れる。安定感要件等