好きなモノは酒と女とラーメン、LIFULLのてぃば(@rechiba3)です。
はじめに
この記事はLIFULL Advent Calendar2018 の2日目の記事です。
準備するもの
- RaspberryPi3
- Webカメラ
- GoogleドライブへのGASプロジェクト追加
- Chatwork APIトークン
オフィス冷蔵庫の在庫監視をやろうとしたので、今回は職種部署横断して使っているChatWorkを採用しました。
やり方
1. RaspberryPi3で冷蔵庫を撮影する
下準備をする。
基本は手元のPCのターミナル上で行います。
《参考》
Raspberry Piのセットアップ(ssh接続まで)
ラズパイでUSBカメラから撮影した画像をSlackに投稿
ウェブカメラのUSBをRaspberryPi3に挿して認識確認。
パッケージのアップデートをする
motionを入れる。
$ sudo apt-get install motion
motion.confのtarget_dirを変更して、画像を保存するディレクトリを指定します。
$ sudo vi /etc/motion/motion.conf
# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
target_dir /任意のディレクトリ/
2. 撮影した画像をGoogleドライブへ保存する
Googleドライブへのアップロードはgdriveコマンドを使います。
参考に書かれている通りにインストールを進め、
$ gdrive about
を実行すると、https://accounts.google.com/o/oauth2/~~~~ といったような、長いURLが表示されます。
URLコピーしてブラウザでアクセスすると、Googleの認証が求められます、
許可した後、表示された認証コードをコピーしてターミナルに貼り付けてEnter。
次のコマンドでGoogleドライブに作られたフォルダ一覧を見て、画像のアップロード先のフォルダIDを確認しておきます。
$ gdrive list
写真をsaveする度に起動するスクリプトをmotion.conf
に指定する。
on_picture_save /home/pi/upload.sh %f
ファイルを作って実行権限を追加。
touch upload.sh
chmod a+x upload.sh
#!/bin/bash
/home/pi/bin/gdrive upload -p ******(先程確認したID) $1
motionを起動して写真を撮ってみる
$ motion -c /etc/motion/motion.conf
カメラの位置は突っ張り棒とか使って無理やり離した(家に余ってたウェブカメラの限界)。
RaspberryPi3にウェブカメラつないで、自宅の冷蔵庫の画像を撮るデモ。
— てぃば (@rechiba3) 2018年12月2日
扉につけてるだけじゃ近接すぎてダメだ…
カメラ変えるか、天井から固定とかべつのところから撮影しないといかんですね。 pic.twitter.com/FBkqi9JQ1S
3. Chatworkへの自動投稿botを作る
ChatworkのAPI利用の仕方はコチラに記載されています。
API > API Tokenを開き、Chatworkアカウントのパスワードを入力。
「表示」を押下するとトークンが表示されます。
これをコピーして控えておきます。
Googleドライブを開き、任意のフォルダで「新規」を押下。
その他 > Google Apps Scriptを開きます。
Google Apps Script(以下、GAS)が無い人は、 その他 > アプリを追加 で追加します。
GASの画面を開き、リソース > ライブラリ > ライブラリを追加から、「ChatWorkClient」を追加します。
tokenのところに、先程ChatworkのAPI Tokenで控えたトークンを貼り付け。
room_idのところには任意のグループチャットのIDを(URLにある、#!rid以降の数字列)貼り付け。
bodyには任意の文言を入力。今回はアナウンスのように目立たせたいので、装飾タグで囲みます。
4. botにGoogleドライブのURLを投稿する
画像が溜まるGoogleドライブのフォルダを共有設定にします。
共有可能なリンクを取得 > リンクの共有をONにして発行されたURLをコピーして、3で登録したbodyに追記します。
実際の画面は以下になります。
投稿されたらURLリンク先に遷移します。
function chatBot() {
var client = ChatWorkClient.factory({token: "******"}); // Chatwork API
client.sendMessage({
room_id: ******, // room ID
body: "[info][title]👮🚨今日の冷蔵庫パトローーール 🚨👮[/title]帰宅前に冷蔵庫の状況を確認しましょう(talk)(https://drive.google.com/******) [/info]"}); // message
}
今回、初めてChatwork API触って知ったんですが、画像投稿できないんですね/(^o^)\
本来であれば、画像投稿できたらいいのにな〜〜って思いました。
この程度であれば非公式Twitterアカウント作って垂れ流したほうがいいわな。
それかリアルタイム動画か、動体検知してスナップショット送る系(以下、参考)。
今後やりたいこと
冷蔵庫、閉めると暗くなるじゃん?
開けたときの明るさをセンサーで検知させないと写真撮れないじゃん?
そもそも広角で撮れないと中身網羅できなくない??
などなど、パーツをアドオンすることでもっと良くなるような伸びしろを感じさせるネタですね。
「オフィス共有冷蔵庫に賞味期限切れのものが放置される」問題は常にストレスの種として存在しています。
自分が入れたものぐらい覚えとけ!共有スペースだぞ!と声高々に叫んだとしても、変わることはありません。
だってみんな、忘れたくて忘れているわけじゃないのです。
故意的に起こるものではなく、事故。
ということで、人間が管理できないことはシステムで解決させましょう。
オフィス導入の課題
- 会社ネットワーク×ラズパイのIP固定(再起動するとIP変わる)
- モバイルバッテリーだとラズパイ3だと電圧が安定しない(電力供給どうすっぺ)
- 自宅で突っ張り棒使ったような、物理的な調整がきかない
- ChatworkAPIだと画像投稿されない
気が向いたらオフィスに本導入できるようにがんばりまーす!
まずは自席のある4Fから。
自分の作ったお弁当、カビの生えた食品と一緒にしたくは無いわな^q^