设备如何使用go sdk轻松连接华为云IoT平台?
摘要:本文介绍使用huaweicloud-iot-device-sdk-go 连接华为云IoT平台,实现简单的华为云文档介绍的四个功能:设备连接鉴权、设备命令、设备消息和设备属性。
本文分享自华为云社区《设备如何使用go sdk轻松连接华为云IoT平台》,作者:华为云IoT专家团 。
本文介绍使用huaweicloud-iot-device-sdk-go 连接华为云IoT平台,实现简单的华为云文档介绍的四个功能:设备连接鉴权、设备命令、设备消息和设备属性。huaweicloud-iot-device-sdk-go提供设备接入华为云IoT物联网平台的Go版本的SDK,提供设备和平台之间通讯能力,以及设备服务、网关服务、OTA等高级服务。IoT设备开发者使用SDK可以大大简化开发复杂度,快速的接入平台。
Gihub项目地址:huaweicloud-iot-device-sdk-go
安装和构建
安装和构建的过程取决于使用go的 modules(推荐) 还是还是GOPATH
Modules
如果你使用 modules 只需要导入包"github.com/ctlove0523/huaweicloud-iot-device-sdk-go"即可使用。当你使用go build命令构建项目时,依赖的包会自动被下载。注意使用go build命令构建时会自动下载最新版本,最新版本还没有达到release的标准可能存在一些尚未修复的bug。如果想使用稳定的发布版本可以从release 获取最新稳定的版本号,并在go.mod文件中指定版本号。
module example go 1.15 require github.com/ctlove0523/huaweicloud-iot-device-sdk-go v0.0.1-alpha
GOPATH
如果你使用GOPATH,下面的一条命令即可实现安装
go get github.com/ctlove0523/huaweicloud-iot-device-sdk-go
使用API
创建设备并初始化
1、首先,在华为云IoT平台创建一个设备,设备的信息如下:
设备ID:5fdb75cccbfe2f02ce81d4bf_go-mqtt
设备密钥:123456789
2、使用SDK创建一个Device对象,并初始化Device。
// 创建一个设备并初始化
device := iot.CreateIotDevice("5fdb75cccbfe2f02ce81d4bf_go-mqtt", "123456789", "tcp://iot-mqtts.cn-north-4.myhuaweicloud.com:1883")
device.Init()
完整样例
import (
"fmt"
"github.com/ctlove0523/huaweicloud-iot-device-sdk-go"
"time"
) func main() {
// 创建一个设备并初始化
device := iot.CreateIotDevice("5fdb75cccbfe2f02ce81d4bf_go-mqtt", "123456789", "tcp://iot-mqtts.cn-north-4.myhuaweicloud.com:1883")
device.Init()
if device.IsConnected() {
fmt.Println("device connect huawei iot platform success")
} else {
fmt.Println("device connect huawei iot platform failed")
}
}
iot-mqtts.cn-north-4.myhuaweicloud.com为华为IoT平台(基础班)在华为云北京四的访问端点,如果你购买了标准版或企业版,请将iot-mqtts.cn-north-4.myhuaweicloud.com更换为对应的MQTT协议接入端点。
设备处理平台下发的命令
1、首先,在华为云IoT平台创建一个设备,设备的信息如下:
设备ID:5fdb75cccbfe2f02ce81d4bf_go-mqtt
设备密钥:123456789
2、使用SDK创建一个Device对象,并初始化Device。
// 创建一个设备并初始化
device := iot.CreateIotDevice("5fdb75cccbfe2f02ce81d4bf_go-mqtt", "123456789", "tcp://iot-mqtts.cn-north-4.myhuaweicloud.com:1883")
device.Init()
if device.IsConnected() {
fmt.Println("device connect huawei iot platform success")
} else {
fmt.Println("device connect huawei iot platform failed")
}
3、注册命令处理handler,支持注册多个handler并且按照注册的顺序回调
// 添加用于处理平台下发命令的callback
device.AddCommandHandler(func(command iot.Command) bool {
fmt.Println("First command handler begin to process command.")
return true
}) device.AddCommandHandler(func(command iot.Command) bool {
fmt.Println("Second command handler begin to process command.")
return true
})
4、通过应用侧API向设备下发一个命令,可以看到程序输出如下:
device connect huawei iot platform success
First command handler begin to process command.
Second command handler begin to process command.
完整样例
import (
"fmt"
"github.com/ctlove0523/huaweicloud-iot-device-sdk-go"
"time"
) // 处理平台下发的同步命令
func main() {
// 创建一个设备并初始化
device := iot.CreateIotDevice("5fdb75cccbfe2f02ce81d4bf_go-mqtt", "123456789", "tcp://iot-mqtts.cn-north-4.myhuaweicloud.com:1883")
device.Init()
if device.IsConnected() {
fmt.Println("device connect huawei iot platform success")
} else {
fmt.Println("device connect huawei iot platform failed")
} // 添加用于处理平台下发命令的callback
device.AddCommandHandler(func(command iot.Command) bool {
fmt.Println("First command handler begin to process command.")
return true
}) device.AddCommandHandler(func(command iot.Command) bool {
fmt.Println("Second command handler begin to process command.")
return true
})
time.Sleep(1 * time.Minute)
}
设备支持的命令定义在产品中
设备消息
1、首先,在华为云IoT平台创建一个设备,设备的信息如下:
设备ID:5fdb75cccbfe2f02ce81d4bf_go-mqtt
设备密钥:123456789
2、使用SDK创建一个Device对象,并初始化Device。
device := iot.CreateIotDevice("5fdb75cccbfe2f02ce81d4bf_go-mqtt", "123456789", "tcp://iot-mqtts.cn-north-4.myhuaweicloud.com:1883")
device.Init()
设备消息上报
message := iot.Message{
ObjectDeviceId: uuid.NewV4().String(),
Name: "Fist send message to platform",
Id: uuid.NewV4().String(),
Content: "Hello Huawei IoT Platform",
}
device.SendMessage(message)
平台消息下发
接收平台下发的消息,只需注册消息处理handler,支持注册多个handler并按照注册顺序回调。
// 注册平台下发消息的callback,当收到平台下发的消息时,调用此callback.
// 支持注册多个callback,并且按照注册顺序调用
device.AddMessageHandler(func(message iot.Message) bool {
fmt.Println("first handler called" + iot.Interface2JsonString(message))
return true
}) device.AddMessageHandler(func(message iot.Message) bool {
fmt.Println("second handler called" + iot.Interface2JsonString(message))
return true
})
完整样例
import (
"fmt"
iot "github.com/ctlove0523/huaweicloud-iot-device-sdk-go"
uuid "github.com/satori/go.uuid"
"time"
) func main() {
// 创建一个设备并初始化
device := iot.CreateIotDevice("5fdb75cccbfe2f02ce81d4bf_go-mqtt", "123456789", "tcp://iot-mqtts.cn-north-4.myhuaweicloud.com:1883")
device.Init() // 注册平台下发消息的callback,当收到平台下发的消息时,调用此callback.
// 支持注册多个callback,并且按照注册顺序调用
device.AddMessageHandler(func(message iot.Message) bool {
fmt.Println("first handler called" + iot.Interface2JsonString(message))
return true
}) device.AddMessageHandler(func(message iot.Message) bool {
fmt.Println("second handler called" + iot.Interface2JsonString(message))
return true
}) //向平台发送消息
message := iot.Message{
ObjectDeviceId: uuid.NewV4().String(),
Name: "Fist send message to platform",
Id: uuid.NewV4().String(),
Content: "Hello Huawei IoT Platform",
}
device.SendMessage(message)
time.Sleep(2 * time.Minute) }
设备属性
1、首先,在华为云IoT平台创建一个设备,并在该设备下创建3个子设备,设备及子设备的信息如下:
设备ID:5fdb75cccbfe2f02ce81d4bf_go-mqtt
设备密钥:123456789
子设备ID:5fdb75cccbfe2f02ce81d4bf_sub-device-1
子设备ID:5fdb75cccbfe2f02ce81d4bf_sub-device-2
子设备ID:5fdb75cccbfe2f02ce81d4bf_sub-device-3
2、使用SDK创建一个Device对象,并初始化Device。
// 创建设备并初始化
device := iot.CreateIotDevice("5fdb75cccbfe2f02ce81d4bf_go-mqtt", "123456789", "tcp://iot-mqtts.cn-north-4.myhuaweicloud.com:1883")
device.Init()
fmt.Printf("device connected: %v\n", device.IsConnected())
设备属性上报
使用ReportProperties(properties ServiceProperty) bool 上报设备属性
// 设备上报属性
props := iot.ServicePropertyEntry{
ServiceId: "value",
EventTime: iot.DataCollectionTime(),
Properties: DemoProperties{
Value: "chen tong",
MsgType: "23",
},
} var content []iot.ServicePropertyEntry
content = append(content, props)
services := iot.ServiceProperty{
Services: content,
}
device.ReportProperties(services)
网关批量设备属性上报
使用BatchReportSubDevicesProperties(service DevicesService) 实现网关批量设备属性上报
// 批量上报子设备属性
subDevice1 := iot.DeviceService{
DeviceId: "5fdb75cccbfe2f02ce81d4bf_sub-device-1",
Services: content,
}
subDevice2 := iot.DeviceService{
DeviceId: "5fdb75cccbfe2f02ce81d4bf_sub-device-2",
Services: content,
} subDevice3 := iot.DeviceService{
DeviceId: "5fdb75cccbfe2f02ce81d4bf_sub-device-3",
Services: content,
} var devices []iot.DeviceService
devices = append(devices, subDevice1, subDevice2, subDevice3) device.BatchReportSubDevicesProperties(iot.DevicesService{
Devices: devices,
})
平台设置设备属性
使用AddPropertiesSetHandler(handler DevicePropertiesSetHandler) 注册平台设置设备属性handler,当接收到平台的命令时SDK回调。
// 注册平台设置属性callback,当应用通过API设置设备属性时,会调用此callback,支持注册多个callback
device.AddPropertiesSetHandler(func(propertiesSetRequest iot.DevicePropertyDownRequest) bool {
fmt.Println("I get property set command")
fmt.Printf("request is %s", iot.Interface2JsonString(propertiesSetRequest))
return true
})
平台查询设备属性
使用SetPropertyQueryHandler(handler DevicePropertyQueryHandler)注册平台查询设备属性handler,当接收到平台的查询请求时SDK回调。
// 注册平台查询设备属性callback,当平台查询设备属性时此callback被调用,仅支持设置一个callback
device.SetPropertyQueryHandler(func(query iot.DevicePropertyQueryRequest) iot.ServicePropertyEntry {
return iot.ServicePropertyEntry{
ServiceId: "value",
Properties: DemoProperties{
Value: "QUERY RESPONSE",
MsgType: "query property",
},
EventTime: "2020-12-19 02:23:24",
}
})
设备侧获取平台的设备影子数据
使用QueryDeviceShadow(query DevicePropertyQueryRequest, handler DevicePropertyQueryResponseHandler) 可以查询平台的设备影子数据,当接收到平台的响应后SDK自动回调DevicePropertyQueryResponseHandler。
// 设备查询设备影子数据
device.QueryDeviceShadow(iot.DevicePropertyQueryRequest{
ServiceId: "value",
}, func(response iot.DevicePropertyQueryResponse) {
fmt.Printf("query device shadow success.\n,device shadow data is %s\n", iot.Interface2JsonString(response))
})
完整样例
import (
"fmt"
iot "github.com/ctlove0523/huaweicloud-iot-device-sdk-go"
"time"
) func main() {
// 创建设备并初始化
device := iot.CreateIotDevice("5fdb75cccbfe2f02ce81d4bf_go-mqtt", "123456789", "tcp://iot-mqtts.cn-north-4.myhuaweicloud.com:1883")
device.Init()
fmt.Printf("device connected: %v\n", device.IsConnected()) // 注册平台设置属性callback,当应用通过API设置设备属性时,会调用此callback,支持注册多个callback
device.AddPropertiesSetHandler(func(propertiesSetRequest iot.DevicePropertyDownRequest) bool {
fmt.Println("I get property set command")
fmt.Printf("request is %s", iot.Interface2JsonString(propertiesSetRequest))
return true
}) // 注册平台查询设备属性callback,当平台查询设备属性时此callback被调用,仅支持设置一个callback
device.SetPropertyQueryHandler(func(query iot.DevicePropertyQueryRequest) iot.ServicePropertyEntry {
return iot.ServicePropertyEntry{
ServiceId: "value",
Properties: DemoProperties{
Value: "QUERY RESPONSE",
MsgType: "query property",
},
EventTime: "2020-12-19 02:23:24",
}
}) // 设备上报属性
props := iot.ServicePropertyEntry{
ServiceId: "value",
EventTime: iot.DataCollectionTime(),
Properties: DemoProperties{
Value: "chen tong",
MsgType: "23",
},
} var content []iot.ServicePropertyEntry
content = append(content, props)
services := iot.ServiceProperty{
Services: content,
}
device.ReportProperties(services) // 设备查询设备影子数据
device.QueryDeviceShadow(iot.DevicePropertyQueryRequest{
ServiceId: "value",
}, func(response iot.DevicePropertyQueryResponse) {
fmt.Printf("query device shadow success.\n,device shadow data is %s\n", iot.Interface2JsonString(response))
}) // 批量上报子设备属性
subDevice1 := iot.DeviceService{
DeviceId: "5fdb75cccbfe2f02ce81d4bf_sub-device-1",
Services: content,
}
subDevice2 := iot.DeviceService{
DeviceId: "5fdb75cccbfe2f02ce81d4bf_sub-device-2",
Services: content,
} subDevice3 := iot.DeviceService{
DeviceId: "5fdb75cccbfe2f02ce81d4bf_sub-device-3",
Services: content,
} var devices []iot.DeviceService
devices = append(devices, subDevice1, subDevice2, subDevice3) device.BatchReportSubDevicesProperties(iot.DevicesService{
Devices: devices,
})
time.Sleep(1 * time.Minute)
} type DemoProperties struct {
Value string `json:"value"`
MsgType string `json:"msgType"`
}

