智能场景

更新时间:2022-02-17 07:06:36下载pdf

智能场景分为 一键执行场景自动化场景 ,本文分别简称为 场景自动化

  • 场景是用户添加动作,手动触发。
  • 自动化是由用户设定条件,当条件触发后自动执行设定的动作。

功能概述

涂鸦支持用户根据实际生活场景,通过设置气象或设备条件,当条件满足时,让一个或多个设备执行相应的任务。

场景管理 说明
TuyaHomeSdk.newSceneInstance(String sceneId) 提供单个场景的编辑、删除、执行操作,需要使用场景 ID 进行初始化,场景 ID 指的是 SceneBeanid 字段,可以从 查询场景接口 的返回结果中查询。
TuyaHomeSdk.getSceneManagerInstance() 提供场景里条件、任务、设备、城市相关的所有数据,和场景数据查询。

在使用智能场景相关的接口之前,需要首先了解 场景条件场景任务

场景条件

场景条件对应 SceneCondition 类,涂鸦支持以下条件类型:

  • 气象条件:包括温度、湿度、天气、PM2.5、空气质量、日落日出,用户选择气象条件时,可以选择当前城市。
  • 设备条件:指用户可预先选择一个设备的功能状态,当该设备达到该状态时,会触发当前场景里的任务,但同一设备不能同时作为条件和任务,避免操作冲突。
  • 定时条件:指可以按照指定的时间去执行预定的任务。

场景任务

场景任务是指当该场景满足已经设定的气象或设备条件时,让一个或多个设备执行某种操作,对应 SceneTask 类。或者关闭、开启一个自动化。

SceneTask的主要属性定义:

字段 类型 说明
id String 动作 ID
actionExecutor String 动作类型。枚举:
  • ruleTrigger:触发场景
  • ruleEnable:启用场景
  • ruleDisable:禁用场景
  • appPushTrigger:推送消息
  • mobileVoiceSend:电话服务
  • smsSend:短信服务
  • deviceGroupDpIssue:执行群组
  • irIssue:执行红外设备
  • dpIssue:执行普通设备
  • delay:延时
  • irIssueVii:执行红外设备(执行参数为真实红外控制码)
  • toggle:执行切换开关动作
  • dpStep:执行步进动作
entityId String 设备 ID
entityName String 设备名称
actionDisplayNew Map<String, List<String>> 动作展示信息
executorProperty Map<String, Object> 动作执行信息
extraProperty Map<String, Object> 动作额外信息

智能场景管理

场景列表功能

接口说明

查询场景数据。场景和自动化一起返回,通过条件 conditions 字段是否为空来区分场景和自动化。

void getSceneList(long homeId,ITuyaDataCallback<List<SceneBean>> callback)

参数说明

参数 说明
homeId 站点 ID
callback 回调

SceneBean的主要属性定义:

字段 类型 说明
id String 场景 ID
name String 场景名称
conditions List<SceneCondition> 场景条件列表
actions List<SceneTask> 场景任务列表
matchType int 满足条件的类型
  • 1:满足任意条件
  • 2:满足所有条件
enable boolean 自动化是否启用

示例代码

TuyaHomeSdk.getSceneManagerInstance().getSceneList(long homeId, new ITuyaResultCallback<List<SceneBean>>() {
	@Override
	public void onSuccess(List<SceneBean> result) {
	}

	@Override
	public void onError(String errorCode, String errorMessage) {
	}
});

根据 ID 查询场景详情

根据 homeIdsceneId 查询场景下的详细信息,查询当前场景的所有条件和动作。

接口说明

void getSceneDetail(long homeId, String sceneId, ITuyaResultCallback<SceneBean> callback);

参数说明

参数 说明
homeId 站点 ID
sceneId 场景 ID

示例代码

TuyaHomeSdk.getSceneManagerInstance().getSceneDetail(homeId, sceneId, new ITuyaResultCallback<SceneBean>() {
                        @Override
                        public void onSuccess(SceneBean result) {

                        }

                        @Override
                        public void onError(String errorCode, String errorMessage) {

                        }
                    });

查询简易场景

接口说明

查询场景列表数据。场景和自动化一起返回,通过条件 conditions 字段是否为空来区分场景和自动化。

该接口比场景列表接口轻量,但是有部分数据如SceneTaskactionDisplayNew可能返回 null。

void getSimpleSceneList(long homeId, ITuyaResultCallback<List<SceneBean>> callback)

参数说明

参数 说明
homeId 站点 ID
callback 回调

SceneBean的主要属性定义:

字段 类型 说明
id String 场景 ID
name String 场景名称
conditions List<SceneCondition> 场景条件列表
actions List<SceneTask> 场景任务列表
matchType int 满足条件的类型
  • 1:满足任意条件
  • 2:满足所有条件
enable boolean 自动化是否启用

