わふうの人が書いてます。

iOSアプリケーション開発、BLEのファームウェアとハードウェア試作のフリーランスエンジニア。

Nature remoをiOS ショートカットアプリとSiriで活用する

家にあるエアコンや照明などの多くの家電は赤外線リモコンがあります。 Nature remo https://nature.global は、赤外線信号の送信と、気温などのセンサーを備えた数千円から1万円のデバイスと、クラウドからデバイスを操作する機能を提供します。

Nature remoで、アプリを設定して家に近づいたりなどの条件で機器をオンオフしたり、Amazon AlexaやGoogle Homeと連携して、音声での家電操作ができます。しかし、Nature remoの説明には、Siriとの連携がありません。

公式ブログで、iftttというサービスを中継してSiriで家電操作をする方法 (iOS12のショートカットを使い、SiriからRemoを操作する)[https://nature.global/jp/ifttt-setup/ios12siriremo] が紹介されています。

しかし、複数のサービスを中継するのは、1つでもサーバーが落ちていたら利用できなくなる不安感だけではなく、なんとなく嫌です。そこで、Nature remoを使い、iOSのショートカットアプリを活用して公式のウェブサービスを直接叩いて、Siriから機器操作をしてみます。

手順は:

  1. Nature remoのAPIで使う、エアコンや赤外線信号を表す識別子を取得する
  2. iOS ショートカットアプリから、Nature remoのAPIを叩く
  3. SiriからiOSショートカットアプリが実行されるように、音声コマンドを紐づける
    の3つです。

Nature remoのアプリでの設定

まず、Nature remoの設定説明に従い、エアコンと照明の設定を行います。まず、エアコンを設定します。Nature remoの説明通りに、エアコンの赤外線リモコンの信号を読み込むと、メーカー名を自動判別して、アプリにエアコンの設定画面が追加されます。照明は、赤外線リモコンのボタン1つ1つを読み込んで、それぞれアプリのボタンとして登録していきます。

エアコンと照明の設定が終わると、アプリにはこのような画面ができているでしょう。

外出時などに、エアコンと照明をまとめて消したいなど、複数の機器を操作したい時には、Nature remoのアプリの”シーン”を使うと便利です。例えば、エアコンと照明をまとめてオンにする場合は、このようなシーンを作成します。オフにするシーンも同様に、機器をオフにする項目をまとめたもので作れます。

Nature remoのアプリで、ルールを追加して、家電製品の振る舞いを作れます。例えば、ルールの家から離れる、家に近づくに、エアコンのオフオンを関連づけておけば、いわゆるスマートホームのデモンストレーションでよく使われる、家に帰ってくるとエアコンが動いていてすでに暖かい、などができます。

Nature remoのセンサーの値と紐付けておくこともできます。私は、室温がある温度以下になったらエアコンをオンにするルールを追加しています。睡眠時にエアコンの動作音がするのが嫌で、寝る前にエアコンを切るのですが、朝起きた時に部屋が寒いのも嫌なので、室温がある温度以下になったら、エアコンを入れるという使い方です。

機種は、1万円程度のNature Remoと、7000円代とより安価な Nature Remo mini があります。それぞれの違いは搭載しているセンサーの種類です。Nature Remoは、温度、湿度、照度、人感センサーがあります。Nature Remo miniは、温度センサーだけがあります。人がいたら、あるいは照度や湿度がある値になったらというルールを作るなら、Nature Remoが必要です。そのようなルールが必要ない、例えば先ほどの例のようにある温度以下になったらエアコンを入れるように温度だけしか使わないなら、Nature Remoがよいでしょう。

Nature remoのAPIで使う、エアコンや赤外線信号を表す識別子を取得する

Nature remoは、ネットワークから機器を操作するAPIを提供しています。このAPIを使うには、ユーザーの認証トークンと、機器あるいは信号の識別子が必要です。これらを取得しましょう。

開発者サイト https://developer.nature.global を見ると、APIにはローカルAPIとクラウドAPIとがあります。どこにいても機器を操作したいので、ここではクラウドAPIを使っていきます。

ローカルAPIは、家のWiFiなど同じネットワークに繋がっている時に呼び出せるAPIで、赤外線のパターンの生信号そのものを取得/送信するものがあります。クラウドAPIは、エアコンや機器の識別子を使って、温度設定などができます。おそらくNature remoの機器自体には、ローカルAPIの赤外線の信号そのものを扱う機能だけが実装されていて、メーカごとのエアコンの赤外線信号を組み立てる機能は、クラウドつまりサーバー側に実装されているのでしょう。

Nature remoの機器にアクセスするための、認証トークンを取得します。 https://home.nature.global で、左下にある”Generate access token”を押すと、トークンが生成されて画面にそれが表示されます。このトークンは生成したその時だけしか表示されませんから、メモ帳か何かでもいいと思いますが、どこか自分しか読み書きできないところに一時的に保存しておきます。

ネットワークサービスを使う時にユーザ名とパスワードとを決めますが、このトークンは、そのユーザ名とパスワードと同じようなものです。このトークンは、ユーザしか知らないはずです。ですから、このトークンがあれば、今APIを使おうとしている人が、正規のユーザだと思い込めるわけです。もしも、トークンが誰かに知られて、いたずらされるようなことになったら、そのトークンを削除して無効化します。

認証トークンを使い、機器や赤外線信号を表す識別子を取得していきます。もしもNature remoAuがOAuth2に対応でもしていれば、 http://http://swagger.nature.global/ からAPIを呼び出して、機器のリストが取れるのですが、そんな対応はしていないので、ターミナルから次のコマンドを実行してAPIを叩きます。

$ curl -X GET “https://api.nature.global/1/appliances" -H “accept: application/json” -H “Authorization: Bearer {ここにアクセストークンの文字列を入れる}”

認証トークンはヘッダに与えます。アクセスができれば、何やら文字列がわーっと表示されるはずです。認証トークンの設定など何か間違えていると、’’ {“code”:401001,”message”:”Unauthorized”} ‘’ という表示が出ます。これは認証ができなかったという意味です。トークンを間違えているか何かでしょう。

このわーっと出てきたテキストは、JSONという形式での機器一覧です。このままでは読みにくいので、一度このわーっと出てきたテキスト部分をコピーして、適当なJSON整形サイトなりで整形して読める形にします。

ざっと見ていくと、エアコンにつけた名前付近に、”ID”という項目があります。これがエアコンを示す識別子です。

照明の赤外線信号につけた名前付近を見ていくと、やはり”ID”という項目があります。これが赤外線信号を示す識別子です。これらの識別子を、どこかに記録しておきます。

iOS ショートカットアプリから、Nature remoのAPIを叩く

iOSショートカットアプリから、Nature remoを経由してエアコンと照明を操作します。まずiOS のショートカットアプリをインストールしておきましょう。https://itunes.apple.com/jp/app/id915249334

Nature remoのAPIは、APIのリスト http://http://swagger.nature.global/ にあるように、エアコンはエアコン特有のAPIに、赤外線信号を送信するだけの機種は信号を送受信するAPIが、それぞれ提供されています。

まずエアコンを設定します。まず、オンの設定を追加しましょう。ショートカットアプリで、”+ショートカットを作成”をタップして、メニューから”URL”を選択します。次に “URLの内容を取得”を選択します。

ここで、エアコンのオンの設定を次のように入力します。文字列を入力するのは手間ですから、Macがあるなら、Mac側でテキストをコピーすれば、iPhoneの方にその文字列をペーストできますから、その機能を利用するとよいです。設定ができれば、今開いている編集画面のヘッダ中央にある”▷”ボタンを押します。エアコンがオンになれば設定ができています。動かない場合は、例えば次の画像は、認証トークンの値を間違えている場合の画面ですが、このようにサーバーが失敗した理由を返しているので、それを見て修正します。

同じようにしてオフの設定を入力します。オンの設定との違いは、本文を要求という項目が増えることだけです。ですから、ですからオンのボタンを複製すると設定の手間が少ないでしょう。ここで”本文を要求”の設定を間違えている(buttonのスペルを間違えてbutonにしているなど)場合は、APIはオフではなくオンとして動きます。

  • 本文を要求: フォーム
  • button: power-off

次に照明のオンオフを設定します。専用のAPIがあるエアコンとは違い、今度は任意の電化製品の赤外線リモコンの送信コードを送信するAPIを使います。照明オフの設定は、URLの赤外線信号の識別子を、オフの赤外線信号の識別子に置き換えるだけです。

SiriからiOSショートカットアプリのショートカットを実行させる

ここまでの長い道のりで、やっといよいよSiriからの操作ができます。

その前に、エアコンや照明を1つ1つ設定するのも面倒です。1つ1つのAPIごとに設定したショートカットをまとめるショートカットを作っておきます。ショートカットの作成で、”ショートカット”で検索すると、すでに登録されているショートカットを呼び出す項目が表示されます。これを複数配置して、必要な動作を1つのショートカットにまとめます。

あとは、ショートカットの右上にある、完了の下にあるボタンを押してSiriに連携させます。”照明をつけて”などだと、HomeKitの方に処理を持って行かれます。ぶつからないフレーズとして、電気を入れて、と設定しています。

ホーム場面に追加をしておくと、ホーム画面のアイコンのタップだけで、操作ができるようになって便利です。ショートカットの共有は、このショートカットの設定に認証トークンや機器の識別子など、ユーザだけが知り得る情報が入ってしまっているので、すべきではありません。もしも公開したら、世界の誰かが共有されているショートカットを使えば、自分の家の機器が動いてしまいます。

最後に

Nature remoを、iOSのショートカットアプリ、そしてSiriから操作する手順をまとめてみました。今回はAPIを直接叩くようにしましたが、Google HomeやAmazon Alexaを使っているならば、それらのサービスのiOSアプリを活用するか、あるいはショートカットアプから、それらのサービスごとのアプリの機能を利用するのがよいのかもしれません。

とにかく、設定はめんどくさいですが、動いてしまえば、ちょっと便利ではあります。設定の労力に見合うかといえば、人によるかもしれません。微妙ですね。