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

IoT Platform:カスタムスクリプトを作成する

最終更新日:Apr 09, 2025

データ解析タスクにおいて、ソースノードの Topic データ形式が生データの場合、解析にカスタムスクリプトを使用できます。IoT Platform は、JavaScript(ECMAScript 5)、Python 2.7、および PHP 7.2 スクリプトをサポートしています。このトピックでは、カスタム Topic データ解析スクリプトを作成するためのテンプレートと例を紹介します。

JavaScript スクリプト例

スクリプトテンプレート

/**
 * デバイスから送信されたデータを、IoT Platform に送信する際にカスタム Topic に変換し、JSON 形式に変換します。
 * 入力パラメーター: data、byte[] 配列、空であってはなりません。
 * 出力パラメーター: jsonObj、オブジェクト、空であってはなりません。
 */
function executeScript(data) {
    var jsonObj = {};
    return jsonObj;
}

スクリプト例

/*
  サンプルデータ:
  カスタム Topic:
     /user/update、データの送信先。
  入力パラメーター:
     data: 0x000000000100320100000000
  出力パラメーター:
    {
        "prop_float": 0,
        "prop_int16": 50,
        "prop_bool": 1
    }
 */
function executeScript(data) {
    var uint8Array = new Uint8Array(data.length);
    for (var i = 0; i < data.length; i++) {
        uint8Array[i] = data[i] & 0xff;
    }
    var dataView = new DataView(uint8Array.buffer, 0);
    var jsonMap = {};
    jsonMap['prop_int16'] = dataView.getInt16(5);
    jsonMap['prop_bool'] = uint8Array[7];
    jsonMap['prop_float'] = dataView.getFloat32(8);

    return jsonMap;
}

Python スクリプト例

スクリプトテンプレート

# デバイスから送信されたデータを、IoT Platform に送信する際にカスタム Topic に変換し、JSON 形式に変換します。
# 入力パラメーター: data、リスト、要素は整数でなければならず、リストは空にできません。
# 出力パラメーター: jsonObj、辞書。
def execute_script(data):
   jsonObj = {}
   return jsonObj

スクリプト例

# coding=UTF-8

#  サンプルデータ:
#  カスタム Topic: /user/update、データの送信先。
#  入力パラメーター:
#     data: 0x000000000100320100000000
#  出力パラメーター:
#  {
#     "prop_float": 0,
#     "prop_int16": 50,
#     "prop_bool": 1
#   }
def execute_script(data):
    uint8Array = []
    for byteValue in data:
        uint8Array.append(byteValue & 0xff)

    jsonMap = {}
    jsonMap['prop_int16'] = bytes_to_int(uint8Array[5:7])
    jsonMap['prop_bool'] = bytes_to_int(uint8Array[7:8])
    jsonMap['prop_float'] = bytes_to_int(uint8Array[8:])

    return jsonMap

# バイト配列を整数に変換します。
def bytes_to_int(bytes):
    result = ''.join(['%02X' % i for i in bytes])
    return int(result, 16)

PHP スクリプト例

スクリプトテンプレート

<?php
/**
 * デバイスから送信されたデータを、IoT Platform に送信する際にカスタム Topic に変換し、JSON 形式に変換します。
 * 入力パラメーター: $data、通常の配列、要素は整数でなければなりません。
 * 出力パラメーター: $jsonObj、連想配列、キーは文字列でなければならず、「10」のような数値文字であってはなりません。また、空であってはなりません。
 */
function executeScript($data)
{
    $jsonObj = array();
    return $jsonObj;
}
    重要

    グローバル変数または静的変数は、結果に一貫性がなくなる可能性があるため、使用しないでください。

    スクリプトは、2 の補数演算を使用してデータを処理します。[-128,127] の範囲の値は、[0,255] に補完されます。たとえば、-1 は 255(10 進数)に補完されます。

    カスタムプロトコル解析関数 executeScript の入力パラメーターは、整数配列です。各要素は、0xFF とのビット単位の AND 演算を行い、補数を導出する必要があります。この関数は、キーに配列以外の文字が含まれている連想配列を返します(たとえば、キーが「10」の場合、PHP 配列はそれを整数 10 として解釈します)。

    PHP 実行環境では、厳密な例外処理が必要です。エラーが発生すると例外がスローされ、後続のコードの実行が停止します。堅牢性を確保するために、例外を適切にキャッチして管理してください。

スクリプト例

<?php
/*
  サンプルデータ:
  カスタム Topic:
     /user/update、データの送信先。
  入力パラメーター:
     data: 0x000000000100320100000000
  出力パラメーター:
  {
     "prop_float": 0,
     "prop_int16": 50,
     "prop_bool": 1
   }
 */
function executeScript($bytes)
{
    $data = array();
    $length = count($bytes);
    for ($i = 0; $i < $length; $i++) {
        $data[$i] = $bytes[$i] & 0xff;
    }

    $jsonMap = array();
    $jsonMap['prop_int16'] = getInt16($data, 5);
    $jsonMap['prop_bool'] = $data[7];

    return $jsonMap;
}

function getInt16($bytes, $index)
{
    $array = array_slice($bytes, $index, 2);
    return hexdec(implode('', array_map('dechex', $array)));
}

function byteArrayToHexString($data)
{
    return implode('', array_map(function($byte) {
        return str_pad(dechex($byte), 2, '0', STR_PAD_LEFT);
    }, $data));
}