智能场景
调用API
import {TuyaSceneApi} from 'tuyasmart-home-sdk'
import {TuyaSceneApi} from 'tuyasmart-home-sdk'简介
智能分为场景和自动化。场景是用户添加动作,手动触发;自动化是由用户设定条件,当条件触发后自动执行设定的动作。
涂鸦智能Android SDK中,智能包括场景和自动化的统一管理接口
TuyaSceneApi
以下文档中手动场景和自动化场景简称为场景。
获取场景列表
【描述】
获取场景列表,当场景首页初始化时使用。
【方法原型】
/**
 * 获取场景列表
 * @param homeId 家庭Id
 * @param callback 回调
 */
TuyaSceneApi.getSceneList({
    homeId:'',
})其中,Scene返回的json值标识为如下
/**
 *  获取场景id
 * @return 场景id
 */
id
/**
 *  获取场景名称
 * @return 场景名称
 */
Name
/**
 *  获取场景条件 
 * @return 场景条件 数组
 */
Conditions
/**
 *  获取场景任务
 * @return 场景任务 数组
 */
Actions【代码范例】
TuyaSceneApi.getSceneList({
    homeId:'',
}).then(data=>{}).catch(e=>{})自动化条件                ---contionLists
用户可设置的条件包括天气状况、设备状况、定时。  
天气型
天气条件包括温度、湿度、天气、PM2.5、空气质量、日出日落, 可自由选定城市。根据用户账号中设备的不同,可选择的天气条件也不同。
/** * 创建天气型条件 * * @param place 天气城市 * @param type 条件类型 * @param rule 条件规则 * @return */ public static SceneCondition createWeatherCondition( PlaceFacadeBean place, String type, Rule rule)注: PlaceFacade类对象请从[获取城市列表](####10.2.4),[根据经纬度获取城市](####10.2.6), [根据城市id获取城市](####10.2.5)接口获取。 目前获取城市接口只支持国内。
- 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。当用户完成定时配置后,调用
TimerRule.newInstance由SDK完成Map数据组装,构成规则条件。例:
```java 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
  )
```获取条件列表
【接口描述】
获取当前用户支持配置的条件的列表,通常用于添加或修改条件的第一步。
【方法原型】
/**
 * 获取条件列表
 * @param showFahrenheit 是否显示华氏度
 * @param callback 回调
 */
void getConditionList(boolean showFahrenheit,ITuyaResultCallback<List<ConditionListBean>> callback);其中, ConditionListBean提供的接口为
/**
 * 获取条件类别
 *
 * @return 类别 [1]
 */
public String getType() {
    return type;
}·
/**
 * 获取条件名称
 *
 * @return 名称
 */
public String getName() {
    return name;
}
/**
 * 获取Property [2]
 *
 * @return Property 
 */
public IProperty getProperty() {
    return property;
}注:
目前支持的天气条件类别及其名称和Property类型
名称
Type
Property Type
温度
Temp
ValueProperty
湿度
humidity
EnumProperty
天气
condition
EnumProperty
PM2.5
pm25
EnumProperty
空气质量
aqi
EnumProperty
日出日落
sunsetrise
EnumProperty
定时
timer
TimerProperty
Property是涂鸦智能中一种常用的数据结构,可以用来控制设备和其他功能。目前提供四种Property: 数值型,枚举型,布尔型和用于定时的类型(与条件中的数值型,枚举型,布尔型相对应), 每种Property提供不同的访问接口。详见前文规则介绍处。
【代码范例】
TuyaHomeSdk.getSceneManagerInstance().getConditionList(new ITuyaDataCallback<List<ConditionListBean>>() {
    @Override
    public void onSuccess(List<ConditionListBean> conditionActionBeans) {
    }
    @Override
    public void onError(String errorCode, String errorMessage) {
    }
});获取条件设备列表
【描述】
获取可用于条件设置的设备列表。
【方法原型】
/**
 * 获取条件中的可选设备列表
 * @param homeId 家庭的id
 * @param callback 回调
 */
void getConditionDevList(long homeId, ITuyaResultCallback<List<DeviceBean>> callback);【代码范例】
TuyaHomeSdk.getSceneManagerInstance().getConditionDevList(homeId ,new ITuyaResultCallback<List<DeviceBean>>() {
    @Override
    public void onSuccess(List<DeviceBean> deviceBeans) {
    }
    @Override
    public void onError(String errorCode, String errorMessage) {
    }
});根据设备id获取设备任务
【描述】
用于获取在选择设备具体的触发条件时, 可选择的任务。
【方法原型】
  /**
     * 获取设备支持的任务条件列表
     *
     * @param devId    设备id
     * @param callback 回调
     */
    void getDeviceConditionOperationList(String devId, ITuyaResultCallback<List<TaskListBean>> callback);其中, TaskListBean提供以下接口:
/**
 *  获取dp点名称, 用于界面展示
 *
 * @return dp点名称
 */
public String getName() {
    return name;
}
/**
 *  获取dpId
 *
 * @return dpId
 */
public long getDpId() {
    return dpId;
}
/**
 *  获取该dp点可配置的操作
 *
 *   格式:
 *     {
 *       {true, "已开启"},
 *       {false, "已关闭"}
 *     }
 *
 * @return 
 */
public HashMap<Object, String> getTasks() {
    return tasks;
}
/**
 *  获取该条件的类型bool、value、enum等
 */
public String getType() {
    return type;
}【代码范例】
TuyaHomeSdk.getSceneManagerInstance().getDeviceConditionOperationList(
    devId, //设备id
    new ITuyaDataCallback<List<TaskListBean>>() {
        @Override
        public void onSuccess(List<TaskListBean> conditionActionBeans) {
        }
        @Override
        public void onError(String errorCode, String errorMessage) {
        }
});
}获取城市列表
【描述】
用于在创建天气条件时,选择城市。 注: 目前城市列表暂时仅支持中国。
【方法原型】
/**
 * 根据国家码获取城市列表
 *
 * @param countryCode 国家码
 * @param callback    回调
 */
