Difference between revisions of "Mqtt notes"
m |
m (Add link to MQTT Last Will and Testament.) |
||
| (21 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| − | Notes on MQTT . . . | + | == Overview == |
| + | |||
| + | Notes on MQTT | ||
| + | |||
| + | 2021-12-20 - On devzone.nordicsemi.com creating public forum post with title "aws_iot MQTT subscriber keep alive", following suggested posts as solutions come up: | ||
| + | |||
| + | <ul> | ||
| + | * https://devzone.nordicsemi.com/f/nordic-q-a/47771/nrf9160-aws-iot-mqtt-keep-alive | ||
| + | A possible Zephyr k_work_submit() solution: | ||
| + | <ul> | ||
| + | * https://github.com/jtguggedal/fw-nrfconnect-nrf/commit/a21e6993050a8c992ed3d997a18bf11e184f7b29 | ||
| + | </ul> | ||
| + | * | ||
| + | </ul> | ||
| + | |||
| + | <!-- comentario --> | ||
| + | |||
| + | == [[#top|^]] Tau and AT, iDRX and cDRX parameters == | ||
| + | |||
| + | In response to post on Nordic Devzone: | ||
| + | <ul> | ||
| + | * https://devzone.nordicsemi.com/f/nordic-q-a/52540/nrf9160-disconnects-after-4-5-minutes-when-keep-alive-time-is-60/213233#213233 | ||
| + | * https://devzone.nordicsemi.com/power/w/opp/4/user-guide-lte | ||
| + | </ul> | ||
| + | Searching for reference document "3GPP": | ||
| + | <ul> | ||
| + | * https://www.3gpp.org/technologies/keywords-acronyms/98-lte | ||
| + | * https://www.3gpp.org/component/itpgooglesearch/search?gsquery=UE | ||
| + | </ul> | ||
| + | A little further along with references to 3GPP Specification 27.007, and definition of User Equipment (UE): | ||
| + | * https://infocenter.nordicsemi.com/pdf/nrf91_at_commands_v1.4.1.pdf | ||
| + | * https://portal.3gpp.org/ChangeRequests.aspx?q=1&versionId=75070&release=192 | ||
| + | |||
| + | <!-- comentario --> | ||
| + | |||
| + | == [[#top|^]] MQTT Persistent Sessions References == | ||
| + | |||
| + | <ul> | ||
| + | * https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html#mqtt-persistent-sessions | ||
| + | * https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html#persistent-session-reconnect | ||
| + | * https://docs.aws.amazon.com/general/latest/gr/iot-core.html#message-broker-limits | ||
| + | </ul> | ||
| + | |||
| + | <!-- comentario --> | ||
| + | |||
| + | == [[#top|^]] aws_iot Run-time Message Excerpts == | ||
| + | |||
| + | Looks like in Nordic Semi's aws_iot sample app, the following enumerated events represent a firmware instance receiving subscribed messages from an MQTT broker: | ||
| + | <pre> | ||
| + | - 1108 DEV - aws_iot event handler called, | ||
| + | AWS_IOT_EVT_READY | ||
| + | - 1108 DEV - aws_iot event handler called, | ||
| + | AWS_IOT_EVT_DATA_RECEIVED | ||
| + | </pre> | ||
| + | |||
| + | s3://iot-poc/hello/world/ | ||
| + | |||
| + | Ah, trouble when attempting to add MQTT topics: | ||
| + | |||
| + | <pre> | ||
| + | *** Booting Zephyr OS build v2.6.0-rc1-ncs1 *** | ||
| + | I: Modem library is not yet initialized, AT commands not sent | ||
| + | I: Configuration of MAGPIO and COEX0 is left to drivers | ||
| + | The AWS IoT sample started, version: v1.0.0 | ||
| + | ZZZ | ||
| + | ZZZ | ||
| + | ZZZ | ||
| + | ZZZ - preparing to subscribe to hello/world topic, | ||
| + | ZZZ | ||
| + | ZZZ | ||
| + | ZZZ - calling routine to subscribe to MQTT topics . . . | ||
| + | ZZZ | ||
| + | E: Application subscription list count mismatch | ||
| + | aws_iot_subscription_topics_add, error: -122 | ||
| + | ZZZ | ||
| + | ZZZ | ||
| + | ZZZ | ||
| + | ZZZ | ||
| + | Adding application specific topics failed, error: -122 | ||
| + | Summary of callback pointers for 'set flag' events: | ||
| + | </pre> | ||
| + | |||
| + | Appears to come from `./nrf/subsys/net/lib/aws_iot/src/aws_iot.c:1168: LOG_ERR("Application subscription list count mismatch");` | ||
| + | |||
| + | Note 3 - code excert from `nrf/subsys/net/lib/aws_iot/src/aws_iot.c`: | ||
| + | <pre> | ||
| + | 689 if (!mqtt_evt->param.connack.session_present_flag || | ||
| + | 690 IS_ENABLED(CONFIG_MQTT_CLEAN_SESSION)) { | ||
| + | 691 err = topic_subscribe(); | ||
| + | 692 | ||
| + | 693 if (err < 0) { | ||
| + | 694 aws_iot_evt.type = AWS_IOT_EVT_ERROR; | ||
| + | 695 aws_iot_evt.data.err = err; | ||
| + | 696 aws_iot_notify_event(&aws_iot_evt); | ||
| + | 697 break; | ||
| + | 698 } | ||
| + | 699 if (err == 0) { | ||
| + | 700 /* There were not topics to subscribe to. */ | ||
| + | 701 aws_iot_evt.type = AWS_IOT_EVT_READY; | ||
| + | 702 aws_iot_notify_event(&aws_iot_evt); | ||
| + | 703 } /* else: wait for SUBACK */ | ||
| + | 704 } else { | ||
| + | 705 /* pre-existing session: | ||
| + | 706 * subscription is already established. | ||
| + | 707 */ | ||
| + | 708 aws_iot_evt.type = AWS_IOT_EVT_READY; | ||
| + | 709 aws_iot_notify_event(&aws_iot_evt); | ||
| + | 710 | ||
| + | 711 if (IS_ENABLED( | ||
| + | </pre> | ||
| + | |||
| + | <pre> | ||
| + | 951 #if defined(CONFIG_AWS_IOT_LAST_WILL) | ||
| + | 952 static struct mqtt_topic last_will_topic = { | ||
| + | 953 .topic.utf8 = CONFIG_AWS_IOT_LAST_WILL_TOPIC, | ||
| + | 954 .topic.size = sizeof(CONFIG_AWS_IOT_LAST_WILL_TOPIC) - 1, | ||
| + | 955 .qos = MQTT_QOS_0_AT_MOST_ONCE | ||
| + | 956 }; | ||
| + | 957 | ||
| + | 958 static struct mqtt_utf8 last_will_message = { | ||
| + | 959 .utf8 = CONFIG_AWS_IOT_LAST_WILL_MESSAGE, | ||
| + | 960 .size = sizeof(CONFIG_AWS_IOT_LAST_WILL_MESSAGE) - 1 | ||
| + | 961 }; | ||
| + | 962 | ||
| + | 963 client->will_topic = &last_will_topic; | ||
| + | 964 client->will_message = &last_will_message; | ||
| + | 965 #endif | ||
| + | 966 | ||
| + | 967 static sec_tag_t sec_tag_list[] = { CONFIG_AWS_IOT_SEC_TAG }; | ||
| + | 968 struct mqtt_sec_config *tls_cfg = &(client->transport).tls.config; | ||
| + | 969 | ||
| + | 970 tls_cfg->peer_verify = 2; | ||
| + | 971 tls_cfg->cipher_count = 0; | ||
| + | 972 tls_cfg->cipher_list = NULL; | ||
| + | 973 tls_cfg->sec_tag_count = ARRAY_SIZE(sec_tag_list); | ||
| + | 974 tls_cfg->sec_tag_list = sec_tag_list; | ||
| + | 975 tls_cfg->hostname = CONFIG_AWS_IOT_BROKER_HOST_NAME; | ||
| + | 976 tls_cfg->session_cache = TLS_SESSION_CACHE_DISABLED; | ||
| + | 977 | ||
| + | 978 #if !defined(CONFIG_NRF_MODEM_LIB) | ||
| + | 979 err = certificates_provision(); | ||
| + | 980 if (err) { | ||
| + | 981 LOG_ERR("Could not provision certificates, error: %d", err); | ||
| + | 982 return err; | ||
| + | 983 } | ||
| + | 984 #endif /* !defined(CONFIG_NRF_MODEM_LIB) */ | ||
| + | 985 | ||
| + | 986 return err; | ||
| + | 987 } | ||
| + | </pre> | ||
| + | |||
| + | <pre> | ||
| + | z4-sandbox-kionix-work/nrf/subsys/net/lib/aws_iot/src$ grep -n 'struct mqtt_topic' ./*.* | ||
| + | 451: const struct mqtt_topic aws_iot_rx_list[] = { | ||
| + | 546: .list = (struct mqtt_topic *)&aws_iot_rx_list, | ||
| + | 952: static struct mqtt_topic last_will_topic = { | ||
| + | </pre> | ||
| + | |||
| + | == edit point == | ||
| + | |||
| + | <pre> | ||
| + | |||
| + | ./zephyr/include/net/mqtt.h:178:struct mqtt_topic { | ||
| + | |||
| + | |||
| + | |||
| + | /** @brief Abstracts UTF-8 encoded strings. */ | ||
| + | struct mqtt_utf8 { | ||
| + | const uint8_t *utf8; /**< Pointer to UTF-8 string. */ | ||
| + | uint32_t size; /**< Size of UTF string, in bytes. */ | ||
| + | }; | ||
| + | |||
| + | |||
| + | /** @brief Abstracts MQTT UTF-8 encoded topic that can be subscribed | ||
| + | * to or published. | ||
| + | */ | ||
| + | struct mqtt_topic { | ||
| + | /** Topic on to be published or subscribed to. */ | ||
| + | struct mqtt_utf8 topic; | ||
| + | |||
| + | /** Quality of service requested for the subscription. | ||
| + | * @ref mqtt_qos for details. | ||
| + | */ | ||
| + | uint8_t qos; | ||
| + | }; | ||
| + | |||
| + | |||
| + | </pre> | ||
| + | |||
| + | A link to review: | ||
| + | <ul> | ||
| + | * https://thenewstack.io/mqtt-protocol-iot/ | ||
| + | </ul> | ||
| + | |||
| + | |||
| + | 2021-12-14 Tue | ||
| + | |||
| + | * https://forums.aws.amazon.com/index.jspa | ||
| + | * https://aws.amazon.com/blogs/iot/getting-started-mqtt-retained-messages-aws-iot-core/ | ||
| + | * https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html#mqtt-retain | ||
| + | |||
| + | |||
| − | |||
2021-12-08 | 2021-12-08 | ||
| Line 26: | Line 226: | ||
Nordic AWS FOTA example: | Nordic AWS FOTA example: | ||
# https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.6.1/nrf/samples/nrf9160/aws_fota/README.html | # https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.6.1/nrf/samples/nrf9160/aws_fota/README.html | ||
| + | |||
| + | |||
| + | |||
| + | == [[#top|^]] successful publish to hello/world topic == | ||
| + | |||
| + | <pre> | ||
| + | Created JSON message but not publishing to AWS IoT broker, | ||
| + | - 1110 DEV - new file scoped flag for aws_iot holds 0, | ||
| + | message is: { | ||
| + | "version": "512", | ||
| + | "deviceType": "PulseV2", | ||
| + | "deviceSerialNumber": "352656101125105", | ||
| + | "state": { | ||
| + | "reported": { | ||
| + | "ts": 1639641106680, | ||
| + | "vrms": "0.406", | ||
| + | "alert_vrms_threshhold_1": "no_alert", | ||
| + | "latitude": "45.40494423760174", | ||
| + | "longitude": "-122.5310215439456", | ||
| + | "altitude": "0.0" | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | RRC mode: Connected | ||
| + | - 1108 DEV - aws_iot event handler called, | ||
| + | AWS_IOT_EVT_DATA_RECEIVED | ||
| + | Data received from AWS IoT console: | ||
| + | Topic: hello/world | ||
| + | Message: { | ||
| + | "version": "513", | ||
| + | "note": "test 010", | ||
| + | "KEYNAME001": "*** **** *** **** ***", | ||
| + | "KEYNAME002": "*** **** *** **** ***", | ||
| + | "KEYNAME003": "*** **** *** **** ***" | ||
| + | } | ||
| + | adm: power_time_domain=0.003, power_freq_domain=0.002, diff=0.001, ratio=1.604 | ||
| + | - 1105 - calculated VRMS of 0.000000 | ||
| + | |||
| + | |||
| + | - MARK 7 - at every 100 CLI loop iterations | ||
| + | button press count at 0 | ||
| + | adm: power_time_domain=0.002, power_freq_domain=0.001, diff=0.001, ratio=1.631 | ||
| + | - 1105 - calculated VRMS of 0.798562 | ||
| + | |||
| + | |||
| + | RRC mode: Idle | ||
| + | </pre> | ||
| + | |||
| + | |||
| + | == edit point == | ||
| + | |||
| + | 2021-12-21 Note: parameter `aws_iot_config *const config` can be as the value NULL: | ||
| + | |||
| + | <pre> | ||
| + | 989 static int connect_client(struct aws_iot_config *const config) | ||
| + | 990 { | ||
| + | 991 int err; | ||
| + | 992 | ||
| + | 993 err = client_broker_init(&client); | ||
| + | 994 if (err) { | ||
| + | 995 LOG_ERR("client_broker_init, error: %d", err); | ||
| + | 996 return err; | ||
| + | 997 } | ||
| + | 998 | ||
| + | 999 err = mqtt_connect(&client); | ||
| + | 1000 if (err) { | ||
| + | 1001 LOG_ERR("mqtt_connect, error: %d", err); | ||
| + | 1002 err = connect_error_translate(err); | ||
| + | 1003 return err; | ||
| + | 1004 } | ||
| + | 1005 | ||
| + | 1006 if (IS_ENABLED(CONFIG_AWS_IOT_SEND_TIMEOUT)) { | ||
| + | 1007 struct timeval timeout = { | ||
| + | 1008 .tv_sec = CONFIG_AWS_IOT_SEND_TIMEOUT_SEC | ||
| + | 1009 }; | ||
| + | </pre> | ||
| + | |||
| + | |||
| + | and in file [west_workspace]/nrf/ext/curl/lib/mqtt.c . . . | ||
| + | |||
| + | <pre> | ||
| + | 140 static CURLcode mqtt_connect(struct connectdata *conn) | ||
| + | 141 { | ||
| + | 142 CURLcode result = CURLE_OK; | ||
| + | 143 const size_t client_id_offset = 14; | ||
| + | 144 const size_t packetlen = client_id_offset + MQTT_CLIENTID_LEN; | ||
| + | 145 char client_id[MQTT_CLIENTID_LEN + 1] = "curl"; | ||
| + | 146 const size_t clen = strlen("curl"); | ||
| + | 147 char packet[32] = { | ||
| + | 148 MQTT_MSG_CONNECT, /* packet type */ | ||
| + | 149 0x00, /* remaining length */ | ||
| + | 150 0x00, 0x04, /* protocol length */ | ||
| + | 151 'M','Q','T','T', /* protocol name */ | ||
| + | 152 0x04, /* protocol level */ | ||
| + | 153 0x02, /* CONNECT flag: CleanSession */ | ||
| + | 154 0x00, 0x3c, /* keep-alive 0 = disabled */ | ||
| + | 155 0x00, 0x00 /* payload1 length */ | ||
| + | 156 }; | ||
| + | 157 packet[1] = (packetlen - 2) & 0x7f; | ||
| + | 158 packet[client_id_offset - 1] = MQTT_CLIENTID_LEN; | ||
| + | 159 | ||
| + | 160 result = Curl_rand_hex(conn->data, (unsigned char *)&client_id[clen], | ||
| + | 161 MQTT_CLIENTID_LEN - clen + 1); | ||
| + | </pre> | ||
| + | |||
| + | |||
| + | == MQTT LWT == | ||
| + | |||
| + | * https://www.hivemq.com/blog/mqtt-essentials-part-9-last-will-and-testament/ | ||
Revision as of 22:04, 24 October 2024
Overview
Notes on MQTT
2021-12-20 - On devzone.nordicsemi.com creating public forum post with title "aws_iot MQTT subscriber keep alive", following suggested posts as solutions come up:
-
A possible Zephyr k_work_submit() solution:
^ Tau and AT, iDRX and cDRX parameters
In response to post on Nordic Devzone:
Searching for reference document "3GPP":
A little further along with references to 3GPP Specification 27.007, and definition of User Equipment (UE):
- https://infocenter.nordicsemi.com/pdf/nrf91_at_commands_v1.4.1.pdf
- https://portal.3gpp.org/ChangeRequests.aspx?q=1&versionId=75070&release=192
^ MQTT Persistent Sessions References
^ aws_iot Run-time Message Excerpts
Looks like in Nordic Semi's aws_iot sample app, the following enumerated events represent a firmware instance receiving subscribed messages from an MQTT broker:
- 1108 DEV - aws_iot event handler called, AWS_IOT_EVT_READY - 1108 DEV - aws_iot event handler called, AWS_IOT_EVT_DATA_RECEIVED
s3://iot-poc/hello/world/
Ah, trouble when attempting to add MQTT topics:
*** Booting Zephyr OS build v2.6.0-rc1-ncs1 *** I: Modem library is not yet initialized, AT commands not sent I: Configuration of MAGPIO and COEX0 is left to drivers The AWS IoT sample started, version: v1.0.0 ZZZ ZZZ ZZZ ZZZ - preparing to subscribe to hello/world topic, ZZZ ZZZ ZZZ - calling routine to subscribe to MQTT topics . . . ZZZ E: Application subscription list count mismatch aws_iot_subscription_topics_add, error: -122 ZZZ ZZZ ZZZ ZZZ Adding application specific topics failed, error: -122 Summary of callback pointers for 'set flag' events:
Appears to come from `./nrf/subsys/net/lib/aws_iot/src/aws_iot.c:1168: LOG_ERR("Application subscription list count mismatch");`
Note 3 - code excert from `nrf/subsys/net/lib/aws_iot/src/aws_iot.c`:
689 if (!mqtt_evt->param.connack.session_present_flag ||
690 IS_ENABLED(CONFIG_MQTT_CLEAN_SESSION)) {
691 err = topic_subscribe();
692
693 if (err < 0) {
694 aws_iot_evt.type = AWS_IOT_EVT_ERROR;
695 aws_iot_evt.data.err = err;
696 aws_iot_notify_event(&aws_iot_evt);
697 break;
698 }
699 if (err == 0) {
700 /* There were not topics to subscribe to. */
701 aws_iot_evt.type = AWS_IOT_EVT_READY;
702 aws_iot_notify_event(&aws_iot_evt);
703 } /* else: wait for SUBACK */
704 } else {
705 /* pre-existing session:
706 * subscription is already established.
707 */
708 aws_iot_evt.type = AWS_IOT_EVT_READY;
709 aws_iot_notify_event(&aws_iot_evt);
710
711 if (IS_ENABLED(
951 #if defined(CONFIG_AWS_IOT_LAST_WILL)
952 static struct mqtt_topic last_will_topic = {
953 .topic.utf8 = CONFIG_AWS_IOT_LAST_WILL_TOPIC,
954 .topic.size = sizeof(CONFIG_AWS_IOT_LAST_WILL_TOPIC) - 1,
955 .qos = MQTT_QOS_0_AT_MOST_ONCE
956 };
957
958 static struct mqtt_utf8 last_will_message = {
959 .utf8 = CONFIG_AWS_IOT_LAST_WILL_MESSAGE,
960 .size = sizeof(CONFIG_AWS_IOT_LAST_WILL_MESSAGE) - 1
961 };
962
963 client->will_topic = &last_will_topic;
964 client->will_message = &last_will_message;
965 #endif
966
967 static sec_tag_t sec_tag_list[] = { CONFIG_AWS_IOT_SEC_TAG };
968 struct mqtt_sec_config *tls_cfg = &(client->transport).tls.config;
969
970 tls_cfg->peer_verify = 2;
971 tls_cfg->cipher_count = 0;
972 tls_cfg->cipher_list = NULL;
973 tls_cfg->sec_tag_count = ARRAY_SIZE(sec_tag_list);
974 tls_cfg->sec_tag_list = sec_tag_list;
975 tls_cfg->hostname = CONFIG_AWS_IOT_BROKER_HOST_NAME;
976 tls_cfg->session_cache = TLS_SESSION_CACHE_DISABLED;
977
978 #if !defined(CONFIG_NRF_MODEM_LIB)
979 err = certificates_provision();
980 if (err) {
981 LOG_ERR("Could not provision certificates, error: %d", err);
982 return err;
983 }
984 #endif /* !defined(CONFIG_NRF_MODEM_LIB) */
985
986 return err;
987 }
z4-sandbox-kionix-work/nrf/subsys/net/lib/aws_iot/src$ grep -n 'struct mqtt_topic' ./*.*
451: const struct mqtt_topic aws_iot_rx_list[] = {
546: .list = (struct mqtt_topic *)&aws_iot_rx_list,
952: static struct mqtt_topic last_will_topic = {
edit point
./zephyr/include/net/mqtt.h:178:struct mqtt_topic {
/** @brief Abstracts UTF-8 encoded strings. */
struct mqtt_utf8 {
const uint8_t *utf8; /**< Pointer to UTF-8 string. */
uint32_t size; /**< Size of UTF string, in bytes. */
};
/** @brief Abstracts MQTT UTF-8 encoded topic that can be subscribed
* to or published.
*/
struct mqtt_topic {
/** Topic on to be published or subscribed to. */
struct mqtt_utf8 topic;
/** Quality of service requested for the subscription.
* @ref mqtt_qos for details.
*/
uint8_t qos;
};
A link to review:
2021-12-14 Tue
- https://forums.aws.amazon.com/index.jspa
- https://aws.amazon.com/blogs/iot/getting-started-mqtt-retained-messages-aws-iot-core/
- https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html#mqtt-retain
2021-12-08
* https://github.com/aws/aws-iot-device-sdk-embedded-C/blob/main/demos/mqtt/mqtt_demo_basic_tls/mqtt_demo_basic_tls.c
+++
* https://docs.aws.amazon.com/iot/latest/developerguide/topics.html
Unsorted references to MQTT:
# https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/samples/net/mqtt_publisher/README.html # https://www.hivemq.com/blog/mqtt-essentials-part2-publish-subscribe/ # https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/samples/index.html # https://www.circuito.io/blog/arduino-code/ # https://www.hivemq.com/blog/mqtt-essentials-part-7-persistent-session-queuing-messages/ # https://www.hivemq.com/blog/mqtt-essentials-part-3-client-broker-connection-establishment/
# https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.6.1/nrf/examples.html # https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.6.1/nrf/ug_tfm.html#ug-tfm # https://ci-builds.trustedfirmware.org/static-files/UxIoKYsDyPQ0ojvJOv9EX6-hZNDZd6IPGfcm05Bk1b0xNjM3MTA4NjMxODUxOjk6YW5vbnltb3VzOmpvYi90Zi1tLWJ1aWxkLWRvY3MtbmlnaHRseS9sYXN0U3RhYmxlQnVpbGQvYXJ0aWZhY3Q=/trusted-firmware-m/build/docs/user_guide/html/index.html
Nordic AWS FOTA example:
# https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.6.1/nrf/samples/nrf9160/aws_fota/README.html
^ successful publish to hello/world topic
Created JSON message but not publishing to AWS IoT broker,
- 1110 DEV - new file scoped flag for aws_iot holds 0,
message is: {
"version": "512",
"deviceType": "PulseV2",
"deviceSerialNumber": "352656101125105",
"state": {
"reported": {
"ts": 1639641106680,
"vrms": "0.406",
"alert_vrms_threshhold_1": "no_alert",
"latitude": "45.40494423760174",
"longitude": "-122.5310215439456",
"altitude": "0.0"
}
}
}
RRC mode: Connected
- 1108 DEV - aws_iot event handler called,
AWS_IOT_EVT_DATA_RECEIVED
Data received from AWS IoT console:
Topic: hello/world
Message: {
"version": "513",
"note": "test 010",
"KEYNAME001": "*** **** *** **** ***",
"KEYNAME002": "*** **** *** **** ***",
"KEYNAME003": "*** **** *** **** ***"
}
adm: power_time_domain=0.003, power_freq_domain=0.002, diff=0.001, ratio=1.604
- 1105 - calculated VRMS of 0.000000
- MARK 7 - at every 100 CLI loop iterations
button press count at 0
adm: power_time_domain=0.002, power_freq_domain=0.001, diff=0.001, ratio=1.631
- 1105 - calculated VRMS of 0.798562
RRC mode: Idle
edit point
2021-12-21 Note: parameter `aws_iot_config *const config` can be as the value NULL:
989 static int connect_client(struct aws_iot_config *const config)
990 {
991 int err;
992
993 err = client_broker_init(&client);
994 if (err) {
995 LOG_ERR("client_broker_init, error: %d", err);
996 return err;
997 }
998
999 err = mqtt_connect(&client);
1000 if (err) {
1001 LOG_ERR("mqtt_connect, error: %d", err);
1002 err = connect_error_translate(err);
1003 return err;
1004 }
1005
1006 if (IS_ENABLED(CONFIG_AWS_IOT_SEND_TIMEOUT)) {
1007 struct timeval timeout = {
1008 .tv_sec = CONFIG_AWS_IOT_SEND_TIMEOUT_SEC
1009 };
and in file [west_workspace]/nrf/ext/curl/lib/mqtt.c . . .
140 static CURLcode mqtt_connect(struct connectdata *conn)
141 {
142 CURLcode result = CURLE_OK;
143 const size_t client_id_offset = 14;
144 const size_t packetlen = client_id_offset + MQTT_CLIENTID_LEN;
145 char client_id[MQTT_CLIENTID_LEN + 1] = "curl";
146 const size_t clen = strlen("curl");
147 char packet[32] = {
148 MQTT_MSG_CONNECT, /* packet type */
149 0x00, /* remaining length */
150 0x00, 0x04, /* protocol length */
151 'M','Q','T','T', /* protocol name */
152 0x04, /* protocol level */
153 0x02, /* CONNECT flag: CleanSession */
154 0x00, 0x3c, /* keep-alive 0 = disabled */
155 0x00, 0x00 /* payload1 length */
156 };
157 packet[1] = (packetlen - 2) & 0x7f;
158 packet[client_id_offset - 1] = MQTT_CLIENTID_LEN;
159
160 result = Curl_rand_hex(conn->data, (unsigned char *)&client_id[clen],
161 MQTT_CLIENTID_LEN - clen + 1);