ラズパイに接続された光センサの値を読んで部屋の開閉状態を通知するBot。SlackのSlash Commandsを利用して/boushitsu
と入力すると通知が返ってくる。
依存ライブラリはこれ
- Bolt for Python
- RPi.GPIO (ラズパイには最初から入っている)
- Slack Botを作成しておく。
- アプリの設定画面
をスクロールして出てくるApp-Level TokensのところのGenerate Token and Scopesをクリックする。
- スコープ
connections:write
を持つトークンを生成する。
生成できると以下のようになる。
- アプリの設定画面に出ているこのトークンを使用する。
自動生成されるが一応参考までに。
display_information:
name: boushitsu
description: boushitsu
features:
bot_user:
display_name: boushitsu
always_online: false
slash_commands:
- command: /boushitsu
description: boushitsu
should_escape: false
oauth_config:
scopes:
bot:
- commands
settings:
org_deploy_enabled: false
socket_mode_enabled: true
token_rotation_enabled: false
- 依存ライブラリをインストール。
仮想環境(この文書ではこの仮想環境を指す)を無理に使う必要は無いが、もし使うならRPi.GPIOも改めてインストールしないと見えないのでインストール。このときRPi.GPIOのビルドが落ちるかもしれないが、以下のようにCFLAGSを設定することで回避できる(work around)。
# Python 3.6+ required
python -m venv .venv # 2系と3系が共存している環境ではpython3コマンドを使用せよ
source .venv/bin/activate
pip install -U pip
CFLAGS=-fcommon pip install -U -r requirements.txt
- 環境変数にトークンを設定して起動する。
export SLACK_APP_TOKEN=<your-xapp-token>
export SLACK_BOT_TOKEN=<your-xoxb-token>
python main.py
実際運用するときはサービスとして動かすものと思う。pm2向けの設定ファイルがある。Node.js向けだが、使えるのでいいでしょう。
-
pm2そのものを公式にしたがってセットアップしておく。
-
設定ファイル例をコピーする。
cp ecosystem.config.js.example ecosystem.config.js
-
コピーしてできた本チャンの設定ファイルを好きなエディタで編集する。各トークン、
SLACK_APP_TOKEN
(xapp-
で始まるトークン)とSLACK_BOT_TOKEN
(xoxb-
で始まるトークン)を設定する。なお、設定ファイルは仮想環境向けに書いてあるが、仮想環境を使わない場合は
interpreter
のところをpython3
に書き換えること。 -
起動する。
pm2 start ecosystem.config.js
pm2 save # pm2のserviceが動いている前提