使用libcoap与EMQX5.0 CoAP网关通讯异常

环境信息

  • EMQX 版本:5.0
  • 操作系统及版本:Windows Server 2019
  • 其他

问题描述

此前使用EMQX4.x,libcoap与MQTTx通讯正常,今天升级到了EMQX5.0,正常启用CoAP网关,coap-client发送命令一直返回“4.0.0”,无法正常使用。

配置文件及日志

coap-client
image

配置文件

网关配置


接入认证配置了也不正确

你好 5.0 的 CoAP 网关设计进行了更新。文档暂时还没上官网,可以先参考:https://github.com/emqx/emqx-docs/blob/release-5.0/zh_CN/gateway/coap.md

你好,按照您的方法,已经成功连接,拿到token,

问题:但是消息发布时一直返回4.01,帮忙看看,谢谢!


4.01:请求格式正确,但登录鉴权失败。并在消息体中返回具体的错误信息。

成功连接
image

当前配置

监听器配置

接入认证配置

你将 log level 设置为 debug 模式看看,另外连接模式是不能使用 coap-client 进行测试的,因为 coap-client 每一次都会使用新的端口进行发送,在 EMQX 这边看起来就像是一个新的连接一样的,这一部分的优化还没开始做。

咱们@heeejianbo同学给的文档中给出了【连接模式】下的使用coap-client创建连接、断开连接、发布消息、订阅消息的示例,https://github.com/emqx/emqx-docs/blob/release-5.0/zh_CN/gateway/coap.md
@blankalupo同学上面回复说不能使用coap-client进行测试。

官方大神们,谁能准确回复一下?谢谢!

这文档就是我写的,我的意思是 coap-client 不能测试 连接模式 模式,连接模式 目前需要使用同一个 Socket 进行通信,coap-client 每次都是创建新的 socket 进行通信,到达 EMQX 时,会被当作一个新的会话进行处理

1、文档:发布消息请求字符串中有一处书写错误,应该是问号吧?

2、按照”?”发送不会提示4.01错误,提示Sep 19 16:02:49 ALRT got RST for message

3、log level调整为debug后的日志片断:

2022-09-19T16:02:44.396000+08:00 [debug] data: <<64,2,67,129,59,118,97,108,105,121,117,110,46,99,111,109,130,112,115,4,99,111,97,112,13,21,100,101,118,49,38,99,108,105,101,110,116,105,100,61,50,51,52,38,116,111,107,101,110,61,49,52,57,55,56,54,51,56,55,51,255,49,50,51,44,104,101,108,108,111>>, line: 684, mfa: emqx_gateway_conn:parse_incoming/2, msg: RECV_data, peername: xxx.yyy.zzz.uuu:28186
2022-09-19T16:02:44.396000+08:00 [debug] line: 741, mfa: emqx_gateway_conn:handle_incoming/2, msg: RECV_packet, packet: {coap_message,con,post,17281,<<>>, #{uri_host => <<"valiyun.com">>, uri_path =>, [<<"ps">>,<<"coap">>, <<"dev1&clientid=234&token=1497863873">>]}, <<"123,hello">>}, peername: xxx.yyy.zzz.uuu:28186
2022-09-19T16:02:44.396000+08:00 [debug] line: 810, mfa: emqx_gateway_conn:serialize_and_inc_stats_fun/1, msg: SEND_packet, packet: {coap_message,ack,{error,unauthorized},17281,<<>>,#{},<<>>}, peername: xxx.yyy.zzz.uuu:28186
2022-09-19T16:02:44.396000+08:00 [debug] data: <<96,129,67,129>>, line: 845, mfa: emqx_gateway_conn:send/2, msg: SEND_data, peername: xxx.yyy.zzz.uuu:28186
2022-09-19T16:02:49.898000+08:00 [debug] data: <<64,2,251,234,59,118,97,108,105,121,117,110,46,99,111,109,130,112,115,4,99,111,97,112,4,100,101,118,49,76,99,108,105,101,110,116,105,100,61,50,51,52,13,3,116,111,107,101,110,61,49,52,57,55,56,54,51,56,55,51,255,49,50,51,44,104,101,108,108,111>>, line: 684, mfa: emqx_gateway_conn:parse_incoming/2, msg: RECV_data, peername: xxx.yyy.zzz.uuu:28629
2022-09-19T16:02:49.898000+08:00 [debug] line: 741, mfa: emqx_gateway_conn:handle_incoming/2, msg: RECV_packet, packet: {coap_message,con,post,64490,<<>>, #{uri_host => <<"valiyun.com">>, uri_path => [<<"ps">>,<<"coap">>,<<"dev1">>], uri_query =>, #{<<"clientid">> => <<"234">>, <<"token">> => <<"1497863873">>}}, <<"123,hello">>}, peername: xxx.yyy.zzz.uuu:28629
2022-09-19T16:02:49.898000+08:00 [debug] line: 810, mfa: emqx_gateway_conn:serialize_and_inc_stats_fun/1, msg: SEND_packet, packet: {coap_message,reset,undefined,64490,<<>>,#{},<<>>}, peername: xxx.yyy.zzz.uuu:28629
2022-09-19T16:02:49.898000+08:00 [debug] data: <<112,0,251,234>>, line: 845, mfa: emqx_gateway_conn:send/2, msg: SEND_data, peername: xxx.yyy.zzz.uuu:28629

4、使用同一个Socket通信的方式,稍后我试一下。

5、

因为 coap-client 每一次都会使用新的端口进行发送,在 EMQX 这边看起来就像是一个新的连接一样的,这一部分的优化还没开始做。

近期版本能否安排,解决一下?

文档那里应该是写错了,第5点我推进下

1、我这边使用CoAP.NET写Demo尝试了一下,连接成功可以获取到token,发布的消息在MQTTX订阅的主题下收不到。

日志如下:

2022-09-20T08:44:46+08:00 [AUTHN] c2@xxx.yyy.zzz.uuu:52797 msg: authenticator_result, authenticator: password_based:built_in_database, result: {ok,#{is_superuser => false}}
2022-09-20T08:44:46+08:00 [AUTHN] c2@xxx.yyy.zzz.uuu:52797 msg: authentication_result, reason: chain_result, result: {stop,{ok,#{is_superuser => false}}}
2022-09-20T08:44:46.542000+08:00 [debug] clientid: c2, line: 571, mfa: emqx_gateway_conn:terminate/2, msg: conn_process_terminated, peername: xxx.yyy.zzz.uuu:49287, reason: {shutdown,discarded}
2022-09-20T08:44:46.542000+08:00 [debug] clientid: c2, line: 810, mfa: emqx_gateway_conn:serialize_and_inc_stats_fun/1, msg: SEND_packet, packet: {coap_message,ack,{ok,created},15961,<<>>,#{},<<"1697525104">>}, peername: xxx.yyy.zzz.uuu:52797
2022-09-20T08:44:46.542000+08:00 [debug] clientid: c2, data: <<"`A>Yÿ1697525104">>, line: 845, mfa: emqx_gateway_conn:send/2, msg: SEND_data, peername: xxx.yyy.zzz.uuu:52797
2022-09-20T08:44:48.186000+08:00 [debug] clientid: c2, data: <<64,2,62,90,178,112,115,4,99,111,97,112,4,116,101,115,116,75,99,108,105,101,110,116,105,100,61,99,50,13,3,116,111,107,101,110,61,49,54,57,55,53,50,53,49,48,52,255,104,101,108,108,111>>, line: 684, mfa: emqx_gateway_conn:parse_incoming/2, msg: RECV_data, peername: xxx.yyy.zzz.uuu:52797
2022-09-20T08:44:48.186000+08:00 [debug] clientid: c2, line: 741, mfa: emqx_gateway_conn:handle_incoming/2, msg: RECV_packet, packet: {coap_message,con,post,15962,<<>>, #{uri_path => [<<"ps">>,<<"coap">>,<<"test">>], uri_query =>, #{<<"clientid">> => <<"c2">>, <<"token">> => <<"1697525104">>}}, <<"hello">>}, peername: xxx.yyy.zzz.uuu:52797
2022-09-20T08:44:48.186000+08:00 [info] clientid: c2, ipaddr: {106,39,60,29}, line: 378, mfa: emqx_authz:authorize_non_superuser/5, msg: authorization_failed_nomatch, peername: xxx.yyy.zzz.uuu:52797, reason: no-match rule, topic: /coap/test, username: <<"coapuser">>
2022-09-20T08:44:48+08:00 [PUBLISH] c2@xxx.yyy.zzz.uuu:52797 msg: publish_to, topic: coap//coap/test, payload: hello
2022-09-20T08:44:48.186000+08:00 [debug] clientid: c2, line: 810, mfa: emqx_gateway_conn:serialize_and_inc_stats_fun/1, msg: SEND_packet, packet: {coap_message,ack,{ok,changed},15962,<<>>,#{},<<>>}, peername: xxx.yyy.zzz.uuu:52797
2022-09-20T08:44:48.186000+08:00 [debug] clientid: c2, data: <<"`D>Z">>, line: 845, mfa: emqx_gateway_conn:send/2, msg: SEND_data, peername: xxx.yyy.zzz.uuu:52797

@blankalupo ,您预计多久可以解决上面提到的第5点,发布新版本我们可以配合测试。

你好,CoAP 因为之前一直没有太多的用户反馈,所以暂时搁置起来的,工作重心在其他模块上,我在另外一个贴上也回复你了,希望能了解下你们的具体期望和用法,我们这边好进行规划和调整,但是可能需要等上一两个版本,因为未来一段时间的开发内容都是排好了的