示例代码

	TuyaHomeSdk.getSceneManagerInstance().getSimpleSceneList(SceneUtil.getHomeId(), new ITuyaResultCallback<List<SceneBean>>() {
			@Override
			public void onSuccess(List<SceneBean> result) {
			}

			@Override
			public void onError(String errorCode, String errorMessage) {
			}
		});

查询条件列表

接口说明

查询条件列表,如温度、湿度、天气、PM2.5、日落日出等,注意,设备也可作为条件。

条件中的温度分为摄氏度和华氏度,根据需求传入需要的数据。

void getConditionList(boolean showFahrenheit,ITuyaResultCallback<List<ConditionListBean>> callback);

参数说明

参数 说明
showFahrenheit
  • true:使用华氏单位
  • false:使用摄氏单位
callback 回调

示例代码

TuyaHomeSdk.getSceneManagerInstance().getConditionList(new ITuyaDataCallback<List<ConditionListBean>>() {
	@Override
	public void onSuccess(List<ConditionListBean> conditionActionBeans) {
	}

	@Override
	public void onError(String errorCode, String errorMessage) {
	}
});

ConditionListBean 主要属性定义:

字段 类型 说明
name String 条件名称
type String 条件类别
Property IProperty 条件属性

目前支持的天气条件类别及其名称和 Property 类型

名称 Type Property Type
温度 Temp ValueProperty
湿度 humidity EnumProperty
天气 condition EnumProperty
PM2.5 pm25 EnumProperty
空气质量 aqi EnumProperty
日出日落 sunsetrise EnumProperty
定时 timer TimerProperty

Property 是涂鸦智能中一种常用的数据结构,可以用来控制设备和其他功能。目前提供以下类型 Property,每种 Property 提供不同的访问接口。详见 规则

  • 数值型
  • 枚举型
  • 布尔型
  • 用于定时的类型(与条件中的数值型,枚举型,布尔型相对应)

创建天气型条件

接口说明

天气条件包括温度、湿度、天气、PM2.5、空气质量、日出日落,可自由选定城市。根据用户账号中设备的不同,可选择的天气条件也不同。

SceneCondition createWeatherCondition(PlaceFacadeBean place, String type, Rule rule)

参数说明

参数 必传 说明
place 对应城市天气。PlaceFacadeBean 对象请从 查询城市列表根据经纬度查询城市根据城市 ID 查询城市 接口查询。目前查询城市接口只支持国内。
type 条件类型。
rule 条件规则,详见 规则

示例代码

ValueRule tempRule = ValueRule.newInstance(
	"temp",  //类别:温度
	">",     //运算规则(">", "==", "<")
	20       //临界值,例子中代表 20 摄氏度
);
SceneCondition tempCondition = SceneCondition.createWeatherCondition(
	placeFacadeBean,   //城市类
	"temp",            //类别为温度
	tempRule           //数值类型规则
);

创建日出日落前后型条件

接口说明

日出日落型条件值日出日落前后几分钟的条件,日出日落时条件仍属于天气型条件。

SceneCondition createSunRiseSetCondition(PlaceFacadeBean city, Rule rule)

参数说明

参数 必传 说明
place 对应城市天气。PlaceFacadeBean 对象请从 查询城市列表根据经纬度查询城市根据城市 ID 查询城市 接口查询。目前查询城市接口只支持国内。
rule 条件规则,详见 规则

示例代码

SunSetRiseRule tempRule = SunSetRiseRule.newInstance(
	placeFacadeBean,  //城市类
	type,         //日出或者日落(SunType.SUNRISE/SunType.SUNSET)
	minutes        //日出日落前后分钟数(-300——300)
);
SceneCondition tempCondition = SceneCondition.createWeatherCondition(
	placeFacadeBean,   //城市类
	tempRule           //日出日落类型规则
);

创建设备型条件

接口说明

设备条件是指当一个设备处于某种状态时,会触发另一台或多台设备的预定任务。

为了避免循环控制,同一台设备无法同时作为条件和任务。

SceneCondition createDevCondition(DeviceBean devBean, String dpId, Rule rule)

参数说明

参数 说明
devBean 条件设备,DeviceBean查询条件设备列表 接口查询
dpId 条件 dpId
rule 条件规则

实例代码

BoolRule boolRule = BoolRule.newInstance(
	"dp1",    //"dp" + dpId
	true    //触发条件的 bool
);
SceneCondition devCondition = SceneCondition.createDevCondition(
	devBean,    //设备
	"1",        //dpId
	boolRule    //规则
);
SceneCondition createDevCondition(DeviceBean devBean, String dpId, Rule rule)

创建定时类型条件

接口说明

定时条件是指到达指定时间执行预定任务。

SceneCondition createTimerCondition(String display,String name,String type,Rule rule)

参数说明

参数 说明
display 用于展示的用户选定的时间条件
name 定时条件的名称
type 条件类型
rule 条件规则

示例代码

TimerRule timerRule = TimerRule.newInstance("Asia/Shanghai","0111110","16:00","20180310")
SceneCondition.createTimerCondition(
	"周一周二周三周四周五",
	"工作日定时",
	"timer",
	timerRule
	)

