Skip to content

物模型重要配置项

本章讲解物模型里几个重要的配置项,它们用于对采集数据做进一步的解析与加工,包含值解析器脚本比特位类型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(...)打印运行日志(可在"运行日志"中查看)

操作步骤

  1. 进入 脚本引擎 → 属性解析,点击"新增"
  2. 填写解析器名称、选择脚本语言为 javascript,编写 resolver 函数
  3. 点击"提交",脚本自动注册为可用解析器
  4. 产品配置 → 物模型 → 属性模型中编辑属性,把"值解析器"下拉切换为该解析器
  5. 列表行可通过"已绑定列表"查看被哪些产品属性使用;被使用的脚本需先解除绑定才能删除

说明: DEFAULT 是系统内置默认解析器,负责基本数据类型转换(数字、日期等),不可替换或删除。

比特位类型

位置:产品配置 → 物模型 → 属性模型 → 数据类型选 bit(比特位)

比特位类型是容器类型,用于把设备上报的一个整数值按二进制位拆解成多个布尔(或其它)子属性,适合处理状态字、故障位这类"一个寄存器多个开关位"的场景。

子属性配置

数据类型选择 bit 后,先保存该属性,再进入属性详情的**"属性值配置"**选项卡逐行添加子属性:

字段说明
名称下拉选择另一个已定义的模型属性(不能选 bit、json、group 类型),采集出来的位值写入该属性
字段由所选属性自动带出,只读
数据类型由所选属性自动带出,只读
比特位在"Json路径/比特位/值"列填写该子属性对应的位号(如 123-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 类型不能作为子属性;容器类型属性同样不支持告警/指标配置。

计算属性脚本

位置:产品配置 → 物模型 → 计算属性 选项卡

计算属性脚本在一次采集完成后执行,对已解析好的业务值做二次计算,生成新的属性值(如系数换算、多属性汇总、累加统计等)。它与值解析器的区别是:值解析器在采集时处理单个属性的原始值,计算属性在采集完成后可跨多个属性做整体计算。

使用方法

  1. 该选项卡仅在产品开启计算属性后显示(calcLanguage = javascript)
  2. 左侧脚本编辑器中编写 JavaScript 脚本,通过 methods 对象读写属性值
  3. 右侧展示可用方法列表供参考
  4. 底部切换 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);
}

说明: 脚本执行失败会被捕获并记录错误日志,不影响正常采集流程;脚本中访问的属性必须已在物模型属性中定义。

下一步