ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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로 이동해야 합니다. 

    [예제코드]

    https://github.com/codezoo-ltd/TYPE1SC/blob/main/examples/ESP32/TYPE1SC_MQTT_test/TYPE1SC_MQTT_test.ino

     

    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.kr

     

    iot유심 : codezoo

    [codezoo] IoT Global SIM, IoT Connectivity, IoT Device

    smartstore.naver.com

     

     

     

     

Designed by Tistory.