開発を行う

4.1. Node-RED に接続する

3章Armadillo のセットアップ を完了している場合は Armadillo を起動すると、自動的に Node-RED コンテナが起動します。 Node-RED への接続には 「ネットワークに接続する」 で取得した IP アドレスを使用します。

パソコンの Web ブラウザから、http://<ipアドレス>:1880/ にアクセスしてください。

images/node-red/common-images/start.png

図4.1 初回起動時の Node-RED 画面


Node-RED には大きく3つの領域があります。

  • パレット

    使用可能なコアノード、カスタムノードの一覧を表示します。

  • ワークスペース

    Node-RED では一つのアプリケーションの流れをフローという単位で表します。 ワークスペース上にノードを繋げてフローを作成します。 パレットから必要なノードをワークスペースにドラッグ、ドロップで配置します。

  • サイドバー

    選択したノードの情報や、デバッグメッセージを表示します。

images/node-red/common-images/start_guide.png

図4.2 Node-RED の画面領域


4.2. Node-RED コンテナのログを表示する

パソコンの Web ブラウザから、http://<ipアドレス>:1880/node-red.log にアクセスすると Node-RED コンテナのログが表示されます。

このログファイルは /var/app/rollback/volumes/node-red/log に保存されています。ログのサイズが 5MB を超えると新しいログファイルに移行します。 古いログファイルを表示したい場合は、http://<ipアドレス>:1880/node-red.log.1 にアクセスしてください。

4.3. Node-RED で利用可能なノードの一覧

3章Armadillo のセットアップ でインストールした Node-RED コンテナには Node-RED のコアノードの他にインストールされているカスタムノードがあります。 インストール済のカスタムノードは以下になります。

  • Dashboard ノード

    Dashboard を表示するノードです。

  • exit ノード

    Node-RED を終了するためのノードです。

  • exec queue ノード

    exec を複数記載できるノードです。

  • credentials ノード

    設定内容を暗号化して保持するためのノードです。

  • AWS ノード

    AWS サービスを利用するためのノードです。暗号化が不要な場合は、AWS IoTData ノードを使用してデバイスシャドウの操作が可能です。

4.4. フローを作成する

Node-RED では一つのアプリケーションの流れをフローという単位で表します。 各ノードを使用したフローの作成方法について紹介します。

4.4.1. LED を制御する

ここでは、LED を1秒間隔で点滅するフローを作成します。すべて Node-RED のコアノードを使用します。 Armadillo-610 の LED は LED5 と拡張ボードの LED3 があり、今回対象にするのはユーザー LED(緑) です。 ユーザー LED(緑) の場所については 「インターフェースレイアウト」 をご確認ください。

ユーザー LED(緑) は /sys/class/leds/green/brightness ファイルへ値を書き込むことによって、LEDの点灯/消灯を行うことができます。 0 を書き込むと消灯、0 以外の値 (1~255) を書き込むと点灯します。

表4.1 LED5

部品番号 名称(色) 説明

LED5

ユーザー LED(黄)

i.MX6ULLのUART1_CTS_Bピンに接続、(Low: 消灯、High: 点灯)


Armadillo-610 拡張ボードに搭載されているソフトウェア制御可能な LED については図4.3「Armadillo-610 拡張ボード LED3」を参照してください。

images/a610ext-led3.svg

図4.3 Armadillo-610 拡張ボード LED3


表4.2 LED3

部品番号 名称(色) 説明

LED3

ユーザー LED(緑)

i.MX6ULLのGPIO1_IO08ピンに接続、(Low: 消灯、High: 点灯)


  1. パレットから [inject] ノードをワークスペースにドラッグ、ドロップします。
  2. [inject] ノードのプロパティを編集します。[inject] は2秒間隔で実行します。

    名前: LED Blink
    繰り返し: 指定した時間間隔
    時間間隔: 2秒
    images/node-red/common-images/led_blink_inject_prop.png

    図4.4 [inject] ノードのプロパティ内容


  3. [trigger] ノードをドラッグ、ドロップします。
  4. [trigger] ノードのプロパティを編集します。 [trigger] は 1 を送信して1秒待機後、0 を送信します。これにより点滅動作を実現します。

    送信データ:1
    送信後の処理:指定した時間待機
    1秒
    再送信データ:0
    images/node-red/common-images/led_blink_trigger_prop.png

    図4.5 [trigger] ノードのプロパティ内容


  5. [LED Blink] ノードの右側にある端子をクリックし、[trigger] ノードの左側の端子を選択して放します。
  6. [write file] ノードをドラッグ、ドロップします。
  7. [write file] ノードのプロパティを編集します。 /sys/class/leds/green/brightness ファイルへ [trigger] からの送信データを書き込みます。

    ファイル名: /sys/class/leds/green/brightness
    動作: ファイルを上書き
    文字コード: デフォルト
    名前: green LED
    images/node-red/led_blink_green_led_prop.png

    図4.6 [write file] ノードのプロパティ内容


  8. [trigger] ノードの右側にある端子をクリックし、[green LED] ノードの左側の端子を選択して放します。
  9. [debug] ノードをドラッグ、ドロップします。
  10. [green LED] ノードの右側にある端子をクリックし、[debug] ノードの左側の端子を選択して放します。

    images/node-red/led_blink_green_led_flow.png

    図4.7 LED を1秒間隔で点滅するフロー


  11. 画面右上の [デプロイ] を押します。ユーザー LED(緑) が1秒毎に点滅を繰り返す動きをすれば成功です。

4.4.2. CPU の測定温度を取得する

ここでは、 Armadillo-610 の CPU の測定温度を1秒間隔で取得するフローを作成します。全て Node-RED のコアノードを使用します。 /sys/class/thermal/thermal_zone0/temp ファイルの値を読み出すことによって測定温度を取得することができます。 温度はミリ°C の単位で表示されるため、°C 単位への変換も行います。

  1. パレットから [inject] ノードをワークスペースにドラッグ、ドロップします。
  2. [inject] ノードのプロパティを編集します。[inject] は1秒間隔で実行します。

    繰り返し: 指定した時間間隔
    時間間隔: 1秒
    images/node-red/common-images/get_cpu_temp_inject_prop.png

    図4.8 [inject] ノードのプロパティ内容


  3. [read file] ノードをドラッグ、ドロップします。
  4. [read file] ノードのプロパティを編集します。 /sys/class/thermal/thermal_zone0/temp ファイルの値を読み出します。

    ファイル名: /sys/class/thermal/thermal_zone0/temp
    出力形式: 文字列
    文字コード: デフォルト
    名前: CPU temp
    images/node-red/common-images/get_cpu_temp_read_prop.png

    図4.9 [read file] ノードのプロパティ内容


  5. [Get CPU temp] ノードの右側にある端子をクリックし、[CPU temp] ノードの左側の端子を選択して放します。
  6. [function] ノードをドラッグ、ドロップします。
  7. [function] ノードのプロパティを編集します。 CPU の測定温度がミリ°C の単位のため、°C の単位へ変換します。 msg.payload で渡された値を 1000 で割り、msg.payload に戻します。

    名前: CPU temp calc
    コード:
    msg.payload = msg.payload / 1000;
    return msg;
    images/node-red/common-images/get_cpu_temp_calc_prop.png

    図4.10 [function] ノードのプロパティ内容


  8. [CPU temp] ノードの右側にある端子をクリックし、[CPU temp calc] ノードの左側の端子を選択して放します。
  9. [debug] ノードをドラッグ、ドロップします。
  10. [CPU temp calc] ノードの右側にある端子をクリックし、[debug] ノードの左側の端子を選択して放します。

    images/node-red/common-images/get_cpu_temp_flow.png

    図4.11 CPU の測定温度を1秒間隔で取得するフロー


  11. 画面右上の [デプロイ] を押します。デバッグメッセージに1秒毎に CPU の測定温度が表示されます。