rule 参数代表的条件规则有五种:

  • 数值型

    以温度为例,数值型条件的最终表达式为 " temp > 20" 的格式。您可以从查询条件列表接口获得目前支持的温度最大值、最小值、粒度(步进),您可以从查询条件列表查询支持的温度等。在用户界面上完成配置后,调用 ValueRule.newInstance 方法构建规则,并用规则构成条件。

    示例代码

    ValueProperty tempProperty = (ValueProperty) conditionListBean.getProperty();       //数值型 Property
    
    int max = tempProperty.getMax();       //最大值
    int min = tempProperty.getMin();       //最小值
    int step = tempProperty.getStep();     //粒度
    String unit = tempProperty.getUnit();  //单位
    
    //温度大于 20 度
    ValueRule tempRule = ValueRule.newInstance(
    	"temp",  //类别
    	">",     //运算规则(">", "==", "<")
    	20       //临界值
    );
    SceneCondition tempCondition = SceneCondition.createWeatherCondition(
    	placeFacadeBean,   //城市
    	"temp",            //类别
    	tempRule           //规则
     );
    
    
  • 枚举型

    以天气状况为例, 枚举型条件的最终表达式为 "condition == rainy" 的格式,您可以从查询条件列表接口获得目前支持的天气状况,包括每种天气状况的 code 和名称。在用户界面上完成配置后,调用 EnumRule.newInstance 方法构建规则,并用规则构成条件。

    示例代码

    EnumProperty weatherProperty = (EnumProperty) conditionListBean.getProperty();  //枚举型 Property
    
    /**
    *{
    *	{"sunny", "晴天"},
    *	{"rainy", "雨天"}
    *}
    */
    HashMap<Object, String> enums = weatherProperty.getEnums();
    
    //天气为下雨
    EnumRule enumRule = EnumRule.newInstance(
    	"condition",  //类别
    	"rainy"        //选定的枚举值
    );
    SceneCondition weatherCondition = SceneCondition.createWeatherCondition(
    	placeFacadeBean,    //城市
    	"condition",        //类别
    	enumRule            //规则
    );
    
    
  • 布尔型

    布尔型常见于设备型条件, 最终表达式为 "dp1 == true" 的格式, 您需要调用 查询条件设备列表 接口查询支持配置智能场景的设备,然后根据设备 ID 查询该设备可支持的操作,详见查询设备支持的操作。在用户界面上完成配置后,调用 BoolRule.newInstance 方法构建规则,并用规则构成条件。

    示例代码

    BoolProperty devProperty = (BoolProperty) conditionListBean.getProperty();  //布尔型 Property
    
    /**
    {
    {true, "已开启"},
    {false, "已关闭"}
    }
    */
    HashMap<Boolean, String> boolMap = devProperty.getBoolMap();
    
    //当设备开启时
    BoolRule boolRule = BoolRule.newInstance(
    	"dp1",    //"dp" + dpId
    	true    //触发条件的 bool
    );
    SceneCondition devCondition = SceneCondition.createDevCondition(
    	devBean,    //设备
    	"1",        //dpId
    	boolRule    //规则
    );
    
  • 日出日落型

    日出日落的表达式是 Map 类型,即 {"Key": "Value"}。当用户完成条件配置后,调用 SunSetRiseRule.newInstance 由 SDK 完成 Map 数据组装,构成规则条件。

    示例代码

    public static TimerRule newInstance(String timeZoneId,String loops,String time,String date);
    
    //构建日出日落规则
    SunSetRiseRule sunRule = SunSetRiseRule.newInstance(city,sunType,10)
    
    /**
    * 所需要的参数与上述方法的参数意义相同,读取默认时区
    * @param city 当前 PlaceFacadeBean 对象
    * @param sunType 日出或日落类型(SunType.SUNRISE 或 SunType.SUNSET)
    * @param minutes 日出日落前后时间 -300 到 300 分钟
    * @return
    */
    public static SunSetRiseRule newInstance(PlaceFacadeBean city, SunType type, Integer minutes)
    
    /**
    * 创建日出日落条件
    * @param city 当前 PlaceFacadeBean 对象
    * @param rule  条件规则
    * @return
    */
    	public static SceneCondition createSunRiseSetCondition(PlaceFacadeBean city, Rule rule);
    
    		//创建日出日落条件
    		SceneCondition createSunRiseSetCondition(city,rule)
    
    
  • 定时型

    定时的表达式是 Map 类型,即 {"Key": "Value"}。当用户完成定时配置后,调用 TimerRule.newInstance 由 SDK 完成 Map 数据组装,构成规则条件。

    示例代码

    TimerProperty timerProperty = (TimerProperty)conditionListBean.
    getProperty();	//定时型 property
    
    //TimerRule.newInstance 提供两个构造方法,区别是是否传入时区。
    //如果不传入时区将读取默认时区
    /**
    *
    * @param timeZoneId 时区,格式例如"Asia/Shanghai"
    * @param loops 7 位字符串,每一位表示星期几,第一位表示星期日,第二位表示星期一,
    * 依次类推,表示在哪些天启用定时。0 表示未选中,1 表示选中.格式例如只选中星期一
    * 星期二:"0110000"。如果都未选中,则表示定时只执行一次,格式:"0000000"
    * @param time 时间,24 小时制。格式例如"08:00",如果用户使用 12 小时制,需要
    * 开发者将之转换为 24 小时制上传
    * @param date 日期,格式例如"20180310"
    * @return
    */
    public static TimerRule newInstance(String timeZoneId,String loops,String time,String date);
    
    //构建定时规则
    TimerRule timerRule = TimerRule.newInstance("Asia/Shanghai","0111110","16:00","20180310")
    
    /**
    * 所需要的参数与上述方法的参数意义相同,读取默认时区
    * @param loops
    * @param time
    * @param date
    * @return
    */
    public static TimerRule newInstance(String loops,String time,String date);
    
    /**
    * 创建定时条件
    * @param display 用于展示给用户的选定的时间
    * @param name  定时条件的名称
    * @param type  条件类型
    * @param rule  条件规则
    * @return
    */
    public static SceneCondition createTimerCondition(String display,String name,String type,Rule rule);
    
    //创建定时条件,以上面构建的定时规则为例
    SceneCondition.createTimerCondition(
    "周一周二周三周四周五",
    "工作日定时",
    "timer",
    timerRule
    )
    

