Raspberry Pi + Motion + Slackの動体検知通知システムを作ったハマり所など

Raspberry Pi Zero W + Motion + Slackを使った動体検知→ビデオ通知システムを作りました。
背景として、うちのネコちゃんの様子が最近あまりよくなく、食事量や時間帯のモニタリングをしたかったので作りました。なのでもぐもぐシステムです。
まあそういう話はよくて、久々のモノづくりと初めてのツールだったのでチョイチョイ困らされることがありました。
備忘録として、ハマったところをまとめておこうと思います。

ハマり所

1. レガシーカメラ問題

別記事に詳しく。今回使ったのがV2カメラだったので、設定の存在に気づくまで暗い画像しかキャプチャできなくて困った…

komajou.hatenablog.jp

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が発生する。
具体的には以下のポイントで手を焼かされた。

  • ディレクトリへのアクセス権限不足。スクリプト読み込めない、ログ書き出せない
  • インストールしたはずのpipライブラリが呼べない( sudo pip install xxx で呼べるようになる)

4. Slackの認証うまくいかない問題

curlやrequestsでtokenがなぜかうまく認証できなかった。仕方ないのでpythonでslack_sdkを使ったら解決。
なんだったんだろう。原因不明

そのほか

thresholdの調整

いまのところ 15000 で様子見中。
今回の使い方はかなりカメラと対象物が近い+窓から近い場所にあるので、10000以下だと人が横切ったときの影で反応して通知がうるさくなってしまう。
ユースケースやカメラの能力によると思うが、今回くらいの対象物だとガンガン数値上げちゃってよさそう。

ハードウェア

たまたまクレラップが空いたのでクレラップの芯にラズパイを詰め込んだ限界ギリギリシステムである。揺らすと倒れる。安定感要件等