CoAP 协议网关
打开 ,点击左侧的 “模块” 选项卡,选择添加:
点击 “选择”,然后选择 “CoAP 接入网关”:
配置相关基础参数:
添加监听端口:
点击 “确定” 完成监听器的配置,然后点击 “添加” 完成模块的创建:
使用示例
libcoap (opens new window) 是一个非常易用的 CoAP 客户端库,此处我们使用它作为 CoAP 客户端来测试 EMQX CoAP 接入网关的功能。
PUBLISH 示例
使用 发布一条消息:
libcoap/examples/coap-client -m put -e 1234 "coap://127.0.0.1/mqtt/topic1?c=client1&u=tom&p=secret"
- 主题名称为:”topic1” (不是 “/topic1”)
- Client ID 为:”client1”
- 用户名为:”tom”
- 密码为:”secret”
- Payload 为:”1234”
使用 libcoap
订阅一个主题:
- 主题名称为:”topic1” (不是 “/topic1”)
- Client ID 为:”client1”
- 密码为:”secret”
- 订阅的持续时间为:10 秒
在这个期间,如果 topic1
主题上有消息产生, 便会收到该条消息。
通信接口说明
CoAP Client Observe Operation
在 EMQX CoAP 接入网关中,可以使用 CoAP 的 Observe 操作实现一个订阅主题的操作:
GET coap://localhost/mqtt/{topicname}?c={clientid}&u={username}&p={password} with OBSERVE=0
- 路径中的 “mqtt “为必填项
- 将 {topicname}、{clientid}、{username} 和 {password} 替换为你的真实值
- {topicname} 和 {clientid} 为必填项
- 如果 clientid 不存在,将返回 “bad_request”
- URI 中的 {topicname} 应该用 percent-encoded,以防止特殊字符,如 + 和 #
- {username} 和 {password} 是可选的
- 如果 {username} 和 {password} 不正确,将返回一个 uauthorized 错误
- 订阅的 QoS 等级恒定为 1
CoAP Client Unobserve Operation
- 路径中的 “mqtt “为必填项
- 将 {topicname}、{clientid}、{username} 和 {password} 替换为你的真实值
- {topicname} 和 {clientid} 为必填项
- 如果 clientid 不存在,将返回 “bad_request”
- URI 中的 {topicname} 应该用 percent-encoded,以防止特殊字符,如 + 和 #
- {username} 和 {password} 是可选的
- 如果 {username} 和 {password} 不正确,将返回一个 uauthorized 错误
CoAP Client Notification Operation
接入网关会将订阅主题上收到到消息,以 observe-notification
的方式投递到 CoAP 客户端:
- 它的 payload 正是 MQTT 消息中的的 payload
- payload 数据类型为 “application/octet-stream”
CoAP Client Publish Operation
使用 CoAP 的 PUT 命令执行一次 PUBLISH 操作:
PUT coap://localhost/mqtt/{topicname}?c={clientid}&u={username}&p={password}
- 将 {topicname}、{clientid}、{username} 和 {password} 替换为你的真实值
- {topicname} 和 {clientid} 为必填项
- 如果 clientid 不存在,将返回 “bad_request”
- URI 中的 {topicname} 应该用 percent-encoded,以防止特殊字符,如 + 和 #
- {username} 和 {password} 是可选的
- 如果 {username} 和 {password} 不正确,将返回一个 uauthorized 错误
- payload 可以是任何二进制数据
- payload 数据类型为 “application/octet-stream”
- 发布信息将以 qos0 发送
CoAP Client 保活
设备应定期发出 GET 命令,作为 ping 操作保持会话在线
- 路径中的 “mqtt “为必填项
- 将 {topicname}、{clientid}、{username} 和 {password} 替换为你的真实值
- {topicname} 和 {clientid} 为必填项
- 如果 clientid 不存在,将返回 “bad_request”
- URI 中的 {topicname} 应该用 percent-encoded,以防止特殊字符,如 + 和 #
- {username} 和 {password} 是可选的
- 如果 {username} 和 {password} 不正确,将返回一个 uauthorized 错误
- 客户端应该定期做 keepalive 工作,以保持会话在线,尤其是在 NAT 网络中的设备
CoAP 接入网关不支持 和 DELETE
方法。
在 URI 中的主题名称必须先经过 URI 编码处理(参考:RFC 7252 - section 6.4)
CoAP URI 中的 ClientId, Username, Password, Topic是 MQTT 中的概念。也就是说,CoAP 接入网关是通过借用 MQTT 中的名词概念,试图将 CoAP 信息融入到 MQTT 系统中。
EMQX 的 认证,访问控制,钩子等功能也适用于 CoAP 接入网关。比如:
- 如果 用户名/密码 没有被授权, CoAP 客户端就会得到一个
uauthorized
的错误 - 如果 用户名/客户端ID 不允许发布特定的主题,CoAP 消息实际上会被丢弃,尽管 CoAP 客户端会从接入网关上得到一个 Acknoledgement
- 如果一个 CoAP 消息被发布,’message.publish’ 钩子也能够捕获这个消息
Well-known locations
CoAP 接入网关的 well-known 发现恒定的返回 “,”
libcoap/examples/coap-client -m get "coap://127.0.0.1/.well-known/core"