这边文档包含以下几个方面内容:
- Go版本依赖
- SDK获取
- 接口功能
- 使用简介
- 示例介绍
1.13以及以上
go get github.com/qingcloud-iot/edge-app-go
接口定义文件:index.go
接口 | 功能描述 | |
---|---|---|
1 | Init | 初始化SDK |
2 | Cleanup | 清除SDK |
3 | Start | 启动SDK |
4 | Stop | 停止SDK |
5 | SendMessage | 发送边设备消息 |
5 | GetEdgeDeviceInfo | 获取边设备信息 |
5 | GetEndpointInfos | 获取子设备信息列表 |
5 | CallEndpoint | 调用子设备服务调用 |
- 默认是消息代理模式:依赖EdgeWize中的AppControl服务进行消息转发,SDK不能直接订阅平台消息;
- 非消息代理模式:可以直接使用平台的消息规范进行消息的订阅和发布,该模式通过配置环境变量进行设置 EDGE_PROXY_MODE=false;
- SDK初始化和启动
//初始化配置参数
options := &edge_app_go.Options{
//应用类型
Type: common.AppSdkRuntimeType_Docker,
//接收消息回调函数
MessageCB: onMessage,
//回调用户自定义参数
MessageParam: nil,
//接收SDK事件通知回调,比如连接成功,连接断开等通知
EventCB: onSdkEvent,
//回调用户自定义参数
EventParam: nil,
}
//创建SDK对象
client, err := edge_app_go.NewClient(options)
if err != nil {
...
}
//初始化SDK
err = client.Init()
if err != nil {
...
}
//启动SDK
err = client.Start()
if err != nil {
...
}
- 回调处理
func onMessage(msg *common.AppSdkMessageData, param interface{}) {
//判断消息类型
if msg.Type == common.AppSdkMessageType_Property {
//处理模型属性消息
...
//反序列化消息
props := make([]*AppSdkMsgProperty, 0)
err := json.Unmarshal(msg.Payload, &props)
if err != nil {
...
}
} else if msg.Type == common.AppSdkMessageType_Event {
//处理模型事件消息
...
//反序列化消息
evt := &AppSdkMsgEvent{}
err := json.Unmarshal(msg.Payload, evt)
if err != nil {
...
}
} else {
...
}
}
- 发送消息
- 发送模型属性消息
propMsg := &common.AppSdkMessageData{
Type: common.AppSdkMessageType_Property,
}
propData := make([]*common.AppSdkMsgProperty, 0)
tempProp := &common.AppSdkMsgProperty{
//模型属性Identifier,需要跟平台的数据模型匹配
Identifier: RANDOM_DATA_PROPERTY_ID,
Timestamp: time.Now().UnixNano() / 1e6,
Value: strconv.Itoa(value),
}
propData = append(propData, tempProp)
propMsg.Payload, _ = json.Marshal(propData)
err := cli.SendMessage(propMsg)
if err != nil {
...
}
- 发送模型事件消息
evtData := &common.AppSdkMsgEvent{
//模型事件Identifier,需要跟平台的数据模型匹配
Identifier: EVENT_ID,
Timestamp: time.Now().UnixNano() / 1e6,
Params: make(map[string]interface{}),
}
//模型事件参数的Identifier,需要跟平台的数据模型匹配
evtData.Params[EVENT_PARAM_DATA] = strconv.Itoa(value)
evtMsg := &common.AppSdkMessageData{
Type: common.AppSdkMessageType_Event,
}
evtMsg.Payload, _ = json.Marshal(evtData)
err := cli.SendMessage(evtMsg)
if err != nil {
...
}
- 发送服务调用
srvData := &common.AppSdkMsgServiceCall{
////服务调用的Identifier,需要跟平台的数据模型匹配
Identifier: SERVICE_ID,
Params: make(map[string]interface{}),
}
//服务调用参数的Identifier,需要跟平台的数据模型匹配
srvData.Params[SERVICE_PARAM_ID] = resultValue
srvMsg := &common.AppSdkMessageData{
Type: common.AppSdkMessageType_ServiceCall,
}
srvMsg.Payload, _ = json.Marshal(srvData)
err := cli.SendMessage(srvMsg)
if err != nil {
...
}