4.4.3. RS-485 modbus RTU 読み出しを行う

ここでは、 USB RS-485 変換器を使用した Modubus RTU 読み出し用フローを作成します。 Node-RED のコアノードのほかに modbus-client ノード、Modbus-Read ノード、 modbus-response ノードを使用します。 RS-485 シリアルインターフェースのデバイスファイルは、/dev/ttyUSB0 を使用します。 USB の場所については 「インターフェースレイアウト」 をご確認ください。 今回は以下のRS-485通信対応デバイスを想定した場合の設定内容となります。 実際に動作確認する場合は、使用するRS-485通信対応デバイスの設定に変更してください。

ユニットID: 1
通信プロトコル: Modbus RTU
ボーレート: 9600
読み出しアドレス: 0x00
ファンクションコード: 1
  1. パレットから [Modbus-Read] ノードをワークスペースにドラッグ、ドロップします。
  2. [Modbus-Read] ノードのプロパティを編集します。
  3. 先に Server を設定する必要があります。[新規に modbus-client を追加] の右隣の編集ボタンを押して [modbus-client] を作成します。

    名前: RS485 slave device
    Type: Serial
    Serial port: /dev/ttyUSB0
    Serial type: RTU
    Baud rate: 9600
    Unit-Id: 1
    images/node-red/common-images/read_modbus_client_prop_for_usb.png

    図4.12 [modbus-client] ノードのプロパティ内容


  4. [Modbus-Read] ノードのプロパティを編集します。

    名前: slave device
    トピック:
    Unit-Id:
    FC: FC 1:Read Coil Status
    Address: 0
    Quantity: 1
    Poll Rate: 1 Second(s)
    Server: RS485 slave device
    images/node-red/common-images/read_modbus_prop.png

    図4.13 [Modbus-Read] ノードのプロパティ内容


  5. [Modbus-Response] ノードをドラッグ、ドロップします。
  6. [slave device] ノードの右側にある端子をクリックし、[Modbus-Response] ノードの左側の端子を選択して放します。

    images/node-red/common-images/read_modbus_flow.png

    図4.14 RS-485 を使用した Modubus RTU 読み出し用フロー


  7. 画面右上の [デプロイ] を押します。読み出しに成功すると1秒毎に読みだした値が更新され [Modbus-Response] ノードの下に表示されます。

4.4.4. CPU の測定温度のグラフをダッシュボードに表示する

「CPU の測定温度を取得する」 で取得した CPU 温度をダッシュボードにグラフとして表示するフローを作成します。

  1. サイドバーの右端にある三角形のボタンを押し、[ダッシュボード] を選択します。

    images/node-red/common-images/dashboard_select.png

    図4.15 [ダッシュボード]を選択する


  2. [ダッシュボード] 編集画面が表示されることを確認します。

    images/node-red/common-images/dashboard_start.png

    図4.16 ダッシュボード編集画面


  3. [+タブ] ボタンを押して [Tab1] を追加します。

    images/node-red/common-images/dashboard_add_tab.png

    図4.17 ダッシュボードに [TAb1] を追加


  4. [Tab1] プロパティを編集します。

    名前: Armadillo
    アイコン: dashboard
    images/node-red/common-images/dashboard_tab_prop.png

    図4.18 [Tab1] プロパティ内容


  5. [Armadillo] タブが追加されました。

    名前: Armadillo
    アイコン: dashboard
    images/node-red/common-images/dashboard_add_armadillo.png

    図4.19 ダッシュボード編集画面に [Armadillo] タブが追加


  6. [Armadillo] 横の [+グループ] ボタンを押して [Group1] を追加します。

    名前: Armadillo
    アイコン: dashboard
    images/node-red/common-images/dashboard_add_group.png

    図4.20 ダッシュボード編集画面に [Group1] グループが追加


  7. [Group1] プロパティを編集します。

    名前: Group 1
    タブ: Armadillo
    種類:
    幅: 15
    □グループ名を表示する
    images/node-red/common-images/dashboard_group_prop.png

    図4.21 [Group1] プロパティ内容


  8. [chart] ノードをワークスペースにドラッグ、ドロップします。ダッシュボード編集画面の [Group1] グループに追加されたことを確認します。

    images/node-red/common-images/dashboard_add_chart.png

    図4.22 ダッシュボード編集画面に [chart] ノードが追加


  9. [chart] ノードのプロパティを編集します。

    グループ: [Armadillo] Group 1
    サイズ: 自動
    ラベル: CPU temp
    種類: 折れ線グラフ
    X軸: 直近1時間
    X軸ラベル: HH:mm:ss
    Y軸: 最小 20 最大 50
    凡例: 非表示 補完: 直線
    images/node-red/common-images/cpu_temp_dashboard_chart_prop.png

    図4.23 [inject] ノードのプロパティ内容


  10. [CPU temp calc] ノードの右側にある端子をクリックし、[CPU temp] ノードの左側の端子を選択して放します。

    images/node-red/common-images/cpu_temp_dashboard_flow.png

    図4.24 CPU の測定温度のグラフをダッシュボードに表示するフロー


  11. 画面右上の [デプロイ] を押します。ダッシュボード編集画面の [テーマ] タブの右側にある四角に矢印が重なったボタンを選択すると、ダッシュボードが表示されます。

    images/node-red/common-images/cpu_temp_dashboard.png

    図4.25 CPU の測定温度のグラフのダッシュボード


  12. ダッシュボードの CPU 温度のグラフは一秒毎に更新されます。

4.4.5. 外部プログラムを実行する

ここでは、外部プログラムを実行しその結果を取得するフローを作成します。 外部プログラムは [exec] ノードで実行することができます。 ここでの外部プログラムとはシステムコマンドやユーザー自身が作成したプログラムのことを指します。

