はじめに
前回からの続きです。前回は学習したリモコンの赤外線信号をRaspberry Piから送信してエアコンを操作しました。
今回は、Slackの投稿を監視し特定のキーワードのチャットを送るとエアコンの電源を入れるようにします。
また、ブレッドボードでの配線のままだと扱いにくいため、ハンダ付けして固定するようにします。
※前回、前々回と同様、配線を間違えるとRaspberry Piが壊れる可能性があります。試す際は自己責任でお願いします。
参考リンク
- Slackアプリ一覧ページ
- slackbot
- slackbot日本語README
- PythonのslackbotライブラリでSlackボットを作る
- Raspberry PiでSlackbotを飼う
- 格安スマートリモコンの作り方
- Raspberry Pi Zero用ユニバーサル基板
- ピンソケット(メス)2×20(40P)
SlackにBOTを追加
Slackにログイン後、アプリページにアクセスします。
「Bots」で検索して、「Slackに追加」を選択します。
任意のBotユーザ名を入力して、「ボットインテグレーションを追加する」を選択します。
(ここでは、「raspberry_pi_bot」という名前にしました)
「インテグレーションの設定」の「API トークン」に表示されているトークン文字列をコピーしてメモしておいてください。
Slackの画面を開くと作成したBOTユーザが表示されています。これでSlack側の設定は完了です。
Raspberry PiでSlackの投稿を監視し、エアコンの電源を入れる
ライブラリ(slackbot)のインストール
Slackの投稿を監視するためにslackbotというライブラリを使用します。以下のコマンドでライブラリをインストールします。
sudo apt install python3-pip sudo pip3 install slackbot
ディレクトリ構成
このあと記載しているプログラムは以下のようなディレクトリ構成でファイルを配置しています。
irrp.pyとcodesは、前々回に使用したファイルになります。
/home/pi/dev // 任意のディレクトリ ├ irrp.py // 前々回にダウンロードしたpigpioを使用した信号の送受信プログラム(IR Record and Playback) ├ codes // 前々回にリモコンの赤外線コードを受信して保存したファイル └ slackbot // 任意のディレクトリ(今回作成するプログラムの格納ディレクトリ) ├ run.py // slackbotの実行ファイル ├ slackbot_settings.py // slackbotの設定ファイル └ plugins // slackbotのプラグインプログラムの格納ディレクトリ ├ __init__.py // 空ファイル └ testPlugin.py // 今回作成するSlackの投稿を監視しエアコンの電源を入れるプログラム
Slackの投稿を監視しエアコンの電源を入れるプログラム
Slack上で「エアコン」というチャットが投稿されたら、エアコンの電源を入れる赤外線信号をLEDから出力するコマンドを実行し、「エアコンの電源を入れました。」というチャットを投稿するプログラム(testPlugin.py)を作成します。
# coding: utf-8 import subprocess from slackbot.bot import respond_to path='/home/pi/dev/' irrp = path + 'irrp.py' # pigpioを使用した信号の送受信プログラム(IR Record and Playback)の保存パス codes = path + 'codes' # リモコンの赤外線コードを受信して保存したファイルの保存パス @respond_to('エアコン') def message(message): # 学習したリモコンの赤外線信号をLEDから出力するコマンドを実行 subprocess.run(["python3", irrp, "-p", "-g22", "-f", codes, "power:on"]) # Slackにbotユーザで「エアコンの電源を入れました。」というチャットを投稿 message.send('エアコンの電源を入れました。')
slackbotの実行ファイルと設定ファイルを作成
slackbotの実行ファイル(run.py)と設定ファイル(slackbot_settings.py)をそれぞれ作成します。
設定ファイルのAPI_TOKENの部分には「SlackにBOTを追加」でメモしておいたトークン文字列を指定します。
# coding: utf-8 from slackbot.bot import Bot def main(): bot = Bot() bot.run() if __name__ == "__main__": main()
# coding: utf-8 # SlackのBotアカウントのトークン # ※「インテグレーションの設定」の「API トークン」に表示されているトークン文字列 API_TOKEN = "xxxx-0000000000000-0000000000000-xxxxxxxxxxxxxxxxxxxxxxxx" # デフォルトの応答メッセージ DEFAULT_REPLY = "すみません。メッセージを認識できません。" # プラグインを配置しているサブディレクトリ名リスト PLUGINS = [ 'plugins' ]
プログラムを実行
slackbotディレクトリで以下のコマンドでrun.pyを実行すると、Slackのチャットが監視状態になります。
python3 run.py
Botユーザに対し「エアコン」という内容のチャットを送信すると、Raspberry Piから赤外線信号の出力を行うコマンドを実行後、「エアコンの電源を入れました。」というメッセージがBotユーザから送信されます。
また、「エアコン」以外の内容のチャットを送信すると、「slackbot_settings.py」で設定しているデフォルトの応答メッセージ「すみません。メッセージを認識できません」がBotユーザから送信されます。
ハンダ付けと簡易ケース作成
ブレッドボードでの配線のままだと扱いにくいため、ハンダ付けして固定するようにします。
また、簡易的なものになりますが、ケースを作成します。
ハンダ付け
1.以下の部品をハンダ付けします。
2.ブレッドボードに接続していた赤外線LED、MOSFET2種、抵抗2種、赤外線リモコン受信モジュールを「Raspberry Pi Zero用ユニバーサル基板」にハンダ付けします。
3.Raspberry Pi Zeroと「ピンソケット(メス)2×20(40P)」を接続します。
簡易ケース作成
1.適当な塩ビ板やアクリル板などのプラスチック板を用意し、プラスチック用カッターなどを用いて7cm×3.5cm程度の大きさにカットした板を2枚作成します。
2.4隅にネジ穴を空けます。
※ 金属加工用のドリルを用いても良いですし、アクリル板専用のドリルビットなども販売されているようです。
3.M2.5のスペーサー、ネジ、ナットなどを用いて上下からRaspberry Pi Zeroを挟むようにネジ止めします。
※ スペーサー、ネジ、ナットなどがセットになったRaspberry Pi用のキットなども販売されているようです。
おわりに
今回は、外部からエアコンの電源を入れるために、Slackの投稿を監視し特定のキーワードのチャットを送ると赤外線信号を送信するプログラムを作成しました。
また、ハンダ付けを行い、簡易的なケースを作成しました。