Index
Let The Air Circulate More
久しぶりの更新。大したネタではない。
Bought a air circulator
冷夏だね、と言っていた数日前からは
考えられないほどの猛暑。
そこで赤外線リモコン付きの
送風機を購入した。
でかい羽根を回すやつではない
最近流行りのやつ。

リモコンのボタンは次の5つ。
- 電源(入/切)
- 風量
- 首振り
- モード
- タイマー
電源を入れたり消したりを
制御したいのに、なぜ入/切
一体型のタイプを購入したのか。
いやー、失敗したな。
さて、これで入・切の制御をどうするか。
もうITと全く関係ない命題を解決
しなくてはいけなくなってしまった。
たとえばラズパイに接続している
温度センサで少しでも変化があれば
入・切を判断するって方法があるのだが
如何せん送風機とラズパイが離れていて
それができない。
では、人感センサで動きを検知できないか
とも思ったが、そもそも私が動いているのだから
絶対に不可能である。
マニュアルを見てみる。特にヒントと
なることは書いてない。
では隠しコマンド的なものがないかと
思ったが、本体についてるボタンなら
どこかのボタン2つ同時押しで強制OFFって
のがあるかもしれないが、リモコンで
それはおそらくないだろう。
私が開発者ならそんな意味のないことは
しない。
それでは今あるボタンを駆使して確実に
ONかOFFのどちらかを操作できる手順を
編み出せるかを考えてみる。
どちらかができれば、制御はできる。
例えばONを編み出すことができれば
ONにしたいとき→ONにする
OFFにしたいとき→ONにする→ON/OFF
OFFを編み出せれば
ONにしたいとき→OFFにする→ON/OFF
OFFにしたいとき→OFFにする
これができる。簡単な解法である。
例えば、こいつにタイマーボタンがある。
一回押すと1時間タイマー。
続けて押せば2、3時間ずつ加算されて
2時間、4時間、6時間と4段階で設定される。
等差数列でいうと
\(a_n={2(n-1)}+\lbrack 1/n \rbrack\)
もしくは
\(a_n={2(n-1)}+\lfloor 1/n \rfloor\)
こうかな。
これを使うと確実に1時間後には
OFFになっている確証が持てる。
私:オーケーグーグル、扇風機を切って。
GA:電源を切ります。1時間後には必ず。
他にも8時間後には切り忘れ防止の
強制タイマーが発動ってのもある。
はー、ばからしい。却下。
では、どうしよう。
あ、電源がONになったときは
KYなでかい音でピピと鳴る。
OFFのときはこれまたでかい音でピーと鳴る。
これをマイクで拾うか。
音声ファイルの解析、、やってみる価値は
あるけど、部屋がうるさかったら解析も
容易じゃないような、、。同じ周波数の音が
たまたま鳴っていたりするともちろん誤認識する。
てことで家主がいるときに家主のコントールで
入切するだけの代物になってしまった。なんだか残念。
はぁ、何をダラダラ書いてんだか。
API
さて。KURO-RSからリモコンの赤外線情報を
読み取る。
$ /usr/local/bin/kuro-rs-rec circulator-onoff
$ /usr/local/bin/kuro-rs-rec circulator-mode
$ /usr/local/bin/kuro-rs-rec circulator-timer
$ /usr/local/bin/kuro-rs-rec circulator-gain
$ /usr/local/bin/kuro-rs-rec circulator-pan
5つのボタン全部取得した。
データは/usr/local/share/kuro-rs/dataに保存しておく。
で、今の所、入/切ぐらいしか使わないので
api.jsの条件分岐に以下を追加
(snip)
if (audioName=="light-on.txt"||audioName=="light-off.txt"||audioName=="circulator-onoff.txt") {
let found=audioName.indexOf('light');
let responseText=(found)?'light':'circulator';
let rsport=(found)?2:4;
let filename=audioName.substring(0, audioName.length - 4);
exec('/usr/local/bin/kuro-rs-send /usr/local/share/kuro-rs/data/'+filename+' '+rsport,(err, stdout, stderr) => {
(snip)
}
}
(snip)
安直に追加しただけ。
出力させるポートが部屋の電気と違うやつを使っているので
適宜変更している。
んで、こんな感じで外部から呼び出されることを期待しておいて
IFTTTで「扇風機をつけて」のレシピを書いて終わり。
Test
さてやってみる。
私:おーけーぐーぐる、扇風機をつけて。
GA:デバイスがまだ設定されていません。Google Homeアプリから追加してください。
いやいやいや、マジか。まーじか。
扇風機 って言葉既に予約語らしいぞ。使えない言葉があるのか。
なら我が家のルールに則って、スーパーロボットの名前に
してしまえだな。
こいつヒョロっとしているからガイヤーにしようかな。

いや、白黒の配色でヒョロいから
イーグルファイターにしよう。

IFTTTを変更して再チャレンジ。
私:おーけーぐーぐる、イーグルファイターの電源をつけて。
GA:電源を入れます。
ピピ!とでかい音がなりぬるい風が出始めた。
成功だ。
私:おーけーぐーぐる、イーグルファイターの電源を切って。
GA:電源を切ります。
ピー!
これもでかい音。
ちなみに同じ信号出してるのでAPIは一緒だけど
IFTTTのレシピは2個作ってる。
Next
なんてくだらない投稿。
次回はこの暑さが和らがないと
モチベーションがでない。