赤外線信号のタイミングを調整する
https://gyazo.com/cfb770d3d287d773d1f1861ba42a1514
使い方
例えば、照明をつけてから「10秒後」に消灯するには、信号と信号の間に、[10s]を挟めばよい。
send light:on [10s] light:off
また、「7時間後」にエアコンを起動するには、最初の信号の前に、[7h]を置けばよい。
send [7h] aircon:on
さらに、「6時半」にエアコンを起動するには、最初の信号の前に、6:30を置けばよい。 send [6:30] aircon:on
このように予約した信号をキャンセルするには、
cancel
というコマンドで指示すれば、すべての予約がキャンセルされる。
また、hubotを再起動した場合などにも、予約はキャンセルされる。
発信間隔の単位は、ミリ秒、秒、分、時、日を指定できる。
300ミリ秒 → [300ms]
80秒 → [80s]、または、[80 seconds]、[80秒]
1分 → [1m]、または、[1 minute]、[1分]
7時間 → [7h]、または、[7 hours]、[7時間]
3日 → [3d]、または、[3 days]、[3日]
時刻の指定は、Slackにメッセージを送信する時刻に応じて、もっとも自然な時刻がセットされる。
例えば、同じ[7:00]という時刻指定でも、
夜の23時にSlackにメッセージを送った場合は、朝の7時とみなすが、
昼の11時にSlackにメッセージを送った場合は、夜の7時とみなす。
確実に夜の7時を指定したければ、24時間表記で[19:00]と指定すればよい。
なお、[19時]、[19時30分]、[19時半]などといった日本語表記でも指定することができるので、Google Homeなどから音声でも指定できる。
(例えば、午前11時にSlackに[0:00]というメッセージを送った場合は、正午とみなす。)
応用例(その1)発信間隔を短くする
発信間隔を指定しない場合、デフォルトでは1秒間隔で信号を発信しているので、例えば、
send light:on aircon:on tv:on
は、
send light:on [1s] aircon:on [1s] tv:on
と同じ振る舞いをする。
信号と信号との間隔を短くしたい場合は、例えば、
send light:on [50ms] aircon:on [90ms] tv:on
というように、1秒よりも短く指示すれば、短時間で発信することができる。
ちなみにこの場合、厳密には、light:onの 発信開始から 50ミリ秒後に、aircon:on が発信される。
もし RM Mini3 が light:on の発信に50ミリ秒以上かかる場合には、aircon:on の発信も遅れることに注意されたい。 応用例(その2)テレビの外部入力の切替
コマンド一発で、テレビの2番目の外部入力(ブルーレイレコーダーやゲーム機)に入力切替を行うには、例えば、以下のように指示する。
send tv:ch1 [3s] tv:source [2500ms] tv:source
ここで、最初に、地デジのチャンネル1番(tv:ch1)に切り替えている理由は、外部入力ボタンの起点をテレビにするため。
(多くのテレビでは、例えば4番目の外部入力を表示中に「入力切替」ボタンを押すと、5番目の外部入力に切り替わってしまう。そこで、いったん、テレビに切り替えてから「入力切替」ボタンを2回押せば、その時テレビが何を表示していても、2番目の外部入力に切り替えることができる。)
チャンネル変更(tv:ch1)や入力切替(tv:source)の信号を発信しても、実際にテレビが切り替わるまでには、数秒かかる場合が多いので、自宅のテレビに応じて、3秒や2500ミリ秒などの間隔を調整するとよいだろう。
応用例(その3)「OK Google、エアコンを $ につけて」
1つの IFTTT アプレットを用意するだけで、「エアコンを 7時間後 につけて」や「エアコンを 6時半 につけて」を実現する方法を説明する。 (まだ IFTTT を知らない場合は、ここは読み飛ばして、先に進んで構わない。)
IFTTT の Google Assistant トリガーの「Say a phrase with a text ingredient」において、Google Home に話しかけるフレーズ(What do you want to say?)を、エアコンを $ につけてと設定する。 すると、$ の部分をテキストとして聞き取ってくれるので、例えば、
「エアコンを 7時間後 につけて」と言えば、7時間後 というテキストを聞き取ったり、
「エアコンを 6時半 につけて」と言えば、6時半 を聞き取ったりできる。
あとは、この聞き取ったテキスト(7時間後や6時半)を、以下のように、Slack 経由で Hubot に渡すだけでよい。
homebot send [{{TextField}}] aircon:on
聞き取ったテキストは {{TextField}} に埋め込まれるので、
「エアコンを 7時間後 につけて」と言えば、homebot send [7時間後] aircon:on が送信され、
「エアコンを 6時半 につけて」と言えば、homebot send [6時半] aircon:on が送信される。
なお、[7時間後] は [7h]と解釈されるので、hubotにメッセージが届いてから 7時間後にaircon:onが発信される。
また、残念ながら、$ にエアコンをつけて というような$から始まるフレーズは指定できない。
設定は以上で完了。これで寝る前に「今から7時間後にエアコンをつけて」と言っておけば、寒い朝も乗り切れる。
他にも、「今から90分後にテレビを消して」等の設定をすれば、小難しい映画を見ても、安心して寝落ちができる。
応用例(その4)「OK Google、起床 $ 」
指定した時間を起点にして、相対的に、操作の開始時間を指定することもできる。
例えば、「起床 7時」と言ったときに、7時を起点にして、その30分前(6時半)から、以下のような一連の操作を開始することができる。
6:30 エアコンON
6:45 照明 ON
7:00 アラーム
7:30 エアコンOFF、照明OFF
7時を起点にして、30分前を相対的に指定するには、[7時 - 30分] あるいは [7時 - 30m] と記述する。
上述の一連の操作をおこなうには、以下のメッセージを Hubot に渡せばよい。
send [{{TextField}} - 30m] ac:on [15m] hue(on) [15m] alarm(on) [30m] ac:off hue(off)
なお、相対指定では、- だけでなく、+ も使える。
また、相対指定や時刻指定を記述できるのは、send の先頭の [ ] 内のみとした。
これは、次のような設定ミスを防止するため。
send [7:00] alarm(on) [6:30] ac:on [15m] hue(on)
(この相対指定機能は866氏の提案をもとに開発しました。) 次にやること
補足:記法の仕様を変更
バージョン0.6.0以降の hubot-broadlink-rm では、鉤括弧で[2500ms]などと記述するように、仕様を変更した。
0.6.0以降でも、丸括弧で記述することはできるが、非推奨(deprecated)な記法にした。
この仕様変更は、0.6.0 の新機能である UNIXコマンドをhubotで実行する 機能(例えばsay(こんにちは))で使う丸括弧と、タイミング調整で使う括弧を、誤読しないためのものである。 2018/3/2