生活物聯(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)。

支持的功能
  • 場景的創(chuàng)建、刪除、查看、修改
  • 自動化的創(chuàng)建、刪除、查看、修改
  • 觸發(fā)條件支持:時間點、設(shè)備動作
  • 觸發(fā)條件的關(guān)系:TCA模型,即需要分別設(shè)置Trigger、Condition和Action。
  • 執(zhí)行任務(wù)支持:設(shè)備動作、執(zhí)行場景、發(fā)送手機推送通知
  • 場景的創(chuàng)建、刪除、查看、修改
  • 自動化的創(chuàng)建、刪除、查看、修改
  • 觸發(fā)條件支持:時間點、時間段、設(shè)備動作(持續(xù)更新中)
  • 觸發(fā)條件的關(guān)系:滿足所有條件、滿足任一條件
  • 執(zhí)行任務(wù)支持:設(shè)備動作、執(zhí)行場景、發(fā)送手機推送通知

規(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_01someone_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_01someone_exist屬性值等于1時場景觸發(fā),如果設(shè)備test_devicesome_property屬性小于10,且當(dāng)前處于九點和十二點之間,則執(zhí)行動作,將test_deviceonOff屬性設(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ī)則的模式,可取值如下:
  • any:表示任何一個條件滿足就執(zhí)行動作。
  • all:表示所有條件滿足時才執(zhí)行動作。
condition 場景的觸發(fā)條件,例如時間點、設(shè)備屬性、時間段等。一個場景可以有多個觸發(fā)條件。
action 表示場景被觸發(fā)時所需執(zhí)行的動作,例如設(shè)置設(shè)備屬性、執(zhí)行另一個場景。一個場景中可以有多個動作,場景中必須至少有一個動作。

以下為CA規(guī)則的示例。

示例的規(guī)則說明:當(dāng)設(shè)備sensor_01some_property屬性大于300、設(shè)備sensor_02BarrierState屬性取值為0、1、2,且時間點在10:05時,將設(shè)備test_deviceLightStatus屬性設(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ī)則介紹”。