新溪blog

新溪-gordon之胡写乱画

0%

5分钟了解阿里云物联网平台

简介

  • 阿里云物联网平台向下连接海量设备,支撑设备数据采集上云;向上提供云端API,指令数据通过API调用下发至设备端,实现远程控制。
  • 提供MQTT, CoaP, HTTP/S等多种协议SDK设备接入,可快速对接2G/3G/4G、NB-IoT、LoRa、WiFi等不同网络设备

安全

  • 身份认证:
    1
    2
    3
    安全级别很高  -> 提供芯片级安全存储方案(ID²)及设备秘钥安全管理机制,防止设备密钥被破解
    安全级别高 -> 一机一密,适合有能力批量预分配ID密钥烧入到每个芯片的设备
    安全级别普通 -> 一型一密,认证时动态获取设备证书,适合批量生产时无法将设备证书烧入每个设备
  • 通信安全:
    1
    2
    3
    4
    安全级别高   -> 支持TLS(MQTT\HTTP)、DTLS(CoAP)数据传输通道,保证数据的机密性和完整性
    安全级别普通 -> 支持TCP(MQTT)、UDP(CoAP)上自定义数据对称加密通道
    支持设备权限管理机制,保障设备与云端安全通信
    支持设备级别的通信资源(Topic等)隔离,防止设备越权等问题
  • 可根据需要选择合适自己的方案,我们的项目一般:
    1
    2
    3
    4
    5
    6
    7
    1. 身份认证:
    主要使用使用一机一密或一型一密
    工厂支持逐一烧录的,最好使用一机一密,确保安全性
    工厂不支持逐一烧录的,使用一型一密(最好把此批次的设备唯一标识记录下来方便有问题时剔除伪造设备)
    2. 通信安全:
    支持TLS/DTLS的设备,使用TLS/DTLS相关的加密传输[MQTT(TLS)或CoaP(DTLS)来保证通信安全]
    不支持TLS/DTLS的设备,使用对称加密的方式

数据解析

  • 以下几种情况会使用到数据解析:
    1
    2
    1. 有些设备对流量很敏感,尽可能减少数据通信量
    2. 之前设备已经完成二进制数据编码,不想修改相关代码

数据解析图

  • 数据转化这部分逻辑你要实现,本质是实现下面2个函数:
    1
    2
    3
    4
    5
    6
    7
    8
    // 此函数是把json字串转化为二进制
    function protocolToRawData(jsonObj) {
    return rawdata;
    }
    // 此函数是把二进制串转化为json
    function rawDataToProtocol(rawData) {
    return jsonObj;
    }

    物模型

简介
  • 物模型,简称TSL,即Thing Specification Language,指将物理空间中的实体数字化,并在云端构建该实体的数据模型。在物联网平台中,定义物模型即定义产品功能。

  • 属性(Property):

    1
    2
    3
    4
    5
    一般用于描述设备运行时的状态,如环境监测设备所读取的当前环境温度等。
    属性支持 GETSET 请求方式。应用系统可发起对属性的读取和设置请求。

    设备 => 上报属性
    云端 => 设置属性
  • 服务(Service):

    1
    2
    3
    4
    设备可被外部调用的能力或方法,可设置输入参数和输出参数。
    相比于属性,服务可通过一条指令实现更复杂的业务逻辑,如执行某项特定的任务。

    云端 => 调用服务
  • 事件(Event):

    1
    2
    3
    4
    5
    设备运行时的事件。
    事件一般包含需要被外部感知和处理的通知信息,可包含多个输出参数。如:
    某项任务完成的信息,或者设备发生故障或告警时的温度等,事件可以被订阅和推送。

    设备 => 上报事件
实例
  • 以门锁作为一个实例,来简单解释一下属性、事件和服务

  • 属性:

    1
    开关状态: islock, bool, true:打开, false:关闭
  • 事件:

    1
    2
    开门通知: DoorOpen, 事件类型:信息
    故障上报: DoorError, 事件类型:报警
  • 服务:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    获取指纹列表: GetFingerprint
    输入: 无
    输出: 1.指纹id 2.指纹昵称 3.指纹权限
    删除指纹: DelFingerprint
    输入: 指纹id
    输出: 无
    添加指纹: AddFingerprint
    输入: 指纹权限
    输出: 无

    设备影子

  • 用于缓存设备状态。

  • 应用场景:

    1
    2
    3
    场景1:网络不稳定,设备频繁上下线
    场景2:多程序同时请求获取设备状态
    场景3:设备掉线
  • 设备影子的修改:

    1
    2
    3
    4
    5
    6
    1. app通过阿里iot平台接口修改:
    修改desired数据,并反馈给设备
    用于记录人工的操作
    2. 设备上报信息修改:
    修改reported数据
    用于记录设备执行的操作,反应设备当前状态
  • 设备影子JSON文档示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    {
    "state": {
    "desired": { % 设备的预期状态,一般是app写
    "color": "RED"
    },
    "reported": { % 设备的报告状态,设备写
    "color": "GREEN"
    }
    },
    "metadata": {
    "desired": {
    "color": {
    "timestamp": 1469564492
    }
    },
    "reported": {
    "color": {
    "timestamp": 1469564492
    }
    }
    },
    "timestamp": 1469564492,
    "version": 1
    }

规则引擎

数据流转
  • 设备通过MQTT, CoaP等协议对接阿里iot,阿里iot后台管理也可以通过数据分析,运维监控看到主要数据和通用的相关汇总。但如果你想把数据保存到自己服务器,或需要更精细的使用,就用到数据流转功能了。

数据流转图

  • 如上图所示,你可以直接订阅相关事件,设备上报相关数据后,会直接通过http2协议推送给云端。
场景联动
  • 数据流转场景联动:
    1
    2
    3
    1.触发条件
    2.过滤条件
    3.执行动作