历史实体属性数据

本文将为你介绍使用DTS进行时序数据记录(属性),利用时序数据制作看板的流程。时序数据记录(事件)可参考此流程。包含以下几个流程: 创建数据推送函数、创建任务、创建时序数据接口、数据应用。

准备事项

1.注册数字孪生服务DTService(以下简称DTS)账户 2.准备APIFox,用于模拟设备属性、事件上报。 3.已成功创建产品”温湿度传感器“。请参考HTTP协议实体接入(透传/自定义)

示例

创建数据推送函数(时序数据记录)

在任务管理-数据推送函数下,创建一个名为”温湿度属性记录“的函数,请求类型需设置为时序数据记录(属性)。时序数据名称可自定义,用于标识时序数据,请按照函数真实含义命名。创建完成后,进入编辑脚本页面。

null

编辑脚本

在脚本内编辑,需要被记录下来的温湿度传感器的属性。选择记录温湿度传感器的temperature humidity batteryLevel。记录多个属性时,使用,逗号进行分割即可。如果需要对记录内容进行逻辑处理计算,可在sequenceAbstractCalculate函数中编写具体的逻辑。

/**
 * 时序数据记录,定义需要记录的摘要参数,从当前上行结构化数据中取值。
 * @param {Array<string>} abstractParam - 摘要参数集合,当为属性上报时摘要参数标识为产品属性标识符,当为事件上报时摘要参数标识为事件输出参数标识符(在计算过程中,如果需要记录新增摘要数据,可直接返回摘要对象并在abstractParam中声明变量)
 */
var abstractParam = ["temperature","humidity","batteryLevel"];

/**
 * 将摘要数据进行二次计算
 * @param {object} body - 入参 eg:{"sourceParam": {},"abstractParam":{}}
 * @param {object} body.sourceParam - 上行数据的固定属性,可用于摘要赋值计算等。
 * @param {string} body.sourceParam.messageId - 消息编号
 * @param {string} body.sourceParam.productId - 产品唯一标识
 * @param {string} body.sourceParam.productName - 产品名称
 * @param {string} body.sourceParam.sourceType - 资源类型 0 动态资源 1 静态资源
 * @param {string} body.sourceParam.deviceId - 设备编号
 * @param {string} body.sourceParam.deviceSecret - 设备密钥,与deviceId同时存在
 * @param {string} body.sourceParam.deviceName - 设备名称
 * @param {string} body.sourceParam.deviceStatus - 设备状态 0 未启用 1 已启用
 * @param {string} body.sourceParam.location - 设备位置纬经度(默认0 0 0 = latitude longitude elevation)
 * @param {string} body.sourceParam.identifier - 事件标识符,事件上报时存在,否则Val为空
 * @param {string} body.sourceParam.name - 功能名称,事件上报时存在,否则Val为空
 * @param {string} body.sourceParam.type - 事件类型 0 信息 1 告警,事件上报时存在,否则Val为空
 * @param {string} body.sourceParam.description - 事件描述,事件上报时存在,否则Val为空
 * @param {string} body.sourceParam.timestamp - 上行数据传输时间。时间戳格式为数值,值为自GMT 1970年1月1日0时0分到当前时间点所经过的毫秒数
 * @param {string} body.sourceParam.templateId - 消息(事件、属性详情)模板唯一标识符
 * @param {string} body.sourceParam.templateURL - 消息(事件、属性详情)模板访问链接
 * @param {string} body.sourceParam.version - 版本号。若不传入此参数,则默认default
 * @param {object} body.sourceParam.payload - 验证解析后的上行数据
 * @param {object} body.abstractParam - 摘要对象,已根据上行数据赋值
 * @returns {object} abstractParam - 摘要对象
 */
function sequenceAbstractCalculate(body) {
  return body.abstractParam;
}

编写完成后,保存脚本。可以使用模拟输入检查脚本内容。启用”温湿度属性记录“的函数。

时序数据记录(事件)创建与编辑一致,需注意的是时序数据记录(事件)记录的内容为事件的输出参数。

创建任务

创建任务的目的是,在属性或事件发生时,通过任务触发执行脚本函数(时序数据记录),将需要记录下来的属性或事件输出参数记录到数据库中。

  1. 在任务管理页面,创建一个任务名为“记录温湿度属性“的任务。

任务逻辑

温湿度传感器全部设备发生属性上报事件 触发 执行 数据推送函数温湿度属性记录

  1. 创建完成后,进入编辑页面。根据任务逻辑编辑对应的规则。设定触发条件为属性触发:温湿度传感器设备发生属性上报,添加执行任务类型为”数据推送函数“,选择数据推送函数”温湿度属性记录“。
  2. 编辑完成后保存并开启任务。

null

模拟属性上报触发

