Skip to content

Downlinks

Downlink messages can be used to enable, disable or reconfigure specific features of the ioTracker. For the ioTracker 3 a downlink message is only sent to the ioTracker by the LoRa network in response to an uplink message. For the ioTracker 3 Pro this functionality has to be implemented at the server side. There a two types of downlinks and in some cases it's possible to combine them.

  1. Feature control downlinks to start and stop features

  2. Action header downlinks to make specific configuration changes

With this feature, the server can verify whether a downlink messages was successfully received by the ioTracker. The CRC value is the XOR of all the received bytes (the LoRa/cellular “payload”) of the last downlink which has been received.

B0 B1 B2 B3 B4 B5 B6
Downlink header (5b) Feature contol (3b) Buzzer sequences (4b) LED sequences (4b) LED color (8b) Find timer Find duration timer Default timer Alive timer

The first 5 bits of the downlink header defines the downlink type.

value description
0 Defines a feature control downlink
2 Defines a action header downlink

Feature control (B0)

The next 3 bits defines the feature controls

bit position default value description
b0 0 Enable (1) or disable GPS (0)
b1 1 Enable (1) or disable all onboard sensors (0)

When b1 is set on disable, all sensors will be stopped. If b1 is set on enable, all onboard sensors will be enabled if they are also set on enabled in their sensor specific configuration.

Feature control examples

Start a GPS session

07030F021E0A1E [CRC 03]

Behaviour (default configuration):

  1. GPS will be started, searching up to 5 minutes for a valid position.

  2. While the device is moving GPS will stop after 60 minutes or GPS will stop after 15 minutes without movement.

Also controlled with this downlink: 1. (0x0A) The normal timer will be changed to 10 minutes

  1. (0x1E) The alive timer will be changed to 30 minutes

  2. All the onboard sensors will be enabled (if they are configured to be enabled in their specific config)

  3. A new LED sequence is started (to indicate GPS is on)

  4. If sound was on (running buzzer sequences), those are stopped.

  5. Find mode is activated for a half hour, thus for the upcoming half an hour an uplink is send every 2 minutes, only then it will go to the 10 / 30 timers. If GPS stops before this half hour find mode will continue to send data every 2 minutes, but then without the GPS data. If GPS stops later then this half hour, GPS will continue to send every 2 minutes, but when stopped it will go to the 10/30 timer immediately

Enable buzzer alarm on device for 30 minutes
0673F0021E0A1E [CRC 8D]

Sequences

Buzzer sequences (B1)

The first 4 bits defines the buzzer sequences

value description extra information
0 Stop current running buzzer sequence
1 A-Team
2 AxelF
3 Melody 1 (Join melody)
4 Wakeup 1 (alarm clock sound) looped
5 Sirene_1 (ramp up) (fire alarm) looped
6 Sirene_2 (ramp up, ramp down) looped
7 Find_1 (energy efficient beeps) 1 hour (default)
8..15

LED sequences (B1)

The next 4 bits defines the LED sequences

value description sequence runtime in seconds
0 Stop current running LED sequence
1 Fast blink 3 x blink (100/400 ms), wait 2 sec, x4 6
2 Very fast blink 5x blink (25/100 ms), wait 2 sec, x10 29,250
3 3 medium continuous blinks 3x blink (33/300 ms), wait 1 sec, x1800 1 hour
6 2 medium continuous blinks 2x blink (100/400 ms), wait 1 sec, x1800 1 hour
7..15

LED colour (B2)

The intensity of the LED can be set for the LED sequence

value description extra information
4b Red LED intensity 0..15 (where 0 is off and 15 is full on)
4b Green LED intensity 0..15 (where 0 is off and 15 is full on)

Timers (B3..B6)

The ioTracker operations are time based and are divided in four different timers. The timers determine the moment that an uplink will be send.

byte position description default
3 Find timer (temporary timer for find operations like GPS) 2 minutes
4 Find duration timer (maximum time find timer is active) 1 hour
5 Default timer (update interval when movement is detected) 10 minutes
6 Alive timer (update interval when no movement is detected) 30 minutes

When the find duration timer (set via byte B4) is activated, the device uses the find timer (set via byte B3) for operation. When the find duration timer is expired (or written with 0x00) the device timer uses the default timer byte (set via byte B5) when moving and the alive timer (set via byte B6) when not moving (static).

