Mqtt notes
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Notes on MQTT
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 = {
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