例として date コマンドを実行するフローを作成します。

  1. パレットから [inject] ノードをワークスペースにドラッグ、ドロップします。 プロパティはデフォルトから変更ありません。
  2. [exec] ノードをドラッグ、ドロップします。
  3. [exec] ノードのプロパティを編集します。

    コマンド: date
    引数: なし
    images/node-red/common-images/exec_prop.png

    図4.26 [exec] ノードのプロパティ内容


  4. [indect] ノードの右側にある端子をクリックし、[exec] ノードの左側の端子を選択して放 します。
  5. [debug] ノードをドラッグ、ドロップします。
  6. [exec] ノードの右側の一番上にある端子をクリックし、[debug] ノードの左側の端子を選択して放します。

    images/node-red/common-images/exec_flow.png

    図4.27 外部プログラムを実行するフロー


  7. 画面右上の [デプロイ] を押します。
  8. [inject] ノードの左の四角を押すと [exec] ノードに設定した date コマンドが実行され標準出力の結果が デバッグメッセージに表示されます。

[exec] ノードの右の端子は上からそれぞれ「標準出力」「標準エラー出力」「返却コード」となっており、 取得したい出力によって使い分けることができます。

4.4.6. Node-RED を終了する

ここでは、 Node-RED を任意のタイミングで終了するフローを作成します。 Node-RED のコアノードのほかに exit ノードを使用します。

[警告]

Node-RED 終了後、Node-RED を再起動するためには Armadillo-610 の電源を再投入する必要があります。

  1. パレットから [inject] ノードをワークスペースにドラッグ、ドロップします
  2. [inject] ノードのプロパティを編集します。

    名前: Finish Node-RED
    繰り返し: なし
    images/node-red/common-images/finish_inject_prop.png

    図4.28 [inject] ノードのプロパティ内容


  3. [exit] ノードをドラッグ、ドロップします。
  4. [exit] ノードのプロパティを編集します。

    Name: exit
    Exit code: 0
    images/node-red/common-images/finish_exit_prop.png

    図4.29 [exit] ノードのプロパティ内容


  5. [Finish Node-RED] ノードの右側にある端子をクリックし、[exit] ノードの左側の端子を選択して放します。

    images/node-red/common-images/finish_flow.png

    図4.30 Node-RED を任意のタイミングで終了するフロー


  6. 画面右上の [デプロイ] を押します。[Finish Node-RED] ノードの左側にあるボタンを押すと Node-RED が終了します。

4.5. ユーザデータを削除する

Node-RED に関するユーザデータは /var/app/rollback/volumes/node-red/root に保存されます。 当ディレクトリを削除した場合はユーザデータは全て削除されます。 この場合 Node-RED のブラウザからインストールしたカスタムノードは削除されます。

4.6. AWS へデバイス情報を送信するフローを作成する

Armadillo-610 から AWS サービスへデバイス情報を送信するための一連のフローについて説明します。 デバイス状態の送信には AWS IoT Device Shadow サービスを利用します。

[警告]

この機能を使用するには、バージョン 1.1.0 以上の Node-RED コンテナが必要です。

手順を以下に示します。

最初に AWS 上で作業が必要です。

  • AWS アカウントの作成
  • IAM ユーザーの作成
  • デバイスデータエンドポイントの取得

以下は Node-RED 上で操作します。

  • デバイス証明書を取得するフローの作成
  • デバイスを登録するフローの作成
  • AWS IoT ポリシーを作成するフローの作成
  • デバイス証明書を登録するフローの作成
  • ポリシーをアタッチするフローの作成

ここまでの手順はデバイス登録のために一度のみ実行する必要があります。 もし、デバイスを誤って削除してしまった場合や、登録した証明書の期限が切れた場合などがあれば、 再度実行する必要があります。

AWS IoT Device Shadow サービスを利用して、デバイスシャドウを制御します。 本ドキュメントでは、暗号化したデバイスシャドウを用いることで、デバイス状態についてよりセキュアに通信します。 デバイスシャドウを制御するフローについては、以下になります。

  • デバイスシャドウを取得するフローの作成
  • デバイスシャドウを更新するフローの作成
  • デバイスシャドウを削除するフローの作成

4.6.1. AWS アカウントの作成

AWS アカウントの作成方法については、AWS 公式サイトの AWS アカウント作成の流れ を参照してください。

4.6.2. IAM ユーザーの作成

AWS IAM (Identity and Access Management) は、AWS リソースへのアクセスを安全に管理するためのウェブサービスです。 IAM により、誰を認証(サインイン)し、誰にリソースの使用を承認する(アクセス許可を持たせる)かを管理することができます。

本章では以下の手順について説明します。

  • IAM ユーザーの作成
  • IAM ユーザーにポリシーの設定
  • IAM ユーザーのアクセスキーの作成

4.6.2.1. IAM ユーザーを作成する

IAM ユーザの作成については 公式のドキュメント を参照してください。

4.6.2.2. IAM ユーザーにポリシーを設定する

作成した AWS IAM ユーザには AWS IoT Device Shadow サービスを利用するために必要な許可を与える必要があります。 必要なポリシーについては 公式のドキュメント を参照してください。 以下はポリシーの例です。ポリシー名については任意の名前を与えてください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole",
                "iam:Get*",
                "iam:PutRolePolicy",
                "iam:DeleteRolePolicy",
                "iam:DeletePolicy",
                "iam:DeleteRole",
                "iam:AttachRolePolicy",
                "iam:List*",
                "iam:Pass*",
                "iot:Connect",
                "iot:Publish",
                "iot:Subscribe",
                "iot:Receive",
                "iot:AcceptCertificateTransfer",
                "iot:AddThingToThingGroup",
                "iot:AssociateTargetsWithJob",
                "iot:Attach*",
                "iot:Cancel*",
                "iot:ClearDefaultAuthorizer",
                "iot:Create*",
                "iot:Delete*",
                "iot:DeprecateThingType",
                "iot:Describe*",
                "iot:Detach*",
                "iot:DisableTopicRule",
                "iot:EnableTopicRule",
                "iot:Get*",
                "iot:List*",
                "iot:Register*",
                "iot:RejectCertificateTransfer",
                "iot:RemoveThingFromThingGroup",
                "iot:ReplaceTopicRule",
                "iot:SearchIndex",
                "iot:Set*",
                "iot:StartThingRegistrationTask",
                "iot:StopThingRegistrationTask",
                "iot:TransferCertificate",
                "iot:Update*",
                "autoscaling:Describe*",
                "cloudwatch:*",
                "logs:*",
                "s3:PutObject",
                "s3:ListBucket",
                "s3:GetObject",
                "s3:CreateBucket",
                "cloudformation:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "arn:aws:iam::*:role/aws-service-role/events.amazonaws.com/AWSServiceRoleForCloudWatchEvents*",
            "Condition": {
                "StringLike": {
                    "iam:AWSServiceName": "events.amazonaws.com"
                }
            }
        }
    ]
}

