-
hivemq.com broker에 접속이 안되요MQTT 2025. 4. 29. 21:20
최근에 type1sc 모뎀으로 잘 사용하던 hivemq.com broker에 접속이 안된다는 문의를 받았습니다.
아래와 같이 로그와 디버그 메시지도 전달받았습니다.
//**************** mqtt ***************************
TYPE1SC Module Start!!!
TYPE1SC Module Ready!!!
1.Enable MQTT events
2.Configure node parameter:ID, Address
3.Configure node parameter:Timeout
9.Disable MQTT events
10.detach Network!!!
//**************** mqtt debug message ***************************
TYPE1SC Module Start!!!
sendATcmd (AT) - 3000...
readATresponseLine: 0 line(s)
...sendATcmd Fails
sendATcmd (AT) - 3000...
Found OK
readATresponseLine: 2 line(s)
line[0]: AT
line[1]: OK
Filtered response:
...sendATcmd OK
AT -- OK Count : 1
sendATcmd (ATE0) - 3000...
Found OK
readATresponseLine: 2 line(s)
line[0]: ATE0
line[1]: OK
Filtered response:
...sendATcmd OK
sendATcmd (AT+CEREG=2) - 3000...
Found OK
readATresponseLine: 1 line(s)
line[0]: OK
Filtered response:
...sendATcmd OK
sendATcmd (AT%CMATT=1) - 3000...
Found OK
readATresponseLine: 1 line(s)
line[0]: OK
Filtered response:
...sendATcmd OK
sendATcmd (AT+CEREG?) - 2000...
Found OK
readATresponseLine: 2 line(s)
line[0]: +CEREG: 2,5,"2700","00049F07",7
Filtered response: : 2,5,"2700","00049F07",7
line[1]: OK
...sendATcmd OK
ready to make data call...
TYPE1SC Module Ready!!!
sendATcmd (AT%MQTTEV="ALL",1) - 3000...
Found OK
readATresponseLine: 1 line(s)
line[0]: OK
Filtered response:
...sendATcmd OK
1.Enable MQTT events
sendATcmd (AT%MQTTCFG="NODES",1,"Cellular_node","broker.hivemq.com") - 3000...
Found OK
readATresponseLine: 1 line(s)
line[0]: OK
Filtered response:
...sendATcmd OK
2.Configure node parameter:ID, Address
sendATcmd (AT%MQTTCFG="PROTOCOL",1,0,2500,1) - 3000...
Found OK
readATresponseLine: 1 line(s)
line[0]: OK
Filtered response:
...sendATcmd OK
3.Configure node parameter:Timeout
sendATcmd (AT%MQTTCMD="CONNECT",1) - 20000...
readATresponseLine: 1 line(s)
line[0]: OK
...sendATcmd Fails
Not connect MQTT Server...
sendATcmd (AT%MQTTCMD="SUBSCRIBE",1,0,"type1sc/0/test") - 20000...
readATresponseLine: 3 line(s)
line[0]: %MQTTCMD: 1
line[1]: OK
line[2]: %MQTTEVU:"CONCONF",1,1
...sendATcmd Fails
Subscription failed...
sendATcmd (AT%MQTTCMD="PUBLISH",1,0,0,"type1sc/0/test",30) - 20000...
readATresponseLine: 1 line(s)
일단, 로그에서 아래와 같은 부분이 이상했습니다.
3.Configure node parameter:Timeout
9.Disable MQTT events
10.detach Network!!!
원래대로 진행되면 3 이후에 4~8까지 진행 후 9로 이동해야 합니다.
[예제코드]
TYPE1SC/examples/ESP32/TYPE1SC_MQTT_test/TYPE1SC_MQTT_test.ino at main · codezoo-ltd/TYPE1SC
Murata TYPE1SC Cat.M1 Arduino Library & example. Contribute to codezoo-ltd/TYPE1SC development by creating an account on GitHub.
github.com
4부터 진행되지 않았다고 하면 MQTT서버 (hivemq.com) 접속에 실패했다는 의미입니다.
이제 4번 진행에 관련된 디버그 메시지를 살펴보겠습니다.
3.Configure node parameter:Timeout //서버접속 대기시간 설정 완료 되었습니다.
sendATcmd (AT%MQTTCMD="CONNECT",1) - 20000... //모뎀으로 MQTT서버 접속을 시도합니다.
readATresponseLine: 1 line(s)
line[0]: OK
...sendATcmd Fails
Not connect MQTT Server... //MQTT서버 접속에 실패했습니다.
접속 실패 디버그 메시지를 확인 후 type1sc 모뎀이 아닌 안드로이드 MQTT앱으로 broker.hivemq.com에 접속 테스트를 진행했습니다.
주소와 포트를 넣고 Connect 버튼을 눌러서 접속을 시도했습니다.
평소에는 빠릿빠릿하게 연결되던 broker.hivemq.com 서버가 웬일인지 접속하는데 10초 가깝게 걸리는 느낌이었습니다.
그래도 연결은 되었습니다.
type1sc/100/test를 구독(Subscribe) 후 발행(Publish) 테스트도 했습니다.
발행한 데이터가 구독채널에 올라오는 것을 확인할 수 있었습니다.
일단 접속에 문제없는 것을 확인했고, 구독, 발행 모두 이상 없었습니다.
그렇다면 type1sc 모뎀에서는 왜 접속이 되지 않았을까요?
아래 디버그 메시지를 살펴보면 알 수 있습니다.
sendATcmd (AT%MQTTCFG="PROTOCOL",1,0,2500,1) - 3000...
Found OK
readATresponseLine: 1 line(s)
line[0]: OK
Filtered response:
...sendATcmd OK
3.Configure node parameter:Timeout
MQTT 프로토콜 설정 시 timeout값을 지정할 수 있는데 2500ms(2.5초)로
지정되어 있었습니다.
서버 접속에 실패한 이유는 접속시도 후 2.5초 내에 접속되지 않으면 에러처리 하도록
프로토콜이 설정되어 있었기 때문입니다.
오픈소스에서 아래와 같이 간단하게 함수호출로 타임아웃값을 변경할 수 있습니다.
int TYPE1SC::setMQTT_TIMEOUT(uint32_t value) {
char szCmd[128];
char resBuffer[16];
int ret;
TYPE1SC_serial_clearbuf();
sprintf(szCmd, "AT%%MQTTCFG=\"PROTOCOL\",1,0,%u,1", value);
ret = sendATcmd(szCmd, resBuffer, sizeof(resBuffer), "OK", 3000);
return ret;
}15초로 대기시간을 설정한다고 하면, 아래와 같이 코드를 작성하면 됩니다.
uint32_t conn_timeout = 15000;
/* 3 : Configure node parameters (Connection Timeout) */
if (TYPE1SC.setMQTT_TIMEOUT(conn_timeout) == 0)
DebugSerial.println("3.Configure node parameter:Timeout");변경 후 접속했더니 문제없이 잘 연결되었습니다.
LTE-CATM1 내장형 모뎀 대량 구매 상담, 외주 개발, 협업 문의, vodafone IoT유심 문의
(주)코드주
장병남 대표 010-8965-1323 rooney.jang@codezoo.co.kriot유심 : codezoo
[codezoo] IoT Global SIM, IoT Connectivity, IoT Device
smartstore.naver.com
'MQTT' 카테고리의 다른 글
아두이노에서 실시간으로 MQTT 메시지를 받을수 있을까요? (0) 2025.02.02 MQTT 이제 모바일로 테스트 하세요 (0) 2023.10.12