When the GPS function is active the ioTracker automatically uses the find duration timer to send an uplink every 2 minutes (unless configured differently). The find timer should therefore be configured only to 2 or 3 minutes. Each timer (as referred to in previous table and represented by byte 3, 4, 5 or 6), is either interpreted as minutes or as hours. This is explained in the table below;

bit position description
b0..b6 Timer value
b7 When the value is 0, b0..b6 should be read as minutes. When the value is 1, b0..b6 should be read as hours

Timer value examples

timer value
2 minutes 0x02
5 minutes 0x05
10 minutes 0x0A
30 minutes 0x1E
60 minutes 0x3C
1 hour 0x81
4 hours 0x84

1 hour in minutes and 1 hour in hours will result in equal timing.

Timer examples

Change normal timer to 10 minutes and the alive timer to 30 minutes, with enabling find mode for 30 minutes (default)

060000021E0A1E [CRC 0E]

Behaviour (default configuration):

  1. (0x0A) The normal timer will be changed to 10 minutes (timer when the device is moving)

  2. (0x1E) The alive timer will be changed to 30 minutes (timer when the device is not moving)

Also controlled with this downlink:

  1. All onboard sensors will be enabled (if they are configured to be enabled in their specific config)

  2. GPS will be stopped, if it was running

  3. LED sequence will be stopped, if any were running

  4. Buzzer sequences will be stopped, if any were running

  5. Find mode is activated for half an hour, thus for the upcoming half an hour an uplink is send every find timer minutes (2 minutes by default). Consecutively, the ioTracker will go back to normal operation using the configured normal (10 minutes) and alive (30 minutes) timer values.

Change normal timer to 10 minutes and the alive timer to 30 minutes, without enabling find mode

06000002000A1E [CRC 10]

This downlink results in the same behavior then the previous one, except it doesn't activate the find duration timer.

When the action header is set to 0x2, a configuration message can be sent to configure a specific action. Be aware that the feature control bits are included in these downlinks as well, A downlink configuration message does also start/stop GPS and or start/stop the onboard sensors. Normally, GPS is assumed to be OFF and the onboard sensors are assumed to be ON.

B0 B1 Bx..By
Downlink header (5b) Feature control (3b) Action Action content
00010 xxx

Actions

byte position Action Description
1 Remote control Reboot/Reset function
2 LoRaWAN configuration SF, ADR etc.
3 Cellular configuration RAT, PIN etc.
12 Button configuration Defines the action per button mode
13 GPS configuration Defines the GPS mode
15 Read software version Retreive the software version
16 Silent mode Supress all LED and buzzer signals
20 Battery level Overwrite the current battery level
22 Light sensor configuration Define specific light sensor configurations
23 Accelerometer Define specific accelerometer configurations
24 Temperature sensor configuration Define specific temperature sensor configurations
25 WiFi configration Define specific WiFi configurations
27 Bluetooth configuration Define specific WiFi configurations

Remote control (1)

It's possible to reset the configuration to factory defaults. The LoRaWAN keys and the cellular endpoint configuration will remain intact.

Remote control example

Reboot without configuration changes 120102 [CRC 11]

Load configuration to factory defaults and reboot the device
120103 [CRC A0]

LoRaWAN configuration (2)

Several parameters of the LoRaWAN configuration can be changed, you can find them in the table below. B4..B5 should be included and are always 0x0A01

bit position (B0..B3) description application default value
b8..10 Minimum data rate DR0=SF12, DR7=SF7 0 (SF12)
b11..b13 Maximum data rate DR0=SF12, DR7=SF7 5 (SF7)
b14..b16 Moving data rate Lowered to this value if SF was higher. Must not conflict with min and max DR 2 (SF10)
b17..b18 No link check after moving 0
Do link check after moving and DR change Aims for DR optimization 2 (default)
Link check margin for geolocation Aims for reception at 3 gateways 3
b19..b26 0..15 amount of acknowledge retries 7
b28 Re-join LoRa at uplink counter 16b rollover (only for OTAA) As the device uses an internal 32b uplink counter, and rollover to (2^16)+1 might be problematic, depending on provider network settings. 1

LoRaWAN examples

Load LoRaWAN configuration to default
1202FFA83C10010A [CRC 60]