使用APIFox模拟温湿度传感器实体属性上报。

数据应用

方式1:时序数据查询接口

创建时序查询接口

时序查询接口页面是将HTTP请求的请求体中的请求参数进行了可视化配置。页面中配置的内容实际都为查询时的请求参数。 在任务管理下进入时序数据查询接口页面。选择创建一个名为“温湿度属性查询”的接口。用于查询已通过时序数据记录的温湿度传感器属性。

进行创建之前需要在组织结构下,先将温度传感器实体通过孪生体进行管理。示例将其所有温度传感器实体使用孪生体“温度传感器”进行管理。

选择查询的孪生体为“温湿度传感器”,查询的目标时序数据记录为“温湿度属性记录”,查询内容为统计查询。并将查询结果按时间倒序排列。 设置完成后,点击保存并启用。

null

功能名称 含义
孪生体 查询指定孪生体下实体产生的时序数据
时序数据名称 查询指定的时序数据记录
时间范围 查询指定的时间范围内的时序数据记录
查询内容 查询的时序数据记录内容。 统计查询:统计时序数据记录的数量; 条件查询:查询满足条件的时序数据记录
查询方法 使用不同的查询方法对请求数据进行处理,提取出所需数据。 分组查询:对查询结果进行分组处理,支持按时序、产品、实体进行分组; 按时间排序:对查询结果按照时间的正序或逆序排列; 分页查询:查询指定页码的指定条目数的结果。

查看结果集范例

“查询温湿度属性”接口启用后,可点击查看结果集范例。结果集范例包含请求体示例和返回结果响应示例。通过查看结果集范例还能验证时序数据是否记录成功,响应结果中是否有内容。 完整的接口内容请参考时序数据查询接口。

null

结果集范例

{
    "request": {
        "intelligentSpacesIdList": [
            "bf029ce259a74835"
        ],
        "flag": 0,
        "abstractIdentifierList": [
            "Record"
        ],
        "queryMethod": 1,
        "abstractIdentifierPropertyCriteriaList": null,
        "queryCriteriaList": [
            {
                "queryCriteria": 2,
                "startTime": null,
                "endTime": null,
                "groupCriteria": null,
                "sortCriteria": 0,
                "currentPage": null,
                "pageSize": null
            }
        ]
    },
    "response": {
        "bf029ce259a74835": [
            {
                "resultId": "1eb9a1b696254f32",
                "productId": "Re8agKekkXw8Oczi",
                "addTime": "2025-07-22 15:21:24",
                "addUser": "system",
                "abstractDataId": "160abc8160194695",
                "title": "记录温湿度属性",
                "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                "deviceName": "温湿度传感器1751939165",
                "deviceStatus": 0,
                "deviceSecret": "9d4e0d3949134bd5",
                "abstractIdentifier": "Record",
                "payload": "temperature&28.86,humidity&57.17,batteryLevel&43",
                "location": "0 0 0"
            },
            {
                "resultId": "3239b0d4a7244229",
                "productId": "Re8agKekkXw8Oczi",
                "addTime": "2025-07-22 15:21:23",
                "addUser": "system",
                "abstractDataId": "8703096e95ef4431",
                "title": "记录温湿度属性",
                "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                "deviceName": "温湿度传感器1751939165",
                "deviceStatus": 0,
                "deviceSecret": "9d4e0d3949134bd5",
                "abstractIdentifier": "Record",
                "payload": "temperature&38.78,humidity&2.31,batteryLevel&88",
                "location": "0 0 0"
            },
            {
                "resultId": "b4c3a169713d4925",
                "productId": "Re8agKekkXw8Oczi",
                "addTime": "2025-07-22 15:21:22",
                "addUser": "system",
                "abstractDataId": "8c9cb82869924438",
                "title": "记录温湿度属性",
                "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                "deviceName": "温湿度传感器1751939165",
                "deviceStatus": 0,
                "deviceSecret": "9d4e0d3949134bd5",
                "abstractIdentifier": "Record",
                "payload": "temperature&14.32,humidity&24.85,batteryLevel&80",
                "location": "0 0 0"
            },
            {
                "resultId": "36889a3100044b60",
                "productId": "Re8agKekkXw8Oczi",
                "addTime": "2025-07-22 15:21:21",
                "addUser": "system",
                "abstractDataId": "2e69d7eb09b8422c",
                "title": "记录温湿度属性",
                "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                "deviceName": "温湿度传感器1751939165",
                "deviceStatus": 0,
                "deviceSecret": "9d4e0d3949134bd5",
                "abstractIdentifier": "Record",
                "payload": "temperature&8.14,humidity&16.84,batteryLevel&18",
                "location": "0 0 0"
            },
            {
                "resultId": "8b042827cf5845b7",
                "productId": "Re8agKekkXw8Oczi",
                "addTime": "2025-07-22 15:21:19",
                "addUser": "system",
                "abstractDataId": "01fc627180f1424d",
                "title": "记录温湿度属性",
                "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                "deviceName": "温湿度传感器1751939165",
                "deviceStatus": 0,
                "deviceSecret": "9d4e0d3949134bd5",
                "abstractIdentifier": "Record",
                "payload": "temperature&3.2,humidity&21.94,batteryLevel&52",
                "location": "0 0 0"
            },
            {
                "resultId": "24a17b1d0c7b4529",
                "productId": "Re8agKekkXw8Oczi",
                "addTime": "2025-07-22 15:21:14",
                "addUser": "system",
                "abstractDataId": "3504cb8b8bcb43e7",
                "title": "记录温湿度属性",
                "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                "deviceName": "温湿度传感器1751939165",
                "deviceStatus": 0,
                "deviceSecret": "9d4e0d3949134bd5",
                "abstractIdentifier": "Record",
                "payload": "temperature&36.95,humidity&43.72,batteryLevel&98",
                "location": "0 0 0"
            },
            {
                "resultId": "76be272476ac4a0e",
                "productId": "Re8agKekkXw8Oczi",
                "addTime": "2025-07-22 15:18:38",
                "addUser": "system",
                "abstractDataId": "45b6f1ad43bb44db",
                "title": "记录温湿度属性",
                "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                "deviceName": "温湿度传感器1751939165",
                "deviceStatus": 0,
                "deviceSecret": "9d4e0d3949134bd5",
                "abstractIdentifier": "Record",
                "payload": "temperature&-8.41,humidity&14.62,batteryLevel&90",
                "location": "0 0 0"
            }
        ]
    }
}

