MLopezJ / nRF-Asset-Tracker-through-Coiote-flow

Module and data flow of the nRF Asset Tracker by its integration with Coiote from AVSystem
0 stars 0 forks source link

Use Asset Tracker v2 firmware #3

Closed MLopezJ closed 1 year ago

MLopezJ commented 1 year ago

TL;DR

All required values are provided to Coiote Dashboard using Asset Tracker v2 firmware. There is change in the configuration that need to be done and it is described here.

Issue discussion

Uses the Asset Tracker v2 firmware to communicate through LwM2M to Coiote dashboard.

The integration as it is described in the AV System's tutorial is using a firmware from Anjay-zephyr-client repo and not the Asset Tracker Cloud firmware as it was assume. This firmware is not providing the expected objects.

The integration tutorial from Nordic is using LwM2M-client example, and there are some missing objects required in nRF Asset Tracker as well.

So it is required to uses Asset Tracker v2 in the device to get all the objects needed.

MLopezJ commented 1 year ago

Approach 1: Mixing LwM2M-client sample with asset tracker v2

Connection to AVSystem was possible ussing the LwM2M-client sample. So the prj.conf from there was taken in consideration to add missing values to the prj.conf file from asset tracker.

Also, the overlay-avsystem.conf from LwM2M-client sample was created in asset tracker too.

prj.conf created

Result

After created the build and flashed, console print the following logs:

uart:~$ *** Booting Zephyr OS build v3.0.99-ncs1-1  ***                                                                                              

uart:~$ *** Booting Zephyr OS build v3.0.99-ncs1-1  ***                                                                                              

uart:~$ *** Booting Zephyr OS build v3.0.99-ncs1-1  ***                                                                                              
%MDMEV: RESET LOOP                                                                                                                                   

uart:~$ *** Booting Zephyr OS build v3.0.99-ncs1-1  ***                                                                                              

uart:~$ *** Booting Zephyr OS build v3.0.99-ncs1-1  ***                                                                                              

uart:~$ *** Booting Zephyr OS build v3.0.99-ncs1-1  ***     
MLopezJ commented 1 year ago

new prj.conf file created in asset tracker

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

# General config
CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
CONFIG_ASSERT=y
CONFIG_REBOOT=y
CONFIG_FPU=y

# Heap and stacks
CONFIG_HEAP_MEM_POOL_SIZE=32768
CONFIG_MAIN_STACK_SIZE=1408
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
CONFIG_HW_STACK_PROTECTION=y
# Increase AT monitor heap size to be able to fit both neighbor cell measurement
# and other AT notifications that may come in rapid succession.
CONFIG_AT_MONITOR_HEAP_SIZE=1024

# Logging
CONFIG_LOG=y
CONFIG_LOG_MODE_DEFERRED=y

# nRF modem library
CONFIG_NRF_MODEM_LIB=y

# AT Host library - Used to send AT commands directy from an UART terminal and to allow
#           integration with nRF Connect for Desktop LTE Link monitor application.
CONFIG_AT_HOST_LIBRARY=y

# Network
CONFIG_NETWORKING=y
CONFIG_NET_NATIVE=n
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_OFFLOAD=y
CONFIG_NET_IPV6=y
CONFIG_NET_IPV4=y

# LTE link control
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n
CONFIG_LTE_NETWORK_MODE_LTE_M_GPS=y
## Power saving timers.
### 320 hours PSM.
CONFIG_LTE_PSM_REQ_RPTAU="11000001"
### 20 seconds active time.
CONFIG_LTE_PSM_REQ_RAT="00001010"

# Modem info library to obtain information about network and device
CONFIG_MODEM_INFO=y

# Settings - Used to store real-time device configuration to flash.
CONFIG_SETTINGS=y
CONFIG_SETTINGS_FCB=y
CONFIG_FCB=y

# FOTA
CONFIG_FOTA_DOWNLOAD=y
CONFIG_DFU_TARGET=y
CONFIG_DOWNLOAD_CLIENT=y
CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE_1024=y
CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096
CONFIG_DOWNLOAD_CLIENT_BUF_SIZE=2300
CONFIG_DOWNLOAD_CLIENT_MAX_HOSTNAME_SIZE=128

# Flash - Used in FOTA, settings and storage for P-GPS.
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y
CONFIG_STREAM_FLASH=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y

# MCUBOOT
CONFIG_BOOTLOADER_MCUBOOT=y
CONFIG_IMG_MANAGER=y
CONFIG_MCUBOOT_IMG_MANAGER=y
CONFIG_IMG_ERASE_PROGRESSIVELY=y
CONFIG_SECURE_BOOT=y
CONFIG_BUILD_S1_VARIANT=y

# Watchdog
CONFIG_WATCHDOG_APPLICATION=y

# Application Event Manager
CONFIG_APP_EVENT_MANAGER=y
CONFIG_APP_EVENT_MANAGER_LOG_EVENT_TYPE=n

# cJSON - Used in cloud data encoding.
CONFIG_CJSON_LIB=y