TuyaSceneApi.getCityListByCountryCode(countryCode: "cn")其中, Placejsonbean如下:
/**
 * 获取区域名称
 *
 * @return 区域名称
 */
area
/**
 * 获取省份名称
 *
 * @return 省份名称
 */
province
/**
 * 获取城市名称
 *
 * @return 城市名称
 */
city
/**
 * 获取城市id
 *
 * @return 城市id
 */
cityId【代码范例】
    TuyaSceneApi.getCityListByCountryCode({ countryCode: "cn" })
      .then(data => {
        console.log("--->getcontry", data);
      })
      .catch(err => {
        console.warn("--->err", err);
      });根据城市id获取城市信息
【描述】
根据城市id获取城市信息, 用于展示已有的天气条件。城市id可以在获取城市列表接口中获取。
【方法原型】
/**
 * 根据城市id获取城市信息
 *
 * @param cityId   城市id{@link PlaceFacadeBean}
 * @param callback 回调
 */
 getCityByCityIndex({cityId}) //number【代码范例】
TuyaSceneApi.getCityByCityIndex({cityId:'ddsds'}).then(data=>{}).catch(err=>{
})根据经纬度获取城市信息
【描述】
根据经纬度获取城市信息, 用于展示已有的天气条件。
【方法原型】
/**
 * 根据经纬度获取城市信息
 *
 * @param lon      经度
 * @param lat      纬度
 * @param callback 回调
 */
TuyaSceneApi.getCityByLatLng.({
lon:'',
lat:'',
})【代码范例】
TuyaSceneApi.getCityByLatLng.({
lon:'',
lat:'',
}).then(data=>{}).catch(err=>{
})场景动作
场景动作指当条件触发时执行的控制设备动作。手动场景可执行的动作包含自动化场景和智能设备,自动化场景可执行的动作包含手动场景、其他自动化场景和智能设备。用户可设定的任务视用户的设备而定,请注意,并不是每一款产品都支持场景。
获取执行动作支持的设备列表
【描述】
获取支持场景动作的设备列表, 用于选择添加到要执行的动作中。
【方法原型】
/**
 * 获取动作中的可选设备列表
 * @param homeId 家庭id
 * @param callback 回调
 */
getTaskDevList({homeId:})其中, Device提供以下json数据类型:
/**
 *  获取设备名称
 * 
 * @return 设备名称
 */
name
/**
 *  产品id
 * 
 * @return 产品id
 */
productId
/**
 *  获取设备id
 * 
 * @return 设备id
 */
devId
/**
 *  获取设备图标
 * 
 * @return 图标地址
 */
iconUrl【代码范例】
TuyaSceneApi.getTaskDevList({homeId:''}).then(data=>{
}).catch(err=>{
})根据设备id获取可执行的动作
【描述】
用于在创建动作时, 获取设备可执行的任务。设备id可以从获取执行动作支持的设备列表获取
【方法原型】
/**
* 获取设备可以执行的操作
*
* @param devId    设备id
* @param callback 回调
*/
TuyaSceneApi.getDeviceTaskOperationList({devId:''})其中, TaskList提供以下json数据类型:
/**
 *  获取dp点名称, 用于界面展示
 *
 * @return dp点名称
 */
name
/**
 *  获取dpId
 *
 * @return dpId
 */
dpId
/**
 *  获取该dp点可配置的操作
 *
 *   格式:
 *     {
 *       {true, "已开启"},
 *       {false, "已关闭"}
 *     }
 *
 * @return 
 */
tasks
/**
 *  获取该条件的类型bool、value、enum等
 */
