生活物联网平台支持自有App实现场景自动化功能,即支持C端用户(消费者)配置场景和自动化任务。

场景与自动化的区别如下。

  • 场景:需要用户手动在App上单击触发后,执行一系列任务。

    例如,用户可以创建一个“回家模式”,包括打开灯、打开空调、打开电视、拉开窗帘等多个任务。当用户在App上单击执行回家模式场景时,所有任务将被执行。

  • 自动化:不需要用户手动触发,当符合某些条件时,系统自动执行一系列任务。

    例如,用户可以创建一个“自动开启摄像头”的任务,当触发条件“红外人体传感器识别到有人经过”时,自动执行“摄像头开始录像”的任务。

功能开发

场景自动化功能可以通过以下两种方式实现:调用场景插件和基于API自行开发。两种实现方式的对比如下。

对比项 调用场景插件 基于API自行开发
优缺点

该实现方式开发工作量较少,无需您开发业务逻辑,只需集成平台提供的插件即可(关于如何集成插件的操作,请参见插件使用指南)。

该实现方式可以更灵活地体验功能和界面,但对技术要求较高,开发工作量也较大(API接口描述,请参见场景服务2.0)。

支持的功能
  • 场景的创建、删除、查看、修改
  • 自动化的创建、删除、查看、修改
  • 触发条件支持:时间点、设备动作
  • 触发条件的关系:TCA模型,即需要分别设置Trigger、Condition和Action。
  • 执行任务支持:设备动作、执行场景、发送手机推送通知
  • 场景的创建、删除、查看、修改
  • 自动化的创建、删除、查看、修改
  • 触发条件支持:时间点、时间段、设备动作(持续更新中)
  • 触发条件的关系:满足所有条件、满足任一条件
  • 执行任务支持:设备动作、执行场景、发送手机推送通知

规则说明

当您基于API自行开发场景自动化功能时,您需要按照以下规则来设定业务逻辑。规则用于描述动作由谁触发(Trigger),需要满足哪些条件(Condition),触发后要执行的动作(Action)。目前主要支持以下两种规则形式。

  • IFTTT(If This Then That)

    IFTTT规则即自动化,支持Trigger、Condition、Action节点。详细介绍请参见本文档下方“IFTTT规则介绍”。

  • CA(Condition & Action)

    CA是对IFTTT的简化,将Trigger与Condition合并在一起作为“条件”。当满足条件(多个Condition之间可设置all或any)时,就执行Action。详细介绍请参见本文档下方“CA规则介绍”。

场景自动化的规则的限制条件如下。

  • 一个用户最多可以创建200个场景或自动化。
  • 一个设备最多可以作为20个场景规则的Action。
  • 一个规则内必须具有Action节点,且最多可以有30个Action。
  • 一个规则内可以没有Trigger节点,如果有最多10个Trigger。

    没有Trigger节点时,表示场景不会自动触发。此时可以调用执行场景接口来手动触发场景。例如,仅设置了condition/timeRange

  • 一个规则内可以没有Condition节点,如果有最多5个Condition。

    没有Condition节点时,Trigger节点触发后直接执行Action。

  • 一个规则内最多只能有一个trigger/timer节点。
  • 一个规则内最多只能有一个condition/timeRange节点。
  • CA规则中,只有all模式支持condition/timeRange节点,any模式下将忽略该节点。

IFTTT规则介绍

IFTTT规则中包含的节点如下表所示。

名称 描述
trigger 表示场景的触发器,例如时间点、设备属性。一个场景中可以有多个触发器,彼此之间是“或”的关系。场景中也可以没有触发器,这时可以通过接口调用来手动触发场景。
condition 表示场景被触发后的过滤条件,例如时间段限制、设备属性限制。一个场景中可以有多个过滤条件,彼此之间是“与”的关系。场景中也可以没有过滤条件,这时场景触发后会不经过滤直接执行相应的动作。
action 表示场景被触发,且满足过滤条件时,所需执行的动作,例如设置设备属性、执行另一个场景。一个场景中可以有多个动作。场景中必须至少有一个动作。