Force the LoRa spreading factor when moving to SF12
1202FF283C10010A [CRC E0]

Force the LoRa spreading factor always to SF7
1202FF6D3D10010A [CRC A4]

Cellular configuration (3)

The information in this chapter is only applicable to our ioTracker 3 Pro cellular device.

Actions B0

bit position (B0) description application default value
b0 Set Cellular config W1 -
b1 Set Cellular config W2 -
b2 Set PIN code 0
b3 Set URL/IP Max 48 characters 0
b4 Set port 0
b5 Return ICCID SIM card ID 0
b6..b8

Set cellular config W1 B0123

bit position (B0123) description application default value
b0..3 1..3 nr. Of enabled RAT’s 1: Only 3rd prio RAT is used.
2: 3rd prio is used as a start, and as a fallback.
3: Same as 2 but from 3rd is jumped to 1st, and tried, if attached it stays here, if not then it tries 2nd, if that fails it uses 3rd prio.
3
b4..7 3rd priority RAT EGPRS (backup, used as other priorities can’t attach). 9
b8..b11 2nd priority RAT LTE-M 7
b12..b15 1st priority RAT NB-IOT 8
b16..b19 RFU 0
b20 Enable PIN code 0
b21 0: Set IP
1: Set URL
URL must be resolved but more flexible. 1
b22..b23 1st Prio Network attach time
0: 1M
1: 2M
2: 5M
3: 10M
2
b24..b25 Other prio network attach time. 1
b26 Add COPS and CSQ to payload 1
b27 RFU 0
b28..b29 Downlink window length
0: 2s
1: 3s
2: 5s
4: 10s
1
b30..b31 RFU 0

Set cellular config W2 B0123

bit position (B0123) description application default value
b0 Enable NNPO NoNetworkPowerOptimazation Don’t try to attach to network with no reception and on same location. 1
b1..2 NdetachLimit (Nr. Of Enabled RAT’s) + 1 + N 3 + 1 + N (2.5) After how many failed attach attempts stop trying to attach. 1 (5)
b3..b5 TryStatic 1 << (1 +N) (2..255) Try every Nth packet anyway to see if network recovered If configured at 7, it will never try static. 4 (32)
b6 Auto update and load IP b21 must be set to URL. The resolved URL is stored automatically in the IP field if successful and used when resolving fails. 1
b7 While moving, try every uplink all configured RAT if no network. More change of network connection if continuously moving. Especially if the 3rd prio RAT (the backup) does not work in every country. 1
b8..b31 RFU 0

Cellular configuration examples

Load cellular configuration to default (NB-IOT, LTE-M and EGPRS)
1203019387A015 [CRC B1]

Enable PIN code for sim card (PIN=0000)
1203019387B015 [CRC A1]

NB-IOT only
1203018188A015 [CRC AC]

LTE-M only
1203017177A015 [CRC A3]

EGPRS only
1203019199A015 [CRC AD]

Button configuration (12)

The ioTracker supports single, double and long clicks. As a double click always starts with a single click, from computational perspective, until the second click is received, the behaviour on the first click can be configured separately (e.g., for instant audio-visual response). The second click could then start a specific action, e.g., start GPS.

There are four functions which can be configured to do actions, i.e.:

  1. Single button audio-visual feedback (“Single click feedback ”)

  2. Single button action (“Single click action”)

  3. Double button action (“Double click action”)

  4. Long button action (“Long click action”)

Button_flow

byte position description
B0 configuration for “Single click feedback”
B1..B2 configuration for “Single click action”
B3..B4 configuration for “Double click action”
B5..B6 configuration for “Long click action

There is an additional option to ensure that a single click is not executed when you do a double click. This is indicated by the colomn "single w/o double click" and " single with double click" in the table below.

B0 / B1 / B3 / B5 – Function 1, 2, 3 and 4

