资产指标

更新时间:
复制 MD 格式

资产指标开放接口说明和公式函数说明。

一、资产指标接口说明

1、 查询资产指标对应的设备资产的历史值

路径

/industry/asset/indicator/query/history/data

版本

1.0.0

请求参数

入参名称

数据类型

是否必须

缺省默认值

入参描述

assetTypeCode

string

是

资产类型编码

indicatorCode

string

是

资产指标编码

assetCode

string

是

资产编码

pageNo

integer

是

页码,从1开始

pageSize

integer

是

分页大小,最大200条

since

Long

否

开始时间,精度是毫秒

until

Long

否

结束时间,精度是毫秒

请求示例

{
 "assetCode": "Sk001",
 "pageNo": 1,
 "indicatorCode": "dca",
 "pageSize": 5,
 "assetTypeCode": "Skw001",
 "until": 1640846111022,
 "since": 1640846051022
}

响应参数

参数类型

数据类型

结构类型

参数描述

code

integer

响应码 200 成功

data

JSON

数组

data

-total

Integer

数量

-dataList

JSON数组

数组

--asset_code

字符串

资产编码

--ts

字符串

时间戳,格式:YYYY-MM-DD hh:mm:ss

--value

浮点/整形/字符串

响应示例

{
 "code": 200.0,
 "data": {
  "total": 5.0,
  "dataList": [{
   "asset_code": "Sk001",
   "value": 848320.0,
   "ts": "2021-12-30 14:29:40"
  }, {
   "asset_code": "Sk001",
   "value": 848319.0,
   "ts": "2021-12-30 14:29:39"
  }, {
   "asset_code": "Sk001",
   "value": 848318.0,
   "ts": "2021-12-30 14:29:38"
  }, {
   "asset_code": "Sk001",
   "value": 848317.0,
   "ts": "2021-12-30 14:29:37"
  }, {
   "asset_code": "Sk001",
   "value": 848316.0,
   "ts": "2021-12-30 14:29:36"
  }]
 }
}

响应失败示例

{
    "id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
    "code": 403,
    "message": "request forbidden.",
    "localizedMsg": "请求被禁止",
    "data": null
}

2、 查询资产指标对应设备资产的最新值

路径

/industry/asset/indicator/data/query

版本

1.0.0

请求参数

入参名称

数据类型

是否必须

缺省默认值

入参描述

assetTypeCode

string

是

资产类型编码

assetCode

string

是

资产编码

indicatorCode

string

否

资产指标编码,如果不为空,只查询该指标最新值

pageNo

integer

否

1

页码,从1开始

pageSize

integer

否

200

分页大小,最大200条

请求示例

{
 "assetCode": "Test1231001",
 "pageNo": 1,
 "pageSize": 5,
 "assetTypeCode": "test1231"
}

响应参数

参数类型

数据类型

结构类型

参数描述

code

integer

响应码 200 成功

data

JSON

数组

data

-total

Integer

数量

-dataList

JSON数组

数组

--code

字符串

资产指标编码

--name

字符串

资产指标名称

--ts

字符串

时间戳,格式:YYYY-MM-DD hh:mm:ss

--value

浮点/整形/字符串

最新值

响应示例

{
 "code": 200,
 "data": {
  "dataList": [{
   "code": "attr1_agg",
   "data": 60,
   "name": "attr1_agg",
   "ts": "2022-01-18 15:58:14"
  }],
  "total": 1
 }
}

响应失败示例

{
    "id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
    "code": 403,
    "message": "request forbidden.",
    "localizedMsg": "请求被禁止",
    "data": null
}

二、资产指标公式函数说明

function

重要

:

1 多技术属性联合计算,最多可以支持对三个技术属性计算。

2 #号只是操作界面提示符,当在资产指标公式输入框输入#符号时,前端会自动展示技术属性列表和对应的数据类型,然后直接选择即可,无需输入完整的技术属性编码。

1、数据转换

1.1、四则运算

例子:

1.8 * #XC_P0103B + 16

1.8  * #XC_P0103B + 1.2 * #XC_P0103A

#XC_P0103B + #XC_P0103A + #XC_P0103C

1.2、条件表达式

标准的CASE WHEN SQL表达式

例子:
CASE WHEN #XC_P0103B < 1000 THEN "S" WHEN #XC_P0103B < 2000 THEN "M" WHEN #XC_P0103B < 3000 THEN "L" ELSE "XL" END 

1.3、字符串转换

例子:

length(#XC_P0103B) 

concat(#XC_P0103B, "_test") 

upper(concat(#XC_P0103B, "_test"))

函数说明:

函数

示例

说明

concat

concat(col1...)

连接数组或字符串。 此函数接受任意数量的参数并返回 String 或 Array

endswith

endswith(col1, col2)

返回一个布尔值,该布尔值指示第一个 String参数是否以第二个 String 参数结尾。

format_time

format_time(col1, format)

将日期时间格式化为字符串。其中,若参数 col1 为兼容类型,则在格式化之前转换给DateTime类型

indexof

indexof(col1, col2)

返回第二个参数的第一个索引(从0开始),作为第一个参数中的子字符串。

length

length(col1)

返回提供的字符串中的字符数。

lower

lower(col1)

返回给定 String 的小写版本。

lpad

lpad(col1, 2)

返回 String,在左侧用第二个参数指定的空格数填充。

ltrim

ltrim(col1)

从提供的字符串中删除所有前导空格(制表符和空格)。

numbytes

numbytes(col1)

以提供的字符串的 UTF-8 编码返回字节数。

regexp_matches

regexp_matches(col1, regex)

如果字符串(第一个参数)包含正则表达式的匹配项,则返回 true。

regexp_replace

regexp_matches(col1, regex, str)

将第一个参数中所有出现的第二个参数(正则表达式)替换为第三个参数。

regexp_substr

regexp_substr(col1, regex)

在第一个参数中找到第二个参数(regex)的第一个匹配项。

rpad

rpad(col1, 2)

返回字符串参数,在右侧填充第二个参数指定的空格数。

rtrim

rtrim(col1)

从提供的字符串中删除所有尾随空白(制表符和空格)。

substring

substring(col1, start, end)

从提供的 Int 索引(从0开始,包括0)到字符串的结尾,返回提供的String的子字符串。

startswith

startswith(col1, str)

返回布尔值,是否第一个字符串参数是否以第二个字符串参数开头。

trim

trim(col1)

从提供的字符串中删除所有前导和尾随空格(制表符和空格)。

upper

upper(col1)

返回给定 String 的大写版本。

1.4、数学函数转换

例子:

abs(#XC_P0103B)

ceil(#XC_P0103B)

函数说明:

函数

示例

说明

abs

abs(col1)

绝对值

acos

acos(col1)

弧度数的反余弦值

asin

asin(col1)

弧度数的反正弦值

atan

atan(col1)

弧度数的反正切值

atan2

atan2(col1, col2)

正x轴与两个自变量中定义的(x,y)点之间的弧度角

bitand

bitand(col1, col2)

对两个Int(-converted)参数的位表示执行按位“与”运算

bitor

bitor(col1, col2)

对两个参数的位表示进行或运算

bitxor

bitxor(col1, col2)

对两个Int(-converted)参数的位表示执行逐位异或运算

bitnot

bitnot(col1)

在Int(-converted)参数的位表示形式上执行按位NOT运算

ceil

ceil(col1)

将值舍入到最接近的BIGINT值。

cos

cos(col1)

返回以弧度为单位的数字的余弦值。

cosh

cosh(col1)

返回弧度数的双曲余弦值。

exp

exp(col1)

返回小数点参数的e。

ln

ln(col1)

返回参数的自然对数。

log

log(col1)

返回参数的以10为底的对数。

mod

mod(col1, col2)

返回第一个参数除以第二个参数的余数。

power

power(x, y)

返回 x 的 y 次方。

rand

rand()

返回一个伪随机数,其均匀分布在0.0和1.0之间。

round

round(col1)

将值四舍五入到最接近的 BIGINT 值。

sign

sign(col1)

返回给定数字的符号。 当参数的符号为正时,将返回1。 当参数的符号为负数时,返回-1。 如果参数为0,则返回0。

sin

sin(col1)

返回弧度数的正弦值。

sinh

sinh(col1)

返回弧度数的双曲正弦值。

sqrt

sqrt(col1)

返回数字的平方根。

tan

tan(col1)

返回以弧度表示的数字的正切值。

tanh

tanh(col1)

返回弧度数的双曲正切值。

1.5、哈希函数

例子:

md5(#XC_P0103B)

sha1(#XC_P0103B)

函数说明:

函数

示例

说明

md5

md5(col1)

参数的哈希值

sha1

sha1(col1)

参数的哈希值

sha256

sha256(col1)

参数的哈希值

sha384

sha384(col1)

参数的哈希值

sha512

sha512(col1)

参数的哈希值

1.6、比较函数

例子:

gt(#{B.Int_004}, 10)
gte(#{B.Int_004}, 10)
eq(#{B.Int_004}, 10)
neq(#{B.Int_004}, 10)
lt(#{B.Int_004}, 10)
lte(#{B.Int_004}, 10)
if(#{B.Int_004}, "normal", "caution")

函数说明:

函数

示例

说明

gt

gt(x, y)

如果 x 大于 y,则返回 1,否则,返回 0 (x > y)。

gte

gte(x, y)

如果 x 大于或等于 y,则返回 1,否则,返回 0 (x ≥ y)。

eq

eq(x, y)

如果 x 等于 y,则返回 1,否则,返回 0 (x == y)。

neq

neq(x, y)

返回值1如果x不等于y否则为0(x == y)。

lt

lt(x, y)

如果 x 小于 y,则返回 1,否则,返回 0 (x < y)。

lte

lte(x, y)

如果 x 小于或等于 y,则返回 1,否则,返回 0 (x ≤ y)。

if

if(condition, result_if_true, result_if_false)

评估condition和返回result_if_true如果条件计算结果为 true,或result_if_false如果条件计算结果为 false,则为 false。

condition必须是数字。此函数考虑0和一个空字符串作为 false 和其他所有内容(包括NaN)为 true。布尔值转换为0(false)1(真)。

1.7、其它函数

例子:

cast(#XC_P0103B, "bigint")

函数说明:

函数

示例

说明

cast

cast(col, "bigint")

将值从一种数据类型转换为另一种数据类型。 支持的类型包括:bigint,float,string,boolean 和 datetime。

chr

chr(col1)

返回与给定 Int 参数对应的 ASCII 字符

encode

encode(col1, "base64")

使用 encode 函数根据编码方案将负载(可能是非 JSON 数据)编码为其字符串表示形式。目前,只支持"base64"econding 类型。

trunc

trunc(dec, int)

将第一个参数截断为第二个参数指定的小数位数。 如果第二个参数小于零,则将其设置为零。 如果第二个参数大于34,则将其设置为34。从结果中去除尾随零。

使用 cast 函数转换到 datatime 类型时,转换规则如下:

  1. 如果参数为 datatime 类型,则直接返回原值。

  2. 如果参数为 bigint 或者 float 类型,则其数值会作为自 1970年1月1日0时起至今的毫秒值而转换为 datetime 类型。

  3. 如果参数为 string 类型,则会用默认格式"2006-01-02T15:04:05.000Z07:00"将其转换为 datetime类型。

  4. 其他类型的参数均不支持转换。

2、数据统计

2.1、聚合转换

例子:

例子一:
技术属性有两种值 1和0,从0变到1计算一次
0 0 0 0 1 1 1 1 0 1 1 0 0 0 1 00 1
statchange(col1,0,1) = 4

例子二:
lastvalue(col1)
lastwindowvalue(col1)

例子三:
delta(col1)

例子四:

统计当前时间窗口内,技术属性为true持续的时间,单位为秒
stattime(col1,true)

统计当前时间窗口内,技术属性等于5.5持续的时间,单位为秒
stattime(col1,5.5)

统计当前时间窗口内,技术属性等于10持续的时间,单位为秒
stattime(col1,10)

统计当前时间窗口内,技术属性为idle状态持续的时间,单位为秒
stattime(col1,"idle")

例子五:
统计当前时间窗框内,100~1000的数据条数,其中.Value是固定值,表示取值
stat_if(col,".Value>100 and .Value < 1000")
stat_if(col,".Value>100 or .Value < 20")
stat_if( EGoodCount ,".Value>160 or .Value<145") >0 or stat_if( EBadCount , ".Value>160 or .Value<145") >0

函数说明:

函数

示例

说明

avg

avg(col1)

组中的平均值。空值不参与计算。

count

count(col)

组中的项目数。空值不参与计算。

max

max(col1)

组中的最大值。空值不参与计算。

min

min(col1)

组中的最小值。空值不参与计算。

sum

sum(col1)

组中所有值的总和。空值不参与计算。

collect

collect(col1)[0]

collect(col1):表示组中指定列的值组成的数组

collect(col1)[0]:表示取数组的第一个值。

collect(col1)[-1]

collect(col1):表示组中指定列的值组成的数组

collect(col1)[-1]:表示取数组的最后一个值。

statchange

statchange(col1,0,1)

统计在一个窗口内,一个技术属性由A变到B的次数 statchange(col1, A, B)

其中第二个和第三个参数类型必须相同,可以是:string、bool、int、float

stattime

stattime(col1,"idle")

返回给定变量在当前窗口内为某一值的时间(以秒为单位)

第二个参数类型可以是:string、bool、int、float

lastvalue

lastvalue(col1)

当前窗口时间内最后一个值

firstvalue

firstvalue(col1)

当前窗口时间内第一个值

nth_value

nth_value(col1,2)

返回从窗口开始的指定偏移量处的值。偏移量从 1 开始。偏移量可以是任何标量表达式。如果偏移量为 null 或大于窗口中值的数量,则返回 null。偏移量为零或负数是错误的。

lastwindowvalue

lastwindowvalue(col1)

返回上一个窗口时间内最后一个值

delta

delta(col1)

当前窗口时间内的最后一个值减去上一个窗口时间内的最后一个值。

主要应用于:电表、水表、气表一直递增数据场景

stat_if

stat_if(col,expression)

统计满足条件的数据条数

2.2、条件计数

例子一:
count(#XC_P0103B > 1000 and #XC_P0103B < 2000) 

例子二:
count(#XC_P0103B * 5 > 10000)

例子三:
count(#XC_P0103B)

三、资产指标数据推送

说明

:

推送的内容包括两部分:一部分是资产指标元数据信息推送,包括创建资产指标、修改资产指标、删除资产指标等;另外一部分是资产指标计算后的结果数据推送。

推送方式是通过MQTT。

1、Topic 格式

说明

  • MQTT topic 规范,{$AssetTypeCode},{$AssetCode},{$IndicatorCode}替换为具体的标识符

  • AssetTypeCode:资产类型编码

  • AssetCode:设备资产编码

  • IndicatorCode:资产指标编码

#订阅资产类型下的某个的设备的某个资产指标
/iot/metric/indicator/{$AssetTypeCode}/{$AssetCode}/{$IndicatorCode}

#订阅资产类型下的所有设备的某个资产指标
/iot/metric/indicator/{$AssetTypeCode}/+/{$IndicatorCode}

#订阅资产类型下的某个设备的所有资产指标
/iot/metric/indicator/{$AssetTypeCode}/{$AssetCode}/#

# 订阅资产类型下的某个资产指标元数据信息
/iot/metric/indicator/meta/{$AssetTypeCode}/{$IndicatorCode}

# 订阅资产类型下的所有资产指标元数据信息
/iot/metric/indicator/meta/{$AssetTypeCode}/#

2、 数据格式

2.1 创建资产指标

{
 "action": "insert",
 "id": 1,
 "assetTypeCode": "xxx",
 "assetTypeName": "xxx",
 "code": "xxx",
 "name": "xxx",
 "description": "xxx",
 "indicatorType": "transform",
 "windowSize": 1,
 "windowUnit": "MI",
 "formula": "xx",
 "unit": "xxx",
 "attributeGroups": [{
  "attributeGroupName": "xx",
  "attributeName": "xx",
  "attributeCode": "xxx",
  "dataType": 0
 }]
}

2.2 修改资产指标

{
 "action": "update",
 "id": 1,
 "assetTypeCode": "xxx",
 "assetTypeName": "xxx",
 "code": "xxx",
 "name": "xxx",
 "description": "xxx",
 "indicatorType": "transform",
 "windowSize": 1,
 "windowUnit": "MI",
 "formula": "xx",
 "unit": "xxx",
 "attributeGroups": [{
  "attributeGroupName": "xx",
  "attributeName": "xx",
  "attributeCode": "xxx",
  "dataType": 0
 }]
}

2.3 删除资产指标

{
 "action": "delete",
 "id": 1,
 "assetTypeCode": "xxx",
 "assetTypeName": "xxx",
 "code": "xxx",
 "name": "xxx"
}

2.4 资产指标数据

说明

数据转换和数据统计数据格式不同,并且时间戳精度是毫秒级别

数据转换:

{
 "assetTypeCode": "xxx",
 "indicatorCode": "xxx",
  "assetCode": "xxx",
  "ts": xxxx,
  "value": xxx
}

数据统计:

{
 "assetTypeCode": "xxx",
 "indicatorCode": "xxx",
  "assetCode": "xxx",
  // 窗口开始时间
  "window_start": xxxx,
  // 窗口结束时间
  "window_end":xxxx,
  "value": xxx
}