図4.31 ポリシーの例


4.6.2.3. IAM ユーザーのアクセスキーを作成する

作成した AWS IAM ユーザのアクセスキーを作成します。AWS IAM ユーザーのアクセスキーの管理については 公式のドキュメント を参照してください。 作成したアクセスキーとシークレットキーについては、 AWS IoT Device Shadow サービスの利用のため Node-RED のノードに設定する必要があるため、無くさないでください。 以上で AWS 上で操作が必要な手順については終了です。

4.6.3. デバイスデータエンドポイントを取得する

デバイスシャドウの取得・更新・削除にはデバイスデータエンドポイントを使用します。 デバイスデータエンドポイントの取得方法は 公式のドキュメント を参照してください。

4.6.4. デバイス証明書を取得するフローの作成

Armadillo Base OS 搭載機器は、標準でセキュアエレメントを搭載しており、対応した暗号化方式の認証鍵や証明書を安全に保存・利用することが可能です。 EdgeLock SE050 は IoT アプリケーション向けのセキュアエレメントです。 フラッシュメモリを内蔵しており、保存された秘密鍵を外部に露出することなく暗号処理に利用できます。

[ティップ]

シリアルナンバー:00B700430001 以降の Armadillo-610 に搭載されています。

セキュアエレメントは I2C デバイスとして認識されます。 製品によって I2C バスが異なるためご注意ください。 Armadillo-610 で使用する I2C バスを 表4.3「セキュアエレメントが使用する I2C バス」 に示します。

表4.3 セキュアエレメントが使用する I2C バス

I2C バス

I2C デバイス

アドレス

デバイス名

0(I2C1)

0x48

SE050(セキュアエレメント)


このフローでは秘密鍵とデバイス証明書を EdgeLock SE050 より取得して、/var/app/rollback/volumes/node-red/cert に保存します。

  1. パレットから [inject] ノードをワークスペースにドラッグ、ドロップします。 プロパティはデフォルトから変更ありません。
  2. [exec] ノードをドラッグ、ドロップします。
  3. [exec] ノードのプロパティを編集します。

    コマンド: se05x_getkey 0xF0000111 /cert/device_cert.pem /dev/i2c-0:0x48
    引数: チェックなし
    出力: コマンド終了時 - execモード
    名前: デバイス証明書の取得
    images/node-red/exec_get_device_cert.png

    図4.32 [デバイス証明書の取得] ノードのプロパティ内容


  4. [inject] ノードの右側にある端子をクリックし、[デバイス証明書の取得] ノードの左側の端子を選択して放します。
  5. もう一つ [exec] ノードをドラッグ、ドロップします。
  6. [exec] ノードのプロパティを編集します。

    コマンド: ls /cert
    引数: チェックなし
    出力: コマンド終了時 - execモード
    名前: ファイルの確認
    images/node-red/common-images/aws/exec_cert_dir.png

    図4.33 [ファイルの確認] ノードのプロパティ内容


  7. [デバイス証明書の取得] ノードの右側にある端子をクリックし、 [ファイルの確認] ノードの左側の端子を選択して放します。
  8. もう一つ、[inject] ノードをワークスペースにドラッグ、ドロップします。 プロパティはデフォルトから変更ありません。
  9. [exec] ノードをドラッグ、ドロップします。
  10. [exec] ノードのプロパティを編集します。

    コマンド: se05x_getkey 0xF0000110 /cert/key.pem /dev/i2c-0:0x48
    引数: チェックなし
    出力: コマンド終了時 - execモード
    名前: リファレンスキーの取得
    images/node-red/exec_get_key.png

    図4.34 [リファレンスキーの取得] ノードのプロパティ内容


  11. 二つ目の [inject] ノードの右側にある端子をクリックし、 [リファレンスキーの取得] ノードの左側の端子を選択して放します。
  12. [リファレンスキーの取得] ノードの右側にある端子をクリックし、 [ファイルの確認] ノードの左側の端子を選択して放します。
  13. [debug] ノードをドラッグ、ドロップします。
  14. [ファイルの確認] ノードの右側の一番上にある端子をクリックし、 [debug] ノードの左側の端子を選択して放します。

    images/node-red/common-images/aws/get_device_cert_flow.png

    図4.35 デバイス証明書を取得するフロー


  15. 画面右上の [デプロイ] を押します。
  16. [inject] ノードの左の四角をそれぞれ押すと、コマンドの実行結果結果がデバッグメッセージに表示されます。 下記ファイルが出力されていれば取得に成功しています。
AmazonRootCA1.pem
device_cert.pem
key.pem

図4.36 ファイル一式


実行に成功した場合は /var/app/rollback/volumes/node-red/cert/ にデバイス証明書が保存されています。

4.6.5. デバイスを登録するフローの作成

