全部產品
Search
文件中心

IoT Platform:函數列表

更新時間:Jun 30, 2024

規則引擎提供多種函數,您可以在編寫SQL時使用這些函數,實現多樣化資料處理。

資料流轉支援的函數

函數名

函數說明

abs(number)

返回絕對值。

asin(number)

返回number值的反正弦。

attribute(key)

返回key所對應的裝置標籤。如果裝置沒有該key對應的標籤,則傳回值為空白。使用SQL調試時,因為沒有真實裝置及對應的標籤,傳回值為空白。

concat(string1, string2)

用於連接字串。返回串連後的字串。

樣本:concat(field,'a')

cos(number)

返回number值的餘弦。

cosh(number)

返回number值的雙曲餘弦(hyperbolic cosine)。

crypto(field,String)

對field的值進行加密。

第二個參數String為演算法字串。可選:MD2、MD5、SHA1、SHA-256、SHA-384、SHA-512。

deviceName()

返回當前裝置名稱。使用SQL調試時,因為沒有真實裝置,傳回值為空白。

endswith(input, suffix)

判斷input的值是否以suffix結尾。

exp(number)

返回以自然常數e為底的指定次冪。

floor(number)

返回一個最接近它的整數,它的值小於或等於這個浮點數。

log(n, m)

返回自然對數。

如果不傳m值,則返回log(n)

lower(string)

返回小寫字串。

mod(n, m)

n%m餘數。

nanvl(value, default)

返回屬性值。

若屬性值為null,則返回default。

newuuid()

返回一個隨機UUID字串。

payload(textEncoding)

返回裝置發布訊息的payload逸出字元串。

字元編碼預設UTF-8,即payload()預設等價於payload(‘utf-8’)

power(n,m)

返回n的m次冪。

rand()

返回[0~1)之間的一個隨機數。

replace(source, substring, replacement)

對某個目標列值進行替換,即用replacement替換source中的substring。

樣本:replace(field,’a’,’1’)

sin(n)

返回n值的正弦。

sinh(n)

返回n值的雙曲正弦(hyperbolic sine)。

tan(n)

返回n值的正切。

tanh(n)

返回n值的雙曲正切(hyperbolic tangent)。

thingPropertyFlatMap(property)

擷取物模型屬性對應數值,並去掉item層級,value有多個時,使用“_”拼接。當物模型屬性多於50個時,雲產品流轉無法流轉全量物模型屬性,使用該函數可以拉平物模型屬性結構,實現全量物模型屬性流程轉。

property為需要擷取的屬性,可以傳入多個property,為空白則表示提取所有屬性。

樣本:使用thingPropertyFlatMap('Power', 'Position'),將在訊息體中添加"Power": "On", "Position_latitude": 39.9, "Position_longitude": 116.38

timestamp(format)

返回當前系統時間,格式化後返回北京時間(GMT+8)。

format為可選。如果為空白,則返回當前系統時間戳毫秒值,例如,使用timestamp(),返回的時間戳記為1543373798943;如果指定format,則根據指定格式,返回當前系統時間,如timestamp('yyyy-MM-dd\'T\'HH:mm:ss\'Z\''),返回的時間戳記為2018-11-28T10:56:38Z

timestamp_utc(format)

返回當前系統時間,格式化後返回UTC時間。

format為可選。如果format為空白,則返回當前系統時間戳毫秒值,例如,使用timestamp_utc(),返回的時間戳記為1543373798943;使用timestamp_utc('yyyy-MM-dd\'T\'HH:mm:ss\'Z\''),返回的時間戳記為2018-11-28T02:56:38Z

topic(number)

返回Topic分段資訊。

如,有一個Topic:/alDbcLe****/TestDevice/user/set。使用函數topic(),則返回整個Topic;使用topic(1),則返回Topic的第一級類目alDbcLe****;使用topic(2),則返回第二級類目TestDevice,以此類推。

upper(string)

將字串中的小寫字母轉為大寫字母。

樣本:函數upper(alibaba)的返回結果是ALIBABA

to_base64(*)

當原始Payload資料為位元據時,可使用該函數,將所有位元據轉換成base64String。