使用APIFox创建请求查询时序数据

第三方可通过时序数据查询接口获取时序数据记录,建立自己的数据展示应用。示例使用APIFox模拟第三方发送时序数据查询请求并获得响应的过程。

  1. 根据时序数据查询接口,在APIFox中编写时序数据查询接口的调用请求。
  2. 接口地址填写 http://192.168.100.38:48083/bv-microservice-digitaltwin-center/sceneLinkage/bvSpaceAbstractTemplate/findSpaceAbstractResultSet( 请求地址的IP值根据实际部署环境进行替换)的值,从结果集范例中复制request的内容至请求体中。修改查询时间范围为”2025-07-22“到”2025-07-23“。
  3. 接口准备完毕,点击发送。

发送请求体示例

{
    "intelligentSpacesIdList": [
        "bf029ce259a74835"
    ],
    "flag": 0,
    "abstractIdentifierList": [
        "Record"
    ],
    "queryMethod": 1,
    "abstractIdentifierPropertyCriteriaList": null,
    "queryCriteriaList": [
        {
            "queryCriteria": 2,
            "startTime": "2025-07-22",
            "endTime": "2025-07-23",
            "groupCriteria": null,
            "sortCriteria": 0,
            "currentPage": null,
            "pageSize": null
        }
    ]
}
  1. 获得DTS返回的响应结果。参数的详细含义可参考时序数据查询接口。

响应结果示例