# CAF - Common Application Framework
CONFIG_CAF=y
CONFIG_LED=y
CONFIG_CAF_LEDS=y
CONFIG_CAF_INIT_LOG_LED_READY_EVENTS=n
CONFIG_CAF_INIT_LOG_LED_EVENTS=n
CONFIG_CAF_INIT_LOG_MODULE_STATE_EVENTS=n

# Default cloud transport service
CONFIG_NRF_CLOUD_MQTT=y

# new

# General config
# is equal

# Network
# CONFIG_NET_IPV6=n

# Sensors
CONFIG_I2C=y
CONFIG_SPI=y
CONFIG_SENSOR=y

# UI
# Unknown symbol
# CONFIG_UI_LOG_LEVEL_DBG=y

# LwM2M and IPSO
CONFIG_LWM2M=y
CONFIG_LWM2M_COAP_BLOCK_SIZE=512
CONFIG_LWM2M_ENGINE_MAX_OBSERVER=15
CONFIG_LWM2M_ENGINE_MAX_MESSAGES=15
CONFIG_LWM2M_ENGINE_MAX_PENDING=15
CONFIG_LWM2M_ENGINE_MAX_REPLIES=15
CONFIG_LWM2M_ENGINE_DEFAULT_LIFETIME=30
CONFIG_LWM2M_DNS_SUPPORT=y
CONFIG_LWM2M_RW_JSON_SUPPORT=n
CONFIG_LWM2M_SERVER_DEFAULT_PMIN=1
CONFIG_LWM2M_SERVER_DEFAULT_PMAX=300
CONFIG_LWM2M_CLIENT_UTILS=y
CONFIG_LWM2M_CLIENT_UTILS_LOCATION_OBJ_SUPPORT=n
CONFIG_LWM2M_IPSO_SUPPORT=y

# IPSO v1.1
CONFIG_LWM2M_IPSO_TEMP_SENSOR_VERSION_1_1=y
CONFIG_LWM2M_IPSO_HUMIDITY_SENSOR_VERSION_1_1=y
CONFIG_LWM2M_IPSO_GENERIC_SENSOR_VERSION_1_1=y
CONFIG_LWM2M_IPSO_PRESSURE_SENSOR_VERSION_1_1=y
CONFIG_LWM2M_IPSO_PUSH_BUTTON_VERSION_1_1=y
CONFIG_LWM2M_IPSO_ACCELEROMETER_VERSION_1_1=y
# CONFIG_LWM2M_IPSO_APP_COLOUR_SENSOR_VERSION_1_1=y

# App
# Unknown symbol
# CONFIG_APP_ACCELEROMETER=y
# CONFIG_APP_PUSH_BUTTON=y
# CONFIG_APP_ENV_SENSOR=y
# CONFIG_APP_TEMP_SENSOR=y
# CONFIG_APP_PRESS_SENSOR=y
# CONFIG_APP_HUMID_SENSOR=y
# CONFIG_APP_GAS_RES_SENSOR=y
# CONFIG_APP_LIGHT_CONTROL=y
# CONFIG_APP_LIGHT_SENSOR=y
# CONFIG_APP_GNSS=y

# Sensor module
CONFIG_SENSOR_MODULE=n

# DTLS settings
CONFIG_LWM2M_DTLS_SUPPORT=y

# nRF9160 helper libraries
CONFIG_MODEM_KEY_MGMT=y

# Default app to debug logging
CONFIG_LOG=y
# CONFIG_APP_LOG_LEVEL_DBG=y

# Expand logging memory to avoid log_strdup() errors

# Support HEX style PSK values (double the size + NULL char)
CONFIG_LWM2M_SECURITY_KEY_SIZE=33

# extend CoAP retry timing to 4 seconds for LTE/LTE-M
CONFIG_COAP_INIT_ACK_TIMEOUT_MS=4000

# Enable CoAP extended option length
CONFIG_COAP_EXTENDED_OPTIONS_LEN=y
CONFIG_COAP_EXTENDED_OPTIONS_LEN_VALUE=40

# Enable settings storage
CONFIG_SETTINGS=y
CONFIG_FCB=y
CONFIG_SETTINGS_FCB=y

# LTE link control
CONFIG_LTE_LINK_CONTROL=y
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n
CONFIG_LTE_NETWORK_MODE_LTE_M_GPS=y

# Modem library
CONFIG_NRF_MODEM_LIB=y

# Modem info
CONFIG_MODEM_INFO=y
CONFIG_MODEM_INFO_ADD_DATE_TIME=n

# Enable shell
CONFIG_LWM2M_SHELL=y

# Heap and stacks
#CONFIG_HEAP_MEM_POOL_SIZE=16384
#CONFIG_MAIN_STACK_SIZE=4096
CONFIG_LWM2M_ENGINE_STACK_SIZE=3072
#CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048

# Allow FOTA downloads using download-client
CONFIG_DOWNLOAD_CLIENT=y
CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096
CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE_1024=y
CONFIG_FOTA_DOWNLOAD=y

