Migrating Tektelic Smart Room Sensor devices to V3

FYI: I am sharing my experiences below for who it may be useful.

I have migrated my Tektelic Smart Room Sensor (aka Kona Home Sensor) devices to V3.

I did a manual migration without using any tools.
I was not sure if this would keep existing sessions but I guess not.

The Tektelic documentation is not clear about when a (re)join will be performed wich is required to setup a new session with the V3 environment.
I first tried the reset button (with a small needle) and this proved sufficient to start a new join (configuration settings are preserved during a button reset).

I added all devices in V3 using the same AppEUI, DevEUI and AppKey keys as used in V2.
I added the devices using the predefined devices dropdown selection controls (which uses the LoRaWAN Device Repository available on Github).
This will automatically setup for each device the payload encoder and decoder functions that are defined in the repository.

To make the devices unavailable in V2 but also have the possibility to roll-back, I added a new (bogus) AppKey to the V2 application. Then for each device I set its AppEUI to the new one just added (don’t forget to select ‘Save’). This renders the devices inaccessible in V2 but it can also be rolled back in case needed. You can start doing this for one device first so the others first stay working in V2.

After performing a reset on the first device it nicely joined the V3 network. After tests showed everything was working on V3 (I could see the data arriving in my application) I used the same procedure for the other devices. After all tested fine I deleted the devices and application from V2 (which cannot be undone).

Required application changes

My application uses MQTT for interfacing with the TTN application.
This required two types of changes for V3:

  1. Topics in V2: /<application_name>/devices/<device_name>/up
    Topics in V3: /v3/<application_name>@ttn/devices/<device_name>/up

  2. JSON path for elements in uplink message payload is different:
    In V2: payload_fields.<element_name>
    In V3: uplink_message.decoded_payload.<element_name>

  3. A note of caution: Tektelic has updated the payload encoder and decoder functions compared to those from a year ago.
    I noticed that at least one parameter name has changed: ‘temperature’ is now ‘ambient_temperature’.

My application does not support sending downlink commands so this did not require any changes.