智能

简介

智能分为场景和自动化。场景是用户添加动作,手动触发;自动化是由用户设定条件,当条件触发后自动执行设定的动作。

涂鸦智能Android SDK中,智能包括场景和自动化的统一管理接口

TuyaHomeSdk.getSceneManagerInstance()

和独立操作接口

TuyaHomeSdk.newSceneInstance(String sceneId),独立操作接口需要用场景id初始化,场景id可以在获取场景列表接口的返回结果中获取。

以下文档中手动场景和自动化场景简称为场景。

获取场景列表

【描述】

获取场景列表,当场景首页初始化时使用。通过SceneBean的getConditions()判断手动场景和自动化,当手动场景时值为空

【方法原型】
/**
 * 获取场景列表
 * @param homeId 家庭Id
 * @param callback 回调
 */
public void getSceneList(long homeId,ITuyaDataCallback<List<SceneBean>> callback)

其中,SceneBean的接口定义如下

/**
 *  获取场景id
 * @return 场景id
 */
public String getId()

/**
 *  获取场景名称
 * @return 场景名称
 */
public String getName()

/**
 *  获取场景条件 
 * @return 场景条件
 */
public List<SceneCondition> getConditions()


/**
 *  获取场景任务
 * @return 场景任务
 */
public List<SceneTask> getActions()

/**
 * 获取场景id
 * @return 场景id
 */
public String getId()

/**
 * 获取满足条件的类型
 * 满足任意条件:1,满足所有条件:2
 * @return 满足条件类型
 */
public int getMatchType()

/**
 * 获取自动化是否启用
 * @return 自动化是否启用
 */
