Appearance
物模型重要配置项
本章讲解物模型里几个重要的配置项,它们用于对采集数据做进一步的解析与加工,包含值解析器脚本、比特位类型、json 类型、计算属性脚本四部分。前三者作用于"采集时"(把设备上报的原始值转成业务可用的值),计算属性脚本作用于"采集后"(对已解析好的属性值做二次计算)。
值解析器脚本
菜单:脚本引擎 → 属性解析
值解析器用于模型属性的值解析,通过脚本对采集到的原始数据进行处理后再入库。它是一个列表式管理页面,保存后自动注册成属性可选的"值解析器",可在物模型属性的"值解析器"下拉中选用。
配置项
| 字段 | 说明 | 是否必填 |
|---|---|---|
| 解析器名称 | 解析器的名称,会作为属性"值解析器"下拉项显示 | 必填 |
| 脚本语言 | 选择 javascript 或 禁用(disabled) | 必填 |
| 备注 | 解析器用途说明 | 选填 |
| 脚本内容 | 在脚本编辑器中编写解析逻辑 | 必填 |
脚本函数
脚本入口函数固定为 resolver,支持 ECMAScript 5.1 规范:
javascript
/**
* 对采集上来的数据进行解析
* @param value 采集的原始值
* @param model 模型属性配置
* @param methods 常用方法
* @return Object 解析后的值(methods.addRealtimeData 的值优先使用)
*/
function resolver(value, model, methods) {
return value;
}可用方法(methods)
| 方法 | 说明 |
|---|---|
methods.addRealtimeData(model, field, value) | 增加实时属性数据(仅 group 类型属性支持,用于动态拆出多个子属性值) |
methods.isAttrField(model, field) | 判断当前是否为指定 field 的模型属性 |
methods.toHex/toBytes/toString(value) | 类型转换 |
methods.isBytes/isNull/isNumber(value) | 类型判断 |
methods.getInt/getShort/getLong/getFloat/getDouble/getByte/getString/getLength(...) | 字节数组按偏移取值 |
methods.info/warn/error(...) | 打印运行日志(可在"运行日志"中查看) |
操作步骤
- 进入 脚本引擎 → 属性解析,点击"新增"
- 填写解析器名称、选择脚本语言为 javascript,编写
resolver函数 - 点击"提交",脚本自动注册为可用解析器
- 在产品配置 → 物模型 → 属性模型中编辑属性,把"值解析器"下拉切换为该解析器
- 列表行可通过"已绑定列表"查看被哪些产品属性使用;被使用的脚本需先解除绑定才能删除
说明:
DEFAULT是系统内置默认解析器,负责基本数据类型转换(数字、日期等),不可替换或删除。
比特位类型
位置:产品配置 → 物模型 → 属性模型 → 数据类型选 bit(比特位)
比特位类型是容器类型,用于把设备上报的一个整数值按二进制位拆解成多个布尔(或其它)子属性,适合处理状态字、故障位这类"一个寄存器多个开关位"的场景。
子属性配置
数据类型选择 bit 后,先保存该属性,再进入属性详情的**"属性值配置"**选项卡逐行添加子属性:
| 字段 | 说明 |
|---|---|
| 名称 | 下拉选择另一个已定义的模型属性(不能选 bit、json、group 类型),采集出来的位值写入该属性 |
| 字段 | 由所选属性自动带出,只读 |
| 数据类型 | 由所选属性自动带出,只读 |
| 比特位 | 在"Json路径/比特位/值"列填写该子属性对应的位号(如 1、2、3-4 …),位号从 1 开始,填 0 会取错位 |
采集行为
采集时平台把 bit 属性的原始整数值按位提取,每个配置的位号取出对应的位值,写入其绑定的子属性,作为独立的属性数据展示。
位号规则:
- 从 1 开始编号 — 位号
1对应二进制最低位,不存在位号0 - 从右往左数 — 即从二进制的低位(最低有效位)往高位数
- 支持位段 — 写成
起始位-结束位(如3-4),取出这几位组成的数值(如原始值0b10100,位段3-5取出101= 5) - 子属性数据类型为布尔时,取出的值大于 0 即为
true
以原始值 6(二进制 0110)为例,按位拆开是这样:
原始值 6 = 二进制 0110
位号(从右往左数): 4 3 2 1
二进制位: 0 1 1 0
│ │
│ └── 位号2 取出 1
└────── 位号3 取出 1位号 1 取出 0,位号 2 取出 1,位号 3 取出 1;位段 2-3 则把中间两位 11 整体取出,得到数值 3。
注意: 容器类型(bit / json / group)本身不显示具体值,只展示拆解出的子字段;且容器类型属性不支持告警/指标配置。
json 类型
位置:产品配置 → 物模型 → 属性模型 → 数据类型选 json(json类型)
json 类型也是容器类型,用于把设备上报的一段 JSON 报文,按 JSONPath 提取其中的字段并映射到多个子属性,适合 MQTT 等以 JSON 上报的设备。
子属性配置
数据类型选择 json 后,先保存该属性,再进入**"属性值配置"**选项卡逐行添加子属性映射:
| 字段 | 说明 |
|---|---|
| 名称 | 下拉选择另一个已定义的模型属性(不能选 json、group 类型) |
| 字段 | 由所选属性自动带出,只读 |
| 数据类型 | 由所选属性自动带出,只读 |
| Json 路径 | 在"Json路径/比特位/值"列填写 JSONPath 表达式(如 $.voltage、$.data[0].temp) |
采集行为
采集时平台解析上报的 JSON 报文,按每个子属性配置的 JSONPath 取出对应字段值,写入其绑定的子属性。每个子属性可以独立配置自己的精度、增益、值解析器等。
注意: JSONPath 使用 fastjson 语法(支持
$.field、$.array[0]等);json、group 类型不能作为子属性;容器类型属性同样不支持告警/指标配置。
计算属性脚本
位置:产品配置 → 物模型 → 计算属性 选项卡
计算属性脚本在一次采集完成后执行,对已解析好的业务值做二次计算,生成新的属性值(如系数换算、多属性汇总、累加统计等)。它与值解析器的区别是:值解析器在采集时处理单个属性的原始值,计算属性在采集完成后可跨多个属性做整体计算。
使用方法
- 该选项卡仅在产品开启计算属性后显示(
calcLanguage= javascript) - 左侧脚本编辑器中编写 JavaScript 脚本,通过
methods对象读写属性值 - 右侧展示可用方法列表供参考
- 底部切换
javascript / 禁用,点击"保存"生效
注意: 保存计算脚本前需要先停用产品,否则无法保存。
可用方法(methods)
| 方法 | 说明 |
|---|---|
methods.isSuccess() | 本次是否采集成功 |
methods.isDevice(uid) | 是否为指定 uid 的设备 |
methods.getValue(field) | 获取当前设备指定属性的值 |
methods.getInt/getFloat/getDouble/getString(field) | 按类型获取当前设备属性值 |
methods.getValue(uid, field) | 获取指定设备的属性值 |
methods.addValue(field, value) | 为指定属性添加值(属性须已在物模型中定义) |
methods.updateValue(field, value) | 更新指定属性的值(仅能更新已存在的值) |
methods.info/warn/error(...) | 打印运行日志 |
示例
javascript
// 脉冲数 × 系数 = 流量
if (methods.isSuccess()) {
var pulse = methods.getInt("pulse");
methods.updateValue("flow", pulse * 0.01);
}说明: 脚本执行失败会被捕获并记录错误日志,不影响正常采集流程;脚本中访问的属性必须已在物模型属性中定义。
