数年越しのNode-RED入門

ファームウェアエンジニアの井田です。今回はファームウェアから少し離れて Node-RED でNature Cloud APIを触るお話です。

背景

Remo nanoの発売の少し前から、NatureではDiscord上で開発者コミュニティを運営しています。 このDiscordサーバーでは、NatureのAPIサービスや今はやりの Matter に関する様々な話をしていますが、この中で Node-RED からNature Cloud APIにアクセスして家電の制御を行いたい という話題がありました。

私自身、Node-REDというものの存在はいくつかのIT系の勉強会・展示会などで見かけて、「データフロー型のビジュアルプログラミング環境」くらいの認識で知ってはいたのですが、毎度触ろうとおもって早数年経つという状態でした。

そこで、これを期にすこし触ってみようということで、さっそくNode-REDを開発用PCにインストールしてNature Cloud APIを使った処理を書いてみることにしました。

環境構築:Node-REDのインストール

普段はNature Remoのファームウェア開発をUbuntu上で行っているため、Node-REDの環境もこの開発用PC上に構築しました。

Node-REDの公式サイト Getting Startedから Run Locally を選ぶと、ローカルのLinux環境上での動かし方の手順が出てきます。

これによると、既に npm が入っている環境であれば、 npm install --unsafe-perm node-red を実行するだけで入れられるとありました。

sudo npm install -g --unsafe-perm node-red

公式の手順では上記のように npm-g オプションを付けてシステム全体用にいれる方法になっていましたが、今のところ常時運用するつもりはないので、ローカルに入れて起動しました。

mkdir -p ~/node-red
cd ~/node-red
npm install --unsafe-perm node-red
npx node-red

起動するといくつかのメッセージが表示され、 127.0.0.1:1880 でNode-REDのWebサーバーが起動するのを確認できたので、ブラウザで開きます。

17 Aug 20:13:23 - [info]

Welcome to Node-RED
===================

17 Aug 20:13:23 - [info] Node-RED バージョン: v3.0.2
...
17 Aug 20:13:24 - [info] サーバは http://127.0.0.1:1880/ で実行中です

正常に起動できたようなので、さっそくノードを追加したりして遊んでました。

ノードを追加して遊ぶ図

Node-REDのフローのデータ

本記事で使用しているNode-REDのフローのデータはこちらのリポジトリに置いてありますので、適宜参照してください。

github.com

練習:Cloud API経由でアプライアンス一覧を取得する

Nature Cloud API経由で家電を制御するには、 https://api.nature.global/1/appliances から制御対象のアプライアンスのIDを取得する必要があります。 そこでまずはアプライアンスの一覧の取得をNode-REDからやってみることにします。

まずは Nature Cloud APIの説明ページ に記載のとおり、APIを使用するための OAuth2 のアクセストークンを生成・取得します。 APIのアクセストークンは、 https://home.nature.global/ から行えます。

Access Token生成

左下の Generate access token を押すと、画面上部の緑色のブロックが表示され、その中に アクセストーク が表示されます。このアクセストークンはこの画面を閉じると二度と表示されないので、人に見られない場所に保存します。 (忘れたり人に見せてしまったりした場合はRevokeして再生成してください)

次に、Node-REDのフロー編集画面上で http request ノードを置きます。

http requestノードを置く

その後、置いた http requestノードをダブルクリックして編集画面を開き、ノードのプロパティを設定します。

http requestノードの編集

次に、手動でフローを実行するための injectノード を置きます。

injectノードを置く

ダブルクリックしてinjectノードを編集します。

injectノードの編集

最後に debugノード を置いて、各ノードの入出力を接続します。

debugノードを置く

ノード間を接続

これでアプライアンス一覧を取得する準備が整ったので、フローをデプロイして実行できるようにします。

デプロイを押す

デプロイが成功すると、injectノードの左側の角丸の四角いボタンが押せるので、押します。

injectの角丸ボタンを押す

画面右上のメニューからたどって「サイドバーを表示する」を押して、サイドバーを表示します。

サイドバーを表示する

表示されたサイドバーで虫のアイコンのボタンを押すと、デバッグタブが表示されます。ここに debugノードに入力された値、すなわちhttp requestノードの実行結果が表示されます。 内容を確認すると、 https://api.nature.global/1/appliances からのレスポンスであることが分かります。

(なお、図では要素数31 になっていますが、一般のユーザーはこんなに多くないと思います)

debugタブを表示

つづく

ここまででNode-REDのhttp requestノードを設定して、Nature Remo Cloud APIにアクセスできることがわかりました。 次回は取得したアプライアンス情報を使って、照明のon/offをNode-RED上から行ってみようと思います。 つづきはこちら

Nature開発者Community

Natureのプロダクトに関する開発者向けの情報を交換する場として、 Nature開発者コミュニティ をDiscord上に立ち上げています。 今回の話題であるNature Cloud APIに関する話をする apiチャネル もありますので、ご興味がある方はぜひご確認いただければと思います。

discord.com