技術を磨くだいぱんまん

散歩とインターネットが大好きなシステムエンジニア。暮らし、おでかけ、テクノロジーについて書いています。

IRKit+IFTTTを使って指定した時間に家電を自動操作してみました

f:id:donchan922:20170822100343j:plain

こんにちは、だいぱんまん(@donchan922)です。

少し前に以下の記事で紹介した自宅の家電を遠隔操作できるIRKit。リビングにいるときに寝室の冷房をつけたり、寝るときに布団に入りながら照明を消したりと我が家で大活躍中です。

Raspberry Pi+IRKit+Homebridgeを使って自宅の家電をSiriで音声操作してみました - 技術を磨くだいぱんまん

そんなIRKitについて先日、寝起きがすこぶる悪い妻から

毎朝決まった時間に自動で寝室の照明をつけて

と言われたので、まあこれで妻の寝起きが少しでもよくなればいいかと思い実現することにしました(たぶんよくならない)。

仕組みについて

f:id:donchan922:20170822093301p:plain
IFTTTを使って指定の時間にIRKitのAPIを実行し、家電を操作する仕組みです。

IFTTTは「If This Then That(これをしたら、次にあれをする)」の略で、Webサービス同士を連携させることのできるサービスです。例えば、以下のようなことが実現できます。

  • Gmailにメールが届いたら、LINEに転送する
  • Facebookのプロフィール写真を変えたら、Twitterのアイコンも変更する
  • Kindleの日替わりセール情報が更新されたらiPhoneに通知する

今回の場合は、「指定した時間がきたらIRKitのAPIを実行する」を実現します。そのために使うのが以下の2つのWebサービスです。

  • Date & Time:指定の日時をトリガーにする
  • Webhooks:HTTPリクエストを送る

この仕組みを実現するためには以下の2つの作業が必要です。これらの設定は後ほど詳しく説明します。

  • IRKitの設定
  • IFTTTの設定

必要なもの

すでにPCがあることを想定しています。ちなみに今回のセットアップでは、Mac(macOS Sierra v10.12.5)を使用しました。以下、準備するものです。

USBケーブル

USB2.0ケーブル(タイプAオス-マイクロBオス)を用意しましょう。IRKitとACアダプタを接続するときに使います。

リモコンスイッチ

照明をリモコンで操作できるようにするスイッチ。照明のON/OFFを切り替えたい場合はこれ使うと便利です。リモコン対応していない家電を操作したい場合は、リモコンコンセントを導入するのがいいと思います。

実装手順

IRKitの設定

インターネットを介してIRKitのAPIを使用する場合、以下の2つのリクエストパラメータが必要です。

  • clientkey:クライアントがリクエストに付加し、クライアントを認証するためのキー
  • deviceid:クライアントがリクエストに付加し、リクエスト先のIRKitデバイスを特定するID

ということで、上記2つのパラメータを取得します。まずは以下コマンドで、Instance Nameを取得します。

$ dns-sd -B _irkit._tcp

Browsing for _irkit._tcp
DATE: ---Mon 21 Aug 2017---
22:14:46.590  ...STARTING...
Timestamp     A/R    Flags  if Domain               Service Type         Instance Name
22:14:46.817  Add        2   4 local.               _irkit._tcp.         irkitXXXX


以下コマンドで、IRKitのIPアドレスを確認します。Addressの値がそれにあたります。

$ dns-sd -G v4 irkitXXXX.local

DATE: ---Mon 21 Aug 2017---
22:15:12.044  ...STARTING...
Timestamp     A/R Flags if Hostname                               Address                                      TTL
22:15:12.256  Add     2  4 irkitXXXX.local.                       10.253.131.99                                10


以下コマンドで、clienttokenを取得します。CLIENTTOKENがそれにあたります。

$ curl -i "http://10.253.131.99/keys" -d '' -H "X-Requested-With: curl"

HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

{"clienttoken":"CLIENTTOKEN"}


以下コマンドで、deviceidclientkeyを取得します。DEVICEIDCLIENTKEYがそれにあたります。あとで使うのでメモしておきます。

$ curl -i -d "clienttoken=CLIENTTOKEN" "https://api.getirkit.com/1/keys"

HTTP/1.1 200 OK
Server: openresty
Date: Mon, 21 Aug 2017 13:17:31 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"}

IFTTTの設定

f:id:donchan922:20170822074537j:plain
IFTTTはWeb版とスマホ版があります。今回はWebから設定を行っていきます。まずはIFTTTのWebページに行き、会員登録を行います。その後、画面右上の「New Applet」を選択します。


f:id:donchan922:20170822074557p:plain
「+this」を選択します。


f:id:donchan922:20170822074600p:plain
「Date & Time」を選択します。


f:id:donchan922:20170822074607p:plain
指定の時間の種類を選択します。今回は毎日決まった時間に実行するようにしたかったので、「Every day at」を選択しました。


f:id:donchan922:20170822074611p:plain
実行する時間を選択します。今回は6時45分に設定しました。


f:id:donchan922:20170822074614p:plain
「+that」を選択します。


f:id:donchan922:20170822074617p:plain
「Webhoks」を選択します。


f:id:donchan922:20170822074625p:plain
「Make a web request」を選択します。


f:id:donchan922:20170822085328p:plain
設定するパラメータは以下のとおりです。

  • URL:https://api.getirkit.com/1/messages
  • Method:POST
  • Content Type:application/x-www-form-urlencoded
  • Body:clientkey=DEVICEID&deviceid=CLIENTKEY&message={"format":"raw","freq":...,"data":[....]}

DEVICEIDCLIENTKEYは、さきほどメモした値と置き換えてください。{"format":"raw","freq":...,"data":[....]}は、対象の家電の赤外線信号と置き換えてください。

家電の赤外線信号を取得する場合は、対象の家電のリモコンをIRKitに向けて押します。その後以下コマンドを入力し、赤外線信号を確認します。今回は照明をOFFにする赤外線信号を取得しました。

$ curl -i "http://10.253.131.99/messages" -H "X-Requested-With: curl"

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":[....]}


f:id:donchan922:20170822085343p:plain
「finish」を選択すれば設定完了です。あとは指定した時間に対象の家電がきちんと操作されればOKです!お疲れさまでした。