本文分享自华为云社区《设备如何使用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 examplego 1.15require 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")}// 添加用于处理平台下发命令的callbackdevice.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,支持注册多个callbackdevice.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被调用,仅支持设置一个callbackdevice.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.ServicePropertyEntrycontent = 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.DeviceServicedevices = 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平台相关推荐

  1. OpenHarmony3.0如何轻松连接华为云IoT设备接入平台?

    摘要:本文主要介绍基于OpenHarmony 3.0版本来对接华为云IoT设备接入IoTDA,以小熊派BearPi-HM_Nano开发板为例,使用huaweicloud_iot_link SDK对接华 ...

  2. 【教程】ESP32连接华为云IoT平台

    目录 1前言 2应用侧接入华为云IoT平台 3必备环境 4使用步骤 4.1华为云IoT平台简介 4.2产品定义 4.3设备定义与注册 4.4ESP32编程接入 4.4.1头文件的包含 4.4.2接入参 ...

  3. 【教程】应用侧连接华为云IoT平台

    文章目录 1.写在前面 2.关于设备侧与华为云IoT平台的连接 3.进入华为云IoT平台 4.接收属性上报,实现数据转发至服务器 4.1.数据转发的总体实现思路 4.2.创建规则触发条件 4.3.创建 ...

  4. 华为云IOT平台设备获取api调用笔记

    目的:验证华为云IOT平台的设备获取接口连通性 1.注册IAM账户 地址:https://console.huaweicloud.com/iam/?region=cn-north-4#/iam/use ...

  5. 如何使用华为云IoT平台实现远程控制无人机,资深物联网从业者手把书一步一步教你!

    我目前从事的行业是无人机应用开发,每天都是跟物联网打交道,所以看到了华为云推出的关于物联网相关的技术就来了兴趣.在我的研究领域中,物模型已经是一个非常基础.非常常见的模型了. 如果没有物模型,那么最直 ...

  6. NodeMCU-ESP8266连接阿里云Iot平台进行数据监测

    简介 本教程中主要讲解使用阿里云Iot监测控制NodeMCU的方法. 设备从MQTT数据上传.监测.控制的全流程如下图所示,本教程仅仅讲解从设备与Aliyun平台之间的交互,业务服务器部分(App开发 ...

  7. MQTT网关连接华为云物联网平台应用

    1.概述 ZLAN5143D是一款专门为工业环境设计的RS485设备数据采集器/物联网网关,兼具串口服务器.Modbus网关.MQTT网关.RS485转JSON等多种功能于一体.如图 1所示,可以连接 ...

  8. STM32通过NB(BC35-G)连接华为云IOT

    第一步:注册并绑定NB 注册账号之类的直接省略......直接从主题说起! 1.在自己已经建好的项目里面绑定NB模组: == *设备标识必须是NB模块的IMEI号(IMEI在芯片的丝印上)== 第二步 ...

  9. 聊聊如何在华为云IoT平台进行产品开发

    本文分享自华为云社区<如何基于华为云IoT物联网平台进行产品开发>,作者: Super.雯 . 华为云物联网平台承载着南北向数据互通的功能职责.在华为云物联网平台基础上实现端到端物联网业务 ...

最新文章

  1. 为什么老外不愿意用 MyBatis?
  2. django crm 03
  3. INTEROP service's ResolveLink operation returned 2 targets for hash, first one
  4. Android NFC读取电子标签
  5. POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】
  6. 数据库5 索引 动态哈希(Dynamic Hashing)
  7. tomcat servlet 线程
  8. filter-policy应用实验(华为设备)
  9. CentOS下安装svn,添加新用户,重启svn服务
  10. React开发中常见问题和 Warning
  11. python服务器查看文件更改记录,python 查看远程服务器上的文件
  12. 关于前辈RPC学习的经验分享:我的DedSec RPC
  13. 微信公众号授权前端(uniapp为例)
  14. 深度Linux修改分辨率6,Deepin 修改自定义分辨率
  15. php接入外汇购物,兑换难!这些外币最好别带回国
  16. 八股文(Java基础部分)
  17. python输入中文教程_如何用Python从头开始实现一个中文拼音输入法?
  18. 14.2 Numpy实现逆傅里叶变换
  19. SpringBoot WEB怎么实现大文件上传
  20. 什么是端口?要如何修改端口?

热门文章

  1. 随机过程 更新过程(下)
  2. 武汉市2022年东湖高新区外资企业投资发展补贴政策申报指南
  3. 人在弥留之际的五大憾事--布洛尼·瓦尔,临终护理护士
  4. python鼠标拖拽功能_Python wxpython模块响应鼠标拖动事件操作示例
  5. 央视调查:“芯荒”正帮助国产汽车芯片实现零的突破
  6. python开源ip代理池_[技术]基于python实现的短效代理ip池程序
  7. 马来西亚纳闽岛(Labuan)
  8. android手机可以换字体吗,Android手机字体随意换-字体管家
  9. 为 UOS 浏览器增加屏蔽广告功能
  10. 【PHP实例】使用GD2函数在图片上添加文字