この記事は 「enebular Advent Calendar 2019」の 9 日目の記事です。
# そして 11/28 開催の enebular developer meetup で登壇した内容です。
背景的な何か
2 年前に作った、仮想マシンの稼働状況や電源操作を手元で行えるようにした ESP8266 製の仮想マシン用物理電源ボタン🤔、これを今の技術スタック&違う切り口で作ってみました。
# 参考ですが、当時作成した仮想マシン用物理電源ボタンの概要図です。
アイコンはアレなのですが、2 年前の話ですのでご容赦を🙇♂️
今回作ったもの
enebular と LINE Things を使って出社/退社を検知し、仮想マシンの電源を制御してみました。
# タイトルの「懐にやさしい」は、仮想マシンの料金が節約できる、、、てことで。。。
材料
- enebular
- LINE Bot
- 仮想マシンの電源を制御する
- LINE Things
- ESP32 製
-
LINE Things Starter for ESP32 ベース
- 追加したコードは、定期的に BLE Notification を出すだけ
- 職場に設置
- Wi-Fi 不要
- 仮想マシン
- 今回の制御対象
- Azure VM
こんな風に動く
ざっくりとこんな感じ。
出社時
- LINE Things からの BLE Notification がスマホの LINE アプリと LINE Platform を経由して、LINE Bot である enebular に到達
- enebular の Flow で、VM の電源が入っていなければ、電源オン。
退社時
- LINE Things からの BLE Notification が enebular に届かなくなる
- 一定時間 (例えば 5 分とか) enebular へ BLE Notification が届かなければ、VM の電源オフ
enebular で作成した LINE bot フロー
頑張ったところ
Function ノードの徹底排除
Function ノードの多用は、Node-RED のアンチ パターンの 1 つ です。
なので、今回徹底的に排除して、Change ノードに置き換えました。
# 結果 Change ノードだらけになって、やや複雑です。。。
サブ フローの使用
REST API の実行とその前準備、後処理などは決まった処理になるので、サブ フローとして切り出してみました。
Node-RED に触れてから 4 年くらいは経つのですが、サブ フローの存在を初めて知りました😅
LINE ボットとしてのユーザーとのインタラクション
実は、仮想マシンの電源オフ時は、一度 LINE アプリを介してユーザーに確認を入れています。
その確認で電源オフまでの時間を延長したり、即電源オフにしたり、一定時間無視されたら強制オフにしたり、と割と頑張って表現してみました。
作ってみて思うこと
enebular/Node-RED に代表されるビジュアル プログラミングで、↑みたいに変に頑張りすぎると、今回フローみたいに、一見何が何だかわからないフローになってしまいます。
ビジュアル プログラミングで表現するためには、できるだけシンプルなプログラムを考える、何か別の脳みそが必要なのかもしれないですね。。。