oa考勤管理系统解决方案,考勤系统操作流程
1119
2022-05-30
华为物联网接入平台IoTDA除了原生接入协议,也提供了各个语言版本的SDK。
华为提供的IoT Device SDK,支持TCP/IP协议栈的设备集成IoT Device SDK后,可以直接与物联网平台通信。不支持TCP/IP协议栈的设备,例如蓝牙设备、ZigBee设备等需要利用网关将设备数据转发给物联网平台,此时网关需要事先集成IoT Device SDK。
SDK简介:
设备接入前,需创建产品(可通过控制台创建或者调用应用侧API接口创建产品)。
产品创建完毕后,需注册设备(可通过控制台注册单个设备或者使用应用侧API接口注册设备)。
设备注册完毕后,按照图中流程实现消息/属性上报、接收命令/属性/消息、OTA升级、自定义TOPIC、泛协议接入(相关Demo)等功能。
针对不同类型的终端设备,提供了不同的SDK:
既然用到SDK,就是要更快捷的对接应用,减少自己写代码的工作量,平台提供的也会更稳定,和平台一起升级。
接下来以C#语言为例,进行一次设备代码接入,看看是不是很方便。
通过官网 设备接入 IoT Device SDK介绍 通道可以找到各个版本的SDK入口,但是帮助文档这里没有过多的说明,而是直接导航到github源代码处(和HuaweiCloud.SDK相比,感觉Device SDK代码上还不够成熟,没有上传到nuget上,命名也不太规范)。
SDK目录结构
iot-device-sdk-java:sdk代码
iot-device-demo:普通直连设备的demo代码
iot-gateway-demo:网关设备的demo代码
iot-device-feature-test:调用demo程序的入口工程
iot-tcp-device-test:子设备实例启动工程
引用的第三方类库使用版本
MQTTnet:v3.0.11
MQTTnet.Extensions.ManagedClient:v3.0.11
Newtonsoft.Json:v12.0.3
NLog:v4.7
DotNetty.Codecs:v0.6.0
DotNetty.Transport:v0.6.0
云端产品创建
在设备接入-控制台 (huaweicloud.com)添加产品选择MQTT协议,并上传Profile或者自定义产品属性和命令
设备接入地址和端口
以智能门禁为例创建这样的产品
设备接入处,注册新设备,要记录好设备Id和密钥
设备SDK接入工作过程
开发环境:Windows 10 操作系统,Microsoft Visual Studio 2022(官方代码上VS2017版本),.NET Standard 版本:2.0。很好的支持.net core 和.net framework。
源代码的测试调用入口控制台程序默认是.net core2.2版本的。用就用最新的,目前相信用VS的都升级到.net6了,只要切换一下目标版本即可。
在项目解决方案上右键属性菜单,选择目标框架
因为客户端集成SDK是一个MQTT的长连接程序,作为一个程序模块,我这里创建了一个单例模式的Device,方便监听命令和随时上报消息。
所有的链接逻辑,上报消息体和命令格式,SDK都做了封装,只要继承相应的接口,就可以直接等待接收命令消息。
SDK提供了一个IoTDevice对象作为设备端操作对象,DeviceClient是一个实际客户端。
创建一个类RecycleDevice客户端,其中定义了 DeviceClient对象,集成了若干Listener,用来监听事件和命令
public class RecycleDevice : CommandListener, MessagePublishListener, ConnectListener, DeviceMessageListener, CommandV3Listener, DeviceShadowListener, RawMessageListener { 。。。。
举例其中2个Listener
命令下发CommandListener
在对象类上集成这个接口CommandListener,并实现接口,同时IoTClient进行监听。OnCmmand需要Report消息状态,平台才知道发送成功,否则20s后认为失败。
private bool Connect(string serverUri, int port, string deviceId, string deviceSecret) { // 创建设备 IoTDevice device = new IoTDevice(serverUri, port, deviceId, deviceSecret); if (device.Init() != 0) { return false; } _IoTClient = device.GetClient(); _IoTClient.messagePublishListener = this; _IoTClient.commandListener = this; return true; } public void OnCommand(string requestId, string serviceId, string commandName, Dictionary
属性上报Report
public void ReportPropes() { Dictionary
运行代码,在Test工程中添加新代码
class Program { private static ManualResetEvent mre = new ManualResetEvent(false); static void Main(string[] args) { RecycleDevice.IoTClient.Init(); RecycleDevice.IoTClient.ReportPropes(); mre.WaitOne(); } }
打开设备看到在线,并且有信息上传了
发一个命令看看
控制台打印出上报消息和命令交互,怎么样是不是很简单?
附件是一个样例代码,完整的但内容很短。
附件: RecycleDevice.rar 1.46KB 下载次数:1次
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。