物联网智能视频服务(消费版) 物模型模块

这篇说说腾讯云IoT Video物模型模块,包含属性、行为、事件三类模型,以及初始化、上报、同步等接口的使用流程与注意事项。 物模型分为属性(读写/只读)、行为(有返回结果)和事件(状态变化上报),通过JSON文件生成代码。 核心接口包括iv_dm_init(初始化)、iv_dm_property_report(属性上报)和iv_dm_property_sync(属性同步),需注意上报频率与线程安全。

相关产品
物联网智能视频服务(消费版) 产品页,含版本规格、价格与购买入口。

该模块是 IoT Video 的必选模块,需要第二个初始化。

一、功能介绍

物模型部分分为:

·属性(property)
属性对设备能力的描述,通过对属性的修改即可实现对设备的控制,其又可分为:读写属性 (ProWritable) 和只读属性 (ProReadonly) 。

·行为(action)
控制设备执行特定的行为,并将执行的结果返回。行为与属性的区别,概念上行为是数据和方法的组合,行为有执行结果的返回。属性只有数据,修改属性后设备侧是否执行成功很难在属性本身体现。

·事件(event)
设备发生特定情况,譬如灯的开关状态发生了变化,上报事件。应用侧收到事件后按预设逻辑推送事件。

物模型由用户声明好后导出相应的 json 文件, 使用工程目录下的 tool/codegen.py 脚本生成代码,执行如下命令:
./codegen.py -c <json文件>

最终生成如下代码:

iv_usrex.c:用户物模型实现源文件,实现物模型初始化相关的代码,开发者不能修改这个文件iv_usrex_func.c:用户物模型功能实现函数,实现相应 ProWritable 和 action 的回调iv_usrex.h:用户物模型定义头文件,定义相关数据结构,开发者不能修改这个文件

在编译时编入工程,根据用户功能需要,在设备初始化阶段注册不同物模型处理函数,SDK 在相应模型触发时回调,用户亦可调用物模型接口主动上传物模型数据,对于设备来说,支持 ProWritable 类模型数据接收和发送, 支持 ProReadonly 和 Event 类模型数据发送, 支持 Action 模型数据接收。

二、使用流程

注册下发消息回调 > 物模型初始化 > 发送物模型消息 > 物模型去初始化。

三、接口列表

该功能模块提供以下接口:

·iv_dm_init:物模型初始化接口。

·iv_dm_exit:物模型去初始化接口。

·iv_dm_event_report:事件上报接口。

·iv_dm_property_report:属性上报接口。

·iv_dm_property_sync:属性同步接口。

·ivm_env_init:物模型环境初始化,由脚本生成。

·ivm_lock:物模型上报加锁。

·ivm_unlock:物模型上报解锁。

用户需注册以下回调函数:

·(*iv_dm_env_init_cb)():物模型初始化参数回调。

·(*ivm_property_report_cb)():属性上报结果回调。

五、iv_dm_init

功能描述

物模型初始化,进行物模型模块资源申请,设备启动时调用。

函数原型

int iv_dm_init(const iv_dm_init_parm_s *pstInitParm);

参数说明

参数名称 类型 描述 输入/输出
pstInitParm iv_dm_init_parm_s 初始化参数。 输入

返回值

返回值 描述
IV_ERR_NONE 成功。
IV_ERR_* 失败,对应相应错误码。

六、iv_dm_exit

功能描述

物模型去初始化,进行物模型模块资源释放,设备退出时调用。

函数原型

int iv_dm_exit(void);

参数说明

无

返回值

返回值 描述
IV_ERR_NONE 成功。
IV_ERR_* 失败,对应相应错误码。

七、iv_dm_event_report

功能描述

上传用户自定义事件消息。

函数原型

iv_dm_event_report(const char *event_name);

参数说明

参数名称 类型 描述 输入/输出
event_name const char 事件名。 输入

返回值

返回值 描述
IV_ERR_NONE 成功。
IV_ERR_* 失败,对应相应错误码。

八、iv_dm_property_report

功能描述

上报属性信息。

函数原型

int iv_dm_property_report(const char *key, ivm_property_report_cb cb, void *param);

参数说明

参数名称 类型 描述 输入/输出
key const char * 自定义的属性 key 值。 输入
cb ivm_property_report_cb 上报结果通知。 输入
param void * 自定义参数。 输入

返回值

返回值 描述
IV_ERR_NONE 成功。
IV_ERR_* 失败,对应相应错误码。

九、注意事项

·物模型上报后会触发回调cb,告诉用户最终的上报结果。

·必须等待当前物模型上报成功,才能进行下一次上报,否则会返回错误。

·物模型上报的超时时间根据system模块中的connect_timeout确定。

·尽量控制上报属性的频率, 频繁的轮询上报属性会额外占用带宽。

十、iv_dm_property_sync

功能描述

属性同步接口。

函数原型

int iv_dm_property_sync(int timeout_ms)

参数说明

参数名称 类型 描述 输入/输出
timeout_ms int 同步超时时间,单位:ms,建议1000。 无

返回值

返回值 描述
IV_ERR_NONE 成功。
IV_ERR_* 失败,对应相应错误码。

十一、注意事项

·该接口是阻塞接口,只可以在单一线程中调用,禁止多线程调用。