查询条件设备

接口说明

查询支持设备条件的设备列表。

void getConditionDevList(long homeId, ITuyaResultCallback<List<DeviceBean>> callback);

参数说明

参数 说明
homeId 站点 ID
callback 回调

示例代码

TuyaHomeSdk.getSceneManagerInstance().getConditionDevList(homeId ,new ITuyaResultCallback<List<DeviceBean>>() {
	@Override
	public void onSuccess(List<DeviceBean> deviceBeans) {
	}

	@Override
	public void onError(String errorCode, String errorMessage) {
	}
});

查询条件设备的 DP

接口说明

选择场景条件时,选择了设备,需要根据选择设备的 deviceId 查询设备 DP 列表,进而选择某一个 DP,即指定该设备执行该 DP 作为该场景的执行条件。

/**
* 查询设备作为条件时的 dp 列表
*
* @param devId    设备 ID
* @param callback 回调
*/
void getDeviceConditionOperationList(String devId,ITuyaResultCallback<List<TaskListBean>> callback);

参数说明

参数 说明
devId 设备 ID
callback 回调

示例代码

TuyaHomeSdk.getSceneManagerInstance().getDeviceConditionOperationList(
	devId, //设备 ID
	new ITuyaResultCallback<List<TaskListBean>>() {
		@Override
		public void onSuccess(List<TaskListBean> conditionActionBeans) {
		}

		@Override
		public void onError(String errorCode, String errorMessage) {
		}
});
}

TaskListBean 主要属性定义:

字段 类型 说明
name String DP 名称,用于界面展示
dpId long 设备功能 ID
tasks HashMap<Object, String> DP 可配置的操作,格式为 {true, "已开启"}{false, "已关闭"}
type String 条件的类型 bool、value、enum 等

查询城市列表

接口说明

用于在创建天气条件时,选择城市。

目前城市列表暂时仅支持中国。

void getCityListByCountryCode(String countryCode, ITuyaResultCallback<List<PlaceFacadeBean>> callback);

参数说明

参数 说明
countryCode 国家码,例如中国为 cn
callback 回调

示例代码

TuyaHomeSdk.getSceneManagerInstance().getCityListByCountryCode(
	"cn",  //中国
	new ITuyaResultCallback<List<PlaceFacadeBean>>() {
		@Override
		public void onSuccess(List<PlaceFacadeBean> placeFacadeBeans) {
		}

		@Override
		public void onError(String errorCode, String errorMessage) {
		}
});

PlaceFacadeBean 类主要属性定义:

字段 类型 说明
area String 区域名称
province String 省份名称
city String 城市名称
cityId long 城市 ID

示例代码

TuyaHomeSdk.getSceneManagerInstance().getCityListByCountryCode(
	"cn",  //中国
	new ITuyaResultCallback<List<PlaceFacadeBean>>() {
		@Override
		public void onSuccess(List<PlaceFacadeBean> placeFacadeBeans) {
		}

		@Override
		public void onError(String errorCode, String errorMessage) {
		}
});

根据经纬度查询城市信息

接口说明

根据经纬度查询城市信息,用于展示已有的天气条件。

void getCityByLatLng(String lon, String lat, ITuyaResultCallback<PlaceFacadeBean> callback);

参数说明

参数 说明
lon 经度
lat 纬度
callback 回调

示例代码

TuyaHomeSdk.getSceneManagerInstance().getCityByLatLng(
	String.valueOf(longitude), //经度
	String.valueOf(latitude),   //纬度
	new ITuyaResultCallback<PlaceFacadeBean>() {
		@Override
		public void onSuccess(PlaceFacadeBean placeFacadeBean) {
		}

		@Override
		public void onError(String errorCode, String errorMessage) {
		}
});