下面为您提供两个IFTTT的示例。

  • 典型示例

    该示例中具有一个Trigger、一个Condition、一个Action的场景规则。

    示例的规则说明:表示当设备sensor_01someone_exist属性值等于1时场景将被触发(Trigger),此时会检查当前时间是否处于6:00至22:00之间(Condition),如果是,则把设备light的开关属性设置为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的场景规则。 此时使用logical/or节点封装多个Trigger,使用logical/and节点封装多个Condition。

    示例的规则说明:每天十点或设备sensor_01someone_exist属性值等于1时场景触发,如果设备test_devicesome_property属性小于10,且当前处于九点和十二点之间,则执行动作,将test_deviceonOff属性设置为on,并触发另一个场景执行。

    {
        "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规则介绍

CA规则是IFTTT规则的简化,规则包含的节点如下表所示。

节点名称 描述
mode CA规则的模式,可取值如下:
  • any:表示任何一个条件满足就执行动作。
  • all:表示所有条件满足时才执行动作。
condition 场景的触发条件,例如时间点、设备属性、时间段等。一个场景可以有多个触发条件。
action 表示场景被触发时所需执行的动作,例如设置设备属性、执行另一个场景。一个场景中可以有多个动作,场景中必须至少有一个动作。

以下为CA规则的示例。

示例的规则说明:当设备sensor_01some_property属性大于300、设备sensor_02BarrierState属性取值为012,且时间点在10:05时,将设备test_deviceLightStatus属性设置为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节点介绍

目前支持的Trigger节点包括三种。

  • trigger/timer

    表示定时触发。参数描述如下。

    参数 类型 描述
    cron String 定时表达式,cron表达式格式为http://crontab.org/
    cronType String 表达式类型,详细描述参见下方表格。
    timezoneID String 时区ID,表示将按照哪个时区来执行定时表达式。该参数值可为空,默认为智能生活平台云端服务所在区域,建议传入该参数,明确指定时区。

    配置示例:Asia/Shanghai

    参数cronType的详细介绍如下。

    取值 表达式结构 表达式字段 描述及示例
    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触发。

    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(可省略,省略则表示每年会触发)

    quartz类型cron,7位,支持年。禁止配置为无法抵达的过去时间。当前只能最小设置分钟级别,即第一位秒级必须为0

    示例:0 * 14 * * ? 2019表示在2019年每天下午2点到下午2:59期间的每1分钟触发。

    示例如下。

    {
        "uri":"trigger/timer",
        "params":{
            "cron":"* * * * *",
            "cronType":"linux",
            "timezoneID":"Asia/Shanghai"
        }
    }
  • trigger/device/property

    表示设备属性触发。参数描述如下。

    参数 类型 描述
    productKey String 产品的Key,设备证书信息之一。创建产品时,生活物联网平台为该产品颁发的全局唯一标识。
    deviceName String 设备的名称,设备证书信息之一。在注册设备时,自定义的或系统生成的设备名称,具备产品维度内的唯一性。
    propertyName String 待比较的设备属性名。
    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

    表示设备事件触发。参数描述如下。

    参数 类型 描述
    productKey String 产品的Key,设备证书信息之一。创建产品时,生活物联网平台为该产品颁发的全局唯一标识。
    deviceName String 设备的名称,设备证书信息之一。在注册设备时,自定义的或系统生成的设备名称,具备产品维度内的唯一性。
    eventCode String 设备事件Code,可为空。
    propertyName String 设备属性名称。
    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节点介绍

目前支持的Action节点包括以下五种。

  • action/device/setProperty

    表示设置设备属性。参数描述如下。

    参数 类型 描述
    iotId String 设备ID,生活物联网平台为设备颁发的ID,设备的唯一标识符。
    propertyName String 要设置的属性的名称,例如:PowerSwitch。
    propertyValue Object 要设置的属性的值。
    delayedExecutionSeconds Integer 延时执行时间,默认为空,即立即执行,设置了该值后才执行延时操作。单位为秒,最小1s,最大86400s(24小时)。

    示例如下。

    {
        "uri":"action/device/setProperty",
        "params":{
            "iotId":"xxxx",
            "propertyName":"PowerSwitch",
            "propertyValue":1,
            "delayedExecutionSeconds":10
        }
    }
  • action/device/invokeService

    表示调用设备服务。参数描述如下。

    参数 类型 描述
    iotId String 设备ID,生活物联网平台为设备颁发的ID,设备的唯一标识符。
    serviceName String 服务名称。
    serviceArgs JSON 服务参数,例如:{"warningStatus":"off","level":"init"}

    示例如下。

    {
        "uri":"action/device/invokeService",
        "params":{
            "iotId":"xxxx",
            "serviceName":"clearWarningStatus",
            "serviceArgs":{
                "warningStatus":"off",
                "level":"init"
            }
        }
    }
  • action/scene/trigger

    表示触发另一个场景时,如果被触发的场景包含Condition,并且Condition没有被满足,那么被触发场景的Action不会被执行。参数描述如下。

    参数 类型 描述
    sceneId String 场景ID。

    示例如下。

    {
        "uri":"action/scene/trigger",
        "params":{
            "sceneId":"xxx"
        }
    }
  • action/automation/setSwitch

    表示启用或停用另一个场景设置。参数描述如下。

    参数 类型 描述
    automationRuleId String 要启用或停用的场景ID。
    switchStatus Integer 场景状态:0表示停用,1表示启用。

    示例如下。

    {
        "uri":"action/automation/setSwitch",
        "params":{
            "automationRuleId":"xxxx",
            "switchStatus":0
        }
    }
  • /action/mq/send

    表示向手机推送消息。参数描述如下。

    参数 类型 描述
    customData CustomData 推送消息的模型。
    customData. message String 向手机推送消息的内容,最多60个字符。
    msgTag String 推送消息模型,默认值为IlopBusiness_CustomMsg

    示例如下。

    "actions": [
        {
            "uri":"action/mq/send",
            "params":{
                "customData":{
                    "message":"电源开启了"
                },
                "msgTag":"IlopBusiness_CustomMsg"
            }
        }
    ]
                        

IFTTT规则中Condition节点介绍

目前IFTTT规则支持的Condition节点包括以下两种。

  • condition/timeRange

    表示比较当前时间是否在一个区间内。参数描述如下。

    参数 类型 描述
    cron String 20-25 11-23 * * 1,2,3表示每周一、二、三的11:20到23:25之间允许执行。
    cronType String cron表达式类型,取值为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

    表示设备属性过滤。参数描述如下。

    参数 类型 描述
    productKey String 产品的Key,设备证书信息之一。创建产品时,生活物联网平台为该产品颁发的全局唯一标识。
    deviceName String 设备的名称,设备证书信息之一。在注册设备时,自定义的或系统生成的设备名称,具备产品维度内的唯一性。
    propertyName String 设备属性。
    compareType String 比较类型,如>、<、>=、==、<=、!=、in、like等。
    compareValue Object 比较的值。

    示例如下。

    {
        "uri":"condition/device/property",
        "params":{
            "productKey":"test_product",
            "deviceName":"test_device",
            "propertyName":"temp",
            "compareType":">",
            "compareValue":30
        }
    }

CA规则中Condition节点介绍

目前CA规则支持的CaCondition节点包括以下三种。

  • condition/timer

    表示定时器。作用和参数与IFTTT规则下的trigger/timer节点相同。详细介绍请参见本文档“IFTTT规则介绍”。

  • condition/timeRange

    表示时间段,只能用于all模式,any模式下将被忽略。

    说明 CA规则中condition/timeRange节点与IFTTT规则中的condition/timeRange节点作用相同,参数形式不同。

    参数描述如下。

    参数 类型 描述
    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 时区ID,可空,表示将按照哪个时区来进行时间段判断。如果不设置,默认为智能生活平台云端服务所在区域,建议传入该参数,明确指定时区。
    beginDate String 开始时间,需符合format指定的格式。
    endDate String 结束时间,需符合format指定的格式。
    说明 如果beginDate大于endDate,将视为跨天。例如beginDate为22:00,endDate为6:00,则视为晚上22:00到第二天6:00。
    repeat String 星期重复,用逗号分隔的1~7数字构成的字符串。该参数可为空,表示不重复。例如配置为1,2,3,表示在星期一、星期二、星期三重复。

    示例如下。

    {
        "uri":"condition/timeRange",
        "params":{
            "format":"HH:mm",
            "beginDate":"8:30",
            "endDate":"23:00",
            "repeat":"1,2,3,4,5"
        }
    }
  • condition/device/property

    表示设备属性。作用和参数与IFTTT规则下的trigger/device/property相同。详细介绍请参见本文档“IFTTT规则介绍”。