9.1 APP設計
9.1.1 基本構造
APPの基本構造はJSON形式で定義され、以下のコアフィールドを含みます:
{
"code": "vip.woody.app.test1",
"name": "测试应用",
"logo": "",
"script": "",
"schema": "",
"pages": "",
"config": ""
}- フィールド説明
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
code |
String | ✅ | アプリケーションの一意の識別子。同じcodeでインストールすると既存のアプリケーションが上書きされます |
name |
String | ✅ | アプリケーション表示名 |
logo |
String | ❌ | アプリケーションアイコン、base64エンコーディングまたは画像URLをサポート |
script |
String | ❌ | アプリケーションロジックを制御するLuaバックエンドスクリプト。詳細はAPPバックエンドを参照 |
schema |
String | ❌ | エンコードされたJSON形式のアプリケーション定義 |
pages |
String | ❌ | エンコードされたJSON形式のフロントエンドページ定義 |
config |
String | ❌ | アプリケーションインストール後の設定情報 |
9.1.2 アプリケーション定義Schema
9.1.2.1 構造概要
構造概要
{
"data": [
{
"name": "products",
"readable": true,
"writable": false,
"type": "table",
"struct": [
{
"name": "device",
"type": "string"
},
{
"name": "value",
"type": "int"
},
{
"name": "delta",
"type": "int"
},
{
"name": "time",
"type": "int"
}
]
}
],
"input": [
{
"class": "cnc1",
"define": [
{
"code": "products",
"name": "产量",
"type": "int"
}
],
"title": "一类加工机床"
}
]
}9.1.2.2 dataフィールド定義
dataフィールドはアプリケーションのデータストレージ構造を定義し、配列形式を使用します。各要素には以下の属性が含まれます:
| フィールド | タイプ | 説明 |
|---|---|---|
name |
String | データテーブル名 |
readable |
Boolean | 読み取り可能かどうか |
writable |
Boolean | 書き込み可能かどうか |
type |
String | データタイプ、現在はtableのみサポート |
struct |
Array | テーブル構造定義 |
- 自動生成されたテーブルアクセスAPIのアクセス権限のみがreadableおよびwritableフィールドによって制御されます。バックエンドLuaスクリプトのデータアクセスは影響を受けません。
9.1.2.3 テーブル構造定義
struct 数组中每个字段包含:
name: フィールド名type: フィールドタイプ、以下のタイプをサポート:string文字列タイプint整数タイプfloat浮動小数点タイプ
9.1.2.3.1 自動生成されたAPIインターフェース
data定義に基づいて、システムは以下のRESTful APIインターフェースを自動的に公開します:
パスパラメータ
code: アプリケーション識別子table: データテーブル名id: レコードの一意の識別子データリストクエリ
GET /api/app/{code}/data/{table}
クエリパラメータ
| フィールド | タイプ | 默认值 | 説明 |
|---|---|---|---|
_start |
Number | 0 | 開始レコード位置 |
_limit |
Number | 10 | 返されるレコード数 |
{field} |
Any | - | 等値フィルタ、例:?value=1 |
>{field} |
Any | - | 以上フィルタ、例:?>value=1 |
<{field} |
Any | - | 以下フィルタ、例:?<value=1 |
order |
String | - | 昇順ソート、例:?order=value |
-order |
String | - | 降順ソート、例:?-order=value |
- レコード追加
POST /api/app/{code}/data/{table}
- 単一レコードクエリ
GET /api/app/{code}/data/{table}/{id}
- レコード更新
PUT /api/app/{code}/data/{table}/{id}
- レコード削除
DELETE /api/app/{code}/data/{table}/{id}
9.1.2.4 inputフィールド定義
inputフィールドはAPP内のデバイスとデバイスマッピング後のフィールドを定義します。設計の考え方は、1つのAppが複数の異なるタイプのデバイス(さまざまなPLCやCNCなど)を対象とする可能性があるため、一部の機能では異なるデバイスを1つのタイプのデバイスに抽象化する必要があり、設定時にマッピングするためにデバイスタイプをここで定義する必要があるためです:
{
"class": "cnc1",
"define": [
{
"code": "products",
"name": "产量",
"type": "int"
}
],
"title": "一类加工机床"
}| フィールド | タイプ | 説明 |
|---|---|---|
class |
String | デバイスタイプ |
title |
String | デバイスタイプ名 |
define |
Array | 変数定義 |
変数定義
| フィールド | タイプ | 説明 |
|---|---|---|
code |
String | 変数code |
name |
String | 変数名 |
type |
String | 変数のタイプ |
9.1.3 設定フィールドconfig
configフィールドは、アプリインストール後の設定内容を保存するために使用されます
9.1.3.2 deviceフィールド定義
deviceフィールドは、IoTBoXが収集したデバイスからAPP内のデバイスへのマッピングを定義し、配列形式を使用します
| フィールド | タイプ | 説明 |
|---|---|---|
code |
String | 機械Code |
class |
Boolean | App内のデバイスタイプ |
variable |
Array | マッピング変数定義 |
マッピング変数定義
| フィールド | タイプ | 説明 |
|---|---|---|
dst |
String | 元の変数code |
src |
Boolean | App内の変数code |
上記の設定の意味は、IoTBoX内で設定された収集デバイスM06をcnc1タイプとしてAppにマッピングし、M06が収集したcnc_productsをcnc1のproduct変数としてマッピングすることです。