根据城市 ID 查询城市信息

接口说明

根据城市 ID 查询城市信息,用于展示已有的天气条件。城市 ID 可以在查询城市列表接口中查询。

void getCityByCityIndex(long cityId, ITuyaResultCallback<PlaceFacadeBean> callback);

参数说明

参数 说明
cityId 城市 ID
callback 回调

示例代码

TuyaHomeSdk.getSceneManagerInstance().getCityByCityIndex(
	cityId, //城市 ID
	new ITuyaResultCallback<PlaceFacadeBean>() {
		@Override
		public void onSuccess(PlaceFacadeBean placeFacadeBean) {
		}

		@Override
		public void onError(String errorCode, String errorMessage) {
		}
});

场景动作

场景动作指当条件触发时执行的控制动作。手动场景可执行的动作包含 智能设备类型群组设备类型自动化场景类型延时类型。自动化场景可执行的动作包含 智能设备类型群组设备类型手动场景类型自动化场景类型延时类型消息类型。用户可设定的任务视用户的设备而定,请注意,并不是每一款产品都支持场景。

创建设备类型动作

接口说明

用于创建设备类型场景动作。

/**
* 创建设备类型场景动作
*
* @param devId 设备 ID
* @param tasks 要执行的任务 格式: { dpId: DP 值 }
*                          例:
*                          {
*                              "1": true,
*                          }
* @return 场景动作
*/
SceneTask createDpTask(@NonNull String devId, HashMap<String, Object> tasks)

参数说明

参数 说明
devId 设备 ID
tasks 要执行的任务 格式为 { dpId: DP 值 },例如 {"1":true}

示例代码

HashMap<String, Object> taskMap = new HashMap<>();
taskMap.put("1", true); //开启设备
SceneTask task = TuyaHomeSdk.getSceneManagerInstance().getInstance().createDpTask(
	devId,      //设备 ID
	taskMap     //设备动作
);

查询执行动作支持的设备

接口说明

查询支持场景动作的设备列表,用于选择添加到要执行的动作中。

void getTaskDevList(long homeId, ITuyaResultCallback<List<DeviceBean>> callback);

参数说明

参数 说明
homeId 站点 ID
callback 回调

DeviceBean 主要属性

字段 类型 说明
name String 设备名称
productId String 产品 ID
devId String 设备 ID
iconUrl String 图标地址
isOnline Boolean 设备在线状态,注意,设备在线状态的查询请调用 getIsOnline()

示例代码

TuyaHomeSdk.getSceneManagerInstance().getTaskDevList(homeId,new ITuyaResultCallback<List<DeviceBean>>() {
	@Override
	public void onSuccess(List<DeviceBean> deviceBeans) {
	}

	@Override
	public void onError(String errorCode, String errorMessage) {
	}
});

根据设备 ID 查询可执行的动作

接口说明

用于在创建动作时,查询设备可执行的任务。设备 ID 可以从 查询执行动作支持的设备列表 查询。

void getDeviceTaskOperationList(String devId, ITuyaResultCallback<List<TaskListBean>> callback);

参数说明

参数 说明
devId 设备 ID
callback 回调

TaskListBean 主要属性定义:

字段 类型 说明
name String DP 名称,用于界面展示
dpId long 设备功能 ID
tasks HashMap<Object, String> DP 可配置的操作,格式为 {true, "已开启"}{false, "已关闭"}
type String 条件的类型 bool、value、enum 等

示例代码

TuyaHomeSdk.getSceneManagerInstance().getDeviceTaskOperationList(
	devId, //设备 ID
	new ITuyaResultCallback<List<TaskListBean>>() {
		@Override
		public void onSuccess(List<TaskListBean> conditionActionBeans) {
		}

		@Override
		public void onError(String errorCode, String errorMessage) {
		}
});

创建群组设备类型动作

接口说明

用于创建群组设备类型动作。

SceneTask createDpGroupTask(@NonNull long groupId, HashMap<String, Object> tasks);

参数说明

参数 说明
groupId 群组 ID
tasks 要执行的任务,格式为 { dpId: DP 值 },例如 {"1":true}

示例代码

HashMap<String, Object> taskMap = new HashMap<>();
taskMap.put("1", true); //开启设备
TuyaHomeSdk.getSceneManagerInstance().getInstance().createDpGroupTask(
	groupId, 	//群组 ID
	taskMap 	//设备动作
);

查询执行动作中包含群组设备的设备

接口说明

查询支持场景动作的设备列表,包含普通设备、群组设备、红外设备,用于选择添加到要执行的动作中。

getTaskDevAndGoupList(long homeId, ITuyaResultCallback<SceneTaskGroupDevice> callback)

参数说明

参数 说明
homeId 站点 ID
callback 回调

SceneTaskGroupDevice 主要属性定义:

