このトピックでは、カスタム Topic データを解析する JavaScript のサンプルスクリプトを示します。

説明

  • カスタム Topic データの解析をサポートしているのは、中国 (上海) リージョンのみです。
  • デバイスを設定する際、解析フラグ (? _sn=default) をカスタム Topic の後ろに追加する必要があります。 IoT Platform は、タグ付きの Topic を使用してデバイスから送信されたデータのみを解析します。

    たとえば、デバイスから Topic /${productKey}/${deviceName}/user/update にメッセージを送信するとします。 IoT Platform でデータを JSON 形式に解析する場合、 デバイス SDK の設定時、Topic を /${productKey}/${deviceName}/user/update? _sn=default と定義する必要があります。

    IoT Platform コンソールでカスタム Topic を作成すると、解析フラグが追加されず、通常の Topic として定義されます。
  • IoT Platform は、デバイスからクラウドにレポートされたデータのみを解析し、クラウドから送信されたダウンストリームデータは解析しません。
  • IoT Platform は、クラウドにレポートされたペイロードのみを解析し、解析したペイロードを返します。
  • データの Topic は、解析の前後で変化しません。 たとえば、デバイスから /${productKey}/${deviceName}/user/update にデータが送信されると、解析されたデータもこの Topic に送信されます。

スクリプトテンプレート

var SELF_DEFINE_TOPIC_UPDATE_FLAG = '/user/update'  // Custom topic: /user/update
var SELF_DEFINE_TOPIC_ERROR_FLAG = '/user/update/error'  // Custom topic: /user/update/error
/**
 * Converts data from devices to JSON data. The function is called when devices report data through a custom topic to IoT Platform.
 * Input: A topic string. It is the topic for devices reporting messages.    
 * Input: A rawData byte [] array. It cannot be empty.
 * Output: A jsonObj dictionary. It cannot be empty.
 */
function transformPayload(topic, rawData) {
var jsonObj = {};
return jsonObj;
}

サンプルスクリプト

プロダクトのデータ形式カスタムの場合、TSL データを解析するスクリプトを記述する必要があります。 TSL データの解析の詳細については、「TSL データの解析例」をご参照ください。
var SELF_DEFINE_TOPIC_UPDATE_FLAG = '/user/update'  // Custom topic: /user/update
var SELF_DEFINE_TOPIC_ERROR_FLAG = '/user/update/error'  // Custom topic: /user/update/error
/*
  サンプルデータ
  Custom Topic:/user/update for reporting data
Input parameters: topic:/{productKey}/{deviceName}/user/update, and bytes: 0x000000000100320100000000
  Output parameters:
  {
     "prop_float": 0,
     "prop_int16": 50,
     "prop_bool": 1,
     "topic": "/{productKey}/{deviceName}/user/update"
   }
 */
function transformPayload(topic, bytes) {
    var uint8Array = new Uint8Array(bytes.length);
    for (int i = 0; i < bytes.length; i++) {
        uint8Array[i] = bytes[i] & 0xff;
    }
    var dataView = new DataView(uint8Array.buffer, 0);
    var jsonMap = {};

    if(topic.includes(SELF_DEFINE_TOPIC_ERROR_FLAG)) {
        jsonMap['topic'] = topic;
        jsonMap['errorCode'] = dataView.getInt8(0)
    } else if (topic.includes(SELF_DEFINE_TOPIC_UPDATE_FLAG)) {
        jsonMap['topic'] = topic;
        jsonMap['prop_int16'] = dataView.getInt16(5);
        jsonMap['prop_bool'] = uint8Array[7];
        jsonMap['prop_float'] = dataView.getFloat32(8);
    }

    return jsonMap;
}