SlackのメッセージをHUBOT+AquestalkPiを用いてRaspberryPiにしゃべらせる
1. はじめに
どうもISAOXです。
以下の投稿記事でSlack上でBOTに命令を出せば遠隔のRaspberryPi(以下RPi)のスクリプトを実行できるようになりました。
この記事の環境もこれをベースにしてます。参考下さい。
なので、今回はこの遠隔のRPiに喋らせてみようと思います。
しゃべらせることができれば、リポジトリの更新通知などを音声で知らせたり、自宅警備員として侵入者に警告を発したりなど用途は広がりそうです。
2. 前提条件
この記事の前提条件は以下です。
- インターネットに接続したRaspberryPi(Raspbian)がある。
- RPi上でHUBOTを起動できる環境にしている
- Slackを利用している + Slack上でHUBOT用のBOTを追加している。
3. RPiにしゃべらせる道具の準備
株式会社アクエストさんのAquesTalk Piがすごく簡単にRPiを日本語でしゃべらせてくれます。
漢字もいけます!すごい!
インストール方法は株式会社アクエストさんのN.Yamazaki's blogを参考にしました。
AquesTalkPiをインストールしたRPiで以下のように命令すればしゃべります。
./AquesTalkPi "私はラズパイちゃんです。よろしく。" | aplay
なので、AquesTalkPiを実行するShellスクリプトを用意してRPi上に配置します。
しゃべらせる文字をこのShellスクリプトに引数で渡す仕様です。
#!/bin/sh
cd /home/pi/aquestalkpi
./AquesTalkPi $@ | aplay
cd /home/pi
4. RPi上のHUBOTがShellスクリプトを呼ぶ準備
RPi上のHUBOTが読み込むcoffeeスクリプトに『talkpi』という文字列が来たら上記Shellスクリプトを呼び出す命令を追記します。
追記したらRPiを再起動するなどしてHUBOTが最新のcoffeeスクリプトを読み込んでおくようにしておきましょう。
robot.respond /talkpi (.*)/i, (msg) ->
arg = msg.match[1]
@exec = require('child_process').exec
command = "sudo -u pi sh /home/pi/GitHub/StudyRPi/Hubot/iotbot/my_exec/talkpi.sh #{arg}"
msg.send "Command: #{command}"
@exec command, (error, stdout, stderr) ->
msg.send error if error?
msg.send stdout if stdout?
msg.send stderr if stderr?
5. Slack上のBOTにしゃべってもらうように命令する
Slack上でBOTに以下のようにしてRPiにしゃべってもらうように命令します。
するとBOTが反応しRPiのShellスクリプトを実行してしゃべってくれました!
※上のスクリーンショットはSlack上の『DIRECT MESSAGES』上で入力しているので頭に指定するBOT名は省略してます。
6. 最後に
チャットツールであるSlackはテキストベースで会話をします。
このテキストを音声化できればコミュニケーションの幅が広がると考えてます。
音声化できることでどういう用途、UXができるか皆さんも考えてみてください。