- Home
- 組み込みネットワーク・サーバー
- Milesightゲートウェイでペイロードコーデックを使用する方法
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"
}
}
この記事では、ペイロード・コーデック機能を使って、アップリンクとダウンリンクのコンテンツをカスタマイズする方法を説明します。
必要条件
- 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
}
解決策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;
}
アップリンク結果:
{
"devEUI": "24e1611234567890",
"rssi": -5,
"snr": 11,
"data": "AXVkA2cgAQRoeg=="
}
追加後、このペイロード・コーデックをデバイスに追加し、「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;
}
アップリンク結果:
{
"battery": 92,
"temperature": 30.8,
"humidity": 50.5,
"devEUI": "24e1611234567890"
}
注: 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: ' ' });
オブジェクトマッピング関数
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"]
}
]
}
パラメータ |
説明 |
|||||||||||||||
id | この値はデコーダやエンコーダの変数名と同じでなければならない。 | |||||||||||||||
name | 空白のままにするか、必要に応じて内容をカスタマイズする。 | |||||||||||||||
value | 未使用。空白のままにします。 | |||||||||||||||
unit | 空白のままにするか、必要に応じて単位を入力してください。 | |||||||||||||||
access_mode | この変数のアクセス・モードを設定します。サポートされているオプションと対応する Modbus レジスタ・タイプ:
|
|||||||||||||||
data_type | この変数の値のタイプを定義します。サポートされるオプション:
注意: データ・タイプが 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ページのパケット詳細にデコードされたデータが表示されます。
関連記事
組み込みネットワーク・サーバー
Milesight Gateway- MQTTによるNiagara BMSプラットフォーム統合この記事では、Milesight LoRaWANゲートウェイをMQTTプロトコル経由でNiagaraプラットフォームに統合する方法を説明します。
Milesightゲートウェイ- Modbus経由でのNiagara BMSプラットフォーム統合この記事では、Milesight LoRaWANゲートウェイをModbusプロトコル経由でNiagaraプラットフォームに統合する方法を説明します。
Milesight Gateway- BACnet経由でのNiagara BMSプラットフォーム統合この記事では、Milesight LoRaWANゲートウェイをBACnet/IPプロトコル経由でNiagaraプラットフォームに統合し、アップリンクとダウンリンクを実現する方法について説明します。
Exosite-Milesightゲートウェイ統合このガイドでは、Milesight ゲートウェイを接続し、MQTT 接続を介して LoRaWAN エンドデバイスのデータを Exosite IoT プラットフォームに統合する方法を紹介します。
Milesight Gateway MQTT APIガイドMilesightゲートウェイは、ゲートウェイに組み込まれたネットワークサーバーの設定を行うためのMQTT APIを提供しています。
MilesightのLoRaWANゲートウェイをMQTTでAWSに接続する方法このドキュメントでは、Milesight LoRaWANゲートウェイをMQTTプロトコル経由でAWSに接続する方法を説明します。
Milesightゲートウェイのチャンネルマスクの設定方法本記事では、Milesightゲートウェイでチャネルマスクを設定する方法を説明します。
MilesightのLoRaWANゲートウェイをMQTTでAkenzaに接続します。Milesight UG85/UG87 LoRaWANゲートウェイはネットワークサーバーとして動作し、ゲートウェイからAkenza Coreへエンドノードのデータを転送するMQTT機能を統合しています。
Milesight LoRaWANゲートウェイ用AWS IoT GreengrassクイックガイドAWS IoT Greengrassは、クラウド機能をローカルデバイスに拡張し、より情報ソースに近いデータの収集と分析、ローカルイベントへの自律的な反応、ローカルネットワーク上でのセキュアな相互通信を可能にします。
Milesightゲートウェイでマルチキャスト機能を使用する方法Milesight LoRaWANゲートウェイは、クラスBまたはクラスCのマルチキャストグループを作成し、エンドデバイスのグループにダウンリンクメッセージを送信することができます。この記事では、マルチキャスト機能を使用するための設定方法について説明します。
ソリューション / IoT サポート
- Milesight Gateway 防水アンテナ設置ガイド本記事では、防水性を確保するための外部アンテナの取り付け方法について説明します。
- UG67における停電アラームの設定方法電源を3秒以上オンまたはオフにした後、UG67は該当する受信者に電子メールまたはSMSを送信することができます
- Milesight GatewayでGPSデータが失われた場合のトラブルシューティング方法Milesight LoRaWAN ゲートウェイは、位置を特定するために使用される GPS をサポートしています。
- Milesightゲートウェイのログファイルを取得する方法この記事では、Milesightゲートウェイのトラブルシューティングログを取得するための操作について説明します。
- Milesight Gateway- MQTTによるNiagara BMSプラットフォーム統合この記事では、Milesight LoRaWANゲートウェイをMQTTプロトコル経由でNiagaraプラットフォームに統合する方法を説明します。
- Milesightゲートウェイ- Modbus経由でのNiagara BMSプラットフォーム統合この記事では、Milesight LoRaWANゲートウェイをModbusプロトコル経由でNiagaraプラットフォームに統合する方法を説明します。
- Milesight Gateway- BACnet経由でのNiagara BMSプラットフォーム統合この記事では、Milesight LoRaWANゲートウェイをBACnet/IPプロトコル経由でNiagaraプラットフォームに統合し、アップリンクとダウンリンクを実現する方法について説明します。
- Exosite-Milesightゲートウェイ統合このガイドでは、Milesight ゲートウェイを接続し、MQTT 接続を介して LoRaWAN エンドデバイスのデータを Exosite IoT プラットフォームに統合する方法を紹介します。
- Milesight Gateway MQTT APIガイドMilesightゲートウェイは、ゲートウェイに組み込まれたネットワークサーバーの設定を行うためのMQTT APIを提供しています。
- MilesightのLoRaWANゲートウェイをMQTTでAWSに接続する方法このドキュメントでは、Milesight LoRaWANゲートウェイをMQTTプロトコル経由でAWSに接続する方法を説明します。