bit position single w/o double click single with double click double long description application
b0 - 1 1 0 button pressed stops the duration timer
b1 - 0 0 0 button pressed starts the duration timer Increased messaging for, e.g., combination with GPS
b2 - 0 0 0 button pressed disables the GPS (if running)
b3 - 0 0 0 button pressed enables the GPS (if off) emergency button with geolocation function
b4 1 0 1 0 button pressed stops running LED sequences and start sequence 4 (single flash)
b5 0 0 0 0 Button pressed stops running LED sequences and start LED sequence 3 (Medium continues notification) (downlink with buzzer overwrites current running) (sets color 0x0F: Green) Can be used to flash the LED when GPS has been activated via the button
b6 1 0 1 0 button pressed stops running buzzer sequences and start sequence 8 (Single beep)
b7 0 0 0 0 button pressed stops running buzzer sequences and start sequence 7 (battery saving nice beeps) (downlink with buzzer overwrites current running)
b8..b9 - - 3 - Double Click speed
0: 700ms
1: 1000ms
2: 1500ms
3: 2000ms
b10 - - - - RFU
b11 - 1 1 0 button is send as confirmed LoRa message emergency button function; increases the probability that an uplink as a result of a button press is received by the application server by trying to send the uplink 8 times if no ACK is received from the network.
b12 - 1 1 0 button pressed sends a LoRa uplink message depending on the button type, the uplink reason is set accordingly. disable sending a LoRa packet and only execute action
b13 - - - 0 Bluetooth is activated and discoverable led starts blinking blue, you can connect with the APP
b14 - 0 0 0 Bluetooth stops advertising and disconnects
b15 - 0 1 0 button double click sets b2 of the uplink reason detect double click event for specific customer.

Button configuration examples

Button configuration to default (no long press and double click activates GPIO bit)
120C5018019B510000 [CRC 9D]

Button configuration to enable GPS on single click (event 1.)
120C50180995B10000 [CRC 7B]

Button configuration to enable GPS on single click (event 1.)
120C1018019B119811 [CRC 14]

GPS configuration (13)

The GPS configuration can be changed via B0..B3. The timers are seperated from the normal system timers. The GPS duration moving timer is changed via B4 and the GPS alive timer with B5.

Note: GPS is not started using this downlink (only configured). After (re)configuring GPS, you need to send a feature control downlink to enable GPS.

bit position (B0..B3) description application default value
b0 single FIX (GPS stops on first valid fix) less battery usage for stationary/nomadic applications 0
b1 - - 1
b2 - - 1
b3 - - 1
b4 - - 0
b5 - - 1
b6 - - 1
b7 use lengthening for navstat fix increase accuracy 1
b8..b10 time to first fix (max):
0: 90s
1: 180s
2: 300s
3: 420s
4: 600s
2
b11..b13 resume fix timer (max)
0: 20s
1: 40s
2: 70s
3: 120s
4: 180s
5..7: RFU
2
b14..b15 try to improve GPS if hacc > haccImprove
0: 10s
1: 20s
2: 30s
3: 40s
lengthen GPS on time if FIX or 3SV but accuracy is desired to be higher. 3
b16..b19 haccImprove
0 .. 15 * 10m
default GPS on time is lengthened if hacc > value (default 30m) 3
b20 haccImprove
enable on startup
for applications with GPS always enabled 0
b21..b23 - - 0
b24 when 0SV and time to first fix (max) is reached, send anyway never stop after 1st fix when lost GPS reception 0
b25 max performance GPS for increased accuracy, adds less time to timer, thus faster uplinks. Drains the battery faster. 0
b26 disable timer(s) / run indefinitely keep GPS always on 0
b27 enable on movement start GPS automatically when the accelerometer detects movement. 0
b28 enable on static position (more robust) enables GPS when not moving (sync after configurable #messages moved/not moved). Must not be enabled when b5 is 1. 0
b29 enable on static position enables GPS when not moving (async/directly). must not be enabled when b4 is 1. 0
b30 button reset for both “enable on static position” features resets the state of the position algorithm to initial state, giving you 5 seconds to lay down/still the ioTracker, as otherwise a movement will be triggered when pressing the button again. 0
b31 disable GPS below temperature does not start GPS if the temperature is below xx degrees (default is -5°C). 1

Note 1: If "enable on static position (more robust)" (b4) is enabled, then two more bytes have to be send:

  • B6 = steady counter limit (default 2)

  • B7 = move counter limit (default 2)

Note 2: If "enable on static position function" (b5) is enabled, then one more byte has to be send:

  • B6 = steady counter timer value(default 10m=0x0A)

Note 3: If "disable GPS below Temperature" (b7) is enabled, then one more byte has to be send:

  • B6 = signed char(8b) (temperature in °C) in whole degrees. Default = 0xFB -> -5°

GPS configuration examples

Configure GPS stays always on
120D0502CAEE0F81 [CRC B2]
120D0512CAEE0F81 [CRC A2] (enable on boot)]

