皆さん,こんにちは。家電のスマート化にハマっているRYOです。
最近はWiFiと連携できるIoT家電が増えつつありますが,まだまだ非対応機種も現役ですよね。
そんな従来の家電をスマホから操作できるようにするのがスマートリモコン。
私の場合は+Style,Switchbotを経て現在はNature Remoに落ち着いています。
RYO
ただし,毎日使っていると次第にアプリを起動して操作するという動作が面倒になってくるデメリット付き。
朝の忙しい時間帯にアプリでチマチマ設定するより,1アクションで済む赤外線リモコンの方が使いやすいのは当然です。
そうなってくるとスマート化しても本末転倒だな…と悩んでいた折,NFCタグなる面白そうなツールを発見したわけ。
さっそく購入したのですが,Android向けには統一された設定がないらしく,各自で使いたいように使えといった感じでした。
Switchbotならアプリから設定できるのですが,Nature Remoは対応しておらず… 試行錯誤すること1時間。
最終的にAPIを叩くことになりましたが,無事Android+Nature Remo+NFCタグの組み合わせで使えるようになりました。
そこで本記事ではNature Remoを使うAndroidユーザーに向けて,クラウドAPIの扱い方とNFCタグの活用方法を解説していきます。
目次
全体の流れ
今回の作業内容は以下のとおり。
ざっくり3段階に分けて進めていきます。
- APIを使ってJSONデータを収集
- 操作したい家電に合わせてコードをカスタマイズ
- NFC ToolsでNFCタグにデータを書き込み
準備: NFC Toolsのダウンロード
事前準備としてNFC Toolsをダウンロードします。
今回必要になるのは,以下2種類のアプリ。
NFC Tools – Pro Edition
wakdevposted withアプリーチ
NFC Tasks
wakdevposted withアプリーチ
NFCタグの書き込みにはNFC Toolsを,実行時にはNFC Tasksを使います。
インストールできたら準備完了。
さっそく本作業に進みましょう。
POSTリクエストの機能は有料版 (Pro Edition)でのみ利用できます。
Nature Remo Cloud APIの扱い方
AndroidでNFCタグを用いてNature Remoを操作するためにはAPIが必要。
- アクセストークンを作成
- 各種データを取得
- Nature Remoのデータ形式3つ
順番に解説していきます。
アクセストークンを作成
まずはCloud APIにアクセスするためのトークンを作成します。
home.nature.globalにアクセスし,メールアドレスでログイン。
RYO
ログインできたら,左下にある「Generate access token」をクリック。
トークン (長い文字列)が発行されたら,メモしておきましょう。
アクセストークンは一度しか表示されないので,確認できなかった場合は再生成してください。
使用しないトークンは「Revoke」ボタンから取り消しておくこと。
各種データを取得
次にNature Remoの状態をデータで取得します。
コマンドプロンプト (管理者権限でなくてよい)を開いたら,下記のコードを実行します。
【トークン】部分には前項で取得したアクセストークンを入れてください。
curl -X GET "https://api.nature.global/1/appliances" -H "accept: application/json" -H "Authorization: Bearer 【トークン】"
正常に取得できると,JSON形式のデータが出力されます。
このままでは確認しづらいので,JSONきれいなどのツールを使って整えましょう。
RYO
上記では1つ以上の家電が登録されていることを前提に解説しています。
未登録状態だとデータの取得に失敗します。
Nature Remoのデータ形式3つ
Nature Remoで扱える家電はざっくり分けて3種類あります。
- 一度に複数のデータを送信する機器
- 一度に単一のデータを送信する機器
- 手動で登録した機器
①は主にエアコンで使用されるデータ形式。動作モードや温度,風量,風向などの情報を一度に送信します。
②はテレビや照明で使われ,1回操作するごとに1つの動作が完結します。
③はNature Remoの家電リストに載っていないリモコンを手動で登録したデータ。1回に単一の動作をする点は②と同じですが,Nature Remoでは異なるデータ形式として保存されるため,あえて項目を分けています。
各データ形式の取り扱い方法は以下で詳しく解説します。
①一度に複数のデータを送信する機器
エアコンの場合は以下のようなJSONデータになります。
[
{
"id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"device": {
"name": "Nature Remo",
"id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"created_at": "xxxxxxxx",
"updated_at": "xxxxxxxx",
"mac_address": "xxxxxxxxx",
"bt_mac_address": "xxxxxxxxx",
"serial_number": "xxxxxxxxx",
"firmware_version": "Remo-mini/x.x.x",
"temperature_offset": 0,
"humidity_offset": 0
},
"model": {
"id": "cccccccc-cccc-cccc-cccc-cccccccccccc",
"country": "JP",
"manufacturer": "メーカー",
"remote_name": "xxxxxxxx",
"series": "",
"name": "xxxxxxxx",
"image": "ico_ac_1"
},
"type": "AC",
"nickname": "エアコン",
"image": "ico_ac_1",
"settings": {
"temp": "23",
"temp_unit": "c",
"mode": "warm",
"vol": "auto",
"dir": "1",
"dirh": "",
"button": "power-off",
"updated_at": "xxxxxxxx"
},
"aircon": {
"range": {
"modes": {
"auto": {
"temp": [
"-5",
"-4.5",
"-4",
"-3.5",
"-3",
"-2.5",
"-2",
"-1.5",
"-1",
"-0.5",
"0",
"0.5",
"1",
"1.5",
"2",
"2.5",
"3",
"3.5",
"4",
"4.5",
"5"
],
"dir": [
"1",
"2",
"3",
"4",
"5",
"swing"
],
"dirh": [
""
],
"vol": [
"1",
"auto"
]
},
...
},
"fixedButtons": [
"power-off"
]
},
"tempUnit": "c"
},
28~37行目の「”settings”」から始まるくくりが現在の設定。
最上部にあるid (aaaaaaaa-aaaa~)が登録機器ごとに割り振られるデバイスIDです。
温度や風量といったパラメーターは以下を使って指定します。
名前 | 値 (一例) | 意味 |
operation_mode | cool / warm / dry / blow | 運転モード |
temperature | 18~30 | 設定温度 |
air_volume | 1~6 / auto | 風量 |
air_direction | 1~5 / swing | 風向 |
button | 【空白】= ON / power-off = OFF |
電源 |
値の対応範囲は上記のJSONデータで確認してください。
冷房 / 25℃ / 風量2 に設定する場合はこんな感じ。
curl -X POST "https://api.nature.global/1/appliances/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/aircon_settings" -d "button=&operation_mode=cool&temperature=25&air_volume=2" -H "authorization: Bearer 【トークン】"
パラメーターやidさえ間違えなければ動作します。
NFC Toolsで動作させる方法は後ほど説明します (直接コマンド入力できないため)。
②一度に単一のデータを送信する機器
テレビの場合,以下のようなJSONデータが返ってきます。
[
{
"id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"device": {
"name": "Nature Remo",
"id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"created_at": "xxxxxxxx",
"updated_at": "xxxxxxxx",
"mac_address": "xxxxxxxxx",
"bt_mac_address": "xxxxxxxxx",
"serial_number": "xxxxxxxxx",
"firmware_version": "Remo-mini/x.x.x",
"temperature_offset": 0,
"humidity_offset": 0
},
"model": {
"id": "cccccccc-cccc-cccc-cccc-cccccccccccc",
"country": "JP",
"manufacturer": "メーカー",
"remote_name": "xxxxxxxx",
"name": "xxxxxxxx",
"image": "ico_tv"
},
"type": "TV",
"nickname": "テレビ",
"image": "ico_tv",
"settings": null,
"aircon": null,
"signals": [],
"tv": {
"buttons": [
{
"name": "power",
"image": "ico_io",
"label": "TV_power"
},
{
"name": "mute",
"image": "ico_mute",
"label": "TV_mute"
},
],
"state": {
"input": "t"
}
}
},
①と同様に一番上のid (aaaaaaaa-aaaa~)がデバイスID。
dataには各ボタンの名前を入力すればいいので,以下のようになります。
curl -X POST "https://api.nature.global/1/appliances/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/tv" -d "button=power" -H "Authorization: Bearer 【トークン】"
“button=button name”の具体例は下記のとおり。
名前 | 値 (一例) | 意味 |
button | power | 電源 |
mute | ミュート | |
vol-up | 音量を上げる | |
ch-1 | 1チャンネル | |
d | dボタン |
照明器具の場合は「tv」を「light」に変更するだけ。
curl -X POST "https://api.nature.global/1/appliances/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/light" -d "button=on" -H "Authorization: Bearer 【トークン】"
詳細はNature RemoのAPI仕様ページを参照してください。
参考 Nature APISwagger UI③手動で登録した機器
下記は手動登録したサーキュレーターのJSONデータ。
このタイプは機器単位だけでなく,ボタン単位でもidが割り振られます。
[
{
"id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"device": {
"name": "Nature Remo",
"id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"created_at": "xxxxxxxx",
"updated_at": "xxxxxxxx",
"mac_address": "xxxxxxxxx",
"bt_mac_address": "xxxxxxxxx",
"serial_number": "xxxxxxxxx",
"firmware_version": "Remo-mini/x.x.x",
"temperature_offset": 0,
"humidity_offset": 0
},
"model": null,
"type": "IR",
"nickname": "サーキュレーター",
"image": "ico_fan",
"settings": null,
"aircon": null,
"signals": [
{
"id": "cccccccc-cccc-cccc-cccc-cccccccccccc",
"name": "電源",
"image": "ico_io"
},
{
"id": "dddddddd-dddd-dddd-dddd-dddddddddddd",
"name": "風量大",
"image": "ico_plus"
},
]
},
つまりidさえ指定すれば,リクエストを送信できるというわけ。
もし電源ボタンを操作するなら,こんな感じになります。
curl -X POST "https://api.nature.global/1/signals/cccccccc-cccc-cccc-cccc-cccccccccccc/send" -H "accept: application/json" -H "Authorization: Bearer 【トークン】"
NFCタグを完成させる
あとはNFC Toolsでデータを作って書き込むだけなので超簡単。
- タスクを作成
- NFCタグにデータを書き込み
順を追って説明します。
タスクを作成
NFC Toolsを起動したら「タスク」タブを開き,「タスクを追加」をタップ。
「ネットワーク」⇒「HTTP POST」に進んでください。
下記のような画面が表示されたら「リクエスト」の下にPOSTするURLを入力します。
エアコンを操作するなら,「https://api.nature.global/1/appliances/aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa/aircon_settings」と入力すればOK。
次に「POSTパラメータ:」の横にある「+」ボタンを2回タップして「#PARAMETER」欄を2つ作成。
1つ目は下記のとおり入力しましょう。
【トークン】は最初に取得したアクセストークンです。
名前 | 値 |
access_token | 【トークン】 |
2つ目は家電によって異なります。
エアコンを25℃に設定する場合は「名前: temperature,値: 25」と入力。
テレビの電源を設定する場合は「名前: button,値: power」とします。
RYO
すべて入力し終えたら最下部の「OK」ボタンを押して完了。
「タスク」タブに設定が反映されているか確認しましょう。
NFCタグにデータを書き込み
最後はタスクをNFCタグに書き込む工程。
スマホ本体のNFC機能を有効にした上で,「タスク」タブの「書く / ○○バイト」をタップします。
画面の指示に従って,スマホのNFC読み取り部分にタグを近づけてください。
以下の表示になればデータの書き込み完了。
実際に動作するか,検証もお忘れなく。
書き込みに失敗した場合は必ず「タグを消去」から中身のデータを削除してください。
そのまま上書きすると不具合の原因になります。
実際に使ってみた
私の環境で実際に操作した様子がこちら。
照明をつけて,エアコンの設定温度を25℃に変更しています。
RYO
タイムラグもなく,正常に動作していることが確認できます。
唯一のデメリットはスマホがスリープ状態だと読み取りできないこと。
こればかりはAndroidの仕様なので仕方ないのですが,Felicaのようにロック解除せず読み取りができればと思わずにはいられません。
ただそうは言っても,やはり一発で家電を操作できるのは超便利ですよ!
まとめ
本記事では「【Nature Remo APIの使い方】Android+NFCタグで家電を操作する方法【エアコン対応】」について書きました。
いくつか上級者向けの操作を伴いますが,見よう見まねでも扱えるように極力テンプレート化してご紹介しています。
Nature Remoには様々な家電が登録できるので,ぜひ試しながら楽しんでいただければ幸いです。
RYO
今回は以上です。