# Remote control

The device listenes for remote control commands on LoRaWAN Port 2. Multiple commands per downlink are possible by concatenating them, but must not exceed a maximum of 10 bytes per downlink.

!!! info
	Settings can be stored in NVRAM to make them persistant (reloaded during device startup / restart). To store settings, use command `0x21`.

Send for example `83` `86` as Downlink on Port 2 to get battery status and time/date from the device.

![Remote Control](img/paxcounter_downlink_example.png)

#### 0x01 set scan RSSI limit

	1 ... 255 used for wifi and bluetooth scan radius (greater values increase scan radius, values 50...110 make sense)
	0 = RSSI limiter disabled [default]

#### 0x02 set counter mode

	0 = cyclic unconfirmed, mac counter reset after each wifi scan cycle, data is sent only once [default]
	1 = cumulative counter, mac counter is never reset
	2 = cyclic confirmed, like 0 but data is resent until confirmation by network received

#### 0x03 set GPS data on/off

	0 = GPS data off
	1 = GPS data on, sends GPS data on port 4 (default, use port 1 for mobile pax counter), if GPS is present and has a fix

#### 0x04 set display on/off

	0 = display off
	1 = display on [default]

#### 0x05 set LoRa datarate

	0 ... 15 see LoRaWAN regional parameters for details [default: 5]

	Example for EU868:

	DataRate	Configuration			Bit/s
	0			LoRa: SF12 / 125 kHz	250
	1			LoRa: SF11 / 125 kHz	440
	2			LoRa: SF10 / 125 kHz	980
	3			LoRa: SF9 / 125 kHz		1760
	4			LoRa: SF8 / 125 kHz		3125
	5			LoRa: SF7 / 125 kHz		5470
	6*			LoRa: SF7 / 250 kHz		11000
	7*			FSK: 50 kbps			50000
	8 .. 14		reserved for future use (RFU)
	15			ignored (device keeps current setting)

	*) not supported by TheThingsNetwork

#### 0x06 set LoRa TXpower

	0 ... 255 desired TX power in dBm [default: 14]

#### 0x07 set LoRa Adaptive Data Rate mode

	0 = ADR off
	1 = ADR on [default]

	If ADR is set to off, SF value is shown inverted on display.

#### 0x08 do nothing

	useful to clear pending commands from LoRaWAN server quere, or to check RSSI on device

#### 0x09 reset functions (send this command UNconfirmed only to avoid boot loops!)

	0 = restart device (coldstart)
	1 = (reserved, currently does nothing)
	2 = reset device to factory settings and restart device
	3 = flush send queues
	4 = restart device (warmstart)
	8 = reboot device to maintenance mode (local web server)
	9 = reboot device to OTA update via Wifi mode

#### 0x0A set payload send cycle

	5 ... 255 payload send cycle in seconds/2
	e.g. 120 -> payload is transmitted each 240 seconds [default]

#### 0x0B set Wifi channel hopping interval timer

	0 ... 255 duration for scanning a wifi channel in seconds/100
	e.g. 50 -> each channel is scanned for 500 milliseconds [default]
	0 means no hopping, scanning on fixed single channel WIFI_CHANNEL_1

#### 0x0C set Bluetooth channel switch interval timer

	0 ... 255 duration for scanning a bluetooth advertising channel in seconds/100
	e.g. 8 -> each channel is scanned for 80 milliseconds [default]

#### 0x0D set wakeup sync window

	bytes 1..2 = wakeup sync window size in seconds (MSB), 0..255 (0 = no wakuep sync)
	e.g. {0x02, 0x58} -> device adjusts it's wakeup time when it is +/- 5 minutes from top-of-hour [default = 0]

#### 0x0E set Bluetooth scanner

	0 = disabled
	1 = enabled [default]

#### 0x0F set WIFI antenna switch (works on LoPy/LoPy4/FiPy only)

	0 = internal antenna [default]
	1 = external antenna

#### 0x10 set RGB led luminosity (works on LoPy/LoPy4/FiPy and LoRaNode32 shield only)

	0 ... 100 percentage of luminosity (100% = full light)
	e.g. 50 -> 50% of luminosity [default]

#### 0x11 set Wifi scanner channel map bitmask

	bytes 1..2 = wifi channel map bitmask (MSB), 0..8191
	e.g. 0b1010000001001 sets channels 1, 4, 11, 13

#### 0x13 set user sensor mode

	byte 1 = user sensor number (1..3)
	byte 2 = sensor mode (0 = disabled / 1 = enabled [default])

#### 0x14 set payload mask

	byte 1 = sensor data payload mask (0..255, meaning of bits see below)
        0x01 = COUNT_DATA
        0x02 = RESERVED_DATA
        0x04 = MEMS_DATA
        0x08 = GPS_DATA
        0x10 = SENSOR_1_DATA
        0x20 = SENSOR_2_DATA
        0x40 = SENSOR_3_DATA
        0x80 = BATT_DATA
    bytes can be combined eg COUNT_DATA + SENSOR_1_DATA + BATT_DATA: `0x01 | 0x10 | 0x80 = 0x91`

#### 0x15 set BME data on/off

	0 = BME data off
	1 = BME data on, sends BME data on port 7 [default]

#### 0x16 set battery data on/off

	0 = battery data off [default]
	1 = battery data on, sends voltage on port 8

#### 0x17 set Wifi scanner

	0 = disabled
	1 = enabled [default]

#### 0x18 reserved

    unused, does nothing

#### 0x19 set sleep cycle

	bytes 1..2 = device sleep cycle in seconds/10 (MSB), 0..65535 (0 = no sleep)
	e.g. {0x04, 0xB0} -> device sleeps 200 minutes after each send cycle [default = 0]

#### 0x20 load device configuration

	Current device runtime configuration will be loaded from NVRAM, replacing current settings immediately (use with care!)

#### 0x21 store device configuration

	Current device runtime configuration is stored in NVRAM, will be reloaded after restart

#### 0x80 get device configuration

	Device answers with it's current configuration on Port 3.

#### 0x81 get device status

	Device answers with it's current status on Port 2.

#### 0x83 get battery status

	Device answers with battery voltage on Port 8.

#### 0x84 get device GPS status

	Device answers with it's current status on Port 4.

#### 0x85 get BME280 / BME680 sensor data

	Device answers with BME sensor data set on Port 7.

#### 0x86 get time/date

	Device answers with it's current time on Port 2:

	bytes 1..4 = time/date in UTC epoch seconds (LSB)
	byte 5 = time source & status, see below

		bits 0..3 time source
			0x00 = GPS
			0x01 = RTC
			0x02 = LORA
			0x03 = unsynched
			0x04 = set (source unknown)

		bits 4..7 esp32 sntp time status
			0x00 = SNTP_SYNC_STATUS_RESET
			0x01 = SNTP_SYNC_STATUS_COMPLETED
			0x02 = SNTP_SYNC_STATUS_IN_PROGRESS

#### 0x87 sync time/date

	Device synchronizes it's time/date by calling the preconfigured time source.

#### 0x88 set time/date

	bytes 1..4 = time/date to set in UTC epoch seconds (MSB, e.g. https://www.epochconverter.com/hex)