ガジェット好きブログ

スマホとかraspberry piとか3Dプリンターとかetc

【Raspberry pi】自宅スマートホーム化その2【EchoDot】

2019年5月5日の記事の続きです。

記事は↓ 

di-no.hatenablog.com

SLackとの連携

hubotというbotを使います。

hubotとは、raspberryに常駐してSlackに対してメッセージの受信や送信といった動きをしてくれます(たぶん)。

厳密にはもっとすごい子らしいけどまぁよくわからなくてもどうにかなるのがいいところです。

hubotの導入

下記ページを参考にさせていただきました。

qiita.com

hubotのスクリプト

hubotをインストールした下記スクリプトディレクトリにcoffeeスクリプトをつくりました。

/home/pi/hubot/pibot/scripts

とりあえずテスト用ということでtest.coffeeです。

中身はこんな感じにしました。

# Description
# A Hubot test script
#
# Configuration:
# None
#
# Commands:
# test
#
# Author:
# Di-no

module.exports = (robot) ->
 robot.respond /test/i, (msg) ->
  msg.send 'test-OK'
 robot.respond /mylighton/i, (msg) ->
  @exec = require('child_process').exec
  command = "python /var/www/html/irm.py -p -f /var/www/html/MyLight-ON.json"
  msg.send "MyLight-sta.json"
  @exec command, (error, stdout, stderr) ->
  msg.send error if error?
  msg.send stdout if stdout?
  msg.send stderr if stderr?
 robot.respond /mylightoff/i, (msg) ->
  @exec = require('child_process').exec
  command = "python /var/www/html/irm.py -p -f /var/www/html/MyLight-OFF.json"
  msg.send "MyLight-end.json"
  @exec command, (error, stdout, stderr) ->
  msg.send error if error?
  msg.send stdout if stdout?
  msg.send stderr if stderr?

 どうもよくわかってはいませんがとりあえず解説です。

最初にコメントで題名や作者等々書いています。これがないとhubotがエラーメッセージを出力するみたいです。まぁエラーが出たからと言って動作に支障はないみたいです。

「robot.respond /test/i, (msg) ->」

ここでslack上のメッセージの監視を行っております。

この場合”test”という単語があれば動作を行うという感じです。

「msg.send 'test-OK'」

見たまんまです。

”test-OK”というメッセージをslackに出力しています。

その1の記事でtestと言われたらというのは実はこのためです。

「@exec = require('child_process').exec

command = "python /var/www/html/irm.py -p -f /var/www/html/MyLight-OFF.json"」

pythonプログラムを動かいたいので、コマンドでpythonプログラムを起動します。

「@exec command, (error, stdout, stderr) ->
  msg.send error if error?
  msg.send stdout if stdout?
  msg.send stderr if stderr?」

一応エラー系メッセージがでたら(でないでほしいけど)同じくslackに出力します。

そんなに難しいことをしていません。

たんにキーワードとなる単語のメッセージがきたら決まったpythonプログラムを動かすだけです。

とりあえずこれでAlexa~slack~raspberryまで来ました。

あとは赤外線関連ですがそれはその3でやります。