Configure GPS to stop after first GPS message
120D0002CAEF0F81 [CRC B6]

Configure GPS to start on moving
120D0902D2EE0F81 [CRC A6]
120D0912D2EE0F81 [CRC B6] (enable on boot)]

Configure GPS to start on moving with max performance
120D0B02D2EE0F81 [CRC A4]
120D0B12D2EE0F81 [CRC B4] (enable on boot)]

Read software version (15)

Returns next uplink message with an action header with the versioning

byte position (B15) description
B0 marjor software version
B1 minor software version
B2..B3 firmware build number
B4 Hardware version

Read software version example

Request hardware and software version information
120F [CRC 1D]

Silent mode (16)

To supress all blinking and buzzing, not only the sequences but also button press etc.

bit position (B16) description value
b0 LED 1 is silent, 0 is normal
b1 buzzer 1 is silent, 0 is normal

Battery level (20)

There a couple of parameters to tune or correct the battery level.

bit position (B0) description application default value
b0 - - -
b1..b2 0: -
1: reset battery penalty
2: Reset battery status including penalty
3: RFU
Set all stats to 0 and battery level to full 0
b3 correct battery level to this value. next byte (B0) is the desired level when 0 do not send the data byte 0
b4 - - 0
b5 auto reset battery level when battery was removed and replaced (n/a for IOT3 Pro, should be 0 for IOT3 Pro) 1
b6 - - 0
b7 - - 1

Battery correction (only required when b3 of B0 is set)