字段 类型 说明
devices List<DeviceBean> 普通设备列表
goups List<GroupBean> 群组设备列表

示例代码

TuyaHomeSdk.getSceneManagerInstance().getTaskDevAndGoupList(homeId, new ITuyaResultCallback<SceneTaskGroupDevice>() {
				@Override
				public void onSuccess(SceneTaskGroupDevice sceneTaskGroupDevice) {
					List<DeviceBean> deviceBeans = sceneTaskGroupDevice.getDevices();
					List<GroupBean> groupBeans = sceneTaskGroupDevice.getGoups();
					...
				}

				@Override
				public void onError(String errorCode, String errorMessage) {
					...
				}
			});

根据群组 ID 查询可执行的动作

接口说明

用于在创建动作时,查询群组可执行的任务。群组 ID 可以从 查询执行动作中包含群组设备的设备 查询。

void getDeviceTaskOperationListByGroup(String goupId, ITuyaResultCallback<List<TaskListBean>> callback)

参数说明

参数 说明
groupId 群组 ID
callback 回调

示例代码

TuyaHomeSdk.getSceneManagerInstance().getDeviceTaskOperationListByGroup(groupId, new ITuyaResultCallback<List<TaskListBean>>() {
				@Override
				public void onSuccess(List<TaskListBean> result) {

				}

				@Override
				public void onError(String errorCode, String errorMessage) {

				}
			});

创建场景类型动作

接口说明

用于创建场景类型动作,包含手动场景和自动化场景。参数可以通过 场景列表接口 查询。

SceneTask createSceneTask(SceneBean sceneBean);

参数说明

参数 说明
sceneBean 场景或自动化对象

示例代码

TuyaHomeSdk.getSceneManagerInstance().getInstance().createSceneTask(scnenBean);

涂鸦通过 sceneBean 中的 isEnabled 字段来设置当前选择的自动化场景开启或者关闭。true 为启用,false为停用。如果条件列表 sceneBean.getConditions() 为空,则选择的是一键执行的动作,您需要传入 ruleTrigger 参数。

创建延时类型动作

接口说明

用于创建延时类型动作。SDK 版本 3.13.3 之后最大支持 300 分钟的延时时间,3.13.3 之前只支持 59 分钟 59 秒。如果业务上使用的是带小时的时间,需要转成分钟后传入。

SceneTask createDelayTask(int minute, int second);

参数说明

参数 说明
minute 分钟数
second 秒数

示例代码

TuyaHomeSdk.getSceneManagerInstance().getInstance().createDelayTask(
	2,  //分钟
	2	//秒
);

创建消息类型动作

接口说明

用于创建消息类型动作。

SceneTask createPushMessage();

示例代码

TuyaHomeSdk.getSceneManagerInstance().getInstance().createPushMessage();

场景排序

接口说明

对已经存在的场景或自动化进行排序。注意,只能单独对场景或自动化排序,不能混排。

void sortSceneList(long homeId, List<String> sceneIds, IResultCallback callback)

参数说明

参数 说明
homeId 站点 ID
sceneIds 手动场景或自动化场景已排序好的的 ID
callback 回调

示例代码

TuyaHomeSdk.getSceneManagerInstance().sortSceneList(
	homeId, //站点列表
	sceneIds,//场景 ID 列表
	new IResultCallback() {
		@Override
		public void onSuccess() {
		}

		@Override
		public void onError(String errorCode, String errorMessage) {
		}
});

查询场景背景图片

接口说明

查询场景支持的背景图片 URL 列表。

void getSceneBgs(ITuyaResultCallback<ArrayList<String>> callback);

参数说明

参数 说明
callback 回调

示例代码

TuyaHomeSdk.getSceneManagerInstance().getSceneBgs(new ITuyaResultCallback<ArrayList<String>>() {
		@Override
		public void onSuccess(ArrayList<String> strings) {

		}

		@Override
		public void onError(String s, String s1) {

		}
	});

单个场景操作

SDK 提供了单个场景的创建、修改、执行、删除四种操作,除了创建其他操作需要使用场景 ID 进行初始化,场景 ID 可以从 查询场景列表接口 的接口中查询。

添加场景

接口说明

添加场景需要传入站点的 ID、场景名称、是否显示在首页、背景图片的 URL、条件列表、任务列表(至少一个任务)、前置条件列表(生效时间段,可不传,默认全天生效)、满足任一条件还是满足所有条件时执行。您也可以只设置名称和任务,背景图片,不设置条件,但是用户需要手动执行。

方法原型

public void createScene(long homeId, String name, boolean stickyOnTop, String background, List<SceneCondition> conditions, List<SceneTask> tasks, List<PreCondition> preConditions, int matchType, final ITuyaResultCallback<SceneBean> callback);

参数说明