更多学习内容,请前往IoT物联网社区
设备如何使用go sdk轻松连接华为云IoT平台?的更多相关文章
- OpenHarmony3.0如何轻松连接华为云IoT设备接入平台?
摘要:本文主要介绍基于OpenHarmony 3.0版本来对接华为云IoT设备接入IoTDA,以小熊派BearPi-HM_Nano开发板为例,使用huaweicloud_iot_link SDK对接华 ...
- 聊聊如何在华为云IoT平台进行产品开发
摘要:华为云物联网平台承载着南北向数据互通的功能职责. 本文分享自华为云社区<如何基于华为云IoT物联网平台进行产品开发>,作者: Super.雯 . 华为云物联网平台承载着南北向数据互通 ...
- 基于华为云IoT Studio自助生成10万行代码的奥秘
华为IoT小助手们搬好板凳.备好笔记本.听了HDC.Cloud的几场华为云技术架构师的直播讲课,感觉获益匪浅却又似懂非懂,直后悔自己没有好好打下基础.为了避免再次出现这样的情况,小助手偷偷跑去找了华为 ...
- 手把手教你基于luatos的4G(LTE Cat.1)模组接入华为云物联网平台
摘要:本期文章采用了4G LTE Cat.1模块,编程语言用的是lua,实现对华为云物联网平台的设备通信与控制 本文分享自华为云社区<基于luatos的4G(LTE Cat.1)模组接入华为云物 ...
- 华为云MVP熊保松谈物联网开发:华为云IoT是首选,小熊派是神器
摘要:在AI.5G的技术驱动下,物联网行业的发展愈加如火如荼,开发者在技术的快速更迭间,也得乘风破浪跟上新技术的节奏. 在AI.5G的技术驱动下,物联网行业的发展愈加如火如荼,开发者在技术的快速更迭间 ...
- 基于STM32+华为云IOT设计智能称重系统
摘要:选择部署多个重量传感器和必要的算法.通过WiFi 通信模块.GPS定位模块,采集车辆称重数据一地理位置信息,并通过网络发送至云平台,设计图形化UI界面展示称重.地图位置等重要信息,实现对称重系统 ...
- 阿里云 IOT 对接设备开发 C# 开发设备对接阿里云 IOT平台
一,创建阿里云 IOT 产品.设备 目前阿里云每月赠送 100 万条流量,可以免费使用基础版.高级版,开通后即可免费使用. 阿里云 IOT 平台地址 https://iot.console.aliyu ...
- .NET Core 跨平台物联网开发:连接阿里云IOT(一)
系列教程目录 (一) 连接阿里云IOT (二) 设置委托事件 (三) 上报属性 (四) SDK文档 属性.方法.委托.类 http://pan.whuanle.cn/index.php?dir=up ...
- CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统
摘要:以CC2530单片机为核心器件,设计一个冷链环境信息采集系统,利用传感器技术对冷藏仓内的环境参数进行采集,上传到华为云物联网云平台,然后通过手机端或移动端进行显示,便于分析,观察冷链环境信息. ...
- 基于华为云IOT及无线RFID技术的智慧仓储解决方案最佳实践系列一
[摘要]仓储管理存在四大细分场景:出入库管理.盘点.分拣和货物跟踪.本系列将介绍利用华为云IOT全栈云服务,端侧采用华为收发分离式RFID解决方案,打造端到端到IOT智慧仓储解决方案的最佳实践. 仓储 ...
随机推荐
- html-7(JavaScript-1)
放在函数里面 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...
- 好用的解决PowerDesign中字体图片太小分辨率问题【已解决】
熟悉数据库设计的小伙伴可能都会用到一款名叫PowerDesign的工具 但是我在使用这款工具时候发现界面中的图标和文字都非常小,看的人眼睛疼,如下图 我刚开始修改了软件的字体大小,发现只是字稍微大了点 ...
- ALSA Compress-Offload API
概述 从 ALSA API 的早期开始,它就被定义为支持 PCM,或考虑到了 IEC61937 等固定比特率的载荷.参数和返回值以帧计算是常态,这使得扩展已有的 API 以支持压缩数据流充满挑战. 最 ...
- Halcon、HDevelop快速入门
HDevelop基础一 HDevelop概述 HDevelop是一款机器视觉的集成开发环境.下面将对HDevelop的界面内容做一下简单的介绍. 界面介绍 打开HDevelop,将看到以下画面. ...
- JavaSE中的一些面试题
list与Set区别 List 和 Set 是 Java 集合中两个重要的接口,它们在数据存储.数据查找.数据操作等方面有以下几个不同点: 1. 数据存储方式不同:List 是一个有序的 Collec ...
- Educational Codeforces Round 105 (Rated for Div. 2) A-C题解
写在前边 链接:Educational Codeforces Round 105 (Rated for Div. 2) A. ABC String 链接:A题链接 题目大意: 给定一个有\(A.B.C ...
- UData+StarRocks在京东物流的实践
1 背景 数据服务与数据分析场景是数据团队在数据应用上两个大的方向,行业内大家有可能会遇到下面的问题: 1.1 数据服务 烟囱式开发模式:每来一个需求开发一个数据服务,数据服务无法复用,难以平台化,技 ...
- 【Android】无法通过drawable下的selector类型改变背景颜色?
举例 我在darwable目录下创建了selector文件,并设置了如下内容 <?xml version="1.0" encoding="utf-8"?& ...
- SpringBoot接口开发
依赖的jar包<dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- [CF1830F] The Third Grace
题目描述 You are given $ n $ intervals and $ m $ points on the number line. The $ i $ -th intervals cove ...