messageId()

返回物聯網平台產生的訊息ID。

substring(target, start, end)

返回從start(包括)到end(不包括)的字串。

參數說明:

  • target:要操作的字串。必填。

  • start:起始下標。必填。

  • end:結束下標。非必填。

說明
  • 目前,僅支援String和Int類型資料。Int類型資料會被轉換成String類型後再處理。

  • 常量字串,請使用單引號。雙引號中的資料,將視為Int類型資料進行解析。

  • 如果傳入的參數錯誤,例如參數類型不支援,會導致SQL解析失敗,而放棄執行規則。

字串截取樣本:

  • substring('012345', 0) = "012345"

  • substring('012345', 2) = "2345"

  • substring('012345', 2.745) = "2345"

  • substring(123, 2) = "3"

  • substring('012345', -1) = "012345"

  • substring(true, 1.2) error

  • substring('012345', 1, 3) = "12"

  • substring('012345', -50, 50) = "012345"

  • substring('012345', 3, 1) = ""

to_hex(*)

當原始Payload資料為位元據時,可使用該函數,將位元據轉換成十六進位字串。

user_property()

裝置使用MQTT 5.0協議通訊時,擷取UserProperty列表中的屬性資料。

  • user_property()擷取所有屬性資料。

  • user_property('${Key}')擷取指定Key的資料。

例如裝置上報的UserProperty{"a": "1", "b": "2"}

  • user_property()返回"{\"a\": \"1\", \"b\": \"2\"}"

  • user_property('a')返回"{\"a\": \"1\"}"

things_function_type()

擷取上報的物模型功能類型。僅對物模型事件和服務的訊息生效。各功能傳回值如下:

  • 事件:返回事件的標識符。

  • 服務:返回服務的標識符。

例如Topic:/SdfgeW***/device1/thing/event/BrokenInfo/post,流轉事件BrokenInfo的資料,things_function_type()返回上報事件標識符BrokenInfo

things_property('${參數名稱}')

擷取物模型屬性、服務、事件中參數對應的值。僅對物模型訊息生效。

例如Topic:/${productKey}/${deviceName}/thing/event/property/post,流轉上報屬性中CurrentTemperature(當前溫度)資料,things_property('CurrentTemperature')返回CurrentTemperature上報的值。

使用樣本

您可以在資料流轉SQL語句的SELECT欄位和WHERE條件欄位中,使用函數擷取資料或者對資料做處理。

例如,某溫度感應器產品功能定義的預設模組有一個溫度屬性(Temperature),裝置上報的溫度屬性資料經物模型轉化後的資料格式如下:

{
    "deviceType": "Custom",
    "iotId": "H5KURkKdibnZvSls****000100",
    "productKey": "a1HHrkm****",
    "gmtCreate": 1564569974224,
    "deviceName": "TestDevice1",
    "items": {
        "Temperature": {
            "value": 23.5,
            "time": 1564569974229
        }
    }
}

該溫度感應器產品下有多個裝置,但只有當裝置TestDevice1、TestDevice2或TestDevice3上報的溫度大於38時,需將溫度屬性資料流轉到Function Compute中進行計算處理。設定篩選裝置上報資料的規則SQL如下圖。

編寫SQL

SQL語句:

SELECT deviceName() as deviceName,things_property('Temperature') as Temperature 
FROM "/g5or0***/+thing/event/property/post" 
WHERE things_property('Temperature')>38 and deviceName() in ('TestDevice1', 'TestDevice2', 'TestDevice3')

以上樣本中,使用了函數deviceName()things_property('Temperature')

  • 在SELECT欄位使用以上函數,表示從資料中篩選出裝置名稱,和屬性Temperature的值。

  • 在條件欄位使用以上函數,並指定為>38in ('TestDevice1', 'TestDevice2', 'TestDevice3'),表示僅當Temperature值大於38,且裝置名稱的值為TestDevice1、TestDevice2或TestDevice3中的其中一個時,才會進行資料流轉。

規則SQL中,SELECT欄位和WHERE條件欄位的具體編寫方法,和規則引擎支援的條件運算式列表,請參見SQL運算式