このトピックでは、Thing Specification Language (TSL) モデルを使用してデバイスとIoT Platform間の通信を可能にする方法に関するよくある質問 (FAQ) に対する回答を提供します。
TSLモデルファイルをインポートするときに検証が失敗した場合はどうすればよいですか?
発行
次の図に示すように、TSLモデルファイルをインポートすると検証エラーが発生します。
解決策
検証エラーを修正するには、次のソリューションを使用します。
解決策1: TSLモデルファイルの形式を確認し、ファイルがJSON形式であることを確認します。
解決策2: [ダウンロードして表示] をクリックしてerrors.txtファイルを取得します。 errors.txtファイルに基づいて問題のトラブルシューティングと解決を行います。
errors.txtファイルの詳細については、次のサンプルファイルをご参照ください。
サンプルTSLモデルファイル:
{ "スキーマ":"https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json" 、 "profile":{ "productKey":"a1Jk ***" }, "services":[], "properties": 1, "events": [] 、 "functionBlockId": "** mtest "、 "functionBlockName": "カスタムモジュール1" }
サンプルerrors.txtファイル:
[ { "path": [ "プロパティ" ], "property": "instance.properties" 、 "message": "配列型ではない" 、 "schema": { "type": "array"、 "items": { "$ref": "#/definition /propertyDefinition" } }, "instance": 1, "name": "type", "argument": [ 「配列」 ], "stack": "instance.propertiesは配列型ではありません" }, { "path": [ "functionBlockId" ], "property": "instance.functionBlockId" 、 "message": "パターンと一致しません \" ^[_a-zA-Z0-9]{1,30 }$\ "" 、 "schema": { "type": "string"、 "pattern": "^[_a-zA-Z0-9]{1,30}$" }, "instance": "** mtest "、 "name": "パターン" 、 "引数": "^[_a-zA-Z0-9]{1,30}$" 、 "stack": "instance.functionBlockIdがパターンと一致しない \" ^[_a-zA-Z0-9]{1,30 }$\ "" } ]
パラメーター
説明
パス
エラーのパス。 この例では、次のエラーが検出されます。
// propertiesパラメーターの値は配列ではありません。 "path": [ "プロパティ" ] // functionBlockIdパラメーターの値に無効な文字が含まれています。 "path": [ "functionBlockId" ]
property
"path" の無効なプロパティ。
たとえば、
"path": ["functionBlockId" ]
では、instance.functionBlockId
プロパティの値が無効です。message
エラーメッセージを示します。
たとえば、
"path": ["functionBlockId" ]
では、instance.functionBlockIdプロパティのエラーメッセージdoes not match pattern \"^[_a-zA-Z0-9]{1,30 }$\"
が返されます。schema
TSLモデルファイルの検証に使用されるルール。
たとえば、
"path": ["functionBlockId" ]
では、type
とpattern
のルールが使用されます。ルールの詳細については、「schema」をご参照ください。
インスタンス
検証されたオブジェクト。
たとえば、
"path": ["functionBlockId" ]
では、"functionBlockId": "** mtest "
の設定が検証されます。name
検証で一致しないルールの名前。
たとえば、
"path": ["functionBlockId" ]
では、**mtest
の値がpattern
ルールと一致しません。引数
検証で一致しないルールの内容。
たとえば、
"path": ["functionBlockId" ]
では、パターン
ルールの内容は^[_a-zA-Z0-9]{1,30}$
です。スタック
プロパティパラメーターとメッセージパラメーターの連結値。
詳細は、「jsonschema」をご参照ください。
プロパティデータの送信、履歴データの送信、およびプロパティの複数の値の同時送信の違いは何ですか?
下表に違いを示します。
操作 | 説明 |
プロパティデータの送信 | デバイスは、そのプロパティデータのスナップショットをIoT Platformに送信します。 送信されたデータでは、タイムスタンプはオプションです。
|
過去の資産データを送信する | デバイスは、複数のプロパティの値をIoT Platformに送信します。 値は、同じ時点で記録される。 送信されたデータにタイムスタンプを指定する必要があります。 デバイスは、異なるタイムスタンプを有する複数のプロパティの値を一度に提示することができる。 |
プロパティの複数の値を一度に送信する | デバイスは、プロパティの複数の値をIoT Platformに送信します。 値は、異なる時点で記録される。 送信されたデータにタイムスタンプを指定する必要があります。 デバイスは、異なるタイムスタンプを有する複数のプロパティの値を一度に提示することができる。 |
デバイスがプロパティデータ、履歴データ、またはプロパティの複数の値を送信すると、IoT Platformはタイムスタンプに基づいてデータレコードを生成します。
コミュニケーショントピックとデータ形式の違い
トピックとデータ形式は、IoT Platformに送信されるデータの種類によって異なります。 詳細については、「デバイスはIoT Platformにプロパティデータを送信」、「デバイスはIoT Platformに過去のTSLデータを送信」、「デバイスは一度に複数のプロパティとイベントをIoT Platformに送信」をご参照ください。
例
この例では、温度プロパティのデータはデバイスによってIoT Platformに送信されます。
デバイスは、温度プロパティのスナップショット値を送信します。
デバイスは、次のtemperatureプロパティの値を、タイムスタンプとともに左から右に順番に送信します。
13:00
14:00
15:00
15:10
60
70
80
90
デバイスは、温度プロパティのスナップショット値100を送信します。 次のデータは、デバイスがデータの送信に使用する方法に基づいて表示されます。
タイムスタンプが存在しない場合、IoT Platformはデータが送信された時刻に基づいてタイムスタンプを生成します。 この例では、15:30:00が使用されます。 この場合、100はIoT Platformコンソールに温度プロパティの値として表示されます。 値100は、データレコード内の温度特性の最新の値でもある。
タイムスタンプ (たとえば、15:00:00) が指定されている場合、100は15:00:00のtemperatureプロパティの値として80を置き換えます。 この場合、100はIoT Platformコンソールに温度プロパティの値として表示されます。 データレコードのtemperatureプロパティの最新値は15:10:00に90です。
デバイスは、温度プロパティの履歴値を送信します。
デバイスは、温度特性の以下の履歴値を同時に送信します。
13:00
14:00
15:00
15:10
60
70
80
90
デバイスは、温度特性の以下の履歴値を同時に送信します。
13:10
14:10
100
200
データベースに書き込まれた最新の温度値は、温度プロパティの値としてIoT Platformコンソールに表示されます。 この例では、13:10:00の100が表示されるか、14:10:00の200が表示されます。 データレコードのtemperatureプロパティの最新値は15:10:00に90です。
デバイスがカスタムトピックを使用してTSLデータを送信した後、デバイスのTSLデータがIoT Platformコンソールで更新されないのはなぜですか。
デバイスは、カスタムトピックではなく、TSL通信トピックを使用してTSLデータを送信する必要があるためです。 詳細については、「トピック」をご参照ください。
デバイスから送信されたTSLデータを取得するにはどうすればよいですか。
TSLデータを取得するには、次のいずれかの方法を使用します。
サーバー側サブスクリプション: IoT Platformのサーバー側サブスクリプション機能を使用して、デバイスアップストリーム通知タイプのメッセージをサブスクライブできます。 次に、IoT Platformは、サブスクリプション設定に基づいて、製品内のすべてのデバイスから指定されたタイプのメッセージをサーバーに転送します。 サーバー側サブスクリプションを設定するには、次のいずれかの方法を使用します。
データ転送: ルールエンジンのデータ転送機能を使用して、デバイスデータを複数のAlibaba Cloudサービスに転送することで、データ転送ルールを設定できます。 サービスには、Message Service (MNS) 、ApsaraDB RDS、Tablestore (OTS) 、Function Compute、Lindorm、およびApache RocketMQ用のMessage Queueが含まれます。 詳細については、「データ転送 (旧バージョン) 」および「データ転送 (新バージョン) 」をご参照ください。
IoT Platform APIの操作
API
説明
デバイスのすべてのプロパティスナップショットを照会します。
指定されたデバイスによって送信された元のプロパティスナップショットを照会します。 これらのスナップショットには、指定されたTSLモデルによって検証および検証されないプロパティが含まれます。
指定されたデバイスによって送信された元のプロパティレコードを照会します。 これらのレコードには、指定されたTSLモデルによって検証され、検証されないプロパティが含まれます。
指定されたデバイスによって送信されたイベントレコードを照会します。 これらのレコードには、指定されたTSLモデルによって検証されたイベントと検証されなかったイベントが含まれます。
指定されたデバイスによって送信された元のサービスレコードを照会します。 これらのレコードには、指定されたTSLモデルによって検証されたサービスと検証されなかったサービスが含まれます。
デバイスの必要なプロパティ値を照会します。
指定された期間内のデバイスのプロパティのデータを照会します。
指定された期間内にデバイス内の複数のプロパティのデータを照会します。
デバイスの元のイベントレコードを照会します。
デバイスのサービス呼び出しレコードを照会します。
デバイスから送信されたTSLデータがIoT Platformコンソールに表示されないのはなぜですか。
送信されたTSLデータが検証を必要としないか、検証に失敗した場合、TSLデータはIoT Platformコンソールに表示されません。 デバイスがIoT PlatformにTSLデータを送信すると、IoT Platformは指定された検証タイプとTSL定義に基づいてデータを検証します。 デバイスのTSLデータを表示するには、次の手順を実行します。IoT Platformコンソールにログインし、TSLデータを表示するデバイスを見つけて、[操作] 列の [表示] をクリックします。 [デバイスの詳細] ページで、[TSLデータ] タブにTSLデータが表示されます。 詳細については、「TSLデータの検証」をご参照ください。
プロダクトを作成するときは、検証タイプを指定する必要があります。 詳細については、「プロダクトの作成」をご参照ください。
IoT PlatformがデバイスにTSLプロパティ設定要求と目的のプロパティ値を正常に送信した後にTSLデータが更新されない場合はどうすればよいですか。
この問題をトラブルシューティングするには、次の操作を実行します。
デバイス: デバイスがIoT Platformに接続されていることを確認します。 デバイスの接続方法の詳細については、「デバイスSDKのダウンロード」をご参照ください。
重要IoT Platformがデバイスプロパティを設定する要求をデバイスに正常に送信すると、要求は受信されますが、デバイスは要求を実行できません。 デバイスSDKがプロパティ設定要求に応答した後、デバイスは最新のプロパティ値を送信して、プロパティ値が変更されたことを証明する必要があります。
デバイスシミュレーターまたはMQTT.fxを使用してデバイスをシミュレートし、シミュレートしたデバイスをIoTプラットフォームに接続してから、デバイスのメッセージングをオンラインでデバッグすることもできます。 詳細については、以下のトピックをご参照ください。
IoTプラットフォーム:
[期待値の設定] および [期待値の設定] 操作を実行するために管理するプロパティの読み取りおよび書き込み権限があることを確認します。
TSLデータを含むメッセージが正しく解析できることを確認してください。
これにより、最新のTSLデータをIoT Platformコンソールの [TSLデータ] タブに表示できます。 詳細については、「TSLモデルとは」をご参照ください。 TSLデータを解析するためのスクリプトを送信します。
次の操作を実行して、デバイスがメッセージを受信したかどうかを確認できます。IoT Platformコンソールにログインし、管理するインスタンスを見つけて、[インスタンスの詳細] ページに移動します。 [メンテナンス]> [デバイスログ]> [クラウド実行ログ] を選択し、ログを表示します。 詳細については、「IoT Platformログ」をご参照ください。