·调用该接口返回IV_ERR_NONE后,会将结果同步到物模型全局变量g_ivm_objs中,可以直接读取。

·需要在设备处于上线状态时,调用该接口才能同步到正确的值,返回IV_ERR_DM_REQUEST_BUSY表示调用太频繁(SDK 限制调用频率5s一次),本次同步失败。

十二、iv_dm_init_sync_status

功能描述

获取上线后(或重连后)SDK 内部首次同步物模型是否成功的状态。

函数原型

int iv_dm_init_sync_status(void)

参数说明

无

返回值

返回值 描述
0 同步失败,或正在同步。
1 同步成功。

十三、注意事项

初始化时 SDK 内部会获取最新物模型,当调用本接口并返回成功后,直接读取 g_ivm_objs 即可,可以免去用户首次调用 iv_dm_property_sync 进行手动同步的操作。

十四、ivm_env_init

功能描述

物模型环境初始化,有物模型代码脚本生成,无需修改。

函数原型

int ivm_env_init(void);

参数说明

无

返回值

返回值 描述
IV_ERR_NONE 成功。
IV_ERR_* 失败,对应相应错误码。

十五、注意事项

该函数定义在iv_usrex.c文件中,ivm_doi_init_ProWritable中的flag参数默认为0,只有当使用云 API 修改物模型时,Method参数配置为report时,需要将对应物模型的flag参数手动设置为1,其他情况均不用修改。

十六、ivm_lock

功能描述

物模型互斥加锁,在上报物模型前调用。

函数原型

void ivm_lock(void);

参数说明

无

返回值

无

十七、ivm_unlock

功能描述

物模型互斥解锁,在上报物模型后调用。

函数原型

void ivm_unlock(void);

参数说明

无

返回值

无

十八、iv_dm_env_init_cb

功能描述

物模型初始化参数函数回调。

函数原型

int (*iv_dm_env_init_cb)(void);

参数说明

无

返回值

返回值 描述
IV_ERR_NONE 成功。
IV_ERR_* 失败,对应相应错误码。

十九、ivm_property_report_cb

功能描述

用户上报属性回调。

函数原型

int (*ivm_property_report_cb)(void *param, iv_dm_report_result_e result_code);

参数说明

参数名称 类型 描述 输入/输出
param void * 用户参数 输入
result_code iv_dm_report_result_e 上报结果 输入

返回值

返回值 描述
IV_ERR_NONE 成功。
IV_ERR_* 失败,对应相应错误码。

20、数据结构列表

该模块提供以下数据结构:

·iv_dm_report_result_e:物模型上报结果。

·iv_dm_init_parm_s:物模型初始化参数结构体。

22、iv_dm_report_result_e

功能描述

物模型上报结果。

结构原型

typedef enum{ REPORT_TIMEOUT = -2, REPORT_REJECTED = -1, REPORT_ACCEPTED = 0 } iv_dm_report_result_e;

参数说明

成员名称 描述 取值
REPORT_TIMEOUT 物模型上报超时 -2
REPORT_REJECTED 物模型上报被拒绝 -1
REPORT_ACCEPTED 物模型上报成功 0

23、iv_dm_init_parm_s

功能描述

物模型初始化参数结构。

结构原型

typedef struct iv_dm_init_parm_s { int (*iv_dm_env_init_cb)(void);} iv_dm_init_parm_s;

参数说明

成员名称 描述 取值
iv_dm_env_init_cb 物模型初始化参数函数回调 无

24、注意事项

1. 不建议频繁调用模块相关接口。

2. 初始化时 SDK 内部会获取最新物模型,直接读取 g_ivm_objs 即可,用户不必调用 iv_dm_property_sync 进行手动同步。

26、1. 物模型初始化

int rc = 0; iv_dm_init_parm_s stInitParm; stInitParm.iv_dm_env_init_cb = ivm_env_init; rc = iv_dm_init(&stInitParm); if (rc < 0) { Log_e("model init failed!"); return rc; }

27、2. 物模型去初始化

iv_dm_exit();

28、3. 通过物模型使能录像

int iv_usrcb_ProWritable_record_enable(DeviceProperty *property){ property_dbg_info(property); // User implementation code //注意: 回调函数中,不能做阻塞式操作,不得做耗时的操作。会导致核心通讯线程阻塞!!! iv_cm_av_data_info_s av_format; //设置录像音视频参数 av_format.eAudioSampleRate = IV_CM_AENC_SAMPLE_RATE_44100; av_format.eAudioMode = IV_CM_AENC_MODE_STEREO; av_format.u32SampleNumPerFrame = 1024; av_format.eVideoType = IV_CM_VENC_TYPE_H264; av_format.u32Framerate = 30; av_format.u32VideoWidth = 640; av_format.u32VideoHeight = 360; if (*(int32_t *)(property->data) == 1) { iv_rd_record_start(NULL, &av_format); } else { iv_rd_record_stop(); } return 0;}

29、4. 物模型上报属性

ivm_lock(); //互斥加锁 g_ivm_objs.ProReadonly.yyyy = 1; //修改全局变量的值 iv_dm_property_report(yyy, cb, param); //调用上报接口,注册回调 ivm_unlock(); //互斥解锁

赞 (0)
上一篇 4天前
下一篇 4天前