1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

challenge_clubAdvent Calendar 2024

Day 4

Nature Remo Cloud APIで家電を自動で制御する

Last updated at Posted at 2024-12-06

この記事は技術チャレンジ部アドベントカレンダー20244日目の記事です。

Nature Remoはお持ちでしょうか?

Nature Remoはスマートリモコンです。Wi-Fiで接続でき、赤外線の送受信や温度・湿度センサー等を備えているので、家電のリモコンの代わりにスマートフォンから家電の操作ができます。Nature公式ストアやAmazonから買えます。

Nature Remoはスマートフォンアプリの他にAPIによりインターネット経由で操作できます。iOS 17まではショートカットAppからも操作できたのですが、iOS 18の仕様変更によりショートカットからの操作ができなくなってしまいました。なので、代替案としてNature Remo Cloud APIを使うことにしました。

今回の記事では、Nature Remo Cloud APIとiOSのショートカットを組み合わせて、日没時に自宅の照明を自動で切り替えるセットアップを紹介します。

想定読者

  • Nature Remoシリーズをお持ちの方
  • 自宅の家電を自動で制御したい方
  • IoTをやってみたい方
  • 電気代を節約したい方

目的

日没時に部屋の照明を寒色から暖色に切り替える。

動機

  • 部屋の中にいても日没したことが感覚的に分かるようにしたいから
  • 以前はショートカットAppのみで実現できていたが、iOSの仕様変更で使えなくなったため

方法

ショートカットAppのオートメーションで日没時にNature Remo Cloud APIを実行するよう設定する。

手順

1. Nature Remoを準備する

Nature Remoは買いましたか?ではスマホアプリで設定しましょう。Nature Remoは基本的に電源ボタンの信号だけで機器を識別してくれますが、家電によっては独自コマンドがあるため、赤外線信号を個別のボタンに登録する機能があります。

例として、私が使っているパナソニックのシーリングライトの独自コマンドをお見せします。このシーリングライトは通常の白色光の他に、明るめの暖色と暗めの暖色(くつろぎ)のモードがあります。これは日没後に白色の明るい光を浴びたくない私にとってはとても重宝しています。惜しむらくは機器自体には日没時に切り替える機能がないことです。

8DDF3804-30B8-4362-BB47-BEB291F2CC2E_1_201_a.jpeg
パナソニックのシーリングライトのコマンド

2. Nature Remo Cloud APIのアクセストークンを取得する

以下のページからアクセストークンを取得します。

スクリーンショット 2024-11-24 10.03.01.png
アクセストークンを取得する。

アクセストークンがあれば家電を乗っ取れるので、厳重に保管してください。

3. Postmanを準備する

APIリクエストをテストするためにPostmanを使います。

4. Postmanからリクエストを送信する

4.1. 認証情報を設定する

「Nature Remo Cloud API」(名前は適当でいいです)というCollectionを作成します。

「Auth」タブの「Type」で「Bearer Token」を選択し、「Token」に {{token}} を指定します。

スクリーンショット 2024-11-24 10.07.18.png

「Variables」タブで token という名前の変数を追加し、「Current value」に先ほど取得したアクセストークンを入力します。

「Initial value」には何も入力しないでください。クラウドに同期されるため、思わぬタイミングでアクセストークンが漏洩する可能性があります。

スクリーンショット 2024-11-24 10.07.29.png

これで認証の設定が完了しました。

4.2. 家電IDと信号IDを取得する

CollectionのVariablesに base_url を追加し、Initial valueを https://api.nature.global に設定します。

左ペインのCollectionを右クリックし、「Add request」を押下します。「Fetch the list of appliances」とか適当な名前を付けてください。

メソッドをGETに設定し、URLを {{base_url}}/1/appliances に設定します。

スクリーンショット 2024-12-05 20.08.05.png

「Send」でリクエストを送信すると、下部パネルにレスポンスのJSONが表示されます。

スクリーンショット 2024-12-05 21.09.59.png

出力が長くて見づらいのでVSCodeにコピーしましょう。シーリングライトっぽい項目を見つけます。

スクリーンショット 2024-12-05 21.38.34.png

1つ目の赤枠が家電IDになります。次に信号IDですが、今回は「暖かい光」に切り替えたいので2つ目の赤枠を使います。

CollectionのVariablesに戻って変数を設定します。 appliance_idsignal_id を設定してください。Current valueに赤枠の文字列をコピーします。

繰り返しになりますが、「Initial value」には何も入力しないでください。

スクリーンショット 2024-12-05 21.50.21.png

次に信号を送信するためのリクエストを作成します。Collectionに「Send a signal」などの名前でリクエストを作成してください。今度はメソッドをPOSTに、URLを {{base_url}}/1/signals/{{signal_id}}/send に設定します。

Sendでリクエストを送信すると、シーリングライトの光が変わるはずです。これはスクリーンショットでは撮れないのでお家で確かめてください。

5. iOSのショートカットを設定する

iPhoneでショートカットAppを開き、「オートメーション」タブからオートメーションを追加します。「時刻」オートメーションを追加しましょう。

IMG_3887.jpeg
「時刻」を選択する。

IMG_3888.jpeg
「日の入」時に実行するよう設定する。

「新規の空のオートメーション」を押します。単純に照明を切り替えるリクエストを送信するだけのフローを書いても良いのですが、その場合だと在宅していない時でも照明がオンになってしまい、電気代を消費します。なので、iPhoneの現在地をもとに在宅かどうかを判定し、在宅時のみに照明を切り替えるフローを組みます。

以下のようなフローを作成します。

IMG_3899.jpeg
現在地の取得と条件分岐。

IMG_3900.jpeg
信号送出リクエストの送信。

フローチャートで書くとこうなります。

これで、在宅時は日没後に照明が暖かい光に切り替わり、外出時はリクエストを送信しないフローができました。

応用

Nature Remo Cloud APIとショートカットAppの組み合わせはアイデア次第で応用が利きます。

帰宅時に時間帯に合わせて照明を切り替える

オートメーションの「到着」を使って帰宅時に処理を実行します。

IMG_3895.jpeg
「到着」を選択。

IMG_3893.jpeg
日の入の前後の判定。

起床時の外気温によってエアコンのオンオフを切り替える

オートメーションの「睡眠」から「起床」を選択し、アラームを止めた時点で処理を実行します。または、「時刻」で決まった時間に実行しても良いです(目が覚めた時に部屋が暖まっているようにしたい)。

ほとんどのエアコンにはタイマー機能があると思いますが、今回はショートカットを使って、外気温によってオンオフを切り替えてみます。今回も在宅時のみ実行されるように現在地の取得と条件分岐を入れます。

IMG_3901.jpeg
気温が10 ℃未満の場合、エアコンをオン。

最後に

ここまで読んでいただきありがとうございます。他におすすめの使い方があれば是非コメントして頂けると嬉しいです。

参考

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?