すべては早起きを実現するために
ソフトウェアエンジニア 3年目で思った大切だったこと – Think Abstract にも書いたとおり、健康と体調管理はソフトウェアエンジニア(というか職業人)で大切だ。
しかし、自分は生来怠惰な人間であり、すぐに夜更かしして体調を崩すことがここ最近顕著になってきた。
人の性格を変えることは難しいので、システムで防止するというのが自分のスタンスのため、前々から触ってみたかった Google Cloud Function を利用して、夜中に勝手に消灯するシステムを作った。
自宅の電気は赤外線リモコン対応しているのだが、押すたびに状態がかわる (明るい -> やや明るい -> 豆球 -> 消灯) ため、実は NatureRemo で一発で消灯するのが難しい。 そこで、部屋が暗くなるまでボタンを押す という荒業で対応した。
システム構成図
ざっくばらんに構成がこうなっている。
必要なもの
Google Cloud Function
Google Cloud Functions に関するドキュメント | Cloud Functions
Cloud Function は1回起動で 0.3 円程度かかるのだが、それでも料金が発生するため、初回利用時はクレジットカードが必要。
毎日夜に消灯するため、 CloudScheduler というものを利用している。実はこれがめちゃくちゃ便利で、定期的に叩くもののために、わざわざサーバーを用意して crontab 設定するのは辛い。それを簡単に行えるのが CloudScheduler だ。
そのため、CloudScheduler と Cloud Function を組み合わせると、定期的に何かしたい という要望に簡単に、しかも安くで対応できる。
NatureRemo
こちらは気をつけたほうがよいのだが、NatureRemo Mini のほうだと照度センサーがついていない。
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 アプリでタイマー設定するとよい。