public boolean isEnabled()
【代码范例】
TuyaHomeSdk.getSceneManagerInstance().getSceneList(long homeId, new ITuyaResultCallback<List<SceneBean>>() {
    @Override
    public void onSuccess(List<SceneBean> result) {
    }

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

自动化条件

用户可设置的条件包括天气状况、设备状况、定时。 ​

  • 天气型

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

        /**
         * 创建天气型条件
         *
         * @param place 天气城市 
         * @param type  条件类型
         * @param rule  条件规则
         * @return
         */
        public static SceneCondition createWeatherCondition(
            PlaceFacadeBean place, 
            String type,
            Rule rule)
    

注: PlaceFacadeBean类对象请从获取城市列表,根据经纬度获取城市, 根据城市id获取城市接口获取。 ​ 目前获取城市接口只支持国内。

  • 设备型

    设备条件是指当一个设备处于某种状态时,会触发另一台或多台设备的预定任务。为了避免循环控制,同一台设备无法同时作为条件和任务。

        /**
         * 创建设备型条件
         *
         * @param devBean 条件设备
         * @param dpId    条件dpId
         * @param rule    条件规则
         * @return
         */
        public static SceneCondition createDevCondition(
            DeviceBean devBean,
            String dpId,
            Rule rule)
    

注: DeviceBean从 获取条件设备列表接口获取。

  • 定时

    定时指到达指定时间执行预定任务

      /**
        * 创建定时条件
        * @param display 用于展示的用户选定的时间条件
        * @param name  定时条件的名称
        * @param type  条件类型
        * @param rule  条件规则
        * @return
        */
        public static SceneCondition createTimerCondition(String display,String name,String type,Rule rule)
    

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数据组装,构成规则条件。

    例:


    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;
}

注:

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

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

2、 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    回调
 */
void getCityListByCountryCode(String countryCode, ITuyaResultCallback<List<PlaceFacadeBean>> callback);

其中, PlaceFacadeBean类提供以下接口:

/**
 * 获取区域名称
 *
 * @return 区域名称
 */
public String getArea() {
    return area;
}

/**
 * 获取省份名称
 *
 * @return 省份名称
 */
public String getProvince() {
    return province;
}

/**
 * 获取城市名称
 *
 * @return 城市名称
 */
public String getCity() {
    return city;
}

/**
 * 获取城市id
 *
 * @return 城市id
 */
public long getCityId() {
    return cityId;
}
【代码范例】
TuyaHomeSdk.getSceneManagerInstance().getCityListByCountryCode(
    "cn",  //中国
    new ITuyaResultCallback<List<PlaceFacadeBean>>() {
        @Override
        public void onSuccess(List<PlaceFacadeBean> placeFacadeBeans) {
        }

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

根据城市id获取城市信息

【描述】

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

【方法原型】
/**
 * 根据城市id获取城市信息
 *
 * @param cityId   城市id{@link PlaceFacadeBean}
 * @param callback 回调
 */
void getCityByCityIndex(long cityId, ITuyaResultCallback<PlaceFacadeBean> callback);

【代码范例】

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

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

根据经纬度获取城市信息

【描述】

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

【方法原型】
/**
 * 根据经纬度获取城市信息
 *
 * @param lon      经度
 * @param lat      纬度
 * @param callback 回调
 */
void getCityByLatLng(String lon, String lat, ITuyaResultCallback<PlaceFacadeBean> 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) {
        }
});

场景动作

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

创建动作

【描述】

用于创建场景动作。

【方法原型】
/**
 * 创建场景动作
 *
 * @param devId 设备id
 * @param tasks 要执行的任务 格式: { dpId: dp点值 }
 *                          例:
 *                          {
 *                              "1": true,
 *                          }
 * @return 场景动作
 */
public static SceneTask createDpTask(@NonNull String devId, HashMap<String, Object> tasks)
【代码范例】
HashMap<String, Object> taskMap = new HashMap<>();
taskMap.put("1", true); //开启设备
SceneTask task = SceneTask.createDpTask(
    devId,      //设备id
    taskMap     //设备动作
);

获取执行动作支持的设备列表

【描述】

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

【方法原型】
/**
 * 获取动作中的可选设备列表
 * @param homeId 家庭id
 * @param callback 回调
 */
void getTaskDevList(long homeId, ITuyaResultCallback<List<DeviceBean>> callback);

其中, DeviceBean提供以下接口:

/**
 *  获取设备名称
 * 
 * @return 设备名称
 */
public String getName() {
    return name;
}

/**
 *  产品id
 * 
 * @return 产品id
 */
public String getProductId() {
    return productId;
}

/**
 *  获取设备id
 * 
 * @return 设备id
 */
public String getDevId() {
    return devId;
}

/**
 *  获取设备图标
 * 
 * @return 图标地址
 */
public String getIconUrl() {
     return iconUrl;
 }

/**
 * 设备是否在线
 *
 * @return 设备是否在线
 */
public Boolean getIsOnline()
【代码范例】
TuyaHomeSdk.getSceneManagerInstance().getTaskDevList(new ITuyaResultCallback<List<DeviceBean>>() {
    @Override
    public void onSuccess(List<DeviceBean> deviceBeans) {
    }

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

根据设备id获取可执行的动作

【描述】

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

【方法原型】
/**
* 获取设备可以执行的操作
*
* @param devId    设备id
* @param callback 回调
*/
void getDeviceTaskOperationList(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().getDeviceTaskOperationList(
    devId, //设备id
    new ITuyaResultCallback<List<TaskListBean>>() {
        @Override
        public void onSuccess(List<TaskListBean> conditionActionBeans) {
        }

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

创建场景

【描述】

用于将条件和动作组装成场景并创建新的场景, 成功后会返回场景数据。 两种创建方法,唯一区别是否含有stickyOnTop参数

【方法原型】
/**
 * 创建场景
 *
 * @param homeId      家庭id
 * @param name       场景名称
 * @param stickyOnTop 是否显示在首页
 * @param conditions 场景触发条件 {@link SceneCondition}
 * @param tasks      场景执行任务 {@link SceneTask}
 * @param matchType  场景条件与或关系  SceneBean.MATCH_TYPE_OR 表示满足任意条件执行,默认值;SceneBean.MATCH_TYPE_AND 表示满足所有条件
 * @param callback   回调
 */
public void createScene(long homeId, String name, boolean stickyOnTop, String background, List<SceneCondition> conditions, List<SceneTask> tasks,int matchType, final ITuyaResultCallback<SceneBean> callback) ;
/**
 * 创建场景
 *
 * @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   回调
 */
public void createScene(long homeId, String name, String background, List<SceneCondition> conditions, List<SceneTask> tasks,int matchType, final ITuyaResultCallback<SceneBean> callback) ;
【代码范例】
TuyaHomeSdk.getSceneManagerInstance().createScene(
     "100001"
    "Morning", //场景名称
    true,  //是否显示在首页
    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) {
        }
});

修改场景

【描述】

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

【方法原型】
/**
 *  修改场景
 * 
 * @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) {
        }
});

执行场景

【描述】

用于执行手动场景。

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

【方法原型】
/**
 * 执行场景动作
 *
 * @param callback 回调
 */
void executeScene(IResultCallback 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) {
    }
});

删除场景

【描述】

用于删除场景。

【方法原型】
/**
 * 删除场景
 *
 * @param callback 回调
 */
void deleteScene(IResultCallback 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) {
    }
});

开启关闭自动化场景

【描述】

用于开启或关闭自动化场景

【方法原型】
/**
 * 开启自动化场景
 * @param sceneId  
 * @param callback 回调
 */
void enableScene(String sceneId, final IResultCallback callback);
/**
 * 关闭自动化场景
 * @param sceneId  
 * @param callback 回调
 */
void disableScene(String sceneId, final IResultCallback 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) {
    }
});

场景排序

【描述】

手动场景或自动化场景排序。注意:只能单独对手动场景或自动化场景排序,不能混排。

【方法原型】
/**
 * 场景排序
 * @param homeId 家庭id
 * @param sceneIds 手动场景或自动化场景已排序好的的id列表
 * @param callback    回调
 */
void sortSceneList(long homeId, List<String> sceneIds, IResultCallback callback)
【代码范例】
TuyaHomeSdk.getSceneManagerInstance().sortSceneList(
    homeId, //家庭列表
    sceneIds,//场景id列表
    new IResultCallback() {
        @Override
        public void onSuccess() {
        }

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

销毁

【描述】

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

【代码范例】
TuyaHomeSdk.getSceneManagerInstance().onDestroy();

TuyaHomeSdk.newSceneInstance(sceneId).onDestroy();

results matching ""

    No results matching ""