nrf9160 MQTT Mqtt.c Last will and testamenet

Hello,

Im currently Implementing Last will and Testament message on my device, Im not using the AWS Libraries here.

Any suggestions on how to Implement this feature? (See prj.conf below)

#
# Copyright (c) 2020 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#

# Date/time library // #include <date_time.h>
#CONFIG_DATE_TIME=y
#CONFIG_DATE_TIME_UPDATE_INTERVAL_SECONDS=60

# Networking
CONFIG_NETWORKING=y
CONFIG_NET_NATIVE=n
CONFIG_NET_SOCKETS_OFFLOAD=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_POSIX_NAMES=y

# LTE link control
CONFIG_LTE_LINK_CONTROL=y
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n

# Modem library
CONFIG_NRF_MODEM_LIB=y

# AT Host
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_AT_HOST_LIBRARY=y

# Modem library
CONFIG_NRF_MODEM_LIB=y

# MQTT
CONFIG_MQTT_LIB=y
CONFIG_MQTT_LIB_TLS=n
CONFIG_MQTT_CLEAN_SESSION=y


# MQTT
CONFIG_MQTT_LIB=y
CONFIG_MQTT_LIB_TLS=n
CONFIG_MQTT_CLEAN_SESSION=y
CONFIG_MQTT_KEEPALIVE=3600
CONFIG_MQTT_LOG_LEVEL_DBG=y
CONFIG_ES401_LOG_LEVEL_DBG=y

#CONFIG_MQTT_LAST_WILL=y

CONFIG_AWS_IOT=y
CONFIG_AWS_IOT_LAST_WILL=y
CONFIG_AWS_IOT_LAST_WILL_TOPIC="89470060201013199369/connection/status"
CONFIG_AWS_IOT_LAST_WILL_MESSAGE="{'status': 'Failed'}"

# Application
# CONFIG_MQTT_PUB_TOPIC="my/publish/topic"
# CONFIG_MQTT_SUB_TOPIC="my/subscribe/topic"
# CONFIG_MQTT_CLIENT_ID="my-client-id"
# CONFIG_MQTT_BROKER_HOSTNAME="mqtt.eclipseprojects.io"
# CONFIG_MQTT_BROKER_PORT=1883

# Enable logging
CONFIG_LOG=y

# Memory
CONFIG_HEAP_MEM_POOL_SIZE=16384
CONFIG_MAIN_STACK_SIZE=16384
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=8192

# Time related library
CONFIG_DATE_TIME=y
#CONFIG_LEGACY_TIMEOUT_API=y


# Watchdog
CONFIG_WATCHDOG=y

# UART
CONFIG_SERIAL=y
CONFIG_UART_ASYNC_API=y
CONFIG_UART_CONSOLE=y
CONFIG_NRFX_UARTE1=y


# STRING LIBS
CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
CONFIG_NEWLIB_LIBC_FLOAT_SCANF=y

# cJSON
CONFIG_CJSON_LIB=y

# GPIO
CONFIG_GPIO=y

# ADC
CONFIG_ADC=y
CONFIG_ADC_ASYNC=y
CONFIG_ADC_NRFX_SAADC=y

# I2C
CONFIG_I2C=y
CONFIG_I2C_NRFX=y
CONFIG_I2C_INIT_PRIORITY=60

# SPI
CONFIG_SPI=y
CONFIG_SPI_NRFX_RAM_BUFFER_SIZE=8


# General config
CONFIG_NCS_SAMPLES_DEFAULTS=y
CONFIG_REBOOT=y
CONFIG_TRUSTED_EXECUTION_NONSECURE=y

# Image manager
CONFIG_IMG_MANAGER=y
CONFIG_FLASH=y
CONFIG_IMG_ERASE_PROGRESSIVELY=y

# FOTA library
CONFIG_FOTA_DOWNLOAD=y

# Download client
CONFIG_DOWNLOAD_CLIENT=y
CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096
CONFIG_DOWNLOAD_CLIENT_LOG_LEVEL_DBG=y
CONFIG_DOWNLOAD_CLIENT_LOG_HEADERS=n
CONFIG_DOWNLOAD_CLIENT_MAX_FILENAME_SIZE=450
CONFIG_DOWNLOAD_CLIENT_MAX_HOSTNAME_SIZE=96

# DFU Target
CONFIG_DFU_TARGET=y

# Modem key management
CONFIG_MODEM_KEY_MGMT=y

# Application Upgrade support
CONFIG_BOOTLOADER_MCUBOOT=y

Ignore the following lines ...

CONFIG_AWS_IOT=y
CONFIG_AWS_IOT_LAST_WILL=y
CONFIG_AWS_IOT_LAST_WILL_TOPIC="89470060201013199369/connection/status"
CONFIG_AWS_IOT_LAST_WILL_MESSAGE="{'status': 'Failed'}"
Parents
  • Hi David

    There aren't any good examples for this unfortunately, but the implementation in the AWS driver shows you how to set it up:

    #if defined(CONFIG_AWS_IOT_LAST_WILL)
        static struct mqtt_topic last_will_topic = {
            .topic.utf8 = CONFIG_AWS_IOT_LAST_WILL_TOPIC,
            .topic.size = sizeof(CONFIG_AWS_IOT_LAST_WILL_TOPIC) - 1,
            .qos = MQTT_QOS_0_AT_MOST_ONCE
        };
        static struct mqtt_utf8 last_will_message = {
            .utf8 = CONFIG_AWS_IOT_LAST_WILL_MESSAGE,
            .size = sizeof(CONFIG_AWS_IOT_LAST_WILL_MESSAGE) - 1
        };
        client->will_topic = &last_will_topic;
        client->will_message = &last_will_message;
    #endif

    You should be able to add the same code snippet to your own project. 

    Best regards
    Torbjørn

  • Thank you Torbjørn,

    Do you have any idea where I should Implement this?

    In the client or the broker connection?

    David

Reply Children
Related