Skip to main content

概要说明

本系统的插件支持热更新式扩展应用程序的功能

SagooIOT的插件使用Golang进行开发。通讯方式为net/rpc。

提示

考虑到SagooIOT需要支持多个平台,所选编程语言应具备广泛的平台兼容性。 go语言可以交叉编译成多平台可执行程序。

现在,让我们尝试开发一个名为tgn52的插件。

参见插件示例:https://github.com/sagoo-cloud/protocol-plugin-tgn52

一、创建工程

创建一个插件的工程,开始编写插件。在go.mod中需要引入

require (
github.com/hashicorp/go-plugin v1.4.10
github.com/sagoo-cloud/sagooiot v1.0.7
)

注:sagooiot的版本可以使用latest

二、编写插件主运行文件

协议插件必须实现Info()、Encode()、Decode()三个方法。

Decode方法中的对数据处理后,需要按SagooMQTT的数据格式返回数据。平台自动采用mqtt进行服务处理。

注意:在插件进程必须指定Impl,命名要与Info()方法中及info.json文件中的name必须相同。

三、编译插件

跟据需要可以直接编译,或是将编译过程写成脚自动编译。在我们的示例中已经写好可用的编译脚本,可以复制过去直接使用。

只需要修改一下脚本的第一行BINARY_NAME的值即可。

请注意,这个BINARY_NAME是插件名称,需要与插件Info()方法中设置的name,info.json中的name 要相同。

四、插件测试

编写测试文件,详细参考插件示例。

// 测试获取插件信息
func TestProtocolInfo(t *testing.T) {
p, err := extend.GetProtocolPlugin().GetProtocolPlugin("tgn52")
if err != nil {
return
}
t.Log(p.Info().Name)
t.Log(p.Info().Types)
t.Log(p.Info().HandleType)
t.Log(p.Info())
}

五、插件安装

如果将插件安装到SagooIOT平台,为了让系统识别插件信息,需要编写一个info.json文件,与编译好的插件文件放在同一目录下,一同打包成zip文件。然后到平台的系统设置-》插件管理 进行插件上传安装。

info.json 的基础模板如下:

{
"types": "protocol",
"handleType": "tcpServer",
"name": "TGN52",
"title": "TGN52",
"description": "TGN52设备与服务通讯协议",
"version": "0.0.1",
"author": "microrain",
"icon": "mdi-book",
"link": "sagoo.cn",
"command": "",
"args": [""],
"root": false,
"frontend": {
"ui": false,
"url":"",
"configuration": false
}
}

属性

名称类型说明注意事项
typesstring插件类型,可选的有protocol、notice系统当前支持的插件类型
handleTypestring处理方式类型,可选的有:
"tcpServer" //tcp服务端使用
"tcpClient" //tcp客户端使用
"udpServer" //udp服务端使用
"udpClient" //udp客户端使用
"httpServer" //http服务端使用
"httpClient" //http客户端使用
"mqttServer" //mqtt服务端使用
"mqttClient" //mqtt客户端使用
"webSocketServer" //websocket服务端使用
"webSocketClient" //websocket客户端使用
协议插件支持的网络服务处理类型
namestring插件ID(即插件识别码)相当于插件的“身份证”。确保该值与文件夹名称匹配。SagooIOT 通过插件ID来区分各个插件并检测插件之间的依赖关系。在SagooIOT中加载的所有插件都应具有唯一的插件ID。如果新加载的插件与现有插件具有完全相同的插件ID,新插件将无法加载。谨慎选择插件ID。强烈建议发布插件后不要再修改插件ID。要注意可能的包名冲突问题。不推荐插件名取一个与标准库或与第三方库名相同的 id,如 test,否则 SagooIOT 可能无法正常加载插件
versionstring插件版本
descriptionstring插件描述
authorstring插件作者。
linkstring插件的网址。指向插件的 github 链接。值应为一个可访问的网址
commandstring插件的运行指令,如./pluginpython plugin.pyjava -jar plugin.jar等。
argsstring[]插件的指令参数
typestring插件与SagooIOT的通信方式,目前可选的值只有gRPCnetRPC
iconstring插件图标,该值为mdi- + Material Design Iconsopen in new window上的所有可选图标代码,如mdi-user-arrow-left-outline
rontend.uibool是否有插件页面
rontend.urlstring插件页面地址
rontend.configurationbool是否显示配置页面