阿里云IoT平台CoAP接入 3 了解下物模型

关于阿里云IoT平台CoAP接入,可见笔记阿里云IoT平台CoAP接入

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


1 前言

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

物联网套件高级版中,对物理空间中的实体进行了数字化建模,物理实体可以是各类传感器、车载装置、工业切片机等,也可以是“楼宇”、“房间”甚至“工厂”等等。现阶段,物联网中与人发生直接交互的物,更多是一个个具体的设备,因此,我们将设备抽象为“物”(Thing),通过物模型对设备是什么、能做什么、可以对外提供哪些服务进行描述。

一般情况下,物模型表现为设备的“功能”,包括至少一个“属性”(Property)或“服务”(Service)或“事件”(Event)。开发者完成产品的功能定义后,系统将自动生成该产品的“物模型”,以JSON格式表述,称之为 TSL(即 Thing Specification Language),请参考文档产品功能定义。

具体关于物模型的介绍可以查看官方帖子,阿里云物联网套件 > 快速入门 > 高级版快速开始 > 基于物模型开发设备

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

2 官方物模型解析

官方将 Alink Json 协议的介绍,放在了开发指南里面,阿里云物联网套件 > 开发指南 > 设备协议,其中有属性、事件、服务的 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


猜你喜欢

转载自blog.csdn.net/iotisan/article/details/80275772
今日推荐