byte position (B0) description application default value
B0 set battery level (correction) Adjust current battery level to this level (for reset it's preferred to use b1 of b0) -

Battery level examples

ioTracker 3 reset to full
1214A4 [CRC A2]

ioTracker 3 reset to 95%
1214A8F1 [CRC 5F]

ioTracker 3 Pro reset to full
121404 [CRC 02]

ioTracker 3 Pro reset to 95%
121408F1 [CRC FF]

Light sensor (22)

The light sensor can be configured with absolute or relative limits, when the limit is reached an uplink will be send immediately.

bit position (B0) description application default value
b0 absolute or relative limit 0 = absolute 1 = relative 0
b1 sensor status 0 = disabled 1 = active 1
b2..b6 RFU
b7 IRQ_latch Define interrupt source (cleared with every uplink) 1

Extra information

  • When b0 is not set (configured as absolute limits), the limits are 16b high and 16b low, same 4b exponent and 12b value as light.

  • When b0 is set (configured as relative limits), the limits are in percent (ranging from 1 to 254%).

  • The sensor is started or stopped depending on b1, automatically enabling the onboard sensor bit.

[B1] Poll time in seconds

bit position (B1) description application default value
b1 poll_time in seconds 0x37

[B2..B5] Absolute limits for light sensor interrupts (applicable if b0 = 0 in B0)

data type description application default value
uint16 an_IRQ_high When value > high interrupt is generated [B2..B3] 0xBFFF
uint16 an_IRQ_low When value < high interrupt is generated [B4..B5] 0x0000

[B2..B3] Relative limits for light sensor interrupts (applicable if b0 = 1 in B0)

data type description application default value
uint8 an_IRQ_high Percentage changed from previous up (max 255%) [B2] 0x10
uint8 an_IRQ_low Percentage changed from previous down (max 99%) [B3] 0x10

The trigger angle (rate of late change) depends on both the poll_time and the relative limit, so both have to be tuned to the desired behaviour; it is the percentage of change relative to the previous measurement. If the relative value is 0 then for that direction the limit is disabled.

Light sensor examples

Disable light sensor
12168037BFFF0000 [CRC 84]

Enable light sensor (default)
12168237BFFF0000 [CRC F1]

Enable light sensor Enable light sensor (uplink upon 50% change within 2 subsequent measurements, 5 seconds apart)
121683053232 [CRC 82]

Enable light sensor (uplink upon passing 400 lux limit, high and low)
1216820549C449C4 [CRC 83]

Accelerometer (23)

There a couple of parameters to tune the behavior of the accelerometer. It's also possible to add the XYZ position to the onboard sensors (payload).

bit position (B0..B3) description application default value
b0 add current XYZ to onboard sensors detect the position (upright? fallen down?) of the asset 0
b1 sensor status 0 = disabled 1 = active 1
b2..b4 add maximum force to onboard sensors of the last:
0: remove from payload (shorter payload)
1: last message only
2: last 2 messages
3: last 4 messages
4: last 8 messages
5: last 16 messages
6: over all messages (reset by accelerometer sensor AH downlink)
7: RFU
shock detection and auditing 5
b5..b6 Full-Scale selection (only for shocks):
0: +-2g
1: +-4g
2: +-8g
3: +-16g
the result is the measured value can result up to 1.41 times full-scale, depending on the angle of the force. 3
b7 RFU
b8..b9 ODR (Output Data Rate):
0 : 1Hz (2uA)
1 : 10Hz (3uA)
2: 25Hz (4uA)
3: 100Hz (10uA)
faster response, more power usage 1
b10..b11 high-pass cut-off frequency selection:
00: ODR/ 50
01: ODR/125
10: ODR/250
11: ODR/500
filter out slow movement. (11 => maximum sensitivity) 0
b12..b15 INT1_THS
0..15 -> 16mg/LSB (at 2g FS)
default 4 = 64mg 4
b16..b17 INT1_Duration
0..3 -> Duration of event to be recognized.
Time = N/ODR
default = 1 -> 2 successive samples need to be above the threshold 1
b18..b19 SHOCK ODR (Output Data Rate):
0: 10Hz
1: 50Hz
2: 200Hz
3: 400Hz
faster response, more power usage 2
b20..b21 SHOCK INT1_Duration 0..3 -> Duration of event to be recognized.
Time = N/ODR
default = 0 -> 1 sample need to be above the threshold. Multiple high readings are less easy to trigger. 0
b24..b26 repeated move measurements takes longer / more movement with more samples to set the movement flag 2
b27..b29 inhibit time in seconds, in between move measurements takes longer / more movement to set the movement flag 5

The accelerometer can be used for 3 measurements, absolute value (xyz), movement, and detect the maximum force (shock).

  1. If b0 is set, the accelerometer is configured just before a message is sent to measure absolute values, it is sampled and re-configured to measure movement.

  2. When movement occurs, the value is read and shock config is loaded.

  3. Every shock larger than the previous, the shock threshold is updated to trigger for larger shocks.

With every message, the cycle (i.e., the three steps above), is repeated.

Accelerometer examples

Disable accelerometer
12172A094174 [CRC 13]

Enable accelerometer (default)
12172A094176 [CRC 11]

Disable XYZ (default)
12172A094176 [CRC 11]

Enable XYZ
12172A091777 [CRC 46]

Set high sensitivity accelerometer
12172A094162 [CRC 05]

Set medium sensitivity accelerometer
12172A0AF162 [CRC B6]

Set low sensitivity accelerometer
12172A0BF162 [CRC B7]

Temperature sensor (24)

The temperature sensor can be configured with absolute limits, when the limit is reached an uplink will be send immediately.

bit position (B0) description application default value
b0 RFU
b1 sensor status 0 = disabled 1 = active 1
b2..b6 RFU
b7 IRQ_latch Define interrupt source (cleared with every uplink) 1

Extra information

  • The sensor is started or stopped depending on b1, automatically enabling the onboard sensor bit.

[B1] Poll time in seconds

bit position (B1) description application default value
b1 poll_time in seconds 0x0A

[B2..B5] Absolute limits for temperature sensor interrupts

data type description application default value
uint16 an_IRQ_high When value > high interrupt is generated [B2..B3] 0x2700
uint16 an_IRQ_low When value < high interrupt is generated [B4..B5] 0x0000

Extra information The temperature is defined with 2 bytes in total, where the temperature information (int16_t 0,01C / LSB ) is represented in degrees Celsius. Example: 0x075F = 18,87 degrees Celsius.

Temperature sensor examples

Disable temperature sensor
1218840a27000000 [CRC A3]

Enable temperature sensor (default)
1218860a27000000 [CRC A1]

Set temperature thresholds (uplink upon +25 and -5 degrees Celsius)
121886010bb8fe0c [CRC CC]

WiFi configuration (25)

The WiFi chip can be used for sniffing WiFi networks, reporting the MAC addresses and RSSI. For the firmware and log synching features the WiFi chip can connect to an accespoint and used for internet breakout.

bit position (B0) description application default value
b0 set Wifi Config B0123
b1 set WiFi SSID 0
b2 set WiFi password 0
b3..b7 RFU
bit position (B01) description application default value
b0 add RSSI 1
b1..b3 0 = WiFi disabled
1 ..7 => Maximum number of found MAC addresses added per payload
WiFi sniffing. 5 MAC's for LoRa and 7 MAC's for cellular is the maximum. 4
b4..b5 0: basic scan and send
1: send first x number of MAC addresses and send a second set when not moving.
2: equal to 1 but send a third set.
3: RFU
0
b6 1: Force / Set connect wifi now
0: -
force connect wifi if home network is found and start config and log sync and check for updates 0
b7 1: Set connect wifi now at startup (UL == 2)
0: wait for the first interval
sync config and check updates at boot 0
b8..b15 disable WiFi below temperature. signed char(8b) (temperature in °C) in whole degrees.
default = 0xF6 -> -10 °C
does not start WiFi if the temperature is below set xx degrees Celcius. Set to -128 to disable. -10
b16..b23 Connect wifi interval
0 = disabled 1..255 * 100.
Set connect flag when uplink counter surpasses every interval.
64
b24..b31 RFU

Extra information

  • If b7 (disable WiFi below Temperature) in B0 is set, one more byte needs to be sent;

  • B1 = signed char (8b) = temperature in °C in whole degrees. Default = 0xFF -> -1 °C.

  • Maximum networks for WiFi and BLE combined is 4, otherwise the payload gets too large for LoRa. This limit isn't applicable for cellular networks.

  • Setting WiFi network and password

  • The first byte should indicate the length of the string and next should be the data. Use only allowed characters.

WiFi configuration examples

Disable WiFi
121900 [CRC 0B]

Enable WiFi with sending 4 MAC+RSSI per uplink (default for ioTracker 3)
121909 [CRC 02]

Enable Wi-Fi with sending 7 MAC+RSSI per uplink (default for ioTracker 3 Pro)
12190F [CRC 04]

Bluetooth configuration (27)

The Bluetooth chip can be used for sniffing (UUID + RSSI) beacons. Support for iBeacon, EddyStone and AltBeacon is available. It's also possible to activate filters and trigger. For instance: when a certain beacon is present of absent, the GPS chip can be activated.

bit position (B0) description application default value
b0 set Bluetooth scan config B1..4 -
b1 RFU
b2 set scan slot config 0
b3..b7 RFU
bit position (B1..B4) description application default value
b0..b1 Bluetooth scanning
0: disabled
1: scan every uplink packet
2: Scan every x seconds (config timer via B4) and send on event
3: Scan uplink and timer
scanning on time is useful in combination with slot match. With timer only you get only scan information on match. 0
b2 0: scan every uplink packet
1: Scan when moved
applicable if b0..b1 = 1 or 3 1
b3 scan on button press any type of button press 1
b4..b7 scan time:
1+[0..15] * 200ms
while scanning the ioTracker uses 5mA 15
b8 RFU
b9..b11 1 + 0..7 => Maximum number of found beacons added to payload 2
b12..b13 UUID filter:
0: disabled send only 6 bytes
1: disabled send full UUID
2: filter enabled
3: RFU
6 bytes is for iBeacon, last 2 bytes of UUID + major + minor
If the filter is enabled (2) and no filters are configured, the UUID filter is set to disabled and it sends only 6 bytes(0).
1
b14 report RSSI corrected with TX power of the beacon info distance detection 1
b15 RFU
b16..b23 Bluetooth Scan Timer. A new scan is initiated every x time. This timer uses the timers V2 calculation. used when b0..b1 = 2 or 3. Scan timer should be greater than scan time. Scanning a lot uses a lot of battery! Suggested to use > 30 seconds. 0
b24..b31 int8_t Calibration correction for the ioTracker Bluetooth receive sensitivity beacon distance calculation. A correctly calibrated beacon and ioTracker should measure -58dB at 1m. -58

If the UUID filter is configured to filter enabled, the received beacon will only be reported if it matches any of the scan slots. It checks the slots from slot 1 to slot 8, and reports the first matching results. It’s important to configure the slots in a descending order of priority. The actions of only the first matching slot will be reported and executed.

Example

  • Slot 1 with slot enabled, match on present, match on size 2 (UUID + major + minor)

  • Slot 2 with slot enabled, match on absent, match on size 1 (UUID + major)

  • Slot 3 with slot enabled, filter only, match on size 0 (UUID)

If you reverse the order above, if all used beacons of interest have the same UUID, slot 2 and slot 3 will never be reached, as the wide filter (then the filter in slot 1) always matches.

Next byte indicates which slot to use.

bit position (B1) description application default value
b0..b2 slot number = 1 + 0..7 scan slot (2 + 1 + 20) bytes 1
b3..b7 RFU

After the slot number, the config and used beacon data must be sent. The length can vary according to beacon type and match on length.

Config + ([UUID + major + minor] | [id1 + id2 + id3] | [namespace + instance])

bit position (B2..B5) description application default value
b0 enable slot 0
b1 stop scan on match a shorter scan time uses less power. Keep scanning if you want all beacons. 0
b2..b3 beacon type
0: iBeacon
1: EddyStone
2: AltBeacon
3: RFU
0
b4..b5 for beacon type match on:
iBeacon:
0: UUID (16B)
1: UUID + major (18B)
2: UUID + Major + Minor (20B)
AltBeacon:
0: id1 (16B)
1: id1 + id2 (18B)
2: id1 + id2 + id3 (20B)
Eddystone:
0: Namespace (10B)
1: Namespace + Instance (16B)
0
b6 add signal level strength for match. B5 is level only valid when scanning is 2 or 3. When present then it must be higher, when absent it must be lower. 0
b7 RFU
b8..b15 match level if b7 is set, then send a level 0
PRESENT
b16 match enables GPS 0
b17 match disables GPS 0
b18 match starts LED sequence 0
b19 match stops LED sequence 0
b20 match starts buzzer sequence 0
b21 match stops buzzer sequence 0
b22 match initiates uplink 0
b23 RFU
ABSENT
b24 match enables GPS 0
b25 match disables GPS 0
b26 match starts LED sequence 0
b27 match stops LED sequence 0
b28 match starts buzzer sequence 0
b29 match stops buzzer sequence 0
b30 match initiates uplink 0
b31 RFU

Extra information

  • Maximum networks for WiFi and BLE combined is 4, otherwise the payload gets too large for LoRa. This limit isn't applicable for cellular networks.

Bluetooth configuration examples

Disable BLE (default)
121B01F60050F5 [CRC 5B]

Enable BLE with 2 beacons, only scan when moved
121B01F60054F5 [5F]

Enable BLE with 2 beacons, only scan when moved, and scanning on button press
121B01F60054FD [CRC 57]

Slot 1 config (iBeacon, start buzzer sequence on beacon present) 121B0400201000030066D726F52DDFB9D9888B51A8001005 [CRC 21]

Slot 1 config (iBeacon, start GPS on absent of iBeacon UUID 0066D726-F52D-DFB9-D988-8B51A8001005) 121B0400050A00030066D726F52DDFB9D9888B51A8001005 [CRC 1E] * Slot config: 121B0400050A0003 * iBeacon UUID: 0066D726F52DDFB9D9888B51A8001005

Slot 2 config (EddyStone, start buzzer sequence on beacon present) 121B040120100007793262296DDF445F6536 [CRC C1]

Slot 3 config (AltBeacon with match on major, start buzzer sequence on beacon present) 121B04022010002Bb98F6F32CA404CDB99046D500EF6834D00030001 [CRC F6]

Testing procedure

  1. Reset the device to factory defaults with the button or downlink

  2. Observe the device joining the network / sending its first message.

  3. Send the first downlink.

  4. Observe the next uplink has in the “CRC last downlink” field not 0x00, but the CRC of last downlink. be assured that the downlink has been received.

  5. If applicable send the second downlink. Ensure the second downlink has been received by checking the CRC field again.

  6. Configuration and activation is now complete. The device should now work with the new configuration and status.

  7. Validating whether the ioTracker’s new behaviour matches the expected behaviour.

  8. Conclude this test with a FAIL or PASS. In case of a FAIL, write down all actions and observed behaviour as unambiguously as possible

Every test this procedure should be fully repeated. If configurations need to be combined, please contact ioThings for checking compatibility.