生活物聯(lián)網(wǎng)平臺支持自有App實現(xiàn)場景自動化功能,即支持C端用戶(消費者)配置場景和自動化任務(wù)。
場景與自動化的區(qū)別如下。
- 場景:需要用戶手動在App上單擊觸發(fā)后,執(zhí)行一系列任務(wù)。
例如,用戶可以創(chuàng)建一個“回家模式”,包括打開燈、打開空調(diào)、打開電視、拉開窗簾等多個任務(wù)。當(dāng)用戶在App上單擊執(zhí)行回家模式場景時,所有任務(wù)將被執(zhí)行。
- 自動化:不需要用戶手動觸發(fā),當(dāng)符合某些條件時,系統(tǒng)自動執(zhí)行一系列任務(wù)。
例如,用戶可以創(chuàng)建一個“自動開啟攝像頭”的任務(wù),當(dāng)觸發(fā)條件“紅外人體傳感器識別到有人經(jīng)過”時,自動執(zhí)行“攝像頭開始錄像”的任務(wù)。
功能開發(fā)
場景自動化功能可以通過以下兩種方式實現(xiàn):調(diào)用場景插件和基于API自行開發(fā)。兩種實現(xiàn)方式的對比如下。
對比項 | 調(diào)用場景插件 | 基于API自行開發(fā) |
---|---|---|
優(yōu)缺點 |
該實現(xiàn)方式開發(fā)工作量較少,無需您開發(fā)業(yè)務(wù)邏輯,只需集成平臺提供的插件即可(關(guān)于如何集成插件的操作,請參見插件使用指南)。 |
該實現(xiàn)方式可以更靈活地體驗功能和界面,但對技術(shù)要求較高,開發(fā)工作量也較大(API接口描述,請參見場景服務(wù)2.0)。 |
支持的功能 |
|
|
規(guī)則說明
當(dāng)您基于API自行開發(fā)場景自動化功能時,您需要按照以下規(guī)則來設(shè)定業(yè)務(wù)邏輯。規(guī)則用于描述動作由誰觸發(fā)(Trigger),需要滿足哪些條件(Condition),觸發(fā)后要執(zhí)行的動作(Action)。目前主要支持以下兩種規(guī)則形式。
- IFTTT(If This Then That)
IFTTT規(guī)則即自動化,支持Trigger、Condition、Action節(jié)點。詳細(xì)介紹請參見本文檔下方“IFTTT規(guī)則介紹”。
- CA(Condition & Action)
CA是對IFTTT的簡化,將Trigger與Condition合并在一起作為“條件”。當(dāng)滿足條件(多個Condition之間可設(shè)置all或any)時,就執(zhí)行Action。詳細(xì)介紹請參見本文檔下方“CA規(guī)則介紹”。
場景自動化的規(guī)則的限制條件如下。
- 一個用戶最多可以創(chuàng)建200個場景或自動化。
- 一個設(shè)備最多可以作為20個場景規(guī)則的Action。
- 一個規(guī)則內(nèi)必須具有Action節(jié)點,且最多可以有30個Action。
- 一個規(guī)則內(nèi)可以沒有Trigger節(jié)點,如果有最多10個Trigger。
沒有Trigger節(jié)點時,表示場景不會自動觸發(fā)。此時可以調(diào)用執(zhí)行場景接口來手動觸發(fā)場景。例如,僅設(shè)置了
condition/timeRange
。 - 一個規(guī)則內(nèi)可以沒有Condition節(jié)點,如果有最多5個Condition。
沒有Condition節(jié)點時,Trigger節(jié)點觸發(fā)后直接執(zhí)行Action。
- 一個規(guī)則內(nèi)最多只能有一個
trigger/timer
節(jié)點。 - 一個規(guī)則內(nèi)最多只能有一個
condition/timeRange
節(jié)點。 - CA規(guī)則中,只有all模式支持
condition/timeRange
節(jié)點,any模式下將忽略該節(jié)點。
IFTTT規(guī)則介紹
IFTTT規(guī)則中包含的節(jié)點如下表所示。
名稱 | 描述 |
---|---|
trigger | 表示場景的觸發(fā)器,例如時間點、設(shè)備屬性。一個場景中可以有多個觸發(fā)器,彼此之間是“或”的關(guān)系。場景中也可以沒有觸發(fā)器,這時可以通過接口調(diào)用來手動觸發(fā)場景。 |
condition | 表示場景被觸發(fā)后的過濾條件,例如時間段限制、設(shè)備屬性限制。一個場景中可以有多個過濾條件,彼此之間是“與”的關(guān)系。場景中也可以沒有過濾條件,這時場景觸發(fā)后會不經(jīng)過濾直接執(zhí)行相應(yīng)的動作。 |
action | 表示場景被觸發(fā),且滿足過濾條件時,所需執(zhí)行的動作,例如設(shè)置設(shè)備屬性、執(zhí)行另一個場景。一個場景中可以有多個動作。場景中必須至少有一個動作。 |
下面為您提供兩個IFTTT的示例。
- 典型示例
該示例中具有一個Trigger、一個Condition、一個Action的場景規(guī)則。
示例的規(guī)則說明:表示當(dāng)設(shè)備sensor_01的someone_exist屬性值等于1時場景將被觸發(fā)(Trigger),此時會檢查當(dāng)前時間是否處于6:00至22:00之間(Condition),如果是,則把設(shè)備light的開關(guān)屬性設(shè)置為on(Action)。
{ "type":"IFTTT", "trigger":{ "uri":"trigger/device/property", "params":{ "iotId":"sensor_01_iotId", "propertyName":"someone_exist", "compareType":"==", "compareValue":1 } }, "condition":{ "uri":"logical/and", "items":[ { "params":{ "cron":"0-0 6-22 * * 1,2,3", "cronType":"linux", "timezoneID":"Shanghai" }, "uri":"condition/timeRange" } ] }, "action":[ { "uri":"action/device/setProperty", "params":{ "iotId":"light_iotId", "propertyName":"onOff", "propertyValue":"on" } } ] }
- 簡化示例
該示例展示了具有多個Trigger和多個Condition的場景規(guī)則。 此時使用logical/or節(jié)點封裝多個Trigger,使用logical/and節(jié)點封裝多個Condition。
示例的規(guī)則說明:每天十點或設(shè)備sensor_01的someone_exist屬性值等于1時場景觸發(fā),如果設(shè)備test_device的some_property屬性小于10,且當(dāng)前處于九點和十二點之間,則執(zhí)行動作,將test_device的onOff屬性設(shè)置為on,并觸發(fā)另一個場景執(zhí)行。
{ "type":"IFTTT", "trigger":{ "uri":"logical/or", "items":[ { "uri":"trigger/device/property", "params":{ "productKey":"pk_sensor", "deviceName":"sensor_01", "propertyName":"someone_exist", "compareType":"==", "compareValue":1 } }, { "uri":"trigger/timer", "params":{ "cron":"0 0 10 * *", "cronType":"linux" } } ] }, "condition":{ "uri":"logical/and", "items":[ { "uri":"condition/device/property", "params":{ "productKey":"pkxxxxon", "deviceName":"txxxxce", "propertyName":"soxxxxrty", "compareType":"<", "compareValue":10 } }, { "params":{ "cron":"0-0 9-12 * * 1,2,3", "cronType":"linux", "timezoneID":"Asia/Shanghai" }, "uri":"condition/timeRange" } ] }, "action":[ { "uri":"action/device/setProperty", "params":{ "productKey":"pk_action", "deviceName":"test_device", "propertyName":"onOff", "propertyValue": "on" } }, { "uri":"action/scene/trigger", "params":{ "automationRuleId":"some_scene_id" } } ] }
CA規(guī)則介紹
CA規(guī)則是IFTTT規(guī)則的簡化,規(guī)則包含的節(jié)點如下表所示。
節(jié)點名稱 | 描述 |
---|---|
mode | CA規(guī)則的模式,可取值如下:
|
condition | 場景的觸發(fā)條件,例如時間點、設(shè)備屬性、時間段等。一個場景可以有多個觸發(fā)條件。 |
action | 表示場景被觸發(fā)時所需執(zhí)行的動作,例如設(shè)置設(shè)備屬性、執(zhí)行另一個場景。一個場景中可以有多個動作,場景中必須至少有一個動作。 |
以下為CA規(guī)則的示例。
示例的規(guī)則說明:當(dāng)設(shè)備sensor_01的some_property屬性大于300、設(shè)備sensor_02的BarrierState屬性取值為0、1、2,且時間點在10:05時,將設(shè)備test_device的LightStatus屬性設(shè)置為1。
{
"type":"CA",
"mode":"all",
"condition":[
{
"uri":"condition/device/property",
"params":{
"productKey":"pk_condition",
"deviceName":"sensor_01",
"propertyName":"some_property",
"compareType":">",
"compareValue":"300"
}
},
{
"uri":"condition/device/property",
"params":{
"productKey":"pk_condition",
"deviceName":"sensor_02",
"propertyName":"BarrierState",
"compareType":"in",
"compareValue":[
0,
1,
2
]
}
},
{
"uri":"condition/timer",
"params":{
"cron":"0 05 10 * *",
"cronType":"linux"
}
}
],
"action":[
{
"uri":"action/device/setProperty",
"params":{
"productKey":"pk_action",
"deviceName":"test_device",
"propertyName":"LightStatus",
"propertyValue": 1
}
}
]
}
Trigger節(jié)點介紹
目前支持的Trigger節(jié)點包括三種。
- trigger/timer
表示定時觸發(fā)。參數(shù)描述如下。
參數(shù) 類型 描述 cron String 定時表達(dá)式,cron表達(dá)式格式為 http://crontab.org/
。cronType String 表達(dá)式類型,詳細(xì)描述參見下方表格。 timezoneID String 時區(qū)ID,表示將按照哪個時區(qū)來執(zhí)行定時表達(dá)式。該參數(shù)值可為空,默認(rèn)為智能生活平臺云端服務(wù)所在區(qū)域,建議傳入該參數(shù),明確指定時區(qū)。 配置示例:
Asia/Shanghai
。參數(shù)cronType的詳細(xì)介紹如下。
取值 表達(dá)式結(jié)構(gòu) 表達(dá)式字段 描述及示例 linux ${minute} ${hour} ${day of month} ${month} ${day of week}
- minute:0~59
- hour:0~23
- day of month:0~31
- month:0~12
- day of week:0~7
表示crontab類型,共5位,不支持年。
示例:
1 3 * * *
表示每天03:01觸發(fā)。quartz_cron ${second} ${minute} ${hour} ${day of month} ${month} ${day of week} ${year}
- second:必須為0
- minute:0~59
- hour:0~23
- day of month:0~31
- month:0~12
- day of week:0~7
- year(可省略,省略則表示每年會觸發(fā))
quartz類型cron,7位,支持年。禁止配置為無法抵達(dá)的過去時間。當(dāng)前只能最小設(shè)置分鐘級別,即第一位秒級必須為0。
示例:
0 * 14 * * ? 2019
表示在2019年每天下午2點到下午2:59期間的每1分鐘觸發(fā)。示例如下。
{ "uri":"trigger/timer", "params":{ "cron":"* * * * *", "cronType":"linux", "timezoneID":"Asia/Shanghai" } }
- trigger/device/property
表示設(shè)備屬性觸發(fā)。參數(shù)描述如下。
參數(shù) 類型 描述 productKey String 產(chǎn)品的Key,設(shè)備證書信息之一。創(chuàng)建產(chǎn)品時,生活物聯(lián)網(wǎng)平臺為該產(chǎn)品頒發(fā)的全局唯一標(biāo)識。 deviceName String 設(shè)備的名稱,設(shè)備證書信息之一。在注冊設(shè)備時,自定義的或系統(tǒng)生成的設(shè)備名稱,具備產(chǎn)品維度內(nèi)的唯一性。 propertyName String 待比較的設(shè)備屬性名。 compareType String 比較類型,如>、<、>=、==、<=、!=、in、like等。 compareValue Object 比較的值。 示例如下。
{ "uri":"trigger/device/property", "params":{ "productKey":"test_pk", "deviceName":"test_dn", "propertyName":"temp", "compareType":">", "compareValue":30 } }
- trigger/device/event
表示設(shè)備事件觸發(fā)。參數(shù)描述如下。
參數(shù) 類型 描述 productKey String 產(chǎn)品的Key,設(shè)備證書信息之一。創(chuàng)建產(chǎn)品時,生活物聯(lián)網(wǎng)平臺為該產(chǎn)品頒發(fā)的全局唯一標(biāo)識。 deviceName String 設(shè)備的名稱,設(shè)備證書信息之一。在注冊設(shè)備時,自定義的或系統(tǒng)生成的設(shè)備名稱,具備產(chǎn)品維度內(nèi)的唯一性。 eventCode String 設(shè)備事件Code,可為空。 propertyName String 設(shè)備屬性名稱。 compareType String 比較類型,如>、<、>=、==、<=、!=、in、like等。 compareValue Object 比較的值。 示例如下。
{ "uri":"trigger/device/event", "params":{ "productKey":"test_pk", "deviceName":"test_dn", "eventCode":"temp_warning", "propertyName":"temp", "compareType":">", "compareValue":30 } }
Action節(jié)點介紹
目前支持的Action節(jié)點包括以下五種。
- action/device/setProperty
表示設(shè)置設(shè)備屬性。參數(shù)描述如下。
參數(shù) 類型 描述 iotId String 設(shè)備ID,生活物聯(lián)網(wǎng)平臺為設(shè)備頒發(fā)的ID,設(shè)備的唯一標(biāo)識符。 propertyName String 要設(shè)置的屬性的名稱,例如:PowerSwitch。 propertyValue Object 要設(shè)置的屬性的值。 delayedExecutionSeconds Integer 延時執(zhí)行時間,默認(rèn)為空,即立即執(zhí)行,設(shè)置了該值后才執(zhí)行延時操作。單位為秒,最小1s,最大86400s(24小時)。 示例如下。
{ "uri":"action/device/setProperty", "params":{ "iotId":"xxxx", "propertyName":"PowerSwitch", "propertyValue":1, "delayedExecutionSeconds":10 } }
- action/device/invokeService
表示調(diào)用設(shè)備服務(wù)。參數(shù)描述如下。
參數(shù) 類型 描述 iotId String 設(shè)備ID,生活物聯(lián)網(wǎng)平臺為設(shè)備頒發(fā)的ID,設(shè)備的唯一標(biāo)識符。 serviceName String 服務(wù)名稱。 serviceArgs JSON 服務(wù)參數(shù),例如: {"warningStatus":"off","level":"init"}
。示例如下。
{ "uri":"action/device/invokeService", "params":{ "iotId":"xxxx", "serviceName":"clearWarningStatus", "serviceArgs":{ "warningStatus":"off", "level":"init" } } }
- action/scene/trigger
表示觸發(fā)另一個場景時,如果被觸發(fā)的場景包含Condition,并且Condition沒有被滿足,那么被觸發(fā)場景的Action不會被執(zhí)行。參數(shù)描述如下。
參數(shù) 類型 描述 sceneId String 場景ID。 示例如下。
{ "uri":"action/scene/trigger", "params":{ "sceneId":"xxx" } }
- action/automation/setSwitch
表示啟用或停用另一個場景設(shè)置。參數(shù)描述如下。
參數(shù) 類型 描述 automationRuleId String 要啟用或停用的場景ID。 switchStatus Integer 場景狀態(tài):0表示停用,1表示啟用。 示例如下。
{ "uri":"action/automation/setSwitch", "params":{ "automationRuleId":"xxxx", "switchStatus":0 } }
- /action/mq/send
表示向手機推送消息。參數(shù)描述如下。
參數(shù) 類型 描述 customData CustomData 推送消息的模型。 customData. message String 向手機推送消息的內(nèi)容,最多60個字符。 msgTag String 推送消息模型,默認(rèn)值為IlopBusiness_CustomMsg。 示例如下。
"actions": [ { "uri":"action/mq/send", "params":{ "customData":{ "message":"電源開啟了" }, "msgTag":"IlopBusiness_CustomMsg" } } ]
IFTTT規(guī)則中Condition節(jié)點介紹
目前IFTTT規(guī)則支持的Condition節(jié)點包括以下兩種。
- condition/timeRange
表示比較當(dāng)前時間是否在一個區(qū)間內(nèi)。參數(shù)描述如下。
參數(shù) 類型 描述 cron String 20-25 11-23 * * 1,2,3
表示每周一、二、三的11:20到23:25之間允許執(zhí)行。cronType String cron表達(dá)式類型,取值為linux。 timezoneID String 示例: Asia/Shanghai
。示例如下。
{ "params":{ "cron":"0-0 9-12 * * 1,2,3", "cronType":"linux", "timezoneID":"Asia/Shanghai" }, "uri":"condition/timeRange" }
- condition/device/property
表示設(shè)備屬性過濾。參數(shù)描述如下。
參數(shù) 類型 描述 productKey String 產(chǎn)品的Key,設(shè)備證書信息之一。創(chuàng)建產(chǎn)品時,生活物聯(lián)網(wǎng)平臺為該產(chǎn)品頒發(fā)的全局唯一標(biāo)識。 deviceName String 設(shè)備的名稱,設(shè)備證書信息之一。在注冊設(shè)備時,自定義的或系統(tǒng)生成的設(shè)備名稱,具備產(chǎn)品維度內(nèi)的唯一性。 propertyName String 設(shè)備屬性。 compareType String 比較類型,如>、<、>=、==、<=、!=、in、like等。 compareValue Object 比較的值。 示例如下。
{ "uri":"condition/device/property", "params":{ "productKey":"test_product", "deviceName":"test_device", "propertyName":"temp", "compareType":">", "compareValue":30 } }
CA規(guī)則中Condition節(jié)點介紹
目前CA規(guī)則支持的CaCondition節(jié)點包括以下三種。
- condition/timer
表示定時器。作用和參數(shù)與IFTTT規(guī)則下的
trigger/timer
節(jié)點相同。詳細(xì)介紹請參見本文檔“IFTTT規(guī)則介紹”。 - condition/timeRange
表示時間段,只能用于all模式,any模式下將被忽略。
說明 CA規(guī)則中condition/timeRange
節(jié)點與IFTTT規(guī)則中的condition/timeRange
節(jié)點作用相同,參數(shù)形式不同。參數(shù)描述如下。
參數(shù) 類型 描述 format String 時間的格式: mm:ss
:分秒HH:mm
:時分HH:mm:ss
:時分秒dd HH
:日時dd HH:mm
:日時分dd HH:mm:ss
:日時分秒MM
:月MM-dd
:月日MM-dd HH
:月日時MM-dd HH:mm
:月日時分MM-dd HH:mm:ss
:月日時分秒yyyy-MM-dd
:年月日yyyy-MM-dd HH:mm:ss
:年月日時分秒
timezoneID String 時區(qū)ID,可空,表示將按照哪個時區(qū)來進(jìn)行時間段判斷。如果不設(shè)置,默認(rèn)為智能生活平臺云端服務(wù)所在區(qū)域,建議傳入該參數(shù),明確指定時區(qū)。 beginDate String 開始時間,需符合format指定的格式。 endDate String 結(jié)束時間,需符合format指定的格式。 說明 如果beginDate大于endDate,將視為跨天。例如beginDate為22:00,endDate為6:00,則視為晚上22:00到第二天6:00。repeat String 星期重復(fù),用逗號分隔的1~7數(shù)字構(gòu)成的字符串。該參數(shù)可為空,表示不重復(fù)。例如配置為 1,2,3
,表示在星期一、星期二、星期三重復(fù)。示例如下。
{ "uri":"condition/timeRange", "params":{ "format":"HH:mm", "beginDate":"8:30", "endDate":"23:00", "repeat":"1,2,3,4,5" } }
- condition/device/property
表示設(shè)備屬性。作用和參數(shù)與IFTTT規(guī)則下的
trigger/device/property
相同。詳細(xì)介紹請參見本文檔“IFTTT規(guī)則介紹”。