Milesightゲートウェイでペイロードコーデックを使用する方法

はじめに

Milesightゲートウェイが組み込みネットワークサーバとして動作する場合、MQTT/HTTPS経由でサードパーティサーバにデータを転送することができます:

{
  "applicationID": "1",
  "applicationName": "cloud",
  "data": "A2fqAARoTwUAAA==",
  "devEUI": "24e124136b502217",
  "deviceName": "EM300-TH",
  "fCnt": 128,
  "fPort": 85,
  "rxInfo": [
    {
      "altitude": 0,
      "latitude": 0,
      "loRaSNR": 13.8,
      "longitude": 0,
      "mac": "24e124fffef54092",
      "name": "Local Gateway",
      "rssi": -51,
      "time": "2022-12-27T07:21:27.078763Z"
    }
  ],
  "time": "2022-12-27T07:21:27.078763Z",
  "txInfo": {
    "adr": true,
    "codeRate": "4/5",
    "dataRate": {
      "bandwidth": 125,
      "modulation": "LORA",
      "spreadFactor": 7
    },
    "frequency": 868100000
  },
  "metadata": {
    "mqtt_topic": "/mqtttest"
  }
}
JavaScript

この記事では、ペイロード・コーデック機能を使って、アップリンクとダウンリンクのコンテンツをカスタマイズする方法を説明します。

必要条件

  • Milesight LoRaWANゲートウェイ UG65/UG67(v60.0.0.41以降)、UG56(v56.0.0.3以降)
  • 任意のLoRaWANセンサー

構成

内蔵ペイロードコーデック

Milesightゲートウェイはペイロードコーデックライブラリを内蔵しており、Milesightデコーダーやエンコーダーを簡単に追加することができます。2つの取得タイプをサポートしています:

Online:ゲートウェイがインターネットにアクセスできる場合、更新をチェックし、ライブラリを自動的に更新します。Obtainをクリックしてアップデートを確認することもできます。

Local Upload:zip形式のデコーダーパッケージをローカルにアップロードします。デコーダーパッケージはこちらで入手できます。

カスタムペイロードコーデック

他のブランドのデバイスを使用している場合や、デフォルトのデコーダーがアプリケーションで動作しない場合は、カスタムペイロードコーデックを追加してください:

  • Name:このコーデックの固有の名前をカスタマイズします。
  • Description: 必要に応じて説明を追加します
  • Template: 内蔵のペイロードコーデックライブラリからテンプレートを選択します。
  • Payload Decoder Function: HEX形式のデータをJSON形式の結果に変換します
  • Payload Decoder Function: JSON形式のメッセージをHEX形式のコマンドに変換します。
  • Payload Codec Test: HEX形式のデータをテストエンコーダに入力するか、JSON形式のメッセージをテストエンコーダに入力します。
  • Object Mapping Function: ゲートウェイのBACnetサーバーまたはModbusサーバー機能を使用する場合にのみ追加します(ファームウェアV60.0.0.45以降のUG65/67、ファームウェアV56.0.0.5以降のUG56)。

注意

1. ペイロードデコーダとエンコーダのサポートされる JavaScript のバージョンは ES5 です。

2. 通常、1つのペイロードコーデックのデコーダーとエンコーダーで使用される変数名は、同じアイテムを指す場合は同じでなければなりません。

アップリンクコンテンツのカスタマイズ

Milesightゲートウェイは、MQTT/HTTPサーバへのレポートコンテンツを変更するためにデコーダをカスタマイズする複数のソリューションを提供します。EM300-THを例に、レポート内容を変更するためにデコーダをカスタマイズする手順を以下に示します。

解決策1:デコードされたセンサーデータのみをレポートする。

ここを クリックしてデコーダーを検索し、ペイロードデコーダー機能ボックスに貼り付けます。

注:他社のセンサーを設定する場合、デコーダスクリプト(Javaスクリプト)を入手するために、その会社のサポートに連絡してください、そして、貼り付けるとき、スクリプトヘッダがfunction Decode(fPort, bytes)であることを確認してください。

Payload Codec Test 機能を使用して、アップリンク結果をテストすることができます。

アップリンク結果:

{
  "battery": 92,
  "temperature": 30.8,
  "humidity": 50.5
}
JavaScript

解決策2:デバイスのEUIと名前でデータを報告する

Applicable: UG65/UG67(v60.0.0.44 以降), UG56 (v56.0.0.5 以降)

アプリケーション]ページのMetadata オプションを有効にします。有効にすると、デバイスに適用するペイロード・コーデックが選択されている場合、ゲートウェイは、MQTT/HTTPサーバーに送信するときに、デバイスEUI、デバイス名、およびアプリケーションIDを、このデバイスのすべてのレポートに追加します。

注:これは、このアプリケーションの下にあるすべてのデバイスに適用されます。特定のデバイスにのみこれらの情報をレポートする必要がある場合は、ソリューション3または4を参照してください

解決策3:特定の属性項目を持つ生データをレポートする。

Milesightゲートウェイは、LoRaObject 機能を提供しています。以下にデコードの例を示します:

function Decode(fPort, bytes) {
var decoded = {};
decoded.devEUI = LoRaObject.devEUI;
decoded.rssi = LoRaObject.rxInfo[0].rssi;
decoded.snr = LoRaObject.rxInfo[0].loRaSNR;
decoded.data = LoRaObject.data;
return decoded;
}
JavaScript

アップリンク結果:

{
"devEUI": "24e1611234567890",
"rssi": -5,
"snr": 11,
"data": "AXVkA2cgAQRoeg=="
}
JavaScript

追加後、このペイロード・コーデックをデバイスに追加し、「Network Server (ネットワーク・サーバー)」 > 「Packets (パケット)」の順に選択して、「Packet Details (パケットの詳細)」でアップリンクの結果を確認できます。

解決策4:特定の属性項目でデコードされたデータを報告する。

解決策1に従って、デコーダーをペイロードデコーダーのファンクションボックスに貼り付け、return decoded ステートメントの前に属性項目を追加します。例

function Decode(fPort, bytes) {
    var decoded = {};
  
//Data decoder 
    for (var i = 0; i < bytes.length;) {
        var channel_id = bytes[i++];
        var channel_type = bytes[i++];

        // BATTERY
        if (channel_id === 0x01 && channel_type === 0x75) {
            decoded.battery = bytes[i];
            i += 1;
        }
        // TEMPERATURE
        else if (channel_id === 0x03 && channel_type === 0x67) {
            decoded.temperature = readInt16LE(bytes.slice(i, i + 2)) / 10;
            i += 2;
        }
        // HUMIDITY
        else if (channel_id === 0x04 && channel_type === 0x68) {
            decoded.humidity = bytes[i] / 2;
            i += 1;
        } else {
            break;
        }
    }
  
decoded.devEUI = LoRaObject.devEUI;
    return decoded;
}

/* ******************************************
 * bytes to number
 ********************************************/
function readUInt16LE(bytes) {
    var value = (bytes[1] << 8) + bytes[0];
    return value & 0xffff;
}

function readInt16LE(bytes) {
    var ref = readUInt16LE(bytes);
    return ref > 0x7fff ? ref - 0x10000 : ref;
}
JavaScript

アップリンク結果:

{
 "battery": 92,
 "temperature": 30.8,
 "humidity": 50.5,
 "devEUI": "24e1611234567890"
}
Generic

注: LoRaObjectの 中身を全て追加したい場合は、 return decoded 文の前にdecoded.obj= LoRaObject; を追加して下さい

追加後、このペイロードコーデックをデバイスに追加し、Network Server > Packetsで、Packet Details でアップリンク結果を確認する。

注意: LoRaObject関数のtime変数は、パケット転送プログラムが起動してからパケットを受信するまでの時間を意味します。ゲートウェイがパケットを受信する正確な時間を取得する必要がある場合は、以下の記述を追加してください:

//replace the en-US as other time zone
decoded.time = new Date().toLocaleString('en-US', { timeZone: ' ' });  
JavaScript

オブジェクトマッピング関数

Applicable: UG65/UG67(v60.0.0.45以降), UG56 (v56.0.0.5以降)

