阿里云物联网支持多种通信协议,CZGL.AliIoTClient 使用了 MQTT 通信协议,通信库为 M2MQTT 。阿里云物联网数据传输有两种数据传输方式,分别是 透传 和 Alink json,两种方式只在属性读/写、事件上报、服务调用这四种 Topic 上有差别, 其它链接通信、普通 Topic、响应等,无差异。建议使用 Alink json 方式上传下发数据。css
CZGL.AliIoTClient
M2MQTT
透传
Alink json
CZGL.AliIoTClient 支持 Alink json 和 透传,SDK 中有两个客户端类,html
二者很大程度上是一致的,仅在属性事件服务方面的数据传输形式有差别。所以后面主要以 AliIoTClientJson 来讲明。node
在建立客户端类时,须要传入 DeviceOptions 对象,须要预先在阿里云物联网控制台,复制设备的密钥等信息,填入到 DeviceOptions 中。git
DeviceOptions
示例:docker
AliIoTClientJson client = new AliIoTClientJson(new DeviceOptions { ProductKey = "a1xrkGSkb5R", DeviceName = "mire", DeviceSecret = "CqGMkOBDiKJfrOWp1evLZC2O6fsMtEXw", RegionId = "cn-shanghai" });
链接客户端前,应当设置须要订阅的普通 Topic 以及配置是否接收属性设置命令、服务调用和响应等 Topic 。json
普通topic服务器
设置要订阅的普通 Topic:markdown
string[] topics = new string[] { ... , ... , ... };
要求填写 Topic 完整的长度的 URI ,可到控制台中查看。例如 "/a1xrkGSkb5R/dockertest/user/update/error"异步
若是你不想这么麻烦,可使用ui
string[] topics = new string[] { client.CombineHeadTopic("get") };
只需输入 Topic 的 /user/ 后面的内容便可,AliIoTClientJson.CombineHeadTopic() 会为你生成完整的 Topic 地址。 例如须要订阅 "/a1xrkGSkb5R/dockertest/user/update/error"
/user/
string[] topics = new string[] { client.CombineHeadTopic("update/error") };
除了普通的 Topic 外,还要设备上传各类数据、接收服务器的响应、服务器设置设备属性、服务器调用设备服务等,这些将在后面章节介绍。
你但愿在收到消息时,程序须要作点什么?编写相应的方法,绑定到委托事件中,当条件符合时,这些方法将会被触发。在本章,使用 CZGL.AliIoTClient 预设置的默认委托方法,后面章节将会详细说明如何自定义方法。
使用默认事件:
client.UseDefaultEventHandler();
已经作好了链接前的配置工做,如今链接到阿里云物联网。
CZGL.AliIoTClient 中,有三个关于链接的方法:
在阿里云物联网控制台新建一个产品,再在此产品下新建一个设备,其它功能不须要添加。记录下新建设备的密钥等信息。在 Visual Studio 中,新建一个 .NET Core 控制台应用,在 Nuget 中找到 CZGL.AliIoTClient 并添加。 控制台代码以下:
// 建立客户端 client = new AliIoTClientJson(new DeviceOptions { ProductKey = "a1xrkGSkb5R", DeviceName = "mire", DeviceSecret = "CqGMkOBDiKJfrOWp1evLZC2O6fsMtEXw", RegionId = "cn-shanghai" }); // 设置要订阅的Topic、运行接收内容的Topic string[] topics = new string[] { client.CombineHeadTopic("get") }; // 使用默认事件 client.UseDefaultEventHandler(); // 链接服务器 client.ConnectIoT(topics,null,60); Console.ReadKey();
打开阿里云物联网控制台,刷新设备列表,便可看到设备在线。
一个新建的产品,有几个默认的 Topic ,咱们没必要做其它修改,就目前来讲,可使用默认的 Topic 作示范。
运行上面已经编写好的控制台程序,不要关闭。
打开阿里云物联网控制台,打开相应的设备,在设备的 Topic列表 里面找到 .../user/get 这个 Topic, 例如: /a1xrkGSkb5R/dockertest/user/get
.../user/get
/a1xrkGSkb5R/dockertest/user/get
点击 发布消息 ,而后输入要发送的内容,最后查看控制台是否收到下发的消息。因为使用了 CZGL.AliIoTClient 中,默认的事件方法,所以除了消息内容,也会输出这条 Topic 消息的一些属性信息。
发布消息
设备的 Topic 列表,有个 .../user/update ,例如 /a1xrkGSkb5R/dockertest/user/update 。 这个 Topic 容许客户端上传数据,下面将说明客户端如何上传数据到阿里云物联网服务器。
.../user/update
/a1xrkGSkb5R/dockertest/user/update
上传普通 Topic 的方法:
I. 上传 byte
public int CommonToServer(string topicName, byte[] content)
摘要:此种方式以 byte[] 形式上传数据,注意 byte[] 的进制
参数: topicName: Topic 的完整名称,可以使用 CombineHeadTopic() 方法获取 content: 消息内容
CombineHeadTopic()
返回结果: 消息 ID
II. 普通字符串
public int CommonToServer(string topicName, string content)
摘要: 普通方式推送 Topic 到服务器,直接上传字符串
III. 其它上传方法
还要其它几个方法,放到一块儿说明。
public int CommonToServer(string topicName, string content, [System.Text.Encoding encoding = null])
说明:上传数据到指定 Topic ,指定字符串的编码格式。阿里云物联网默认使用 UTF8。CZGL.AliIoTClient 也默认使用 UTF8 做为数据的编码,能够自定义上传字符串的编码。 通常不须要改,否则中文字符串会乱码。
public int CommonToServerBase64(string topicName, string content)
说明:传入字符串后,会先进行 Base64 编码,而后再上传。
public int CommonToServerBase64(string topicName, string content, [System.Text.Encoding encoding = null])
说明:传入字符串后,指定字符串的编码,而后进行 Base64 编码后上传。
你能够在阿里云物联网控制台打开某个产品,在产品里新建一个或多个 Topic ,设定这个 Topic 具备 订阅/发布 权限。 而后修改程序试试是否正常上传、下发数据。