極楽とんぼのロボット製作記

情報工学系大学院生がロボットとその周辺技術や身の回りの出来事について紹介するブログ

IRKitで指定時間に照明をつけて目覚ましにする

最近、学校へ行く道すがら梅が咲いているのを見て、「ああ、そろそろ春だなあ」などと呑気考えています。やっと寒い冬が明けて楽ができて良いのですが、ついつい寝すぎてしまって困るのがこの時期です。昔の人も「春眠暁を覚えず」とか言ったそうですね。
そこで(唐突)、今回は朝になると部屋の照明を自動でつけて、無理やり起こしてくれる”とてもありがたい”おうちハックをしようと思います。IRKitを使用して赤外線リモコンで操作できる照明を操作します。cronからIRKitのAPIのコマンドを実行して、指定時間に照明が起動できるようにします。(すでにIRKitの後継機であるNature Remoが販売されていますが、その話はまた別のところで書きたいと思います。)

使用機器

IRKit
今回、家電製品の赤外線情報を読み取って家電を操作するために使用します。後継機としてNature Remoという商品が出ています。

使用している照明
使用している照明は昼光色を5段階に調整でき、常夜灯もあります。今回は目覚めたい時間の15分前に常夜灯を付け、その後、段階的に昼光色の照明を明るくしていきます。

IRKitのセットアップや設置方法等は下記記事にまとめました。
www.g104robo.com

IRKitと通信する

IRKitと通信するためにまずはavahi-utilsを入れましょう。

$ sudo apt install avahi-utils

IPアドレスを調べる

$ avahi-browse -r _irkit._tcp
+ enp3s0 IPv4 irkit379a  _irkit._tcp local
= enp3s0 IPv4 irkit379a  _irkit._tcp local
   hostname = [iRKit.local]
   address = [IRKIT_IP]
   port = [80]
   txt = []

ローカルネットワークで操作する

IRKitが最後に受信したデータを取得(赤外線情報の記録)

リモコンをIRKitに向けて赤外線を送信しながらコマンドを実行することで、赤外線情報をJSONデータとして受信できます。

$ curl -i "http://IRKIT_IP/messages" -H "X-Requested-With: hoge"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain
{"format":"raw","freq":38,"data":[555...666]}

{"format":"raw","freq":38,"data":[555...666]}が赤外線のデータ部分です。これをやりとりすることで照明に赤外線の信号を送信することができます。

コマンドからIRKitを操作して赤外線を送信する

先ほどのコマンドのあとに-dをつけて、得られたデータを'で囲んで実行することで赤外線データを送信することができます。

$ curl -i "http://IRKIT_IP/messages" -H "X-Requested-With: hoge" 
-d '{"format":"raw","freq":38,"data":[555...666]}'

遠隔操作する

IRKitを遠隔操作するにはdeviceidとclientkeyを取得する必要があります。これらを取得するにはまず、clienttokenを取得します。これらのidやkeyを知っているだけでIRKitを遠隔地から操作できてしまうので、これらを公開してはいけません。

clienttokenを取得する

curl -i "http://IRKIT_IP/keys" -d '' -H "X-Requested-With: hoge"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

{"clienttoken":"CLIENTTOKEN"}

deviceidとclientkeyを取得する

clienttokenが取得できたら、deviceidとclientkeyを取得します。

$ curl -i -d "clienttoken=CLIENTTOKEN" "https://api.getirkit.com/1/keys"
HTTP/1.1 200 OK
Server: openresty
Date: Sat, 21 Oct 2017 13:56:32 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 94
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With
X-Content-Type-Options: nosniff

{"deviceid":"DEVICEID","clientkey":"CLIENTKEY"}

IRKitサーバー経由で操作する

実際に遠隔地からIRKitを操作できるか確かめてみましょう。
通信環境によりますが、私の場合は20秒くらいタイムラグを経て、照明の操作が行われました。

curl -i "https://api.getirkit.com/1/messages" -d 'deviceid=DEVICEID' 
-d 'clientkey=CLIENTKEY' -d 'message={"format":"raw","freq":38,"data":[555...666]}'

cronで指定した時間に照明をつける

先ほど照明を操作したコマンドをシェルスクリプトに書いて保存しておきます。
例)

#!/bin/bash
curl -i "https://api.getirkit.com/1/messages" -d 'deviceid=DEVICEID' 
-d 'clientkey=CLIENTKEY' -d 'message={"format":"raw","freq":38,"data":[555...666]}'

今回は照明を常夜灯にする、お好みの照明(一番暗い設定をお好みとする)にする、照明を1段階明るくするの3つの赤外線データを保存し、シェルスクリプトに保存しておきます。
Linuxで一定時間ごとにコマンドを実行するにはcronが便利です。

$ crontab -e

と入力してcronの編集を行います。下記のように設定して指定時間に照明が操作されるようにします。下の例では、毎日5:45に常夜灯、5:50に一番暗い照明が点灯、その後5:53から2分毎に照明が明るくなっていきます。

45 5 * * * /home/tombo/workspace/irkit_shell/light_night_light.sh    #常夜灯点灯
50 5 * * * /home/tombo/workspace/irkit_shell/light_favorite.sh         #一番暗い照明が点灯
53-59/2 5 * * * /home/tombo/workspace/irkit_shell/light_plus1.sh    #53,55,57,59の2分毎に照明を明るくしていく

保存するとcronの実行が開始されます。保存内容を確認したい時は

$ crontab -l

として確認することができます。

これで眠い春も遅刻せずに乗り越えられますね。

参考サイト
IRKitをwindowsから操作 | 87miles.net
エアコンのオン・オフをHomeKitで操作出来るようにした - コードつれづれ
Apple HomekitとIRkitを使ったスマートホームの構築手順 - Qiita
現状これ以上を知らない、(真にプログラミングできるという意味で)プログラマブルな赤外線リモコンデバイス「IRKit」 - TsSoftLab?
IRKitを使って家に帰ったら電気がつくようにした - rdmmtd's blog
クーロン(cron)をさわってみるお - Qiita