阿里云IOT平台ALink协议
1. ALink协议
Alink协议是针对物联网开发领域设计的一种数据交换规范,数据格式是JSON,用于设备端和物联网平台的双向通信,更便捷地实现和规范了设备端和物联网平台之间的业务数据交互。
2. ALink封装的功能
序号 | 功能配置 | 说明 |
---|---|---|
01 | 基础函数库 | 为连云等功能提供基础函数 |
02 | MQTT | 基于MQTT协议连接阿里云物联网平台 |
03 | TLS | 传输层加密机制 |
04 | 物模型 | 使用属性、事件、服务构成的物模型描述设备 |
05 | OTA | 固件升级和远程配置 |
06 | 时间同步 | 基于MQTT协议从云平台获取标准时间 |
07 | 设备影子 | 基于MQTT协议将设备的状态上报和云端的指令下发缓存在云端JSON文档中 |
08 | 设备日志 | 基于MQTT协议将设备日志上报到云端 |
09 | 设备标签 | 基于MQTT协议向云平台操作设备标记 |
10 | 引导服务 | 引导全球设备就近连接服务器 |
11 | 子设备管理 | 基于MQTT协议的子设备注册,拓扑管理和上下线功能 |
12 | 设备诊断 | 基于MQTT协议,将设备诊断信息上报到云端 |
13 | 任务管理 | 设备端任务的下发与管理 |
14 | 远程登录 | 提供控制台远程登录 Linux 设备能力 |
- 01-03是协议基础功能
- 04-14是业务扩展功能封装,视平台不同实现
3. 基于Linux平台的LinkSDK代码分析以上功能的实现
3.06 时间同步
ntp_posix_demo.c
- MQTT连接 host a13FN5TplKq.iot-as-mqtt.cn-shanghai.aliyuncs.com port 443
- 发送请求 /ext/ntp/a13FN5TplKq/ntp_basic_demo/request
{"deviceSendTime":"1621389853873"}
- 服务端返回
{"deviceSendTime":"1621389853873","serverSendTime":"1621389853910","serverRecvTime":"1621389853910"}
似乎只调整了日志时间,并未修改系统时间
3.08 设备日志
logpost_basic_demo.c
实时向服务端上pub设备日志
3.10 引导服务
bootstrap_posix_demo.c
- https://iot-auth-global.aliyuncs.com/auth/bootstrap port 443 POST
- 参数为
productKey=a13FN5TplKq&deviceName=bootstrap_posix_demo&clientId=a13FN5TplKq.bootstrap_posix_demo&resources=mqtt
- 返回值
{ "code":200, "data":{ "instanceId":"iotx-oxssharez200", "resources":{ "mqtt":{ "host":"public.iot-as-mqtt.cn-shanghai.aliyuncs.com", "ip":"101.133.196.24", "port":1883 } } }, "message":"success" }
- 根据获取到的host、port建立MQTT连接
- 订阅 topic=”/sys/
/ /thing/bootstrap/notify" 会收到平台端下发新的地址信息
3.14 远程登录
remote_access_basic_demo.c
- MQTT连接 host g7ajBMM0oVN.iot-as-mqtt.cn-shanghai.aliyuncs.com port 443
- 创建反射代理线程 remote_proxy_thread
- 订阅sub /sys/g7ajBMM0oVN/RJ6G0A8aXfqlxB05dyXq/edge/debug/switch
- 平台下发开启指令
{"status":1}
- 建立通道 host backend-iotx-remote-debug.aliyun.com, port 443
- 平台下发登录指令 连接本地22端口
如果本地未开启sshd,将无法登录