kmuto’s blog

はてな社でMackerel CREをやっています。料理と旅行といろんなIT技術

「Hi, Gregor」の機能強化をした

昨日作ったhi-gregorにいろいろと手を入れて、Slackとの連携も用意した。i18nまでは面倒なので、Slackまわりは日本語入りの「実装例」という扱い。

kmuto.hatenablog.com

github.com

Changes

  • UDPエラーがたまに出ていたので、ちゃんとログに出すようにした。
  • Boltライブラリを使ってSlackと連携してみた。わりと簡単にできるな。
  • dotenvを導入して環境変数の代わりにファイルで設定できるようにしてみた。
  • package.jsonのscriptブロックにビルドと実行を書いておいた。これで npm run status とかができる。

streamlistener.js

ボットアプリとWebSocketでつなげた状態でSlackのメッセージを追跡し、定義済みの正規表現とマッチしたらhi-gregor経由でルンバから情報を取得したり、あるいは清掃や帰還を指示したりできる。

戻るのはpause→dockの間にウェイト入れないとだめっぽいね。外出先からだとスマホアプリで実行できるのでそんなに重要なものではないけれども、Boltの手習いで作ってみた。

cron-check.js

cronから呼び出すことを前提に、ルンバの状態をチェックし、以下の状態で報告する。

ドックに座っているのに充電していない、というそもそもの問題の検出をすることが狙い。

  • 清掃中、ドック帰還途上、助けて状態
  • 停止していて、バッテリーが減っている(ひとまず60%以下)。

これを以下のようなcronで呼んでいる。8〜22時の毎時5分に実行して、上記状態なら報告。

5 8-22 * * * kmuto   cd <PATH>/hi-gregor && npm run watch --silent

TODO

execしてるのがダサいとか、UDP discoveryやLocalオブジェクト構築時にまれに無限に終わらないので強制タイムアウトが必要そうとかあるんだけど、ひとまずやりたかった要件は満たせたかな。