资产指标

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

一、资产指标接口说明

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
}