type【代码范例】
TuyaSceneApi.getDeviceTaskOperationList({devId:''}).then(data=>{
}).catch(err=>{
})创建场景
【描述】
用于将条件和动作组装成场景并创建新的场景, 成功后会返回场景数据。 两种创建方法,相对应的涂鸦的场景和自动化 一个没带条件conditionList,一个有带conditionList
【方法原型】
/**
 * 创建场景
 *
 * @param homeId      家庭id
 * @param name       场景名称
 * @param stickyOnTop 是否显示在首页
 * @param devIds 设备列表
 * @param conditions 场景触发条件 {@link SceneCondition}
 * @param tasks      ActionList {@link SceneTask}
 * @param matchType  场景条件与或关系  SceneBean.MATCH_TYPE_OR 表示满足任意条件执行,默认值;SceneBean.MATCH_TYPE_AND 表示满足所有条件
 */
  TuyaSceneApi.createScene({
              homeId: '',
              name: this.state.name,
              stickyOnTop: false,
              devIds: devLists,
              background: "a",
              matchType: "MATCH_TYPE_OR",
              tasks: ActionLists
            })/**
 * 创建场景
 *
 * @param homeId      家庭id
 * @param name       场景名称
 * @param conditions 场景触发条件 {@link SceneCondition}
 * @param tasks      场景执行任务 {@link SceneTask}
 * @param matchType  场景条件与或关系  SceneBean.MATCH_TYPE_OR 表示满足任意条件执行,默认值;SceneBean.MATCH_TYPE_AND 表示满足所有条件
 * @param callback   回调
 */
    TuyaSceneApi.createAutoScene({
              homeId: "",
              name: this.state.name,
              stickyOnTop: false,
              devIds: devLists,
              background: "a",
              matchType: "MATCH_TYPE_OR",
              tasks: ActionLists,
              conditionList:this.state.ConditionList
            })【代码范例】
//场景
     TuyaSceneApi.createScene({
              homeId: 100001,
              name: this.state.name,
              stickyOnTop: false,
              devIds: devLists,
              background: "a",
              matchType: "MATCH_TYPE_OR",
              tasks: ActionLists
            })
              .then(data => {
                console.log("--->data", data);
                DeviceStorage.delete("Action");
                this.props.navigation.navigate("HomePage");
              })
              .catch(err => {
                console.log("-->err", err);
              });
//自动化
      TuyaSceneApi.createAutoScene({
              homeId: 100001,
              name: this.state.name,
              stickyOnTop: false,
              devIds: devLists,
              background: "a",
              matchType: "MATCH_TYPE_OR",
              tasks: ActionLists,
              conditionList:this.state.ConditionList
            })
              .then(data => {
                console.log("--->data", data);
              })
              .catch(err => {
                console.log("-->err", err);
              });10.5 修改场景
【描述】
用于修改场景, 成功后会返回新的场景数据。
【方法原型】
/**
 *  修改场景
 * 
 * @param sceneReqBean 场景数据类
 * @param callback 回调
 */
void modifyScene(SceneBean sceneReqBean, ITuyaResultCallback<SceneBean> callback);注: 该接口只能用于修改场景,请勿传入新建的SceneBean对象。
【代码范例】
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) {
        }
});执行场景
【描述】
用于执行手动场景。
【方法原型】
/**
 * 执行场景动作
 *
 * @param callback 回调
 */
executeScene({sceneId:''})【代码范例】
TuyaSceneApi.executeScene({sceneId:''}).then(data=>{
}).catch(err=>{
})删除场景
【描述】
用于删除场景。
【方法原型】
/**
 * 删除场景
 *
 * @param callback 回调
 */
TuyaSceneApi.deleteScene({sceneId:'123123'})【代码范例】
TuyaSceneApi.deleteScene({sceneId:'123123'}).then(data=>{
}).catch(err=>{
})开启关闭自动化场景
【描述】
用于开启或关闭自动化场景
【方法原型】
/**
 * 开启自动化场景
 * @param sceneId  
 * @param callback 回调
 */
enableScene({sceneId:''})/**
 * 关闭自动化场景
 * @param sceneId  
 * @param callback 回调
 */
TuyaSceneApi.disableScene({sceneId:'123123'}).then(data=>{
}).catch(err=>{
})【代码范例】
TuyaSceneApi.enableScene({sceneId:'123123'}).then(data=>{
}).catch(err=>{
})
TuyaSceneApi.disableScene({sceneId:'123123'}).then(data=>{
}).catch(err=>{
})场景排序
【描述】
手动场景或自动化场景排序。注意:只能单独对手动场景或自动化场景排序,不能混排。
【方法原型】
/**
 * 场景排序
 * @param homeId 家庭id
 * @param sceneIds 手动场景或自动化场景已排序好的的id列表
 * @param callback    回调
 */
TuyaSceneApi.sortSceneList({homeId:123123,sceneIds:['123','456]})【代码范例】
TuyaSceneApi.sortSceneList({homeId:123123,sceneIds:['123','456]}).then(data=>{}).catch(err=>{
})销毁
【描述】
如果退出场景的activity,应该调用场景的销毁方法,以回收内存,提升体验
【代码范例】
TuyaSceneApi.onDestroy()Last updated
Was this helpful?