{
    "code": 0,
    "message": "success",
    "info": {
        "request": {
            "intelligentSpacesIdList": [
                "bf029ce259a74835"
            ],
            "flag": 0,
            "abstractIdentifierList": [
                "Record"
            ],
            "queryMethod": 1,
            "abstractIdentifierPropertyCriteriaList": null,
            "queryCriteriaList": [
                {
                    "queryCriteria": 2,
                    "startTime": "2025-07-22",
                    "endTime": "2025-07-23",
                    "groupCriteria": null,
                    "sortCriteria": 0,
                    "currentPage": null,
                    "pageSize": null
                }
            ]
        },
        "response": {
            "bf029ce259a74835": [
                {
                    "resultId": "1eb9a1b696254f32",
                    "productId": "Re8agKekkXw8Oczi",
                    "addTime": "2025-07-22 15:21:24",
                    "addUser": "system",
                    "abstractDataId": "160abc8160194695",
                    "title": "记录温湿度属性",
                    "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                    "deviceName": "温湿度传感器1751939165",
                    "deviceStatus": 0,
                    "deviceSecret": "9d4e0d3949134bd5",
                    "abstractIdentifier": "Record",
                    "payload": "temperature&28.86,humidity&57.17,batteryLevel&43",
                    "location": "0 0 0"
                },
                {
                    "resultId": "3239b0d4a7244229",
                    "productId": "Re8agKekkXw8Oczi",
                    "addTime": "2025-07-22 15:21:23",
                    "addUser": "system",
                    "abstractDataId": "8703096e95ef4431",
                    "title": "记录温湿度属性",
                    "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                    "deviceName": "温湿度传感器1751939165",
                    "deviceStatus": 0,
                    "deviceSecret": "9d4e0d3949134bd5",
                    "abstractIdentifier": "Record",
                    "payload": "temperature&38.78,humidity&2.31,batteryLevel&88",
                    "location": "0 0 0"
                },
                {
                    "resultId": "b4c3a169713d4925",
                    "productId": "Re8agKekkXw8Oczi",
                    "addTime": "2025-07-22 15:21:22",
                    "addUser": "system",
                    "abstractDataId": "8c9cb82869924438",
                    "title": "记录温湿度属性",
                    "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                    "deviceName": "温湿度传感器1751939165",
                    "deviceStatus": 0,
                    "deviceSecret": "9d4e0d3949134bd5",
                    "abstractIdentifier": "Record",
                    "payload": "temperature&14.32,humidity&24.85,batteryLevel&80",
                    "location": "0 0 0"
                },
                {
                    "resultId": "36889a3100044b60",
                    "productId": "Re8agKekkXw8Oczi",
                    "addTime": "2025-07-22 15:21:21",
                    "addUser": "system",
                    "abstractDataId": "2e69d7eb09b8422c",
                    "title": "记录温湿度属性",
                    "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                    "deviceName": "温湿度传感器1751939165",
                    "deviceStatus": 0,
                    "deviceSecret": "9d4e0d3949134bd5",
                    "abstractIdentifier": "Record",
                    "payload": "temperature&8.14,humidity&16.84,batteryLevel&18",
                    "location": "0 0 0"
                },
                {
                    "resultId": "8b042827cf5845b7",
                    "productId": "Re8agKekkXw8Oczi",
                    "addTime": "2025-07-22 15:21:19",
                    "addUser": "system",
                    "abstractDataId": "01fc627180f1424d",
                    "title": "记录温湿度属性",
                    "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                    "deviceName": "温湿度传感器1751939165",
                    "deviceStatus": 0,
                    "deviceSecret": "9d4e0d3949134bd5",
                    "abstractIdentifier": "Record",
                    "payload": "temperature&3.2,humidity&21.94,batteryLevel&52",
                    "location": "0 0 0"
                },
                {
                    "resultId": "24a17b1d0c7b4529",
                    "productId": "Re8agKekkXw8Oczi",
                    "addTime": "2025-07-22 15:21:14",
                    "addUser": "system",
                    "abstractDataId": "3504cb8b8bcb43e7",
                    "title": "记录温湿度属性",
                    "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                    "deviceName": "温湿度传感器1751939165",
                    "deviceStatus": 0,
                    "deviceSecret": "9d4e0d3949134bd5",
                    "abstractIdentifier": "Record",
                    "payload": "temperature&36.95,humidity&43.72,batteryLevel&98",
                    "location": "0 0 0"
                },
                {
                    "resultId": "76be272476ac4a0e",
                    "productId": "Re8agKekkXw8Oczi",
                    "addTime": "2025-07-22 15:18:38",
                    "addUser": "system",
                    "abstractDataId": "45b6f1ad43bb44db",
                    "title": "记录温湿度属性",
                    "deviceId": "970bdf41-7818-4718-b00e-eb14a08b6372",
                    "deviceName": "温湿度传感器1751939165",
                    "deviceStatus": 0,
                    "deviceSecret": "9d4e0d3949134bd5",
                    "abstractIdentifier": "Record",
                    "payload": "temperature&-8.41,humidity&14.62,batteryLevel&90",
                    "location": "0 0 0"
                }
            ]
        },
        "interfacePath": "/bv-microservice-digitaltwin-center/sceneLinkage/bvSpaceAbstractTemplate/findSpaceAbstractResultSet",
        "requestType": 1,
        "intelligentSpacesTree": {
            "bf029ce259a74835": {
                "intelligentSpacesId": "bf029ce259a74835",
                "intelligentSpacesParentId": null,
                "intelligentSpacesParentName": null,
                "intelligentSpacesName": "温湿度传感器",
                "intelligentSpacesCategory": 0,
                "intelligentSpacesType": 2,
                "intelligentSpacesJointId": null,
                "intelligentSpacesCreateMode": 0,
                "intelligentSpacesReferenceId": null,
                "intelligentSpacesDescription": null,
                "intelligentSpacesSequence": null,
                "subordinateIntelligentSpacesList": null,
                "subordinateIntelligentSpacesCount": null,
                "intelligentSpacesResourceList": null,
                "intelligentSpacesResourceCount": null,
                "hasStructIntelligentSpacesParent": null,
                "isSubscribed": null
            }
        }
    }
}

方式2:低代码设计器图表

DTS数据孪生架构提供快速接入查看DTS设备数据的平台功能低代码设计器,详细可视化功能可查看《BigView低代码设计器教程》。