すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:スクリプト構文

最終更新日:Mar 27, 2025

IoT Platform は、複雑なメッセージデータを処理し、クラウドサービス間の通信を容易にするためのパーサーを提供します。パーサーは、メッセージコンテンツの取得、データ形式の変換、およびデータの転送に使用されます。パーサーは、文字列、JSON 形式のデータ、およびバイナリデータを処理できます。このトピックでは、パーサースクリプトの記述方法について説明します。

背景情報

IoT Platform は、トピック内のデータの形式に基づいてデータを処理および送信します。データ形式の詳細については、「データ形式」をご参照ください。

IoT Platform によって提供されるパーサーは、JavaScript 構文に類似した構文を使用します。 JavaScript 構文に基づいてパーサースクリプトを記述できます。ただし、パーサーはすべての JavaScript 構文をサポートしているわけではありません。次のセクションでは、スクリプトの記述方法について説明します。

スクリプトを記述する

次の手順を実行して、スクリプトを記述できます。

  1. payload() 関数を使用して、デバイスによって送信されたデータを取得し、JSON 形式のデータに変換します。
    var data = payload("json");
    重要 解析する送信済みデータは、JSON 配列またはネストされた JSON データに変換する必要があります。
  2. フィールドを定義し、ペイロードから取得したプロパティ値に設定します。
    • 識別子を使用したフィールドの定義方法とデータ型の設定方法の詳細については、「識別子」セクションと「データ型」セクションを参照してください。
    • スクリプトで JSONPath 式または getOrNull() 関数を使用して、フィールド値を取得できます。 JSONPath 式または LanguageManual UDFgetOrNull()

      次のサンプル スクリプトでは、getOrNull(data, "items", "Humidity", "value"); を使用して値 25 を取得し、data.items.Temperature.value を使用して値 38 を取得し、data.iotId を使用して値 JCp9*** を取得できます。

    重要 スクリプトを使用して、送信されたデバイスデータから特定のフィールド値を取得する場合:
    • フィールドの識別子が数字で始まる場合は、getOrNull() 関数を使用する必要があります。 JSONPath 式はサポートされていません。たとえば、サンプルスクリプトでは、getOrNull(data, "items", "2Co", "value")102Codata.items.2Co.value 関数のみを使用して、 フィールドの値 を取得できます。 式はサポートされていません。
    • 取得するフィールドが送信されたデバイスデータに存在しない場合は、次のいずれかのシナリオが発生する可能性があります。
      • null 関数を使用すると、値 が返され、スクリプトは引き続き実行できます。
      • JSONPath 式を使用すると、ヌルポインタが表示され、スクリプトの実行が停止します。

    ビジネス要件に基づいてデータを処理したり、計算を実行したりすることもできます。パーサースクリプトでサポートされている演算子と関数の詳細については、「演算子」と「関数」をご参照ください。

  3. 関数を使用してデータを転送します。

    このような関数の詳細については、「宛先にデータを転送する」をご参照ください。

    また、制御文を使用してデータ転送条件を設定することもできます。次のサンプルスクリプトでは、if 文を使用して条件を設定しています。パーサースクリプトでサポートされている制御文の詳細については、「制御文」セクションをご参照ください。

サンプル スクリプト

次のプロパティデータが送信されます。

{
    "deviceType": "CustomCategory",
    "iotId": "JCp9***",
    "requestId": "1626948228247",
    "checkFailedData": {

    },
    "productKey": "a1o***",
    "gmtCreate": 1626948134445,
    "deviceName": "Device1",
    "items": {
        "Temperature": {
            "value": 38,
            "time": 1626948134319
        },
        "Humidity": {
            "value": 25,
            "time": 1626948134319
        },
        "2Co": {
            "value": 10,
            "time": 1626948134319
        }
    }
}

次のスクリプトは、送信されたデータを解析および処理するために使用されます。

// payload() 関数を使用して、デバイスによって送信されたデータを取得し、JSON 形式のデータに変換します。
var data = payload("json");
// 送信された温度と湿度の値をフィルタリングします。
var h = getOrNull(data, "items", "Humidity", "value");
var t = data.items.Temperature.value;
var c = getOrNull(data, "items", "2Co", "value");
// データ転送ルールを設定します。温度値が 38 より大きい場合、ルールがトリガーされて ApsaraDB RDS にデータが送信されます。
// ApsaraDB RDS テーブルには、id(自動インクリメント プライマリキー)、deviceName、temperature、humidity、2Co、および time の各列が含まれています。writeRds() メソッドを呼び出し、メソッドで複数の <列名>:<値> ペアを指定して、指定された列に値を書き込むことができます。
if (t > 38) {
    writeRds(1000, {"deviceName":deviceName(), "temperature":t, "humidity":h, "2Co":c, "time":timestamp()});
}

識別子

スクリプトで定数、変数、およびカスタムフィールドを定義するには、識別子を使用する必要があります。識別子には、文字、数字、およびアンダースコア(_)を含めることができます。ただし、識別子は数字で始めることはできません。

次のキーワードと予約語は識別子として使用できません。

  • キーワード:forbreakcontinueifelsetruefalsevarnewnullreturn、、、、、、、、、、および 。
  • 予約語: breakdoinstanceoftypeofcasecatchfinallyvoidswitchwhiledebuggerfunctionthiswithdefaultthrowdeleteintryasfromclassenumextendssuperconstexportimportawaitimplementsletletprivatepublicinterfacepackageprotectedstatic、および yield

データ型

数値、ブール値、文字列、バイト、マップ、および配列は、スクリプトの定数、変数、およびカスタムフィールドでサポートされているデータ型です。

定数の値は null にすることができます。数値定数でサポートされているデータ型には、10 進整数、16 進整数、および浮動小数点数が含まれます。

制御ステートメント

IoT Platform は、for 文と if...else 文をサポートしています。for 文は、break キーワードと continue キーワードをサポートしています。

重要 for宛先にデータを送信する ステートメントを使用してデータ転送関数を繰り返し実行する場合、ループの回数は 100 を超えることはできません。データ転送関数の詳細については、「」をご参照ください。

演算子

  • 論理演算子:&&||

    論理条件で指定されたブール値以外の値の場合、null 値は false を示し、その他の値は true を示します。たとえば、null && "x" は false を返し、null || "x" は true を返します。

  • 算術演算子: */%+、および -

    数値データ型のみがサポートされています。それ以外の場合は、エラーが発生します。

  • 比較演算子: >=><<===、および != です。== 比較演算子は数値のみをサポートします。

コメント

複数行コメント (/* ${comments}*/) と単一行コメント (// ${comments}) がサポートされています。

関連情報

  • スクリプトでサポートされている関数の詳細については、「関数」をご参照ください。
  • パーサースクリプトを設定してデータを転送する例の詳細については、データ転送の例 ディレクトリのドキュメントを参照してください。