自宅の最強の加湿器、あるいは私は如何にして心配するのを止めて加湿器を起動するようになったか

最強の加湿器

世の中には「最強の加湿器」を作った人がいる。

www.slideshare.net

曰く、「最強の加湿器」は湿度を自動で適切な値に維持してくれる*1。この加湿器が欲しくなったので作ることにした。

作成中に発覚した問題

数時間の作業の結果、自室の湿度を測定するのはラズパイにセンサーを付けたらできたし、その値をもとに加湿器が起動しているべきか停止しているべきかを判定するロジックを組むこともできた。

しかし、実際に加湿器を操作するロジックを組む段になって、問題が発覚した*2

加湿器を操作する難しさ

自宅にある加湿器は、押し込みボタンでオンオフを制御するタイプの製品だ。

f:id:threetea0407:20220321225831p:plain

このボタンは内部に状態(押し込まれているか否か)を持っている。そのため、加湿器をオンオフするためには、ソフトウェア側でボタンの状態を管理する必要がある。

例えば、加湿器がオフになっているべきだと判定されたとしよう。ボタンが押し込まれている状態ならボタンを押す必要がある。一方で、ボタンが押し込まれていないならば、何もしてはいけない

このように、ボタン経由で加湿器の操作をする場合、「いま、ボタンは押し込まれているか?」という状態をソフトウェア上に保持しなければならない。これでは実装が面倒になる上に、ソフトウェアと実機上での状態が乖離する可能性もある。状態が乖離した場合、それをソフトウェアによって修正することは不可能である。

ボタンの押し込まれ具合やランプの色から現在の状態を判別することも可能かもしれないが、新しくセンサーを導入する必要があり、管理が煩雑になる。また、湿度の時間微分の正負によって加湿器の状態を推定するといったことも検討したが、湿度は加湿器の状態のみに依存するわけではない*3ということもあり、正確に推定するのはかなり難易度が高いと思われた。

この問題を解決するために、加湿器のオンオフ操作をボタン経由ではなく、電源経由で行うことにした。

加湿器を操作する最強の方法

加湿器のオンオフ操作を電源経由で行うというのは、ボタンは「入」の状態で固定しておき、加湿器をオフにしたくなったらコンセントを抜き、オンにしたくなったら差す、ということである。

実際、コンセントの仮想的な抜き差しを実現するデバイスは Switch bot から提供されている。

このデバイスは、現在電源がついているかどうかに関わらず「電源をオフにする」と「電源をオンにする」という操作を行うことができる(そういうAPIが生えてる)。そのため、加湿器の現在の状態を気にすることなく、加湿器のオンオフ操作を行うことができる。

最強の加湿器

最強の加湿器が動作する様子がこちらだ。

f:id:threetea0407:20220321235032p:plain

しきい値を上回ったり下回ったりしたタイミングで加湿器のオンオフが切り替わり、湿度が反転している様子がわかる。

雑感

問題に気づいたときに、無理やりセンサーでどうにかしたり、煩雑な状態管理の処理を書くのではなく、シンプルかつ堅牢な方法を考えることで対処できたのは良かったと思った。

まだ最強の加湿器を運用し始めて日も浅いので、今後も様子を見守りつつ、他のパラメータ(例えばCO2濃度)についても自動で制御されるようにしていきたいと考えている。

*1:スライド中には他にもいくつか条件があるが、本記事ではこれを定義とする

*2:実際には問題が解決してから判定ロジックを組んでいるのだが、話をわかりやすくするために事実とは異なる時系列を採用している

*3:例えば、室温が上がると湿度は下がる