AWS IoT Device Shadow サービスを利用するため、AWS IoT Core にデバイス(モノ)を登録する必要があります。 今回モノの名前はデバイスのシリアルナンバー(例: 001234567890)を使用します。

  1. パレットから [inject] ノードをワークスペースにドラッグ、ドロップします。 プロパティはデフォルトから変更ありません。
  2. [credentials] ノードをドラッグ、ドロップします。
  3. [credentials] ノードのプロパティを編集します。[追加] ボタンを押して値を追加します。 private のステータスが [文字列] のままだと内容が表示されたままのため、確認後は [hidden] に変更するのを推奨します。

    Name: 接続情報の登録
    Values:
    private: [hidden] <<sct.development.aws.user>>で取得したアクセスキー
    to: [msg.] aws_access_key
    private: [hidden] <<sct.development.aws.user>>で取得したシークレットキー
    to: [msg.] aws_secret_key
    private: [文字列] リージョン(例: ap-northeast-1)
    to: [msg.] aws_iot_region
    private: [hidden] IoT Core REST API エンドポイント(例: iot.ap-northeast-1.amazonaws.com)
    to: [msg.] aws_iot_host
    images/node-red/common-images/aws/credentials.png

    図4.37 [接続情報の登録] ノードのプロパティ内容


  4. [inject] ノードの右側にある端子をクリックし、[接続情報の登録] ノードの左側の端子を選択して放します。
  5. [function] ノードをドラッグ、ドロップします。
  6. [function] ノードのプロパティを編集します。

    名前: デバイス登録の引数設定
    コード:
    msg.payload = msg.aws_access_key + ":" + msg.aws_secret_key
        + " " + msg.aws_iot_region
        + " " + msg.aws_iot_host;
    images/node-red/common-images/aws/function_arg_register_device.png

    図4.38 [exec queue] ノードのプロパティ内容


  7. [接続情報の登録] ノードの右側にある端子をクリックし、 [デバイス登録の引数設定] ノードの左側の端子を選択して放します。
  8. [exec queue] ノードをドラッグ、ドロップします。
  9. [exec queue] ノードのプロパティを編集します。

    名前: デバイス登録
    コマンド: bash $file
    Queue: 1
    Debug Mode: ✓
    Append msg.payload: ✓
    構文: Shell
    内容:
    AWS_ACCESS="$1"
    AWS_REGION="$2"
    ENDPOINT="$3"
    URI=/things/${AT_SERIAL_NUMBER}
    
    curl \
            --cacert /cert/AmazonRootCA1.pem \
            --user "${AWS_ACCESS}" \
            --aws-sigv4 "aws:amz:${AWS_REGION}:execute-api" \
            --request POST -v \
            -d "{}" \
            "https://${ENDPOINT}${URI}"
    images/node-red/common-images/aws/exec_queue_register_device.png

    図4.39 [exec queue] ノードのプロパティ内容


  10. [デバイス登録の引数設定] ノードの右側にある端子をクリックし、 [デバイス登録] ノードの左側の端子を選択して放します。
  11. [function] ノードをドラッグ、ドロップします。
  12. [function] ノードのプロパティを編集します。

    名前: デバイス名の取得
    コード:
    var res = JSON.parse(msg.payload);
    msg.payload="thingName:" + res.thingName;
    return msg;
    images/node-red/common-images/aws/function_get_thing_name.png

    図4.40 [デバイス名の取得] ノードのプロパティ内容


  13. [debug] ノードをドラッグ、ドロップします。
  14. [デバイス名の取得] ノードの右側の端子をクリックし、[debug] ノードの左側の端子を選択して放します。

    images/node-red/common-images/aws/new_thing_flow.png

    図4.41 デバイスを登録するフロー


  15. 画面右上の [デプロイ] を押します。
  16. [inject] ノードの左の四角を押すと登録したモノの名前がデバッグメッセージに表示されます。
"thingName:001234567890"

図4.42 登録したモノの名前


表示されたモノの名前がデバイスシャドウの対象になります。

4.6.6. AWS IoT ポリシーを作成するフローの作成

登録したモノに対して AWS IoT Device Shadow サービスを利用するための許可を与える必要があります。 そのため、必要な AWS IoT ポリシーを作成してアタッチする必要があります。 まず、ポリシーを新しく作成します。 「デバイスを登録するフローの作成」 で作成した [接続情報の登録] ノードを使用します。

  1. [接続情報の登録] ノードのプロパティに [ポリシー名] を追加します。

    Name: 接続情報の登録
    Values:
    private: [hidden] <<sct.development.aws.user>>で取得したアクセスキー
    to: [msg.] aws_access_key
    private: hidden: <<sct.development.aws.user>>で取得したシークレットキー
    to: [msg.] aws_secret_key
    private: [文字列] リージョン(例: ap-northeast-1)
    to: [msg.] aws_iot_region
    private: [hidden] IoT Core REST API エンドポイント(例: iot.ap-northeast-1.amazonaws.com)
    to: [msg.] aws_iot_host
    private: [hidden] ポリシー名(例: node-red-thing-policy)
    to: [msg.] aws_policy_name
    images/node-red/common-images/aws/credentials.png

    図4.43 [接続情報の登録] ノードのプロパティ内容


  2. [function] ノードをドラッグ、ドロップします。
  3. [function] ノードのプロパティを編集します。

    名前: ポリシー登録の引数設定
    コード:
    msg.payload = msg.aws_access_key + ":" + msg.aws_secret_key
        + " " + msg.aws_iot_region
        + " " + msg.aws_iot_host
        + " " + msg.aws_policy_name;
    images/node-red/common-images/aws/function_arg_new_policy.png

    図4.44 [ポリシー登録の引数設定] ノードのプロパティ内容


  4. [接続情報の登録] ノードの右側にある端子をクリックし、 [ポリシー登録の引数設定] ノードの左側の端子を選択して放します。
  5. [exec queue] ノードをドラッグ、ドロップします。
  6. [exec queue] ノードのプロパティを編集します。

    名前: 新しいポリシーの作成
    コマンド: bash $file
    Queue: 1
    Debug Mode: ✓
    Append msg.payload: ✓
    構文: Shell
    内容:
    AWS_ACCESS="$1"
    AWS_REGION="$2"
    ENDPOINT="$3"
    POLICY_NAME="$4"
    URI=/policies/${POLICY_NAME}
    
    curl \
            -H "Content-type: application/json" \
            --cacert /cert/AmazonRootCA1.pem \
            --user "${AWS_ACCESS}" \
            --aws-sigv4 "aws:amz:${AWS_REGION}:execute-api" \
            -d '{"policyDocument": "{\"Version\": \"2012-10-17\",\"Statement\": [{\"Effect\": \"Allow\",\"Action\": \"iot:*\",\"Resource\": \"*\"}]}"}' \
            --request POST -v \
            "https://${ENDPOINT}${URI}"
    images/node-red/common-images/aws/exec_queue_new_policy.png

    図4.45 [新しいポリシーの作成] ノードのプロパティ内容


  7. [ポリシー登録の引数設定] ノードの右側にある端子をクリックし、 [新しいポリシーの作成] ノードの左側の端子を選択して放します。
  8. [function] ノードをドラッグ、ドロップします。
  9. [function] ノードのプロパティを編集します。

    名前: ポリシー名の取得
    コード:
    var res = JSON.parse(msg.payload);
    msg.payload = "policyName:" + res.policyName;
    return msg;
    images/node-red/common-images/aws/function_get_policy_name.png

    図4.46 [ポリシー名の取得] ノードのプロパティ内容


  10. [新しいポリシーの作成] ノードの右側にある端子をクリックし、 [ポリシー名の取得] ノードの左側の端子を選択して放します。
  11. [debug] ノードをドラッグ、ドロップします。
  12. [ポリシー名の取得] ノードの右側の端子をクリックし、[debug] ノードの左側の端子を選択して放します。

    images/node-red/common-images/aws/new_policy_flow.png

    図4.47 ポリシーを作成するフロー


  13. 画面右上の [デプロイ] を押します。
  14. [inject] ノードの左の四角を押すとポリシー作成の結果がデバッグメッセージに表示されます。
"policyName:node-red-thing-policy"

図4.48 登録したポリシーの名前


すでに登録済みの場合は undefined になります。

4.6.7. デバイス証明書を登録するフローの作成

