0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Node-REDからSORACOM APIを使ってSIMタグを読み書きする方法

Posted at

はじめに

遠隔地に設置したIoTゲートウェイに外部からパラメータを渡したい場合、いくつかの方法があるかと思いますが、今回はSORACOMプラットフォームで構築したIoTシステムにおいて、SIMのタグを使った方法をご紹介します。
なお、サーバーで動作するパラメータ設定画面およびIoTゲートウェイのプログラムはNode-REDを使って構築することとします。

image.png

  1. Webブラウザから設定用のサーバーにアクセスして設定する
  2. サーバーからSORACOMのSIMタグを書き込む
  3. 現場のIoTゲートウェイがSIMタグを読み取る

なお、この記事は既にSORACOMとNode-REDをお使いの方を対象としており、アカウント作成などの基礎的な作業は省いていますので、ご了承ください。
また、利用するSORACOMのサービスは無償の範囲もありますが、基本的に有償となります。数百円単位であまり多くはありませんが費用が発生しますので、各サービスのサイトで費用をご確認ください。

また、検証に当たっては私の過去の記事(AWS上にNode-RED環境を構築する方法Windowsを使った開発環境の構築する方法)を参考にしていただければと思います。

準備

SAMユーザー設定

サーバーからのSIMのタグを読み書きするためのSAMユーザーを作成します。

  1. SORACOMドキュメントを参考に、SAMユーザーを作成し、認証キーを取得します
  2. 続いて以下の手順でSAMユーザーの権限を設定します
    権限設定のJSONは以下となります
{
  "statements": [
    {
      "api": [
        "Subscriber:getSubscriber",
        "Subscriber:putSubscriberTags"
      ],
      "effect": "allow"
    }
  ]
}

タグの追加

パラメーターを保存するタグを追加し、初期値を入れておきます。
今回は安易ですが、文字列の「param1」と数値の「param2」とします。

  1. SORACOMコンソールのSIM管理画面で対象のSIMを選択(クリックする)
    image.png
  2. タグを選択し、「param1(abc)」と「param2(123)」を追加して保存する
    image.png

サーバー側の処理

※この記事のメインとなる箇所なので、この章が一番重たいです。
パラメーターの設定画面をNode-REDで作成します。
image.png

フローは以下の5つの構成となっています

  • 1.初期値セット…SIM情報と認証情報をセットする
  • 2.認証情報取得…APIを使うための認証
  • 3.初期値取得…APIを実行し、SIMタグ情報を読み取る
  • 4.初期値設定…3.で取得した情報を初期値として画面にセットする&画面上の変更を変数にセットする
  • 5.設定(タグ上書き)…画面で変更したパラメーターをSIMタグに上書きする

各ノードの設定については以降の節で説明します。

1.初期値セット

image.png

ここでは初期値として、対象のSIMのIMSIとSAMユーザーの認証キーID(「keyID-」から始まる文字列)と認証キーシークレット(「secret-」から始まる文字列)をchangeノードでflow変数「imsi」「authKeyId」「authKey」にセットします。
image.png

2.認証情報取得

image.png

SORACOM APIでは認証キーIDと認証キーシークレットで認証し、APIキーとAPIトークンを取得し、APIをコールします(詳細はこちら)。

  1. functionノードで認証キーIDと認証キーシークレットをJSONにセットします
    image.png
    msg.headers = {
        "Content-Type": "application/json"
    };
    
    msg.payload = {
        "authKeyId": flow.get("authKeyId"),
        "authKey": flow.get("authKey")
    };
    
    return msg;
    
  2. http requestノードで認証リクエストする
    image.png
  3. changeノードで受信したAPIキーとAPIトークンをflow変数「apiKey」「token」に保存する
    image.png

3.初期値取得

image.png

現時点でSIMタグに保存されている値を取得します。

  1. functionノードでAPIキーとAPIトークン、対象SIMのIMSIをセットする
    image.png
    msg.headers = {
        "Content-Type": "application/json",
        "X-Soracom-API-Key": flow.get("apiKey"),
        "X-Soracom-Token": flow.get("token")
    };
    
    msg.imsi = flow.get("imsi");
    
    return msg;
    
  2. http requestノードでSIM情報を取得する
    image.png
  3. タグ情報がpayloadのtagsに入っているので、changeノードでflow変数に保存する
    image.png

4.初期値設定

image.png

  1. param1(text inputノード)、param2(numericノード)を設定用にmsg.payloadにセットする
    image.png
  2. 設定画面でparam1やparam2が変更されたタイミングでflow変数にセットするchangeノード
    image.png

5.設定(タグ上書き)

image.png

設定画面で変更した値をSORACOMに送ってタグを上書きします。

  1. param1とparam2がflow変数に格納されているので、functionノードで送信データ(JSON)を作る
    image.png
    msg.headers = {
        "Content-Type": "application/json",
        "X-Soracom-API-Key": flow.get("apiKey"),
        "X-Soracom-Token": flow.get("token")
    };
    
    msg.payload = [{
        "tagName": "param1",
        "tagValue": String(flow.get("param1"))
    },{
        "tagName": "param2",
        "tagValue": String(flow.get("param2"))
    }];
    
    msg.imsi = global.get("imsi");
    
    return msg;
    
  2. http requestノードでパラメーターを送信する
    image.png

設定画面

設定画面はNode-REDのダッシュボードを使って行います。
image.png
上のようにtext inputノード、numericノード、buttonノードを置き、以下の画面で行うこととします。
image.png

動作確認

タグの取得と画面表示

  1. 下図の1,2,3の順でinjectノードのボタンをクリックする
    image.png
  2. 問題なければ、設定画面にタグの値(例ではparam1が「abc」param2が「123」)が表示される
    image.png
    ※SORACOMコンソールのSIM詳細画面
    image.png

タグ値の変更と反映

  1. 設定画面でparam1とparam2を変更(例ではparam1を「abcdef」param2を「234」に変更)し、設定ボタンをクリックする
    image.png
  2. SORACOMコンソールのSIM詳細画面でタグの値が書き換わっていれば成功
    image.png

自動初期化設定

このままでは自動で値が入らないので、初期化処理を自動化します。

  1. 認証情報取得をするため、「初期値セット」のinjectノードをNode-RED起動の0.1秒後に実行し、認証情報の有効期限切れに備えて、24時間に1度繰り返して実行する
    image.png
  2. 1.で取得した認証情報を使って初期値を取得するinjectノードをNode-RED起動の5秒後に実行する
    image.png
  3. 2.で取得した値を画面に表示するinjectノードをNode-RED起動の10秒後に実行する
    image.png
    ※かなり雑にやってます…もっと良い方法があればご教示いただけると幸いです

ゲートウェイ側の設定

IoTゲートウェイでパラメーターを取得する実装について説明します。
パラメーターの使い方はそれぞれだと思うので、SIMタグの取得方法のみ紹介します。
と言ってもSORACOM Air SIM(またはArc)で接続したゲートウェイからHTTPリクエストするだけです。
image.png

http requestノードの設定は以下となります。
image.png
- メソッドは「GET」
- URLは「http://metadata.soracom.io/v1/subscriber.tags」
- 出力形式は「JSONオブジェクト」

injectノードのボタンをクリックすると、値が取得できます。
image.png

まとめ

今回の記事も詳細説明をかなり省いています。
ここもっと詳しく教えてとかあればコメントいただけると幸いです。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?