TECHNICAL REFERENCE MANUAL (TRM)
CMDTechnical Reference Manual (TRM)
Technical Reference Manual (TRM) for the YOBIIQ CMD series, analog input model CMD-L-0D-4I.
Product overview
The YOBIIQ CMD series connects digital signals, analog signals and serial equipment to remote monitoring and control over LoRaWAN. The series is a DIN-rail product family with ten configurations of digital and analog inputs and outputs and two serial models, see the CMD datasheet.
This manual documents firmware 1.0, which runs on the CMD-L-0D-4I (SKU 260039): four analog inputs, CH1 to CH4, and no outputs, supplied with 5 to 24 VDC. The other CMD configurations are not covered by this firmware.
Each analog input measures either a 0-10 V voltage signal or a 4-20 mA current loop. A selector switch per input (SW1 to SW4) connects the field signal to the voltage or to the current measuring circuit. The device measures both circuits of every input, reports both values, and detects from them which way each selector switch is set: a change is sent as an alarm uplink.
Every CMD-L-0D-4I has a LoRaWAN interface and a Bluetooth Low Energy (BLE) interface. Firmware 1.0 drives no LED and uses no button, see LEDs and Buttons.
How to use
Commissioning
Have your gateways online and the device registered with your LoRa Network Server (LNS) before you power the device: it starts joining as soon as it is powered.
Register the supplied DevEUI, AppEUI (JoinEUI) and AppKey with your LNS, then follow the instructions of your LoRaWAN network provider. Once the device is registered and powered, it joins the network without further action.
For stack-level join behavior and retry handling, see the YOBIIQ LoRaWAN Stack guide: Join Process.
The DevEUI, AppEUI (JoinEUI) and AppKey are provided by YOBIIQ to the registered purchasing party, and are available to the point of contact in our online environment (KiBi). If you are missing the details, contact your point of purchase or YOBIIQ support.
Before you rely on the measurements, set the selector switch of every input you use (SW1 to SW4) for the signal you connect, and check its detected position in Switch Position (0x0A00, 0x0B00, 0x0C00, 0x0D00), see Selector Switch Detection.
Wiring Schematics
When wiring the device make sure to follow all the precautions that are pointed out in the User Guide of the device. Request the approved CMD-L-0D-4I connection drawing from Yobiiq support.
Each analog input has two measuring circuits, and the selector switch of the input connects the field signal to one of them:
| Selector position | Signal | Measuring circuit |
|---|---|---|
| Voltage | 0-10 V | Resistor divider (27 kΩ / 3.3 kΩ) and low pass filter |
| Current | 4-20 mA | Fuse and 100 Ω sense resistor to ground, low pass filter |
Physical Interfaces
Analog Inputs CH1 to CH4
The four analog inputs are measured by two 16-bit analog-to-digital converters (ADCs), one for the four voltage circuits and one for the four current circuits.
| Circuit | Nominal range | Resolution | End of the measuring range |
|---|---|---|---|
| Voltage | 0-10 V | 0.574 mV | 18804 mV, the ADC saturates above it |
| Current | 4-20 mA | 0.625 µA | 20479 µA (about 20.48 mA), the ADC saturates above it |
A current above 20.48 mA, for example a 22 mA fault current, is reported as 20479 µA. The device has no over-range alarm. A voltage above 10 V is reported as measured up to 18804 mV; check the hardware documentation for the maximum voltage the input accepts.
The circuit that the selector switch does not use reads about 0. Near 0, the noise of the input can give small negative values.
Input Selector Switches SW1 to SW4
Each input has a selector switch: SW1 for CH1, SW2 for CH2, SW3 for CH3 and SW4 for CH4. It selects the voltage circuit (0-10 V) or the current circuit (4-20 mA) of the input. The firmware does not read the switch directly: it deduces its position from the two measurements of the input, see Selector Switch Detection.
LEDs and Buttons
The CMD-L-0D-4I has no LEDs and uses no buttons: the CMD-L-0D-4I has no local status indication and no local control. Read its state over BLE or LoRaWAN, for example Join Status (0xFF96) for the network connection.
Technical Operation
Device Startup
When power is supplied, the device starts in this order:
- It loads its configuration from its internal memory: the LoRaWAN settings, the switch thresholds and the periodic transmission configuration. At the very first start, it stores the factory values instead, see Registers and Periodic Transmissions.
- About one second later, it measures all the inputs once and evaluates the four selector switches. The positions found at startup do not send an alarm: they are the reference for the next changes.
- It starts the LoRaWAN join, see the stack guide's Join Process, then starts BLE advertising.
- From then on, it measures all the inputs and evaluates the selector switches at least every 30 seconds, see Selector Switch Detection.
- After each successful join, it sends its generic device information uplink on fPort 50, runs a network quality test and requests the network time, see the stack guide's Generic Device Information, Network Quality Test and Time synchronization. The CMD keeps the network quality test result internally: it does not show it and does not send it.
- The periodic transmissions start after the first time synchronization, see the stack guide's Sending measurement registers.
Normal Operation
The measurements and the selector switch detection work with or without a network connection. Uplinks are sent only while the device is joined.
The CMD does not support data retransmission: measurements from before a join, or from a loss of the network, are not sent later. See LoRaWAN Communication.
Analog Measurement
Each input CH1 to CH4 gives two measurements, one per circuit, and each measurement has two registers: the raw ADC code and the value calculated from it, see Analog Inputs.
| Input | Voltage (mV) | Current (µA) |
|---|---|---|
| CH1 | Input 1 Voltage (0x0101) | Input 1 Current (0x0501) |
| CH2 | Input 2 Voltage (0x0201) | Input 2 Current (0x0601) |
| CH3 | Input 3 Voltage (0x0301) | Input 3 Current (0x0701) |
| CH4 | Input 4 Voltage (0x0401) | Input 4 Current (0x0801) |
The calculated value is a whole number, rounded down:
- Voltage, in millivolts: the voltage at the ADC input times the divider ratio 9.182. A 10 V signal reads about 9999 mV, a 5 V signal about 4999 mV.
- Current, in microamperes: the voltage across the 100 Ω sense resistor divided by 100 Ω. A 4 mA loop reads about 4000 µA, a 20 mA loop about 20000 µA.
The raw value is the ADC code, 0 to 32767 for 0 to 2.048 V at the ADC input (62.5 µV per count).
When the inputs are measured:
- Every read of a Raw or Calculated register measures the input at that moment, over LoRaWAN, BLE or in a periodic uplink: the value is never an older sample. Reading a register of one circuit also measures the other circuit of the same input and updates the selector switch detection of that input, see Selector Switch Detection.
- Two reads of the same input, for example its Raw and its Calculated register, come from two measurements and can differ by the noise of the input.
- When an input cannot be measured, the read fails instead of returning an older value: the register is left out of the uplink or of the answer, see the stack guide's Device Parameter Reading.
- In the background, the device measures all the inputs at least every 30 seconds for the selector switch detection.
Selector Switch Detection
The device tells for each input whether its selector switch is set to voltage or to current, by comparing the two measurements of the input to two thresholds of that input:
| Voltage measurement | Current measurement | Switch Position |
|---|---|---|
| At or above the Voltage Threshold | Below the Current Threshold | 1, Voltage |
| Below the Voltage Threshold | At or above the Current Threshold | 2, Current |
| Both at or above, or both below, their threshold | 0, Unknown |
| Input | Switch Position | Voltage Threshold | Current Threshold |
|---|---|---|---|
| CH1 | 0x0A00 | 0x0A01 | 0x0A02 |
| CH2 | 0x0B00 | 0x0B01 | 0x0B02 |
| CH3 | 0x0C00 | 0x0C01 | 0x0C02 |
| CH4 | 0x0D00 | 0x0D01 | 0x0D02 |
The factory thresholds are 50 mV and 3500 µA for every input. With them:
- an input set to voltage reads Voltage while its signal is 50 mV or more, and Unknown below (for example a 0 V signal);
- an input set to current reads Current while its loop carries 3.5 mA or more, and Unknown below (for example an open loop);
- an input with nothing connected reads Unknown.
Each threshold can be changed per input by a register write downlink or over BLE: the Voltage Threshold from 0 to 1000 mV, the Current Threshold from 0 to 4000 µA. A new threshold is saved and applies as soon as the command is processed: the device then evaluates all the switches again at once.
When the position is evaluated:
- At startup, then at least every 30 seconds: both measurements of each input are taken one after the other, and the position of the input is evaluated from them.
- At every read of a Raw or Calculated register of the input, see Analog Measurement.
- A read of a Switch Position register returns the last evaluated position. When that position is Unknown, the device first measures the input again.
- When one of the two measurements of an input fails, its position is not evaluated and keeps its previous value.
Switch position alarm: every change of position, to or from Unknown included, sends an alarm uplink on fPort 11 with the new position and the two measurements of the input, see Alarms. A change found by a register read is sent by the next background evaluation, within 30 seconds. There is no hysteresis: a signal that stays close to a threshold can change position, and send an alarm, at every evaluation. To avoid it, move the threshold away from the usual signal level.
Registers
The CMD exposes its measurements and settings as 16-bit registers. They are read and written over LoRaWAN, with register write downlinks on fPort 50 and register read downlinks on fPort 100 (see the stack guide's Downlinks), and over BLE. The Generic Data and LoRaWAN Data registers are common to the products of the YOBIIQ LoRaWAN Stack and are listed here with their CMD values; the Device Data registers are specific to the CMD.
Notes:
- Access is given for LoRaWAN:
Rread,Wwrite,RWread and write,-not accessible over LoRaWAN. BLE has the same access unless the description says otherwise. - Range gives the values accepted on write; a command with another value is rejected (answer
01) and changes nothing. A command that writes a read only register is rejected the same way. Provisioned values are set in production for each device. - Types:
boolandu8take 1 byte,u16andi162 bytes,u32andi324 bytes,u8[N]N bytes, and astringis a length byte followed by the characters, see the stack guide's Payload Structure.i16andi32are signed (two's complement). Multi-byte numbers are big endian.
Generic Data
The CMD supports the generic registers of the YOBIIQ LoRaWAN Stack; see its Generic Device Data Registers for their shared behavior and its Device Naming and Location Context for the naming registers. The table gives each register with its CMD value.
| Address | Name | Type | Access | Range | Default | Unit | Description |
|---|---|---|---|---|---|---|---|
| Identification | |||||||
0xFF65 | Manufacturer | string | R | - | Provisioned (YOBIIQ B.V.) | - | Device manufacturer name. |
0xFF66 | OEM | string | R | - | Provisioned (YOBIIQ B.V.) | - | Original Equipment Manufacturer information. |
0xFF67 | Device Model | string | R | - | Provisioned | - | Model designation of the device. |
0xFF68 | Serial Number | u32 | R | - | Provisioned | - | Unique hardware serial number. |
0xFF69 | Firmware Version | u16 | R | - | 1.0 (bytes 01 00) | - | Running firmware version: major x 256 + minor, so version 1.0 reads 256 (bytes 01 00). |
0xFF6A | Hardware Version | u16 | R | - | Provisioned | - | Hardware version: major x 256 + minor, so version 1.0 reads 256 (bytes 01 00). |
0xFF34 | Device Name | string | RW | 0 to 15 characters | None | - | User-assigned name for the device. |
| Location | |||||||
0xFF32 | Building Name | string | RW | 0 to 15 characters | None | - | Name or ID of the building. |
0xFF33 | Building Room | string | RW | 0 to 15 characters | None | - | Room or location identifier. |
| System | |||||||
0xFF64 | Device Status | u8 | R | - | 0 | - | Operation mode (0: Normal, 1: Special, 2-255: Custom); always 0 on the CMD. |
0xFF6B | Power Status | u8 | R | - | Provisioned (1) | - | Power source: 1, external power (the 5 to 24 VDC supply). The CMD has no battery. |
0xFF6C | Battery Voltage | u8 | R | - | 0 | V | Always 0: the CMD has no battery. |
0xFF6D | Battery Percentage | u8 | R | - | 0 | % | Always 0: the CMD has no battery. |
0xFF6E | Password | string | - | 0 to 15 characters | Provisioned | - | Access password, written over BLE only and never read back. |
0xFF6F | Device Restart | u8 | W | 1 | - | - | Write 1: the device restarts 10 seconds after the command. The switch positions found at the restart send no alarm, see Device Startup. |
| Telemetry | |||||||
0xFF7A | Internal Temp | i16 | R | - | 0 | °C | Always 0 in firmware 1.0: the CMD does not measure its internal temperature. |
0xFF7B | Internal Humidity | u8 | R | - | 0 | % | Always 0 in firmware 1.0: the CMD does not measure its internal humidity. |
0xFF82 | Ambient Temp | i16 | R | - | 0 | °C | Always 0: the CMD has no ambient sensor. |
0xFF83 | Ambient Humidity | u8 | R | - | 0 | % | Always 0: the CMD has no ambient sensor. |
0xFF78 | Temp Sensor Error | bool | R | - | 0 | - | Always 0 in firmware 1.0. |
0xFF79 | Temp Alarms | u32 | R | - | 0 | - | Always 0 in firmware 1.0. |
Device Data
The CMD-L-0D-4I has two groups of product registers: the Analog Inputs, one Raw and one Calculated register per measuring circuit of each input, and the Selector Switches, one Switch Position and two thresholds per input. The same registers are available over LoRaWAN and over BLE, with the same access.
Analog Inputs
Every read of a Raw or Calculated register measures the input at that moment, see Analog Measurement. These registers are measurements: they have no factory value and are not saved.
| Address | Name | Type | Access | Range | Default | Unit | Description |
|---|---|---|---|---|---|---|---|
| Voltage circuits (0-10 V) | |||||||
0x0100 | Input 1 Voltage Raw | i16 | R | - | - | - | ADC code of the voltage circuit of input CH1, 0 to 32767, 62.5 µV per count at the ADC input. |
0x0101 | Input 1 Voltage | i32 | R | - | - | mV | Voltage at input CH1, resolution 0.574 mV. About 0 while the selector switch of CH1 is set to current. |
0x0200 | Input 2 Voltage Raw | i16 | R | - | - | - | ADC code of the voltage circuit of input CH2, 0 to 32767, 62.5 µV per count at the ADC input. |
0x0201 | Input 2 Voltage | i32 | R | - | - | mV | Voltage at input CH2, resolution 0.574 mV. About 0 while the selector switch of CH2 is set to current. |
0x0300 | Input 3 Voltage Raw | i16 | R | - | - | - | ADC code of the voltage circuit of input CH3, 0 to 32767, 62.5 µV per count at the ADC input. |
0x0301 | Input 3 Voltage | i32 | R | - | - | mV | Voltage at input CH3, resolution 0.574 mV. About 0 while the selector switch of CH3 is set to current. |
0x0400 | Input 4 Voltage Raw | i16 | R | - | - | - | ADC code of the voltage circuit of input CH4, 0 to 32767, 62.5 µV per count at the ADC input. |
0x0401 | Input 4 Voltage | i32 | R | - | - | mV | Voltage at input CH4, resolution 0.574 mV. About 0 while the selector switch of CH4 is set to current. |
| Current circuits (4-20 mA) | |||||||
0x0500 | Input 1 Current Raw | i16 | R | - | - | - | ADC code of the current circuit of input CH1, 0 to 32767, 62.5 µV per count at the ADC input. |
0x0501 | Input 1 Current | i32 | R | - | - | µA | Loop current at input CH1, resolution 0.625 µA, at most 20479 µA. About 0 while the selector switch of CH1 is set to voltage. |
0x0600 | Input 2 Current Raw | i16 | R | - | - | - | ADC code of the current circuit of input CH2, 0 to 32767, 62.5 µV per count at the ADC input. |
0x0601 | Input 2 Current | i32 | R | - | - | µA | Loop current at input CH2, resolution 0.625 µA, at most 20479 µA. About 0 while the selector switch of CH2 is set to voltage. |
0x0700 | Input 3 Current Raw | i16 | R | - | - | - | ADC code of the current circuit of input CH3, 0 to 32767, 62.5 µV per count at the ADC input. |
0x0701 | Input 3 Current | i32 | R | - | - | µA | Loop current at input CH3, resolution 0.625 µA, at most 20479 µA. About 0 while the selector switch of CH3 is set to voltage. |
0x0800 | Input 4 Current Raw | i16 | R | - | - | - | ADC code of the current circuit of input CH4, 0 to 32767, 62.5 µV per count at the ADC input. |
0x0801 | Input 4 Current | i32 | R | - | - | µA | Loop current at input CH4, resolution 0.625 µA, at most 20479 µA. About 0 while the selector switch of CH4 is set to voltage. |
Selector Switches
The thresholds are saved and keep their value after a restart. Reading them does not measure the inputs.
| Address | Name | Type | Access | Range | Default | Unit | Description |
|---|---|---|---|---|---|---|---|
| Input 1 (CH1) | |||||||
0x0A00 | Input 1 Switch Position | u8 | R | - | - | - | Detected position of selector switch SW1: 0 Unknown, 1 Voltage, 2 Current, see Selector Switch Detection. |
0x0A01 | Input 1 Voltage Threshold | i32 | RW | 0 to 1000 | 50 | mV | Input 1 Voltage (0x0101) at or above this value counts as a voltage signal. |
0x0A02 | Input 1 Current Threshold | i32 | RW | 0 to 4000 | 3500 | µA | Input 1 Current (0x0501) at or above this value counts as a current signal. |
| Input 2 (CH2) | |||||||
0x0B00 | Input 2 Switch Position | u8 | R | - | - | - | Detected position of selector switch SW2: 0 Unknown, 1 Voltage, 2 Current, see Selector Switch Detection. |
0x0B01 | Input 2 Voltage Threshold | i32 | RW | 0 to 1000 | 50 | mV | Input 2 Voltage (0x0201) at or above this value counts as a voltage signal. |
0x0B02 | Input 2 Current Threshold | i32 | RW | 0 to 4000 | 3500 | µA | Input 2 Current (0x0601) at or above this value counts as a current signal. |
| Input 3 (CH3) | |||||||
0x0C00 | Input 3 Switch Position | u8 | R | - | - | - | Detected position of selector switch SW3: 0 Unknown, 1 Voltage, 2 Current, see Selector Switch Detection. |
0x0C01 | Input 3 Voltage Threshold | i32 | RW | 0 to 1000 | 50 | mV | Input 3 Voltage (0x0301) at or above this value counts as a voltage signal. |
0x0C02 | Input 3 Current Threshold | i32 | RW | 0 to 4000 | 3500 | µA | Input 3 Current (0x0701) at or above this value counts as a current signal. |
| Input 4 (CH4) | |||||||
0x0D00 | Input 4 Switch Position | u8 | R | - | - | - | Detected position of selector switch SW4: 0 Unknown, 1 Voltage, 2 Current, see Selector Switch Detection. |
0x0D01 | Input 4 Voltage Threshold | i32 | RW | 0 to 1000 | 50 | mV | Input 4 Voltage (0x0401) at or above this value counts as a voltage signal. |
0x0D02 | Input 4 Current Threshold | i32 | RW | 0 to 4000 | 3500 | µA | Input 4 Current (0x0801) at or above this value counts as a current signal. |
Switch Position
Switch Position (0x0A00, 0x0B00, 0x0C00, 0x0D00) holds one byte:
| Value | Label | Meaning |
|---|---|---|
| 0 | UNKNOWN | Both measurements of the input are below their threshold, or both are at or above it. Also the value before the first evaluation. |
| 1 | VOLTAGE | The voltage measurement is at or above the Voltage Threshold and the current measurement is below the Current Threshold. |
| 2 | CURRENT | The current measurement is at or above the Current Threshold and the voltage measurement is below the Voltage Threshold. |
LoRaWAN Data
The CMD uses the YOBIIQ LoRaWAN Stack. Refer to its LoRaWAN Data Registers section for shared LoRaWAN parameter definitions. The table gives each register with its CMD value.
| Address | Name | Type | Access | Range | Default | Unit | Description |
|---|---|---|---|---|---|---|---|
0xFF96 | Join Status | bool | R | - | - | - | Network connection status (1: joined). |
0xFF97 | Radio Module | string | R | - | Provisioned (SX1262) | - | Integrated radio transceiver model. |
0xFF98 | Region | u8 | R | - | 1 | - | LoRaWAN region: 1, EU863-870, fixed by the firmware of the CMD. |
0xFF99 | LoRaWAN Version | u8[3] | R | - | 01 00 04 | - | LoRaWAN specification version (major, minor, patch): 1.0.4. |
0xFF9D | App Port | u8 | R | - | 50 | - | FPort of the register write downlinks, see Command Framework. |
0xFF9E | Join Type | u8 | R | - | 1 | - | Activation method: 1, OTAA. |
0xFF95 | LoRaWAN Reset | u8 | W | 1 | - | - | Write 1: 10 seconds after the command, the device leaves the network and joins again with its stored keys. |
0xFF9A | Device EUI | u8[8] | - | - | Provisioned | - | LoRaWAN DevEUI, read and written over BLE only. A new value is used from the next LoRaWAN Reset or restart. |
0xFF9B | App EUI | u8[8] | - | - | Provisioned | - | LoRaWAN AppEUI/JoinEUI, read and written over BLE only. A new value is used from the next LoRaWAN Reset or restart. |
0xFF9C | App Key | u8[16] | - | - | Provisioned | - | LoRaWAN AppKey, read and written over BLE only. A new value is used from the next LoRaWAN Reset or restart. |
0xFF9F | Device Class | u8 | RW | 0 to 2 | Provisioned (2) | - | LoRaWAN class (0: A, 1: B, 2: C). The CMD is delivered in Class C, so it receives downlinks at any time. Applies at the next join. |
0xFFA0 | ADR Mode | bool | RW | 0, 1 | 1 | - | Adaptive Data Rate (1: enabled). Applies at once when joined, otherwise at the next join. |
0xFFA1 | Spreading Factor | u8 | RW | 0 to 6 | 0 | - | Data rate used when ADR is disabled. Applies at once when joined, otherwise at the next join. |
0xFFA2 | ADR Profile | u8 | RW | 0 to 2 | 0 | - | ADR optimization strategy. Applies at once when joined, otherwise at the next join. |
0xFFA3 | Radio Mode | u8 | RW | 0 to 2 | 0 | - | Radio mode selection; only 0 (LoRaWAN) is used, iQ D2D is not available. |
0xFFA4 | Join Attempts | u8 | RW | 0 to 255 | 0 | - | Maximum number of join requests after a restart or a lost network, 0: no limit. Applies at the next restart, see Join Process. |
0xFFA5 | Link Check TF | u16 | RW | 1 to 65535 | 1440 | min | Link check interval; values from 60 to 34566 are used. Applies at the next restart, see Join Process. |
0xFFA6 | Retransmission | bool | RW | 0, 1 | 1 | - | Stored, no effect: the CMD does not support data retransmission, see LoRaWAN Communication. |
0xFFA7 | Comm Alarm | u8 | R | - | 0 | - | LoRaWAN communication alarm: 1 from the loss of the network until the next successful join, 0 otherwise, see Communication Watchdog. |
LoRaWAN
LoRaWAN Communication
For stack communication behavior, including OTAA joins and device-class operation, see the YOBIIQ LoRaWAN Stack guide. Supported radio regions are listed in its LoRaWAN Region reference.
CMD specifics:
- Device class: Class C at delivery, so the CMD receives downlinks at any time.
- Region: EU863-870, fixed by the firmware.
- Data retransmission: not supported. Retransmission (
0xFFA6) has no effect, and measurements from before a join or during a loss of the network are not sent later. - Network quality test: runs after each join. The CMD does not show the result and does not send it, and a test cannot be requested by downlink.
- Link status display: the CMD has no display, and firmware 1.0 shows the link status on no LED. Read Join Status (
0xFF96) instead. - Loss of the network: the measurements and the selector switch detection go on. A switch position alarm that cannot be sent is kept, see Alarms.
Payloads
Use the stack guide's Payload Structure as the shared framing reference. The CMD measurements use the i32 type: a 4-byte signed number, big endian.
Uplinks
See the stack guide's Uplinks section for generic device information and alarm messages. The CMD sends:
| fPort | Uplink |
|---|---|
| 1 to 10 | Periodic transmissions, see Periodic Transmissions |
| 11 | Switch position alarms, see Alarms |
| 50 | Generic device information after each join; answers to register write downlinks |
| 100 | Answers to register read downlinks |
Periodic Transmissions
The periodic transmissions are configured by downlink as described in the stack guide's Periodic Transmission Configuration: up to 10 fPorts (1 to 10), each configured by a downlink on its own fPort, with an interval in minutes, confirmed or unconfirmed uplinks, and up to 10 registers. Each Raw or Calculated register in the list is measured when the uplink is built, see Analog Measurement.
Factory configuration: fPort 1 is active and sends every 5 minutes, unconfirmed, the eight calculated values: Input 1 to 4 Voltage (0x0101, 0x0201, 0x0301, 0x0401), then Input 1 to 4 Current (0x0501, 0x0601, 0x0701, 0x0801). fPorts 2 to 10 are not configured.
The factory uplink is 54 bytes long. At the lowest data rates (SF10 to SF12 in EU863-870) an uplink carries at most 51 bytes, so the last record, Input 4 Current (0x0801), goes in a second uplink of 12 bytes on fPort 1, sent right after the first with the same FF01 timestamp. The registers that do not fit in one uplink always go in the next uplinks of the fPort, see the stack guide's Periodic Transmissions.
Example of a factory periodic uplink, with CH1 set to voltage at 5 V, CH2 and CH4 set to current at 12 mA and 4 mA, and nothing connected to CH3:
FF016ABCF9C0010100001387020100000000030100000000040100000000050100000000060100002EE0070100000000080100000FA0
// FF01 6ABCF9C0 -> timestamp: 2026-09-30 12:00:00 UTC
// 0101 00001387 -> Input 1 Voltage: 4999 mV
// 0201 00000000 -> Input 2 Voltage: 0 mV
// 0301 00000000 -> Input 3 Voltage: 0 mV
// 0401 00000000 -> Input 4 Voltage: 0 mV
// 0501 00000000 -> Input 1 Current: 0 µA
// 0601 00002EE0 -> Input 2 Current: 12000 µA = 12 mA
// 0701 00000000 -> Input 3 Current: 0 µA
// 0801 00000FA0 -> Input 4 Current: 4000 µA = 4 mA
Example of a configuration: to transmit every 15 minutes over fPort 2 an unconfirmed uplink containing the switch position and both measurements of input CH1, send the following payload on fPort 2:
FF14000FFF1500FF1601FF17060A0001010501
// FF14 000F -> interval: 15 minutes
// FF15 00 -> unconfirmed uplinks
// FF16 01 -> uplink on fPort 2 active
// FF17 06 -> 3 registers (6 bytes):
// 0A00 -> Input 1 Switch Position
// 0101 -> Input 1 Voltage
// 0501 -> Input 1 Current
The device answers 00 on fPort 2.
Alarms
The CMD sends a switch position alarm on fPort 11, unconfirmed and ahead of the periodic uplinks (see the stack guide's Alarms), whenever the detected position of a selector switch changes, to or from Unknown included, see Selector Switch Detection. The positions found at startup send no alarm.
The alarm holds the FF01 timestamp record (UTC time of the evaluation that found the change, 0 when the device has no network time yet) and, for each input whose position changed, three records:
| Bytes | Record |
|---|---|
| 2 + 1 | Switch Position of the input (0x0A00, 0x0B00, 0x0C00, 0x0D00): the new position |
| 2 + 4 | Voltage of the input (0x0101, 0x0201, 0x0301, 0x0401): the value the position was decided from |
| 2 + 4 | Current of the input (0x0501, 0x0601, 0x0701, 0x0801): the value the position was decided from |
Example: the selector switch of CH2 is set to current, with a 12 mA loop connected:
FF016ABCF9C00B0002020100000000060100002EE0
// FF01 6ABCF9C0 -> time of the change: 2026-09-30 12:00:00 UTC
// 0B00 02 -> Input 2 Switch Position: 2, Current
// 0201 00000000 -> Input 2 Voltage: 0 mV
// 0601 00002EE0 -> Input 2 Current: 12000 µA = 12 mA
An alarm uplink takes 6 bytes plus 15 bytes per input. At the lowest data rates (51 bytes) it carries at most 3 inputs.
Alarms that cannot be sent at once (the device is not joined, the previous alarm uplink is still being sent, or the input does not fit in the uplink) are kept and sent with the next alarm uplink, that is at the next position change of any input. A kept alarm holds the position and the values of the change it reports, while the FF01 timestamp of the uplink is the time of the new change. A later change of the same input replaces the kept alarm of that input. An alarm uplink that the device has queued but could not transmit (for example when a firmware update multicast session starts) is not repeated: its alarms are lost. The alarm uplinks are unconfirmed, so a transmitted alarm can also be lost on the way. To know the current positions at any time, read the Switch Position registers or add them to a periodic transmission.
Downlinks
See the stack guide's Downlinks section for command framing and application ports. The CMD commands are register writes on fPort 50 (the thresholds under Selector Switches); the device answers 00 when the command is applied and 01 when it is rejected, for example for a threshold out of range or a write to a measurement register.
| Command | Registers | Example |
|---|---|---|
| Set the voltage threshold of an input | Voltage Threshold (0x0A01, 0x0B01, 0x0C01, 0x0D01) | 0A01000000C8 on fPort 50: CH1, 200 mV |
| Set the current threshold of an input | Current Threshold (0x0A02, 0x0B02, 0x0C02, 0x0D02) | 0B0200000BB8 on fPort 50: CH2, 3000 µA |
| Read the measurements and the position of an input | Switch Position, Voltage and Current of the input | FFCC0A0001010501 on fPort 100: CH1 |
Example: to read the switch position and both measurements of CH1, send on fPort 100:
FFCC0A0001010501
// FFCC -> read request
// 0A00 -> Input 1 Switch Position
// 0101 -> Input 1 Voltage
// 0501 -> Input 1 Current
The device answers 00 on fPort 100, then, with CH1 set to voltage at 5 V:
0A0001010100001387050100000000
// 0A00 01 -> Input 1 Switch Position: 1, Voltage
// 0101 00001387 -> Input 1 Voltage: 4999 mV
// 0501 00000000 -> Input 1 Current: 0 µA
Release notes
Firmware version 1.0
Release date: to be confirmed.
- First firmware for the CMD-L-0D-4I: four 0-10 V or 4-20 mA analog inputs, selector switch detection with alarm uplinks, LoRaWAN and BLE register access.
Disposal of waste (WEEE)
Do not dispose of this electrical and electronic equipment with unsorted municipal waste or household rubbish. At the end of its service life, send the equipment to a designated collection point for separate treatment and recovery, in accordance with the WEEE rules applicable in your country.