参数 说明
homeId 站点 ID
name 场景名称
stickyOnTop 是否显示在首页标识
background 背景图 URL,只能使用 查询场景背景图片 接口中提供的背景图
preConditions 生效时间段,以前置条件对象集合的形式传入,可不传,默认全天生效
conditions 场景触发条件
tasks 场景执行任务
matchType 条件的匹配类型,逻辑为 或者 ,取值:
  • SceneBean.MATCH_TYPE_OR:表示满足任意条件执行(默认值)
  • SceneBean.MATCH_TYPE_AND:表示满足所有条件
callback 回调

PreCondition 属性定义:

字段 类型 说明
id String 生效时间段 ID,场景创建完成后,云端自动生成,无需手动设置
condType String 当前请设置 PreCondition.TYPE_TIME_CHECK,代表预置条件为生效时间段类型
expr PreConditionExpr 前置条件规则对象

PreConditionExpr 属性定义:

字段 类型 说明
loops String 表示在哪些天自动化生效,由 7 位字符串组成,每一位表示星期几,第一位表示星期日,第二位表示星期一,依次类推。0 表示未选中,1 表示选中。例如:
  • 只在星期一和星期二生效,格式为 0110000
  • 如果都未选中,则表示只生效一次,格式为 0000000
start String 开始时间(只有 TIMEINTERVAL_CUSTOM 自定义类型设置才会生效)
end String 结束时间(只有 TIMEINTERVAL_CUSTOM 自定义类型设置才会生效)
timeInterval String 生效时间段类型:
  • PreCondition.TIMEINTERVAL_ALLDAY:全天
  • TIMEINTERVAL_NIGHT:晚上
  • TIMEINTERVAL_DAYTIME:白天,TIMEINTERVAL_CUSTOM:自定义
cityId String 城市 ID,可以通过 查询城市列表 查询
timeZoneId String 生效时区
cityName String 城市名称

示例代码

//生效时间段数据创建,可以为空
PreCondition preCondition = new PreCondition();
PreConditionExpr expr = new PreConditionExpr();
expr.setCityName("杭州");
expr.setCityId("xxxxx");//cityId 可通过城市列表接口查询
expr.setStart("00:00");
expr.setEnd("23:59");
expr.setLoops("1111111");
expr.setTimeInterval(PreCondition.TIMEINTERVAL_ALLDAY);
preCondition.setCondType(PreCondition.TYPE_TIME_CHECK);
expr.setTimeZoneId(TimeZone.getDefault().getID());
preCondition.setExpr(expr);
List<PreCondition> preConditions = new ArrayList<>();
preConditions.add(preCondition);

TuyaHomeSdk.getSceneManagerInstance().createScene(
	100001,
	"Morning", //场景名称
	"https://images.png"
	true,  //是否显示在首页
	preConditions, //生效时间段,可不传
	conditions, //条件
	tasks,     //任务
	SceneBean.MATCH_TYPE_AND, //执行条件类型
	new ITuyaResultCallback<SceneBean>() {
		@Override
		public void onSuccess(SceneBean sceneBean) {
			Log.d(TAG, "createScene Success");
		}

		@Override
		public void onError(String errorCode, String errorMessage) {
		}
});

编辑场景

接口说明

用于修改场景,成功后会返回新的场景数据。

该接口只能用于修改场景,请勿传入新建的 SceneBean 对象。

void modifyScene(SceneBean sceneReqBean, ITuyaResultCallback<SceneBean> callback);

参数说明

参数 说明
sceneReqBean 修改后的场景对象

示例代码

sceneBean.setName("New name");  //更改场景名称
sceneBean.setConditions(Collections.singletonList(condition)); //更改场景条件
sceneBean.setActions(tasks); //更改场景动作

String sceneId = sceneBean.getId();  //查询场景 ID 以初始化
TuyaHomeSdk.newSceneInstance(sceneId).modifyScene(
	sceneBean,  //修改后的场景数据类
	new ITuyaResultCallback<SceneBean>() {
		@Override
		public void onSuccess(SceneBean sceneBean) {
			Log.d(TAG, "Modify Scene Success");
		}

		@Override
		public void onError(String errorCode, String errorMessage) {
		}
});

删除场景

接口说明

void deleteScene(IResultCallback callback);

参数说明

参数 说明
callback 回调

示例代码

String sceneId = sceneBean.getId();

TuyaHomeSdk.newSceneInstance(sceneId).deleteScene(new
IResultCallback() {
	@Override
	public void onSuccess() {
		Log.d(TAG, "Delete Scene Success");
	}

	@Override
	public void onError(String errorCode, String errorMessage) {
	}
});

手动执行场景

接口说明

这个方法只管发送指令到云端执行场景,具体设备执行成功与否,需要通过 TuyaHomeSdk.newDeviceInstance(devId).registerDevListener() 监听设备的 DP 变化。

void executeScene(IResultCallback callback);

参数说明

参数 说明
callback 回调

示例代码

String sceneId = sceneBean.getId();
TuyaHomeSdk.newSceneInstance(sceneId).executeScene(new IResultCallback() {
	@Override
	public void onSuccess() {
		Log.d(TAG, "Excute Scene Success");
	}

	@Override
	public void onError(String errorCode, String errorMessage) {
	}
});