登録したデバイスのデバイス証明書を登録します。 「デバイスを登録するフローの作成」 で作成した [接続情報の登録] ノードを使用します。

  1. パレットから [function] ノードをワークスペースにドラッグ、ドロップします。
  2. [function] ノードのプロパティを編集します。

    名前: デバイス証明書登録の引数設定
    コード:
    msg.payload = msg.aws_access_key + ":" + msg.aws_secret_key
        + " " + msg.aws_iot_region
        + " " + msg.aws_iot_host;
    return msg;
    images/node-red/common-images/aws/function_arg_register_device_cert.png

    図4.49 [デバイス証明書登録の引数設定] ノードのプロパティ内容


  3. [接続情報の登録] ノードの右側にある端子をクリックし、 [デバイス証明書登録の引数設定] ノードの左側の端子を選択して放します。
  4. [exec queue] ノードをドラッグ、ドロップします。
  5. [exec queue] ノードのプロパティを編集します。

    名前: デバイス証明書の登録
    コマンド: bash $file
    Queue: 1
    Debug Mode: ✓
    Append msg.payload: ✓
    構文: Shell
    内容:
    AWS_ACCESS="$1"
    AWS_REGION="$2"
    ENDPOINT="$3"
    URI=/certificate/register-no-ca
    CERT=$(cat /cert/device_cert.pem | sed -z 's/\n/\\n/g')
    
    curl \
            -H "Content-type: application/json" \
            --cacert /cert/AmazonRootCA1.pem \
            --user "${AWS_ACCESS}" \
            --aws-sigv4 "aws:amz:${AWS_REGION}:execute-api" \
            -d "{\"certificatePem\":\"${CERT}\",\"status\":\"ACTIVE\"}" \
            --request POST -v \
            "https://${ENDPOINT}${URI}"
    images/node-red/common-images/aws/exec_queue_register_device_cert.png

    図4.50 [デバイス証明書の登録] ノードのプロパティ内容


  6. [デバイス証明書登録の引数設定] ノードの右側にある端子をクリックし、 [デバイス証明書の登録] ノードの左側の端子を選択して放します。
  7. [function] ノードをドラッグ、ドロップします。
  8. [function] ノードのプロパティを編集します。

    名前: 証明書 ID の取得
    コード:
    var res = JSON.parse(msg.payload);
    msg.payload = "certificateArn:" + res.certificateArn;
    return msg;
    images/node-red/common-images/aws/function_get_cert_arn.png

    図4.51 [証明書 ID の取得] ノードのプロパティ内容


  9. [デバイス証明書の登録] ノードの右側にある端子をクリックし、 [証明書 ID の取得] ノードの左側の端子を選択して放します。
  10. [debug] ノードをドラッグ、ドロップします。
  11. [証明書 ID の取得] ノードの右側の端子をクリックし、 [debug] ノードの左側の端子を選択して放します。

    images/node-red/common-images/aws/register_device_cert_flow.png

    図4.52 デバイス証明書を登録するフロー


  12. 画面右上の [デプロイ] を押します。
  13. [inject] ノードの左の四角を押すとデバイス証明書の登録結果がデバッグメッセージに表示されます。 実際は使用しているリージョン名と、アカウントID が含まれます。
"certificateArn: arn:aws:iot:ap-northeast-1:00000000:cert/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

図4.53 証明書 ID名


すでに登録済みの場合は undefined になります。

4.6.8. AWS IoT ポリシーをデバイスにアタッチするフローの作成

