Roomba(ルンバ) のお掃除状況を飼い猫に鳴いてもらう

こんにちは、NHNテコラス株式会社 UIT室 NUIチーム フロントエンドエンジニアのumeです。
NHNテコラスではCARTSTARなどEC事業のフロントエンド開発全般を行っています。

最近 Roomba 980 を購入しました。

毎朝出勤時間の10分前に Roomba が掃除を開始するのを見届けてから家を出るのですが、
夜に帰宅するとRoombaが玄関やリビングで力尽きていることが多いです。

これではRoombaが心配で仕事に集中できません。

Roombaのために「家族の安否確認のため早退したいです。」とはさすがに言えないので、
掃除の「開始」「完了」「エラー発生」が起きた時に、Slackに通知が飛ぶ仕組みを作りました。

我が家では、猫(Raspberry Pi + Hubot)を飼っていたので、
飼い猫にRoombaを操作・完了報告をしてもらうことにしました。

<理想 (YouTubeより引用)>

<現実>
現実

飼い猫の@hubonyanに 毎朝8:45に掃除が始まるようにしつけをして、
時間になったら@hubonyanから掃除開始をAPIにRequest、Responseが無事返ってきたら、
Slackで鳴いてもらいます。

そして、掃除開始から30分ほどたったら再度APIにリクエストしてもらい、
掃除状況を確認してもらいます。

このとき、まだ掃除中(run)だったら、5分間隔で確認しにいってもらい、
Docに帰り着いている状態(charge)であれば、
「掃除が完了しました」とSlackに鳴いてもらっています。

また、Slackに「@hubonyan:ルンバはどんな感じ?」のように投稿すると
現在のRoombaの状態を教えてもらえます。

###
hubonyan に Roomba の状態をうかがう
@hubonyan:ルンバはどんな感じ?
###
robot.respond /(ルンバはどんな感じ?|お手|status)/, (msg) ->
  method = 'getStatus'
  BLID = 'xxxxxxxxxx'
  ROBOTPWD = 'xxxxxxxxxx'
  IROBOT_API = 'xxxxxxxxxx'

  data = 'blid=' + BLID + '&robotpwd=' + ROBOTPWD + '&method=' + method
  msg.http(IROBOT_API)
    .header('Content-Type', 'application/x-www-form-urlencoded')
    .post(data) (err, res, body) ->
      json = JSON.parse body
      json_robot_status = JSON.parse json.robot_status
      switch json_robot_status.phase
        when "charge"
          msg.send "Docにて充電中ニャー"
        when "run"
          msg.send "清掃中ニャー"
        when "stop"
          msg.send "一時停止中ニャー"
        when "hmUsrDock"
          msg.send "Docへ帰宅中ニャー"
        when "stuck"
          msg.send "問題発生ニャー!"
          msg.send "エラーコード:" + json_robot_status.error
        else
          msg.send "やばいまじで何か起きた!Helpme!"
      return
  return

Roombaにエラーが発生(stuck)しているとエラーコードが返ってくるので、
なぜRoombaがとまってしまったか詳細な理由を知ることもできます。
ルンバ900シリーズ エラーメッセージ

Slack

これで安心して仕事ができますね。

あなたにおすすめの記事