关于阿里云IoT平台CoAP接入,可见笔记阿里云IoT平台CoAP接入
<https://blog.csdn.net/iotisan/article/details/80507823>


小能手另外分享了NB-IoT的应用开发心得,先从模组端对几个常见模块进行试用分析,接着对更上层具体的CoAP协议进行研究,并且演示如何对接主流的第三方物联网平台,可以见
NB-IoT应用开发笔记 <https://blog.csdn.net/iotisan/article/details/78704643>

<>1 前言


上一篇使用基础版产品进行接入,此种应用,阿里云IoT平台作为一个数据管道。另外阿里云物联网套件中还提供了高级版产品,使用物模型(TSL)来细化产品定义,可以在阿里云平台直接操作产品。

物联网套件高级版中,对物理空间中的实体进行了数字化建模,物理实体可以是各类传感器、车载装置、工业切片机等,也可以是“楼宇”、“房间”甚至“工厂”等等。现阶段,物联网中与人发生直接交互的物,更多是一个个具体的设备,因此,我们将设备抽象为“物”(Thing),通过物模型对设备是什么、能做什么、可以对外提供哪些服务进行描述。
一般情况下,物模型表现为设备的“功能”,包括至少一个“属性”(Property)或“服务”(Service)或“事件”(Event)。开发者完成产品的功能定义后,系统将自动生成该产品的“物模型”,以JSON格式表述,称之为
TSL(即 Thing Specification Language),请参考文档产品功能定义。
具体关于物模型的介绍可以查看官方帖子,阿里云物联网套件 > 快速入门 > 高级版快速开始 > 基于物模型开发设备
<https://help.aliyun.com/document_detail/69016.html>

这篇笔记将会介绍官方的物模型示例,官方花了较多篇幅介绍物模型,我就不搬运了。但是物模型如何转化为 Alink Json
才是接入时最重要的一点,也是最容易出错的地方,本能手花了好几天,在阿里云伙伴的帮助下终于成功上报了数据。为了其他朋友少走一些弯路,本能手创建了一个烟感产品,演示如何把TSL转化为
Alink Json。这为下一步高级版的 CoAP 接入测试做好协议准备。

<>2 官方物模型解析

官方将 Alink Json 协议的介绍,放在了开发指南里面,阿里云物联网套件 > 开发指南 > 设备协议
<https://help.aliyun.com/document_detail/70046.html#h2--5>,其中有属性、事件、服务的 Alink
Json 通信格式介绍。

我这边搬运一个设备属性上报的示例,其他例子大家可以多看看,特别是再处理具体协议时,可以到这边做个比对。
{ "id" : "123", "version":"1.0", "params" : { "Power" : { "value":"on",
"time":1524448722000 } "WF" : { "value":{}, "time":1524448722000 } },
"method":"thing.event.property.post" }
具体字段的细节定义如下:



有几点要注意下,如果没有严格按照这个格式来,后台就无法解析:

*
物模型字段必须完全一致。

id、version、method、time 等等这些字段一个都不能少。开发者可变的就是“请求参数”下的“属性名称”和“属性的值”这些键值对。

*
各个属性的字段一定要注意看其定义的数据类型

比如 time 字段的数值是UTC毫秒,是长整形数,不用加双引号。是的,本能手一定犯过这个错,才会重点写出来告诉大家。

<>3 烟感产品物模型解析

本能手这边举例的设备定义是烟感设备。
属性 烟雾检测状态 SmokeSensorState enum 枚举值:0-正常; 1-检测到烟雾; 事件 故障上报 Error - 事件类型:信息


<>3.1 烟感设备属性上报
{ "id":"123", "version":"1.0", "params":{ "SmokeSensorState":{ "value":1,
"time":1524448722000 } }, "method":"thing.event.property.post" }
<>3.2 烟感设备事件上报
{ "id":"123", "version":"1.0", "params":{ "Error":{ "value":1,
"time":1524448722000 } }, "method":"thing.event.property.post" }
<>4 增强型的烟雾报警器

官方模版比较简单,只有1个属性和1个事件。我再定义相对完备的烟雾报警器。



<>4.1 物模型描述
{ "identifier": "SmokeSensorState", "dataType": { "specs": { "0": "正常", "1":
"检测到烟雾" }, "type": "enum" }, "name": "烟雾检测状态" }, { "identifier": "RemoveState",
"dataType": { "specs": { "0": "正常", "1": "拆卸报警" }, "type": "bool" }, "name":
"拆卸报警状态" }, { "identifier": "BatteryPercentage", "dataType": { "specs": {
"unit": "%", "min": "0", "unitName": "百分比", "max": "100" }, "type": "double" },
"name": "电池电量" }, { "identifier": "Period", "dataType": { "specs": { "unit":
"″", "min": "10", "unitName": "秒", "max": "79800" }, "type": "int" }, "name":
"心跳上报周期" }
<>4.2 CoAP 上报 payload

Alink Json 整理如下:
{ "id":"123", "version":"1.0", "params":{ "SmokeSensorState":{ "value":0,
"time":1526051254000 }, "RemoveState":{ "value":0, "time":1526051254000 },
"BatteryPercentage":{ "value":99, "time":1526051254000 }, "Period":{
"value":10, "time":1526051254000 } }, "method":"thing.event.property.post" }
<>5 END