Node-RED で Azure IoT Hub を使う　

# やりたかったこと
* Node-RED で Azure IoT Hubでデータの送受信

# Azure IoT Hub 用ノード
Node-REDでAzure IoT Hubをサクッと使えるノードとしては、これは良さげ。

* [node-red-contrib-azure-iot-hub](https://flows.nodered.org/node/node-red-contrib-azure-iot-hub)

## 出来ること
* データの追加 : Azure IoT Hub
* データの受信 : Azure IoT Hub Receiver
* デバイスの登録 : Azure IoT Hub Registry
* デバイス情報の取得 : Azure IoT Hub Device Twin

![image.png](https://qiita-image-store.s3.amazonaws.com/0/10770/9b0170ee-4d03-fa9f-8aa5-37ca11ee0ff2.png)

### サンプルflow

```json
[{"id":"c6d6217f.a9f26","type":"azureiothub","z":"9c35a71c.b648b8","name":"Azure IoT Hub","protocol":"mqtt","x":564,"y":161,"wires":[["2e441a7a.c2b8b6"]]},{"id":"ba1e7b36.0b7da8","type":"inject","z":"9c35a71c.b648b8","name":"","topic":"","payload":"{\"deviceId\":\"unibo-9\",\"key\":\"{add key}\",\"protocol\":\"mqtt\",\"data\":\"{tem: 25, wind: 20}\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":317,"y":151,"wires":[["c6d6217f.a9f26"]]},{"id":"2e441a7a.c2b8b6","type":"debug","z":"9c35a71c.b648b8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":796,"y":151,"wires":[]},{"id":"6d0f0a0d.6365f4","type":"azureiothubreceiver","z":"9c35a71c.b648b8","name":"Azure IoT Hub Receiver","x":314,"y":262,"wires":[["339d760f.4be77a"]]},{"id":"339d760f.4be77a","type":"debug","z":"9c35a71c.b648b8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":559,"y":275,"wires":[]},{"id":"6e32679.63e1998","type":"azureiothubdevicetwin","z":"9c35a71c.b648b8","name":"Azure IoT Hub Device Twin","x":585,"y":482,"wires":[["e5fbadf.950675"]]},{"id":"85636857.7e4fe8","type":"inject","z":"9c35a71c.b648b8","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":327,"y":466,"wires":[["6e32679.63e1998"]]},{"id":"e5fbadf.950675","type":"debug","z":"9c35a71c.b648b8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":820.5,"y":460,"wires":[]},{"id":"9e1adfdf.2b2bb","type":"azureiothubregistry","z":"9c35a71c.b648b8","name":"Azure IoT Hub Registry","x":559,"y":370,"wires":[["6c59ce7a.cd369"]]},{"id":"c7c3a364.6703","type":"inject","z":"9c35a71c.b648b8","name":"","topic":"","payload":"{\"deviceId\":\"testenode1\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":319.5,"y":360,"wires":[["9e1adfdf.2b2bb"]]},{"id":"6c59ce7a.cd369","type":"debug","z":"9c35a71c.b648b8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":811.5,"y":349,"wires":[]}]
```

# Azure IoT Hub
クラウドへJSON形式のデータを送信できる。

## 設定項目
使用するためには、下記の２つを行う必要がある

- Azure IoT Hubの設定
- msg.payloadでの設定

## Azure IoT Hub の設定
Azure IoT Hubの設定項目は、下記の二項目となる。

- Protocol : amqp, amqpws, mqtt, http から選択
- Homename : ホスト名

![Node-RED 2018-04-07 22-35-13.png](https://qiita-image-store.s3.amazonaws.com/0/10770/4fc6487c-2732-3770-e6df-ada3a3109c02.png)

### Homename
ホスト名をコピペ

![esp8266-pir - Microsoft Azure 2018-04-07 23-33-59.png](https://qiita-image-store.s3.amazonaws.com/0/10770/784578b7-8191-2688-78d8-74df466c5025.png)


### msg.payloadでの設定
下記の項目をJSON形式にまとめ、msg.payload経由で渡す必要がある。

- deviceId : デバイスID 
- key : プライマリキー
- protcol : プロトコル
- data : 送信データ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/10770/5afd0f8d-98cb-b2a7-9a84-fea19cb1b6b8.png)

![Node-RED 2018-04-07 23-30-15.png](https://qiita-image-store.s3.amazonaws.com/0/10770/cac8d5fb-474a-8e2d-a471-549f0aa3d1de.png)

例えば、下記のような感じ。（サンプルから流用）

```json
{
    "deviceId": "device146",
    "key": "FgySFuUzwtQMrlS29GRr7luoW07RNAmKcMy5oPDA8pA=",
    "protocol": "mqtt",
    "data": "{tem: 25, wind: 20}"
}
```

#### デバイスID
事前にデバイスエクスプローラーでデバイスを追加し、そのIDを設定する。

![デバイス エクスプローラー - Microsoft Azure 2018-04-07 22-40-54.png](https://qiita-image-store.s3.amazonaws.com/0/10770/2a4f0004-6110-eabd-222c-8e8c8c1ea570.png)

#### プライマリキー
デバイスのプライマリキーをコピペ。

![デバイスの詳細 - Microsoft Azure 2018-04-07 22-59-11.png](https://qiita-image-store.s3.amazonaws.com/0/10770/e1462828-7048-49b3-7190-b95a5956dbee.png)

#### プロトコル
amqp, amqpws, mqtt, http から選択可能

#### 送信データ
JSON形式でセット

## 実行結果

![image.png](https://qiita-image-store.s3.amazonaws.com/0/10770/4f46bab8-c502-b55f-92b9-fed5efffa279.png)

# Azure IoT Hub Receiver
クラウドからデータを受信できる。
## 設定項目
Azure IoT Hub Receiverで設定する項目は下記の１項目だけ。

* connectingString : 接続文字列(プライマリキー)

![Node-RED 2018-04-07 23-02-35.png](https://qiita-image-store.s3.amazonaws.com/0/10770/060d2fdd-ce28-a8b4-b9aa-5610a3126154.png)

### 接続文字列(プライマリキー)
下記の部分をコピペ

![iothubowner - Microsoft Azure 2018-04-07 22-28-37.png](https://qiita-image-store.s3.amazonaws.com/0/10770/7d443b56-bcd8-3c73-b062-203de2021ca7.png)

## 実行結果
Azure IoT Hubを実行すると、Receiverでその結果を受信できる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/10770/67a4a0bf-b4be-aeb5-fb87-f6c45641373c.png)

## Azure IoT Hub Registry
デバイスを追加できる。

## 設定項目
使用するためには、下記の２つを行う必要がある

- connectionStringの設定
- msg.payloadでの設定

### connectionStringの設定
Azure IoT Hub Receiverと同じく connectionStringをセットする。

### msg.payloadでの設定
msg.payloadにJSON形式で作成したデバイスIDをセットする。

```json
{
    "deviceId": "testenode1"
}
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/10770/c52b431f-3d1b-7afa-f18c-75ae3d179e14.png)

## 実行結果
実行すると下記の情報が得られる。

* プライマリキー
* セカンダリキー

![Node-RED 2018-04-07 23-23-56.png](https://qiita-image-store.s3.amazonaws.com/0/10770/1401f3f1-fe88-726e-720c-10b42206fb17.png)

Azureポータルにもデバイスが追加されている。

![デバイス エクスプローラー - Microsoft Azure 2018-04-07 23-25-22.png](https://qiita-image-store.s3.amazonaws.com/0/10770/c1698e7a-23ff-5c94-b507-79adc95c1253.png)

## 注意
同じデバイス名のものは追加するとエラーになります。

# Azure IoT Hub Device Twin
デバイスの状態を取得できる。

## 設定項目
使用するためには、下記の２つを行う必要がある

- Azure IoT Hub Device Twinの設定
- msg.payloadでの設定

### Azure IoT Hub Device Twinの設定
Azure IoT Hub Receiverと同じく connectionStringをセットする。

### msg.payloadでの設定
msg.payloadに文字列で、ターケットとなるデバイスIDをセットする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/10770/1c576e79-e125-ce57-9e31-cebc97eb1227.png)

## 実行結果
実行すると下記のような情報が得られる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/10770/3f69fc2d-91a2-5f71-a5af-cc332e821909.png)

# 最後に
今回紹介したノードはほぼ説明がないので取っ付きにくいですがやりたいことはできる。
Node−REDでAzure IoT Hubを触りたい人にはおすすめです。