突然ですが、このリモコンの"明るさ"のボタンを押すと照明はどうなると思いますか?

当然、30%を押せば30%の明るさに、100%を押せば100%になると思いますよね。そしてON/OFFのボタンがあるのだから、それらのボタンが反応するのはON時のみであるとも。
ところが、そうはなりません。
本記事では過去に行ったリモコン操作をわかりやすくした方法についてまとめます。
照明の状態遷移
なんと、OFF状態ではどのボタンを押してもONボタンとして機能します。そしてON後は前回のOFF直前の明るさになります。
遷移図(簡単のため今回は"明るさ"のボタンと30%,50%,100%の状態に限って解説します)

例えば明るさを30%にしたいとき
・OFFの状態の場合 何らかのボタン→30%
・それ以外 30%
の操作となります。
問題点
厄介なのはOFFからの操作。前回のOFF直前の明るさに遷移されても、それが何%なのかはよくわかりません。なので結局ON/OFF→30%や30%→30%のようにボタンを2回押す羽目になります。
しかも前回の明るさが30%だった場合は、30%を押しても特にフィードバックがありません。そのため赤外線が届いてない可能性を考慮して何度かボタンを押す。行きつく最適解は30%連打。あまりに無駄な操作です。
(赤外線が届くと音が鳴る機能はありますが、ピッピなるのが好きではないのでOFFにしています
)
スマートホーム化でさらなる問題が...
ある時、家にある家電の操作を一元化するために SwitchBot ハブミニ を導入しました。

この製品はリモコンの赤外線を学習し、それを発信することでリモコンの代わりとなってくれるものです。Wi-Fiに接続することでスマホから操作することができます。
スマートホーム化したら何がしたいか... そう、自動化やボタン1つで複数の操作を行えるシーンを作成することですね。
例えば
・AM3:00に寝落ちした場合に備えて全照明の自動OFF
・ボタン1つでエアコンOFF、カーテンを閉じる1、全照明OFFとなりすぐ外出できる
とか。
ここで問題なのがON/OFFボタンの挙動です。名前こそON/OFFですが、OFF時にどのボタンを押してもONになる使用上、実態は「OFFボタンを押してONにしてる」にすぎません。状態によってOFFボタンにもなりうるし、ONボタンにもなりうるのです。
・AM3:00に寝落ちした場合に備えて全照明の自動OFF(時間をトリガーにON/OFFボタンの信号を送信)
のケースで考えると、消灯して寝ていた場合にこのオートメーションが起動すると逆に照明がついてしまうことになります。
赤外線リモコンは機器の状態を取得することができません。なので状態に応じて処理の場合分けができないため、OFFボタンを押したらOFFに、ONボタンならONになってもらわないと困るのです。
解決策
これはシンプルで、ややこしいOFF状態から逃げることです。

30%を押したときに注目してみると、どの状態からでも"明るさ30"または"前回のOFF直前の明るさ"になることがわかります。
その状態での30%,50%,100%,ON/OFF(実質OFFボタン)を押すと必ずお目当ての状態へ遷移できます。
結局2回押してるじゃないかって?しかしそこはスマートホーム。ソフトウェアで解決しましょう。
今回はiPhoneのショートカットを使用します。

以下のようにボタンを2回押す動作をショートカットにすれば、1回押すだけでOK。簡単ですね。

(照明はLEDなのですが、シーリングライトをすべて蛍光灯と呼んでしまう世代のため間違えた名前で登録してしまっています
)
これで、30%→ON/OFFの操作をOFFボタンとして再定義できました。同様に各ボタンも再定義していきます。
遷移図は以下のようにシンプルになりました。
どの状態からでも、押した通りに遷移する。これが本来あるべき姿です。

複数回のボタン操作と状態によってボタンの役割が異なってしまう問題を解決することができました。
ウィジェットでホーム画面にショートカットを並べればまるでリモコンですね。とても使い勝手がよく気に入っています。

ショートカットはほかのショートカットをフローに取り込めるので、この再定義したボタンたちを使用すればオートメーションやシーンも問題なく作成できます。
本記事を書いてみて
実際の問題発生から実際に解決するまでは至ってシンプルで簡単なケースでしたが、それでも定量的に示すとややこしくなってしまいました。いかにより簡単に伝えられるか、が今後の課題です。
-
我が家はSwitchBotカーテンを使用し開閉を自動化しています。 ↩