これは2020年6月25日(金)「IBM User Group Conference 2020」 にて紹介させていただいた「TJBot Zeroの活用例」の内容です
目標
Watson IoT Platform 経由で
手元のTJBot にデータを送信する
知識材料
- Node-RED
- Watson IoT Platform (今回は Quickstart でお手軽に試します)
利用環境
今回のゴール
Slack に投稿したテキストメッセージを TJBotZero に喋らせる
アプリケーションサーバ Node-RED 準備
slack からメッセージが送信されるアプリケーションサーバを設定する。
IBM IoT App ノード追加
Node-RED メニューの パレットの管理
から ノードを追加
を選び、
node-red-contrib-scx-ibmiotapp を追加する
フローを作成する
以下のノードを画像のように接続する。
- http in
- function
- ibmiot out
- (debug
http in ノード
メソッドを POST
に設定し、HTTPエンドポイントのURL を適切に設定する。(例では /slack/tjbot)
function ノード
slack から送信されるメッセージにコマンドが含まれるため、コマンド部分を取り除いたメッセージを TJBot zero に送信するようにスクリプトを記述する。
msg.payload = {
'd' : msg.payload.text.replace("tjbot", "")
};
return msg;
ibmiot out ノード
Authentication
を Quickstart に設定する。Device ID
に、ユニークとなる文字列を設定する。Event Type
も任意の文字列を設定しておく。
Slack 準備
アプリを管理する
Slack 画面の左上メニューから 設定と管理
→ アプリを管理する
を選択する。
Outgoing Webhook を追加
App 管理画面上部の App ディレクトリを検索
で outgoing を検索し、Outgoing Webhook
カスタムインテグレーションを追加する。
Outgoing Webhook の設定
- チャンネル ... どのチャンネルで反応するか
- 引き金となる言葉 ... TJBot にメッセージを送信するコマンド
- URL ... Slack からのメッセージを受信するアプリケーションURL (今回はNode-REDのURL)
適切に設定がおわったら、画面下部の「設定を保存する」ボタンをクリックする。
TJBot Zero 準備
IBM IoT App ノード追加
Watson IoT Platform からメッセージを受信するために、
Node-RED メニューの パレットの管理
から ノードを追加
を選び、
node-red-contrib-scx-ibmiotapp を追加する
フローを作成する
以下のノードを画像のように接続する。
- ibmiot in
- change
- openjtalk
- (debug
ibmiot in ノード
Authentication
を Quickstart に設定する。Input Type
を DEvice Event に設定する。Device ID
に、アプリケーションサーバで設定した文字列を設定する。
change ノード
アプリケーションサーバから Watwaon Iot Platform を経由して送信されたメッセージを、msg.payload に格納するように設定する。
実行と結果
slack で tjbot
文字列の後ろにスペースを入れて、TJBot にしゃべらせたい言葉を入力し送信する。
TJBot 側 応用フロー
Watson IoT Platform in ノード の後ろに GPIO を制御するノードをつなげると、メッセージをおしゃべりすると当時に、手を動かしたりLEDを光らせて通知させることもできる。
まとめ
Watson IoT Platform と TJBot を接続すると、外部のサービスから簡単にTJBot を制御できるようになる。
処理結果の通知やリマインドなどいろいろなことに活用できる。