开启或关闭自动化场景

只有自动化场景才可以开启和关闭。

接口说明

void enableScene(String sceneId, final IResultCallback callback);

void disableScene(String sceneId, final IResultCallback callback);

参数说明

参数 说明
sceneId 场景 ID
callback 回调

示例代码

String sceneId = sceneBean.getId();

TuyaHomeSdk.newSceneInstance(sceneId).enableScene(sceneId,new
IResultCallback() {
	@Override
	public void onSuccess() {
		Log.d(TAG, "enable Scene Success");
	}

	@Override
	public void onError(String errorCode, String errorMessage) {
	}
});

TuyaHomeSdk.newSceneInstance(sceneId).disableScene(sceneId,new
IResultCallback() {
	@Override
	public void onSuccess() {
		Log.d(TAG, "disable Scene Success");
	}

	@Override
	public void onError(String errorCode, String errorMessage) {
	}
});

销毁场景

接口说明

如果退出场景的 activity,应该调用场景的销毁方法,以回收内存,提升体验。

示例代码

TuyaHomeSdk.getSceneManagerInstance().onDestroy();
TuyaHomeSdk.newSceneInstance(sceneId).onDestroy();

注册场景信息变更监听

接口说明

场景添加、编辑、删除、执行、开启和关闭操作的监听。

void registerSmartUpdateListener(ISmartUpdateListener listener);

参数说明

参数 说明
listener 场景状态监听

ISmartUpdateListener 接口

public interface ISmartUpdateListener {
	/**
	* 自动化场景更新
	*/
	void onSmartUpdateListener();

	/**
	* 推荐场景加入收藏更新
	*/
	void onCollectionsUpdateListener();
}

示例代码

TuyaHomeSdk.getSceneManagerInstance().registerSmartUpdateListener(new ISmartUpdateListener() {
			@Override
			public void onSmartUpdateListener() {

			}

			@Override
			public void onCollectionsUpdateListener() {

			}
		});

注销场景信息变更监听

接口说明

当不需要场景信息变更监听时,注销场景监听器。

示例代码

TuyaHomeSdk.getSceneManagerInstance().unRegisterSmartUpdateListener(mSmartUpdateListener);

场景日志

查询场景执行日志

接口说明

getSceneLogs(long homeId, long startTime, long endTime, int size, String lastId, long lastRecordTime, ITuyaResultCallback<SceneLogResBean> callback)

参数说明

参数 说明
homeId 站点 ID
startTime 日志记录的开始时间
endTime 日志记录的截止时间
size 分页查询的数据条数
lastId 上一次查询日志的最后一条数据的 eventId(用于分页加载更多数据)
lastRecordTime 上一次查询日志的最后一条数据的 execTime(用于分页加载更多数据)
callback 回调

代码示例

TuyaHomeSdk.getSceneManagerInstance().getSceneLogs(homeId, startTime, endTime, size, lastId, lastRecordTime, new ITuyaResultCallback<SceneLogResBean>() {
	@Override
	public void onSuccess(SceneLogResBean result) {

	}

	@Override
	public void onError(String errorCode, String errorMessage) {

	}
});

查询日志详情

接口说明

根据日志 ID 查询单条日志详情。

getSceneLogDetail(long homeId, String eventId, long startTime, long endTime, long returnType, ITuyaResultCallback<ArrayList<SceneLogDetailBean>> callback);

参数说明

参数 说明
homeId 站点 ID
eventId 日志 ID
startTime 日志记录的开始时间
endTime 日志记录的截止时间
returnType 日志类型:
  • 0:全部日志
  • 1:失败日志
callback 回调

代码示例

TuyaHomeSdk.getSceneManagerInstance().getSceneLogDetail(homeId, eventId, startTime, endTime, type, new ITuyaResultCallback<ArrayList<SceneLogDetailBean>>() {
    @Override
    public void onSuccess(ArrayList<SceneLogDetailBean> result) {
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
    }
});

查询设备日志列表

接口说明

提供给面板调用。

getSceneDevLogs(long homeId, String devId, long startTime, long endTime, int size, String lastId, long lastRecordTime, ITuyaResultCallback<SceneLogResBean> callback)

参数说明

参数 说明
homeId 站点 ID
devId 设备 ID
startTime 日志记录的开始时间
endTime 日志记录的截止时间
size 分页查询的数据条数
lastId 上一次查询日志的最后一条数据的 eventId(用于分页加载更多数据)
lastRecordTime 上一次查询日志的最后一条数据的 execTime(用于分页加载更多数据)
callback 回调

代码示例

TuyaHomeSdk.getSceneManagerInstance().getSceneDevLogs(homeId, devId, startTime, endTime, size, lastId, lastRecordTime, new ITuyaResultCallback<SceneLogResBean>() {
	@Override
	public void onSuccess(SceneLogResBean result) {
	}

	@Override
	public void onError(String errorCode, String errorMessage) {
	}
});