# Set LwM2M Server IP address here
CONFIG_LWM2M_CLIENT_UTILS_SERVER="coaps://leshan.eclipseprojects.io:5684"

# Application Event Manager
CONFIG_APP_EVENT_MANAGER=y

# Date-Time library
CONFIG_DATE_TIME=y
CONFIG_DATE_TIME_UPDATE_INTERVAL_SECONDS=86400

CONFIG_LWM2M_VERSION_1_1=y
CONFIG_LWM2M_RW_OMA_TLV_SUPPORT=y
CONFIG_LWM2M_PORTFOLIO_OBJ_SUPPORT=y
CONFIG_BASE64=y
CONFIG_LWM2M_RW_SENML_JSON_SUPPORT=y
CONFIG_LWM2M_RW_JSON_SUPPORT=y
CONFIG_LWM2M_RW_CBOR_SUPPORT=y
CONFIG_LWM2M_SECONDS_TO_UPDATE_EARLY=8
CONFIG_LWM2M_COAP_MAX_MSG_SIZE=1280
CONFIG_LWM2M_COMPOSITE_PATH_LIST_SIZE=10

# Set SPM as default secure firmware
CONFIG_BUILD_WITH_TFM=n
CONFIG_SPM=y
MLopezJ commented 1 year ago

Approach 2: Add avsystem's overlay to Asset Tracker

Keep prj.conf file as it is, with out changes. Create the overlay-avsystem.conf in Asset Tracker as it is in LwM2M-client sample and add it and overlay-LwM2M.conf as part of the kconfig fragments.

result

[00:00:05.072,204] <inf> app_event_manager: MODEM_EVT_LTE_CONNECTED                                                                                  
[00:00:05.072,998] <inf> app_event_manager: MODEM_EVT_LTE_PSM_UPDATE                                                                                 
[00:00:05.073,760] <inf> app_event_manager: DATA_EVT_DATE_TIME_OBTAINED                                                                              
[00:00:05.075,042] <inf> net_lwm2m_rd_client: Start LWM2M Client: urn:imei:351358815340515                                                           
[00:00:05.075,073] <wrn> cloud_module: Cloud connection establishment in progress                                                                    
[00:00:05.075,073] <wrn> cloud_module: New connection attempt in 32 seconds if not successful                                                        
[00:00:06.021,179] <inf> net_lwm2m_rd_client: Bootstrap started with endpoint 'urn:imei:351358815340515' with client lifetime 0                      
[00:00:06.294,158] <dbg> lwm2m_security: load_credentials_to_modem: Existing credentials found on modem                                              
[00:00:06.768,188] <inf> net_lwm2m_engine: Connected, sock id 0                                                                                      
[00:00:06.900,848] <err> net_lwm2m_rd_client: Failed with code 4.4 (Not Found). Not Retrying.                                                        
[00:00:06.902,557] <wrn> lwm2m_integration: LWM2M_RD_CLIENT_EVENT_BOOTSTRAP_REG_FAILURE                                                              
[00:00:06.902,679] <inf> app_event_manager: CLOUD_EVT_DISCONNECTED                                                                                   
+CSCON: 0                                                                                                                                            
%CESQ: 48,2,4,0                                                                                                                                      
+CEREG: 5,"0901","02024720",7,,,"11100000","11100000" 
MLopezJ commented 1 year ago

Approach 3: Modify overlay-lwm2m.conf

Update CONFIG_LWM2M_RD_CLIENT_SUPPORT_BOOTSTRAP env var. From y to n

# Use LwM2M client bootstrap server.
CONFIG_LWM2M_RD_CLIENT_SUPPORT_BOOTSTRAP=n

Build configuration only with prj.conf without changes and overlay-lwm2m.conf with the change just described.

Result

Data is been sending to the Coiote's dashboard.

Explanation

In the main kconfig file from asset tracker v2 there is listed others kconfig files used. One of them is kconfig.lwm2m_integration and there the LWM2M_CLIENT_UTILS_SERVER value is depending on the LWM2M_RD_CLIENT_SUPPORT_BOOTSTRAP value.

# Make AVsystem the default lwM2M server.
config LWM2M_CLIENT_UTILS_SERVER
  string "LwM2M server address"
  default "coaps://eu.iot.avsystem.cloud:5694" if LWM2M_RD_CLIENT_SUPPORT_BOOTSTRAP
  default "coaps://eu.iot.avsystem.cloud:5684"
  help
    Kconfig redefinition, please see the help text of the original definition.

Screenshot from 2023-02-28 12-25-49

MLopezJ commented 1 year ago

Checking provided objects versus required objects

Object Provided Required
LwM2M Server NO
Device (3) YES
Connectivity Monitoring (4) YES
Firmware Update (5) NO
Location (6) YES
Temperature (3303) YES
Humidity (3304) YES
Pressure (3323) YES
Push button (3347) NO
ECID-Signal Measurement Information (10256) NO
Location Assistance (50001) NO
Config (50009) YES