CloudFunction と NatureRemo と Go で自動消灯システムを作った

nature-remo-turn-off-light


Posted on Sun, Mar 24, 2019
Tags golang, gcp, cloudfunction, natureremo

すべては早起きを実現するために…

ソフトウェアエンジニア 3年目で思った大切だったこと – Think Abstract にも書いたとおり、健康と体調管理はソフトウェアエンジニア(というか職業人)で大切である。

しかし、自分は生来怠惰な人間であり、すぐに夜更かしして体調を崩すことがここ最近顕著になってきた。

人の性格を変えることは難しいので、システムで防止するというのが自分のスタンスのため、前々から触ってみたかった Google Cloud Function を利用して、夜中に勝手に消灯するシステムを作った。

自宅の電気は赤外線リモコン対応しているのだが、押すたびに状態がかわる (明るい -> やや明るい -> 豆球 -> 消灯) ため、実は NatureRemo で一発で消灯するのが難しい。そこで、部屋が暗くなるまでボタンを押す という荒業で対応を行った。

システム構成図

ざっくばらんに構成がこうなっている

必要なもの

Google Cloud Function

Google Cloud Functions に関するドキュメント  |  Cloud Functions

Cloud Function は一回起動で 0.3 円程度かかるのだが、それでも料金が発生するため、初回利用時はクレジットカードが必要。

毎日夜に消灯するため、 CloudScheduler というものを利用している。実はこれがめちゃくちゃ便利で、定期的に叩くもののために、わざわざサーバーを用意して crontab 設定するのは辛い。それを簡単に行えるのが CloudScheduler だ。

そのため、CloudScheduler と Cloud Function を組み合わせると、定期的に何かしたい という要望に簡単に、しかも安くで対応することができる。

NatureRemo

こちらは気をつけたほうがよいのだが、NatureRemo Mini のほうだと照度センサーがついていない。

In NatureRemoMini, you can’t get illumination and humidity · Issue #2 · go-zen-chu/nature-remo-turn-off-light

API とトークンを発行する

Nature Remote API にて API が公開されている。この api を叩くためのトークンは、Home で発行できる。

nature-remo-turn-off-light の環境変数である、NATURE_REMO_GLOBAL_TOKEN はこの api トークンを指定する。

照度と叩く時間を調整する

上記のセットアップが完了したら、Cloud Function にコードと go.mod の中身をコピーする。

pubsub で起動するようにアップデートを入れたため、適当にトピック名を入れて、それで起動するように設定する。

設定はこれだけである。あとは、コピペしたコードの照度や頻度は、環境ごとに異なると思うので適宜調整をお願いしたい。

ちなみに、ライトを on, off できる環境の方は、回りくどいことせず、NatureRemo アプリでタイマー設定を行うとよい。