「AWS IoT ポリシーを作成するフローの作成」 で作成したポリシーをデバイスにアタッチします。 「デバイスを登録するフローの作成」 で作成した [接続情報の登録] ノードを使用します。

  1. [接続情報の登録] ノードのプロパティに、 「デバイス証明書を登録するフローの作成」 で取得した [証明書ID] を追加します。

    Name: 接続情報の登録
    Values:
    private: [hidden] <<sct.development.aws.user>>で取得したアクセスキー
    to: [msg.] aws_access_key
    private: [hidden] <<sct.development.aws.user>>で取得したシークレットキー
    to: [msg.] aws_secret_key
    private: [文字列] リージョン(例: ap-northeast-1)
    to: [msg.] aws_iot_region
    private: [hidden] IoT Core REST API エンドポイント(例: iot.ap-northeast-1.amazonaws.com)
    to: [msg.] aws_iot_host
    private: [hidden] 証明書ID (例: arn:aws:iot:ap-northeast-1:00000000:cert/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
    to: [msg.] aws_cert_arn
    images/node-red/common-images/aws/credentials.png

    図4.54 [接続情報の登録] ノードのプロパティ内容


  2. パレットから [function] ノードをワークスペースにドラッグ、ドロップします。
  3. [function] ノードのプロパティを編集します。

    名前: ポリシーをアタッチするための引数設定
    コード:
    msg.payload = msg.aws_access_key + ":" + msg.aws_secret_key
        + " " + msg.aws_iot_region
        + " " + msg.aws_iot_host
        + " " + msg.aws_policy_name
        + " " + msg.aws_cert_arn;
    return msg;
    images/node-red/common-images/aws/function_arg_attach_policy.png

    図4.55 [ポリシーをアタッチするための引数設定] ノードのプロパティ内容


  4. [接続情報の登録] ノードの右側にある端子をクリックし、 [ポリシーをアタッチするための引数設定] ノードの左側の端子を選択して放します。
  5. [exec queue] ノードをドラッグ、ドロップします。
  6. [exec queue] ノードのプロパティを編集します。

    名前: ポリシーを証明書にアタッチ
    コマンド: bash $file
    Queue: 1
    Debug Mode: ✓
    Append msg.payload: ✓
    構文: Shell
    内容:
    AWS_ACCESS="$1"
    AWS_REGION="$2"
    ENDPOINT="$3"
    POLICY_NAME="$4"
    CERT_ARN="$5"
    URI=/target-policies/${POLICY_NAME}
    
    curl \
            -H "Content-type: application/json" \
            --cacert /cert/AmazonRootCA1.pem \
            --user "${AWS_ACCESS}" \
            --aws-sigv4 "aws:amz:${AWS_REGION}:execute-api" \
            -d "{\"target\":\"${CERT_ARN}\"}" \
            --request PUT -v \
            "https://${ENDPOINT}${URI}"
    images/node-red/common-images/aws/exec_queue_attach_policy.png

    図4.56 [ポリシーを証明書にアタッチ] ノードのプロパティ内容


  7. [ポリシーをアタッチするための引数設定] ノードの右側にある端子をクリックし、 [ポリシーを証明書にアタッチ] ノードの左側の端子を選択して放します。
  8. [exec queue] ノードをドラッグ、ドロップします。
  9. [exec queue] ノードのプロパティを編集します。

    名前: 証明書をデバイスにアタッチ
    コマンド: bash $file
    Queue: 1
    Debug Mode: ✓
    Append msg.payload: ✓
    構文: Shell
    内容:
    AWS_ACCESS="$1"
    AWS_REGION="$2"
    ENDPOINT="$3"
    POLICY_NAME="$4"
    CERT_ARN="$5"
    URI=/things/${AT_SERIAL_NUMBER}/principals
    
    curl \
            -H "x-amzn-principal:${CERT_ARN}" \
            --cacert /root/AmazonRootCA1.pem \
            --user "${AWS_ACCESS}" \
            --aws-sigv4 "aws:amz:${AWS_REGION}:execute-api" \
            --request PUT -v \
            "https://${ENDPOINT}${URI}"
    images/node-red/common-images/aws/exec_queue_attach_cert.png

    図4.57 [証明書をデバイスにアタッチ] ノードのプロパティ内容


  10. [ポリシーをアタッチするための引数設定] ノードの右側にある端子をクリックし、 [証明書をデバイスにアタッチ] ノードの左側の端子を選択して放します。

    images/node-red/common-images/aws/thing_attach_policy_flow.png

    図4.58 デバイスにポリシーをアタッチするフロー


  11. 画面右上の [デプロイ] を押します。
  12. [inject] ノードの左の四角を押すとデバイスにポリシーがアタッチされます。

4.6.9. デバイスシャドウを取得するフローの作成

デバイスが登録されている場合、デバイスシャドウが取得可能です。 対象とするデバイスは 「デバイスを登録するフローの作成」 で取得した thingName を使用します。

  1. パレットから [inject] ノードをワークスペースにドラッグ、ドロップします。 プロパティはデフォルトから変更ありません。
  2. [credentials] ノードをドラッグ、ドロップします。
  3. [credentials] ノードのプロパティを編集します。[追加] ボタンを押して値を追加します。 private のステータスが [文字列] のままだと内容が表示されたままのため、確認後は [hidden] に変更するのを推奨します。

    Name: 接続情報の登録
    Values:
    private: [hidden] <<sct.development.aws.device_data_endpoint>> で取得したデバイスデータエンドポイント(例: aaaaaaaa.iot.ap-northeast-1.amazonaws.com)
    to: [msg.] aws_device_endpoint
    images/node-red/common-images/aws/credentials_cert_get_thing_shadow.png

    図4.59 [接続情報の登録] ノードのプロパティ内容


  4. [inject] ノードの右側の端子をクリックし、[接続情報の登録] ノードの左側の端子を選択して放します。
  5. [function] ノードをドラッグ、ドロップします。
  6. [function] ノードのプロパティを編集します。

    名前: デバイスシャドウ取得のための引数設定
    コード:
    msg.payload = msg.aws_device_endpoint;
    return msg;
    images/node-red/common-images/aws/function_arg_cert_get_device_shadow.png

    図4.60 [デバイスシャドウ取得のための引数設定] ノードのプロパティ内容


  7. [接続情報の登録] ノードの右側の端子をクリックし、[デバイスシャドウ取得のための引数設定] ノードの左側の端子を選択して放します。
  8. [exec queue] ノードをドラッグ、ドロップします。
  9. [exec queue] ノードのプロパティを編集します。

    名前: 暗号化を使用したデバイスシャドウの取得
    コマンド: bash $file
    Queue: 1
    Debug Mode: ✓
    Append msg.payload: ✓
    構文: Shell
    内容:
    ENDPOINT="$1"
    URI=/things/${AT_SERIAL_NUMBER}/shadow
    
    curl --tlsv1.2 \
            --cacert /cert/AmazonRootCA1.pem \
            --key /cert/key.pem \
            --cert /cert/device_cert.pem \
            --request GET \
            "https://${ENDPOINT}:8443${URI}"
    images/node-red/common-images/aws/exec_queue_cert_get_device_shadow.png

    図4.61 [暗号化を使用したデバイスシャドウの取得] ノードのプロパティ内容


  10. [デバイスシャドウ更新のための引数設定] ノードの右側の端子をクリックし、 [暗号化を使用したデバイスシャドウの取得] ノードの左側の端子を選択して放します。
  11. [function] ノードをドラッグ、ドロップします。
  12. [function] ノードのプロパティを編集します。

    名前: デバイスシャドウ内容の取得
    コード:
    var res = msg.payload.match(/\{.*\}/);
    msg.payload = res[0];
    return msg;
    images/node-red/common-images/aws/function_cert_get_device_shadow.png

    図4.62 [デバイスシャドウ内容の取得] ノードのプロパティ内容


  13. [暗号化を使用したデバイスシャドウの取得] ノードの右側の端子をクリックし、 [デバイスシャドウ内容の取得] ノードの左側の端子を選択して放します。
  14. [debug] ノードをドラッグ、ドロップします。
  15. [デバイスシャドウ内容の取得] ノードの右側の端子をクリックし、[debug] ノードの左側の端子を選択して放します。

    images/node-red/common-images/aws/cert_get_thing_shadow_flow.png

    図4.63 データの暗号化を使用したデバイスシャドウを取得するフロー


  16. 画面右上の [デプロイ] を押します。
  17. [inject] ノードの左の四角を押すと取得したデバイスシャドウの内容がデバッグメッセージに表示されます。 デバイスシャドウが作成されていない場合は "No shadow exists with name: 001234567890" のように表示されます。

4.6.10. デバイスシャドウを更新するフローの作成

デバイスシャドウを更新します。 対象とするデバイスは 「デバイスを登録するフローの作成」 で取得した thingName を使用します。

  1. パレットから [inject] ノードをワークスペースにドラッグ、ドロップします。
  2. [inject] ノードのプロパティを編集します。

    名前: デバイスシャドウ内容
    msg.payload: { "state": {"desired": {"message": "success" }}}
    images/node-red/common-images/aws/update_thing_shadow_payload.png

    図4.64 [デバイスシャドウ内容] ノードのプロパティ内容


  3. [credentials] ノードをドラッグ、ドロップします。
  4. [credentials] ノードのプロパティを編集します。[追加] ボタンを押して値を追加します。 private のステータスが [文字列] のままだと内容が表示されたままのため、確認後は [hidden] に変更するのを推奨します。

    Name: 接続情報の登録
    Values:
    private: [hidden] <<sct.development.aws.device_data_endpoint>> で取得したデバイスデータエンドポイント(例: aaaaaaaa.iot.ap-northeast-1.amazonaws.com)
    to: [msg.] aws_device_endpoint
    images/node-red/common-images/aws/credentials_cert_get_thing_shadow.png

    図4.65 [接続情報の登録] ノードのプロパティ内容


  5. [inject] ノードの右側の端子をクリックし、[接続情報の登録] ノードの左側の端子を選択して放します。
  6. [function] ノードをドラッグ、ドロップします。
  7. [function] ノードのプロパティを編集します。

    名前: デバイスシャドウ更新のための引数設定
    コード:
    msg.payload = "\'" + msg.payload + "\'"
        + " " + msg.aws_device_endpoint;
    return msg;
    images/node-red/common-images/aws/function_arg_cert_update_device_shadow.png

    図4.66 [デバイスシャドウ更新のための引数設定] ノードのプロパティ内容


  8. [接続情報の登録] ノードの右側の端子をクリックし、[デバイスシャドウ取得のための引数設定] ノードの左側の端子を選択して放します。
  9. [exec queue] ノードをドラッグ、ドロップします。
  10. [exec queue] ノードのプロパティを編集します。

    名前: 暗号化を使用したデバイスシャドウの更新
    コマンド: bash $file
    Queue: 1
    Debug Mode: ✓
    Append msg.payload: ✓
    構文: Shell
    内容:
    MESSAGES="$1"
    ENDPOINT="$2"
    URI=/things/${AT_SERIAL_NUMBER}/shadow
    
    curl --tlsv1.2 \
            --cacert /cert/AmazonRootCA1.pem \
            --key /cert/key.pem \
            --cert /cert/device_cert.pem \
            --request POST -v \
            -d "${MESSAGES}" \
            "https://${ENDPOINT}:8443${URI}"
    images/node-red/common-images/aws/exec_queue_cert_update_device_shadow.png

    図4.67 [暗号化を使用したデバイスシャドウの更新] ノードのプロパティ内容


  11. [デバイスシャドウ更新のための引数設定] ノードの右側の端子をクリックし、 [暗号化を使用したデバイスシャドウの更新] ノードの左側の端子を選択して放します。
  12. [function] ノードをドラッグ、ドロップします。
  13. [function] ノードのプロパティを編集します。

    名前: デバイスシャドウ内容の取得
    コード:
    var res = msg.payload.match(/\{.*\}/);
    msg.payload = res[0];
    return msg;
    images/node-red/common-images/aws/function_cert_get_device_shadow.png

    図4.68 [デバイスシャドウ内容の取得] ノードのプロパティ内容


  14. [暗号化を使用したデバイスシャドウの更新] ノードの右側の端子をクリックし、 [デバイスシャドウ内容の取得] ノードの左側の端子を選択して放します。
  15. [debug] ノードをドラッグ、ドロップします。
  16. [デバイスシャドウ内容の取得] ノードの右側の端子をクリックし、[debug] ノードの左側の端子を選択して放します。

    images/node-red/common-images/aws/cert_update_thing_shadow_flow.png

    図4.69 データの暗号化を使用したデバイスシャドウを更新するフロー


  17. 画面右上の [デプロイ] を押します。
  18. [inject] ノードの左の四角を押すと更新したデバイスシャドウの内容がデバッグメッセージに表示されます。

4.6.11. デバイスシャドウを削除するフローの作成

デバイスシャドウを削除します。 対象とするデバイスは 「デバイスを登録するフローの作成」 で取得した thingName を使用します。

  1. パレットから [inject] ノードをワークスペースにドラッグ、ドロップします。 プロパティはデフォルトから変更ありません。
  2. [credentials] ノードをドラッグ、ドロップします。
  3. [credentials] ノードのプロパティを編集します。[追加] ボタンを押して値を追加します。 private のステータスが [文字列] のままだと内容が表示されたままのため、確認後は [hidden] に変更するのを推奨します。

    Name: 接続情報の登録
    Values:
    private: [hidden] <<sct.development.aws.device_data_endpoint>> で取得したデバイスデータエンドポイント(例: aaaaaaaa.iot.ap-northeast-1.amazonaws.com)
    to: [msg.] aws_device_endpoint
    images/node-red/common-images/aws/credentials_cert_get_thing_shadow.png

    図4.70 [接続情報の登録] ノードのプロパティ内容


  4. [inject] ノードの右側の端子をクリックし、[接続情報の登録] ノードの左側の端子を選択して放します。
  5. [function] ノードをドラッグ、ドロップします。
  6. [function] ノードのプロパティを編集します。

    名前: デバイスシャドウ削除のための引数設定
    コード:
    msg.payload = msg.aws_device_endpoint;
    return msg;
    images/node-red/common-images/aws/function_arg_cert_delete_device_shadow.png

    図4.71 [デバイスシャドウ削除のための引数設定] ノードのプロパティ内容


  7. [接続情報の登録] ノードの右側の端子をクリックし、[デバイスシャドウ削除のための引数設定] ノードの左側の端子を選択して放します。
  8. [exec queue] ノードをドラッグ、ドロップします。
  9. [exec queue] ノードのプロパティを編集します。

    名前: 暗号化を使用したデバイスシャドウの削除
    コマンド: bash $file
    Queue: 1
    Debug Mode: ✓
    Append msg.payload: ✓
    構文: Shell
    内容:
    ENDPOINT="$1"
    URI=/things/${AT_SERIAL_NUMBER}/shadow
    
    curl --tlsv1.2 \
            --cacert /cert/AmazonRootCA1.pem \
            --key /cert/key.pem \
            --cert /cert/device_cert.pem \
            --request POST -v \
            -d "${MESSAGES}" \
            "https://${ENDPOINT}:8443${URI}"
    images/node-red/common-images/aws/exec_queue_cert_delete_device_shadow.png

    図4.72 [暗号化を使用したデバイスシャドウの削除] ノードのプロパティ内容


  10. [デバイスシャドウ削除のための引数設定] ノードの右側の端子をクリックし、 [暗号化を使用したデバイスシャドウの削除] ノードの左側の端子を選択して放します。
  11. [function] ノードをドラッグ、ドロップします。
  12. [function] ノードのプロパティを編集します。

    名前: デバイスシャドウ内容の取得
    コード:
    var res = msg.payload.match(/\{.*\}/);
    msg.payload = res[0];
    return msg;
    images/node-red/common-images/aws/function_cert_get_device_shadow.png

    図4.73 [デバイスシャドウ内容の取得] ノードのプロパティ内容


  13. [暗号化を使用したデバイスシャドウの更新] ノードの右側の端子をクリックし、 [デバイスシャドウ内容の取得] ノードの左側の端子を選択して放します。
  14. [debug] ノードをドラッグ、ドロップします。
  15. [デバイスシャドウ内容の取得] ノードの右側の端子をクリックし、[debug] ノードの左側の端子を選択して放します。

    images/node-red/common-images/aws/cert_delete_thing_shadow_flow.png

    図4.74 データの暗号化を使用したデバイスシャドウを削除するフロー


  16. 画面右上の [デプロイ] を押します。
  17. [inject] ノードの左の四角を押すと削除したデバイスシャドウの内容がデバッグメッセージに表示されます。 デバイスシャドウがすでに削除されている場合は "No shadow exists with name: 001234567890" のように表示されます。