入门
# 扩展插件开发
介绍拓展插件开发的基础知识和需要掌握的概念
# 什么是扩展插件
什么是扩展插件
由于IoTCenter平台为一款功能比较稳定的标准化产品,而在实际项目过程中,有时我们可能会面临一些复杂场景,在这些场景下,应用功能无法完全满足已有业务需要,此时可以借助于扩展插件开发来实现一些丰富多彩的复杂功能。
如下列举了扩展插件常用的场景:
部分物联网子系统,如海康威视等平台可通过回调的机制将数据推送到IoTCenter平台,需要提供一个固定的端口和HttpPost接口来接收其转发的实时事件数据。
客户想定时抄表,即每天0点定时将物联网平台中的所有实时数据进行汇总存储记录。
某项目对接了某些大数据平台,需实现新的设备上线后,自动将设备信息、设备的在线离线状态同步到该大数据平台。
定期或不定期向指定的邮箱发送物联网实时统计报表。
某些特殊行业常使用某些特殊协议实现主站和从站间同步特殊格式的物联实时数据,需要基于IoTCenter实现从站同步、实时数据转特殊格式。
在现有WebApi接口体系外,扩充新的WebApi接口等。
诸如此类,这些复杂多变的业务功能也正是物联网产品开发者所面临的场景需求中的典型范例,也是扩展插件的用武之地。
# 加载原理
加载原理
服务进程启动时,将根据数据库表 GWExProc 的记录,逐项加载扩展动态库;如果你希望你开发的拓展库,能够被 IoTCenter调用,则需要在开发完毕后在 GWExProc 表中设置相应的参数。
GWExProc 表必须填写的字段如下:
字段名称 | 描述 |
---|---|
Proc_Code | 编号;主键 |
Proc_Module | .NET类库名称;加载路径:/dll |
Proc_name | 扩展动态库名称 |
Proc_parm | 初始化参数 |
# 开发前提
开发前提
.NET版本
使用 .NET6.0 进行开发。
依赖项
GWDataCenter.dll >= 6.0.1
# 开始
开始
打开 Visual Studio ,使用 .NET 6.0 新建一个类库项目,并将其命名为
IoTCenter.ExprocSample.STD
。通过Nuget包管理器,添加
GWDataCenter
Nuget包依赖 。引用命名空间
GWDataCenter
,创建一个命名为CExProc
的类,作为扩展插件的入口,并实现接口IExProcCmdHandle
。在这里,我们在初始化时输出了扩展动态库的名称及参数,在实际应用中,可自定义参数(proc_parm)格式。完整代码:
public class CExProc : IExProcCmdHandle { private string InputArgs; public bool init(GWExProcTableRow Row) { //获取扩展插件的配置参数 var name = Row.Proc_name.ToString(); var parm = Row.Proc_parm.ToString(); InputArgs = $"IoTCenter.ExprocSample.STD扩展插件已加载,{name},{parm}"; DataCenter.Write2Log(InputArgs,LogLevel.Info); return true; } public void SetParm(string main_instruction, string minor_instruction, string value) { Console.WriteLine($"调用事件:{main_instruction},{minor_instruction},{value}"); } }
说明:
init方法:扩展插件的初始化方法,可以在其中编写扩展插件的初始化语句。其参数GWExProcTableRow为GWExProc表的记录。
SetParm方法。用于扩展插件需要通过定时任务定时完成某些操作时的场景。使用此方法首先需要在扩展插件中添加控制项。 如图:
配置完成后在定时任务界面的系统控制项中会出现对应的控制项,如下图所示:
注意:在上述代码中,初始化时输出了扩展动态库的名称及参数,扩展动态库的名称和参数需要在IoT平台的配置管理-扩展插件管理中进行配置。
# 安装插件
安装步骤
选择 Visual Studio 的菜单栏,点击 生成 -> 生成解决方案,若编译过程无错误,将生成我们的扩展动态库
IoTCenter.ExProc1.dll
。将生成的扩展插件拷贝到 IoTCenter目录下的 dll 文件夹中。
在IoT平台的系统配置-扩展配置
驱动文件:输入IoTCenter.ExprocSample.STD.dll
功能名称:也就是扩展动态库名称,可以根据实际项目自定义填写。
参数:也就是初始化参数,是扩展插件运行需要的参数,若不涉及可以不填。
# 查看效果
查看效果
如图所示,已加载了上述扩展插件。