目的
水槽監視のためにラズパイとWebカメラで水槽の画像を取得し,それをSlack上のBotに投稿させる
記事が長くなるため2つに分割する.
今回は準備編ということでmotion初期設定やSlackのAPIトークン取得などを行う.
はじめに
私はペットとしてヒョウモントカゲモドキを飼育している.ヒョウモントカゲモドキというのはヤモリの仲間で爬虫類飼育においておそらくトップの座を獲得しているとてもアツいトカゲだ.
さて,そんなヒョウモントカゲモドキだが旅行や出張などで家を空けていると生きているか心配になる.いや実際今心配か問われるともう何日も空けても平気だということは経験上わかっているのだが,最初の頃は心配だった.さらに日本の寒い冬においては体調を崩しかねない.
旧システム
ということで2017年の春にRaspberry Pi2 Model BでBME280モジュールとUSBカメラで監視するソフトを作った.
2017年5月のページである.まだヒョウモントカゲモドキも今と比べると4回りくらい小さい.
このようにBME280で気温・湿度・気圧をモニタリングし,それをGoogle Chartsで表示させている.
映像はMJPG-streamerのやつをそのまま垂れ流し.
あとはApache2でこのページを作成してそのまま公開というもうセキュリティも何も考えずに全世界から私の水槽及び生活状況が見れるというクソガバ具合だったがようやく一年半経って重い重い腰を上げたというわけだ.普通にラズパイ踏み台にされてLAN内に侵入されててもおかしくなかったよね.知らんけど.
これを作りたいって人は以下の記事を参考にするといい.私はその時書き留めることを怠ったので具体的な組み合わせ手順は忘れた.
USBウェブカメラとubuntuで簡単ストリーミングサーバー構築
第39回「ラズベリーパイで温度・湿度・気圧をまとめて取得!AE-BME280でIC2通信」
そして新システムへ
新システムへ移行しなければならない大きな要因が下宿の引っ越しである.春から東京で,そこのアパートでグローバルIPを貰えるかどうかわからないのでそれがなくてもいいようなシステムを作っておきたいと思ったからだ.
最初考えたのはこのサイトがあるサーバーの別ドメインにまたページを作ってやろうかと思ったが激安レンタルサーバーにストリーム配信をさせるとか言語道断でしょ最悪止められるんじゃと思いとどまり,テキトウに調べていたところSlackのBotとして動作認識した画像を投稿する,という記事を見つけた.
はじめてのRaspberry PIで監視カメラを作ってみた。
これ,いいんじゃないか? と思いこの路線で行くことに.
正直これまではストリーム配信ということもあって見に行ったとしても必ずヒョウモントカゲモドキが写っているというわけではなく,安否確認が毎回できるというわけではなかった.今回motionというソフトを使うことで動いていることを確認しやすくなるだろうという狙いである.
できたものはこちら.
初期設定など
最初にいろいろと下準備を行っておく.
機器類
今回使用するのはRaspberry Pi2 Model Bと BSW200MBKというWebカメラ.
ラズパイについては最新機種でも動くだろう.
RAMディスク領域を作成
今回はUSBカメラから動きのあったフレームを一旦ストレージに書き出し,そこからSlackにアップロードするという方式をとる.そのため画像の書き出しが非常に多くなり,SDカードが劣化する恐れがあるためRAMディスク領域にその一時ファイルを書き出すことにする.
以下の記事の通りに行った.
motionをインストール
次にmotionのインストール.motionとはその名の通り”動き”を検知して動画や静止画を書き出してくれるソフトである.
$ sudo apt-get install -y motion
motionの設定
最終的にはこのように設定する.
ffmpeg_output_movies off threshold 1000 target_dir /tmp/motion on_picture_save python3 /home/pi/SlackPochi/main.py %f width 1280 height 720 output_pictures first
【ffmpeg_output_movies】: これは動画として出力をするかということ.今回は画像のみをSlackに上げるため予めoffにしてある.デフォルトでon
【threshold】: これは”しきい値”.どれだけのピクセルが変化したら”動作”とみなすかを決める値である.今回は対象の生き物がちょっと画面に対して小さためやや低めにしてある.
【target_dir】: 今回はRAMディスク上に保存をするため,先程設定したtmp上に書き出す.再起動したら消える.
【on_picture_save】: これは「画像が保存されるたびに実行される動作」である.今回はpython3を実行させる.コマンドの引数として保存した画像のファイル名を与えるために”%f”をつけている.
【width】, 【height】: 画像の大きさ.今回使用したUSBカメラはフルHD対応だったが720pで書き出すことにした.
【output_pictures】: これの設定を見つけるまでに苦労した.firstにすることで,動作があった時間のうち最初のフレームのみを書き出してくれる.デフォルトだと全てのフレームを書き出すのでファイル数がえらいことになる.
とりあえず今回いじるであろう数値はこれくらいだろうと思う.特に最後のoutput_picturesについては必ず設定しておくべきである.
motionの起動は,
sudo motion -c /etc/motion/motion.conf
でできる.
Slackの登録及びAPIトークンの取得
Slackのアカウントがないと何も始まらないのでアカウントを作成.そしてワークスペースも作った.
次にAPIトークンを取得する.以下のページから今は行ける.
こんな感じで訊かれるので今回はPochi CameraをApp Nameに(ヒョウモントカゲモドキの名前がぽちだから).
ワークスペースは1つしか作ってなかったのでタブから1つそれを選んだ.
それで次は作成したAppを選んでFeaturesカテゴリのOAuth & Permissionsをクリック.
その中のScopesを見つける.
この画像の通り追加
chat:write:bot
files:write:user
bot
追加した後反映させなければならない.画面上部にClick hereみたいなリンクが出てきたのでそれをクリックすると,
こんな感じのが出てきた.(画像はchat:write:botのみを追加した時のものである)
許可すると追加できる.
Pythonからポストをしたらちゃんと動いた.
しかしハマったのがbotで,これを追加した後反映させようとすると
このように「このアプリはワークスペースにボットをインストールする許可を要求していますが、現在、ボットを使用するための設定がされていません。この問題を解決するためには開発者にお問い合わせください。」とのメッセージが表示される.ググっても解決策が出てこない.困った.
いろいろいじった挙げ句,FeaturesカテゴリのBot Usersを設定することでどうにかなった.
フォームは何も変更せずSave Changesをクリック.これでbotを反映させ,使えるようになった.
テスト画像を投稿させた様子.
botが追加されていない状態だと私の”Kim”というアカウントで画像が投稿されてしまっていた.
とりあえず今回の初期設定の回はここまで.
次回の記事で具体的なPythonコードやサーバーに関する細かな設定を書き留めることにする.
ラズパイとSlackで自宅水槽監視 – Pythonで自動投稿
ピンバック:ラズパイとSlackで自宅水槽監視 – Pythonで自動投稿 – Kim Biology and Informatics