Skip to main content

设备接入规范

介绍

设备接入是 tkeel 物联网平台提供的基础能力,支持各种标准协议的接入,需要使用设备token设备ID进行连接。IoT Hub 目前支持 MQTT、WebSocket、CoAP、MQTT-SN接入。 后续将逐渐支持 MQTTS、WebSocket Secure(WSS)、STOMP、LwM2M 等协议的接入

MQTT 协议

连接地址: mqtt://192.168.123.9:31136 连接条件:

  • 设备token
  • 设备ID

代码示例(python)

# python 3
import random
import time

from paho.mqtt import client as mqtt_client

broker = '192.168.123.9'
port = 31136

# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{random.randint(0, 1000)}'
# 设备ID
username = '1cb1750c-2b95-4f0b-9a38-43cfb6b13418'
# 设备token
password = "NDgzMDY5MGItNjMyMy0zN2ZlLWIwZmUtMjEzNzFmNWFkZjY0"


def connect_mqtt():
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to MQTT Broker!")
else:
print("Failed to connect, return code %d\n", rc)

client = mqtt_client.Client(client_id)
client.username_pw_set(username, password)
client.on_connect = on_connect
client.connect(broker, port)
return client


def run():
client = connect_mqtt()
client.loop_start()
time.sleep(5)


if __name__ == '__main__':
run()

CoAP 协议

连接地址: mqtt://192.168.123.9:30588 连接条件:

  • 设备token
  • 设备ID

coap-client 示例(cmd)

订阅消息

coap-client -m get -s 1000  "coap://192.168.123.9:30588/mqtt/1cb1750c-2b95-4f0b-9a38-43cfb6b13418/v1/devices/me/attributes?c=<设备ID>&p=<设备token>&u=<用户名>"
  • 主题名称为:1cb1750c-2b95-4f0b-9a38-43cfb6b13418/v1/devices/me/attributes

    注意这里是 设备ID/v1/devices/me/attributes

  • Client ID :<设备ID>, 字符串
  • 用户名:<用户名>, 字符串即可
  • 密码:<设备token>, 字符串
  • Payload 为:{'key': 'value'}

发布消息

coap-client -m put -t "application/json" -e "{'key': 'value'}"   "coap://192.168.123.9:30588/mqtt/1cb1750c-2b95-4f0b-9a38-43cfb6b13418/v1/devices/me/attributes?c=<设备ID>&p=<设备token>&u=<用户名>"
  • 主题名称为:1cb1750c-2b95-4f0b-9a38-43cfb6b13418/v1/devices/me/attributes

    注意这里是 设备ID/v1/devices/me/attributes

  • Client ID :<设备ID>, 字符串
  • 用户名:<用户名>, 字符串即可
  • 密码:<设备token>, 字符串
  • Payload 为:{'key': 'value'}

查看订阅的消息收到了

{"key": "value"}

MQTT-SN 协议

mqtt-sn client <--> mqtt-sn gateway <--> mqtt broker 连接地址: mqtt-sn://192.168.123.9:31884 连接条件:

  • 设备token
  • 设备ID 开启 MQTT-SN 的时候需要指定 设备ID 和 设备token

mqtt-sn-pub 示例(cmd)

订阅属性消息

./mqtt-sn-sub  -h 192.168.123.9 -p 31884 -t "v1/devices/me/attributes"
  • 主题名称为:v1/devices/me/attributes

发布属性消息

./mqtt-sn-pub  -h 192.168.123.9 -p 31884 -t "v1/devices/me/attributes" -m "{‘key_test’: 'value'}"
  • 主题名称为:v1/devices/me/attributes
  • Payload 为:{‘key_test’: 'value'}

查看订阅的消息收到了

{‘key_test’: 'value'}

LwM2M 协议

LwM2M client <--> emqx_lwm2m <--> mqtt broker 连接地址: lwm2m://192.168.123.9:30685 连接条件:

  • 设备token
  • 设备ID LwM2M client 连接 emqx_lwm2m 的时候需要指定 endpoint name 为 “{设备ID}@{设备token}”

lwm2mclient 示例(cmd)

lwm2mclient 连接平台

./lwm2mclient -n a8e92c6d-0f73-4f7a-8b85-0f110155eed2@NWExMTg3NTUtZWVhNS0zYzNiLWEzNmEtODIzMDU2MWFkMWM1 -h 192.168.123.9 -p 30685 -4
  • -n 表示 endpoint name 为 “{设备ID}@{设备token}”

lwm2mClient 连接平台成功之后平,可在平台原始数据收到消息

  • 主题名称为: "lwm2m/a8e92c6d-0f73-4f7a-8b85-0f110155eed2@NWExMTg3NTUtZWVhNS0zYzNiLWEzNmEtODIzMDU2MWFkMWM1/up/resp"
  • Payload 为:
{
"msgType":"register",
"data":{
"objectList":[
"/1",
"/1/0",
"/2/0",
"/3/0",
"/4/0",
"/5/0",
"/6/0",
"/7/0",
"/31024",
"/31024/10",
"/31024/11",
"/31024/12"
],
"lwm2m":"1.1",
"lt":300,
"ep":"a8e92c6d-0f73-4f7a-8b85-0f110155eed2@NWExMTg3NTUtZWVhNS0zYzNiLWEzNmEtODIzMDU2MWFkMWM1",
"b":"U",
"alternatePath":"/"
}
}

通过 HTTP API 发布消息到 lwm2mClient

curl --location --request POST 'http://192.168.123.9:30855/api/v4/mqtt/publish' \
--header 'Authorization: Basic YWRtaW46cHVibGlj' \
--header 'Content-Type: application/json' \
--data-raw '{
"topic":"lwm2m/a8e92c6d-0f73-4f7a-8b85-0f110155eed2@NWExMTg3NTUtZWVhNS0zYzNiLWEzNmEtODIzMDU2MWFkMWM1/dn",
"payload":{
"reqID":"2",
"msgType":"discover",
"data":{
"path":"/3/0"
}
},
"qos":1,
"retain":false,
"clientid":"@tkeel.iothub.internal.clientId"
}'
  • 主题名称为:lwm2m/a8e92c6d-0f73-4f7a-8b85-0f110155eed2@NWExMTg3NTUtZWVhNS0zYzNiLWEzNmEtODIzMDU2MWFkMWM1/dn
  • Payload 为:
{
"reqID": "2",
"msgType": "discover",
"data": {
"path": "/3/0"
}
}

lwm2mClient 收到消息之后回复的消息如下, 可在平台原始数据收到数据

  • 主题名称为: "lwm2m/a8e92c6d-0f73-4f7a-8b85-0f110155eed2@NWExMTg3NTUtZWVhNS0zYzNiLWEzNmEtODIzMDU2MWFkMWM1/up/resp"
  • Payload 为:
{
"reqID":"2",
"msgType":"discover",
"data":{
"reqPath":"/3/0",
"content":[
"</3/0>",
"</3/0/0>,</3/0/1>,</3/0/2>,</3/0/3>,</3/0/4>,</3/0/5>,</3/0/6>,</3/0/7>,</3/0/8>,</3/0/9>,</3/0/10>,</3/0/11>,</3/0/12>,</3/0/13>,</3/0/14>,</3/0/15>,</3/0/16>"
],
"codeMsg":"content",
"code":"2.05"
}
}