Milesightゲートウェイは、LoRaWANとBACnet/Modbus間の会話を実現するために、BACnetサーバーまたはModbusサーバーとして動作することをサポートしています。また、アップリンクデータやダウンリンク制御アイテムをBACnetサーバーやModbusサーバーが認識できるオブジェクトとしてマッピングするために、オブジェクトマッピング機能を追加する必要があります。
以下にオブジェクトマッピングの例を示します:

{
    "object": [
        {
            "id": "ipso_version",
            "name": "IPSO Version",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "TEXT",
            "value_type": "STRING",
            "max_length": 6,
            "bacnet_type": "character_string_value_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
                {
            "id": "temperature_unit",
            "name": "Temperature Unit",
            "value": "",
            "unit": "",
            "access_mode": "RW",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "values": [
                { "value": 0, "name": "celsius" },
                { "value": 1, "name": "fahrenheit" }
            ],
            "bacnet_type": "multistate_value_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "reference": ["temperature_control_mode", "temperature_target"]
        }
        ]
}
Generic

パラメータ

説明

id この値はデコーダやエンコーダの変数名と同じでなければならない。
name 空白のままにするか、必要に応じて内容をカスタマイズする。
value 未使用。空白のままにします。
unit 空白のままにするか、必要に応じて単位を入力してください。
access_mode この変数のアクセス・モードを設定します。サポートされているオプションと対応する Modbus レジスタ・タイプ:

オプション

説明

対応する Modbus レジスタ・タイプ
R 読み取り専用 ディスクリート入力、入力レジスタ
W 書き込み専用 コイル、保持レジスタ
RW リードライト コイル、保持レジスタ

 

data_type この変数の値のタイプを定義します。サポートされるオプション:

オプション

説明

サポートされる Modbus レジスタ・タイプ
TEXT 文字列型データ、例:シリアル番号 入力レジスタ、保持レジスタ
NUMBER 整数と浮動小数点数を含む数値データ、例:温度 入力レジスタ、保持レジスタ
BOOL 0と1しか持たないデータ、例:ボタンの状態 ディスクリート入力、コイル
ENUM 複数の値 ディスクリート入力、入力レジスタ、コイル、保持レジスタ

注意: データ・タイプが ENUM で参照パラメータがブランクでない場合、Modbus レジスタ・タイプを入力レジスタまたは保持レジスタに設定することを推奨します。

value_type サポートされているオプション uint8、int8、uint16、int16、uint32、int32、float、string。
values この変数の値の範囲を設定します。
max_length 値のタイプが STRING の場合、文字列の最大長または Modbus レジスタの最大長を設定します。
bacnet_type サポートするオプション:

analog_value_object, analog_input_object, analog_output_object, binary_value_object, binary_input_object, binary_output_object, multistate_value_object, multistate_input_object, multistate_output_object

bacnet_unit_type_id ここにある BACnet ユニット ID を入力します。
bacnet_unit_type ここにある BACnet ユニットタイプを入力します(説明を参照)。
reference この変数を他の変数と一緒に書き込む場合は、ここに変数配列を追加してください。

追加後、BACnetオブジェクトまたはModbusオブジェクトを追加して、このオブジェクトマッピング機能が有効かどうかを確認できます。

デバイスへのペイロードコーデックの追加

Network Server > Deviceページでデバイスを追加すると、デコーダを選択でき、Network > Packetsページのパケット詳細にデコードされたデータが表示されます。

関連記事

組み込みネットワーク・サーバー

ソリューション / IoT サポート


Milesight製品

ウェーブクレスト株式会社が運営するMilesight製品特設サイトです

居住者の健康を確保

お知らせ

  1. 2025-4-3

    ピープル・センシング 駆動型スマートビルディング

    People Sensing Insights を通じてビルインテリジェンスに革命をもたらします。…
  2. 2023-7-21

    LoRaWANの説明: 理論から実践へのガイド

    この包括的なビデオでは、LoRaWANを深く掘り下げ、その仕組み、利点、アプリケーションについて説明…
  3. 2023-4-6

    センシング・インサイト Milesight リブランディングのお知らせ

    https://youtu.be/r40DK40DjIY …
ページ上部へ戻る