更新时间:2024-08-30 07:52:50下载pdf
一键执行 和 自动化:都是 联动,两者的区别是:
本地联动:是联动的一种,其条件和动作包含的设备 (如果有的话) 均在同一网关下,本地联动的执行不依赖云端,当网关无法连接云端(比如无外网)时,本地联动仍旧可以执行。
云端联动:是由云端执行的联动,联动的执行依赖云端。
局域网联动:局域网联动是由网关执行的联动,与本地联动不同的是,联动里的条件和动作所涉及到的设备在不同网关下,并且要求这些网关处于在同一个家庭和同一个局域网中。
另外自动化触发条件可分为 连续触发 和 边缘触发,连续触发表示当前条件和设备状态一样就触发 而边缘触发是当条件从不满足变为满足当前条件时才会触发。
一个联动创建后,如果云端判定网关可以接管,则下发规则给网关,网关接管成功后,规则就变为本地联动,后续联动的判定和执行都由网关来处理。如果云端判定规则网关不能接管,规则不会下发给网关,后续联动的判定和执行都由云端来处理,这条规则属于云端联动。
一个联动是否是本地联动,需要符合以下几点 :
SDK 内部会自动初始化和处理规则,使用者只需根据需求调用如下外部接口即可。
typedef BYTE_T LINKAGE_RULE_TYPE_T;
#define LINKAGE_RULE_LOCAL 0
#define LINKAGE_RULE_LAN 1
typedef struct{
CHAR_T rule_id[RULE_ID_LEN + 1];
CHAR_T name[128];
BOOL_T isHaveCond; /**< 0: 一键执行,1: 自动化 */
BOOL_T isEnable; /**< 0: 禁用,1: 启用 */
} RULE_INFO;
typedef struct{
UINT_T rule_num;
LINKAGE_RULE_TYPE_T rule_type;
RULE_INFO **rule_info;
} ALL_RULE_INFO;
/**
* @brief Execute the specified one-click execution (scene) by id
*
* @param sceneId The one-click execution (scene) id that needs to be executed
* @return VOID
*/
VOID scene_linkage_scene_exe(CHAR_T *sceneId);
/**
* @brief Execute the specified one-click execution (scene) by name
*
* @param scene_name The one-click execution (scene) name that needs to be executed
* @return OPRT_OK if scene_name exist and execute it, Otherwise return OPRT_NOT_FOUND
*/
OPERATE_RET scene_linkage_scene_exe_by_name(const CHAR_T *scene_name);
/**
* @brief Get linkage rules of the gateway
*
* @note You should invoke scene_linkage_all_rule_info_free to release resources
*
* @example
* // get local linkage rules
* OPERATE_RET exe_ret = scene_linkage_load_all_rule_info_from_disk(LINKAGE_RULE_LOCAL, &all_rule_info);
* if (exe_ret == OPRT_OK) {
* INT_T i = 0;
* for (i = 0; i < all_rule_info.rule_num; ++i) {
* CONST RULE_INFO *rule_info = all_rule_info.rule_info[i];
* // TODO
* }
* scene_linkage_all_rule_info_free(&all_rule_info);
* }
*
*/
OPERATE_RET scene_linkage_load_all_rule_info_from_disk(LINKAGE_RULE_TYPE_T rule_type, ALL_RULE_INFO *all_rule_info);
/**
* @brief Release resource for linkage rules
*
* @param all_rule_info pointer of rule info
*/
VOID scene_linkage_all_rule_info_free(ALL_RULE_INFO *all_rule_info);
typedef VOID (*SCENE_LINKAGE_NAME_ID_UPADATE_CB)(VOID);
/**
* @brief Enable linkage rule changed event
*/
VOID scene_linkage_oneclick_get_name_enable_set(VOID);
/**
* @brief Register linkage rule changed event
*
* @note You should invoke scene_linkage_oneclick_get_name_enable_set before SDK initialization to enable this event
*
* @param cb
* @return VOID
* @note The cb function cannot be blocked or delayed
*/
VOID scene_linkage_oneclick_name_id_update_cb_set(SCENE_LINKAGE_NAME_ID_UPADATE_CB cb);
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