Modbus management of sensors
Modbus parameters
Modbus address
Modbus-the address of the Wiren Board devices is easy to determine — it is printed on the sticker (the address is in decimal format). The new address of the device is written by the command WRITE_SINGLE_REGISTER to the storage register (holding register) with the address 128 (0x80). For details on how to determine (if the address has been changed) or change the Modbus address of the module, see Define and change the Modbus address of Wirenboard devices.
Modbus commands supported by the device
The Wirenboard sensors support all major Modbus commands. Read more here: Register reading and writing function codes.
Holding Registers
Register/ address | Type | Read/ write | default or error Value | Format | Purpose | Supported in | From version
insertions | ||||
---|---|---|---|---|---|---|---|---|---|---|---|
WB-MS (model code) | WB-MS v2 (model code) | WB-MSW | WB-MSW2 | WB-MSW V. 3 | |||||||
0 | input | R | 0x7FFF | °C × 10 (signed) | Temperature with built-in sensor | T | - | - | + | + | |
1 | input | R |
|
relative humidity with built-in sensor | H | - | + | + | + | ||
2 | input | R | - | LC | "(register is not used in WB-MSW sensors, registers 9 and 10 instead)" Illumination from built-in sensor |
L | Lux | - | - | - | |
3 | input | R | - | dB × 100 | Noise level multiplied by 100 | S | - | + | S | S | |
4 | input | R | 0x7FFF | °C × 100 (signed) | Temperature with built-in sensor | + | + | - | - | + | 4.2 |
5 | input | R | - | %RH × 100 (signed) | Relative humidity with built-in sensor | + | + | - | - | + | 4.2 |
6 | input | R | 0x7FFF | °C × 16 (signed) | Temperature from external sensor | D | + | - | - | - | |
7 | input | R | 0x7FFF | °C × 16 (signed) | Temperature from external sensor | D | + | - | - | - | |
8 | input | R | 0xFFFF | PPM | CO2 concentration | - | - | After | C | ||
9-10 | input | R | LC | The illumination, multiplied by 100 (9 - high-order, 10 — LSB luminance values) | - | - | + | L | |||
11 | input | R | 0xFFFF | PPM | Air quality | - | VOC | - | - | + | |
88 | holding | RW | 0 | ppm (400-1500) | Manual calibration of CO2 sensor. For calibration, write down here the current CO2 concentration measured by another instrument | - | - | - | C | C | 3.12 |
89 | holding | RW | 0xFF | days' | Cycle time for co sensor self-calibration algorithm (ABC) | - | - | - | C | C | 3.12 |
90 | holding | RW | 20 (200 ms) | × 10 ms | light averaging Time |
|
- | - | - | - | |
91 | holding | RW | 20 (200 ms) | × 10 ms | Noise averaging time | S | - | + | S | S | |
95 | holding | RW | 1 | 1 or 0 | CO2 sensor (ABC) auto-calibration to atmospheric CO2 | - | - | - | After | C | |
96 | holding | R | 2000 / 5000 | ppm | (available from firmware version 3.5.0) CO2 concentration measurement Range. Valid values: 2000, 5000, 10000. | - | - | - | C | C | 3.5.0 |
91 | holding | RW | 20 (200 ms) | × 10 ms | Время усреднения шума | S | - | + | S | S | |
92 | holding | RW | 0 | x0.0625 | Служебный регистр HOLD_REG_SPL_RAW_OFFSET - сдвиг значения АЦП | - | - | S | S | S | 4.9.0 |
93 | holding | RW | 0 | x0.1dB | Служебный регистр HOLD_REG_SPL_OFFSET - поправка к значению уровня шума | - | - | S | S | S | 4.9.0 |
95 | holding | RW | 1 | 1 or 0 | Режим автокалибровки датчика CO2 (ABC) на атмосферный уровень CO2 | - | - | - | С | C | |
96 | holding | R | 2000 / 5000 | ppm | (доступно с версии прошивки 3.5.0) Диапазон измерения концентрации CO2. Допустимые значения: 2000, 5000, 10000. | - | - | - | C | C | 3.5.0 |
97 | holding | RW | 0 — 10 | c | Period between flashes of signal LEDs | - | - | - | - | + | 3.13.0 |
98 | holding | RW | 0 — 50 | MS | Led flash duration | - | - | - | - | + | 3.13.0 |
99 | holding | RW | 16 | 1 = 0.0625 C | (available from firmware version 3.10.0) suspicious value Filter for 1-Wire sensors (85.000 C, 127.937 C). The values are discarded if the previous value differs from the suspicious value by more than * 0.0625 C. Write 0 to disable the filter. | D | + | - | - | - | 3.10.0 |
100 | input | R | Служебный регистр HOLD_REG_SPL_RAW_INT | - | - | S | S | S | |||
101 | input | R | Service register HOLD_REG_TH_READS | all | |||||||
102 | input | R | Service register HOLD_REG_TH_ERRORS | all | |||||||
103 | holding | RW | Служебный регистр HOLD_REG_ILLUMINANCE_MODE | + | + | + | - | - | |||
104-105 | input | R | 32-bit unsigned int | uptime counter in seconds | all | ||||||
106 | input | R | Service register INPUT_REG_SGPC3_BASELINE | - | - | - | - | + | |||
107 | input | R | Service register INPUT_REG_SGPC3_RAW_SIGNAL | - | - | - | - | + | |||
108 | input | R | 0xFFFF | Sgpc3 VERSION service register | - | - | - | - | + | 4.2 | |
110 | holding | RW | 96 | baud rate / 100 | RS-485 port speed, divided by 100. Permissible speeds: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 (Configure RS-485 communication parameters for Wiren Board Modbus devices) |
all | >3.1.0 | ||||
111 | holding | RW | 0 | configure the RS-485 port parity bit. Valid values: 0 - no parity bit (none), 1 - odd (odd), 2 - even (even) | all | ||||||
112 | holding | RW | 2 | number of stop bits of RS-485 port. Valid values: 1, 2 | all | ||||||
120 (0x78) | holding | RW | 0 | non-0 | writing to the register causes the module to restart without saving state | all | |||||
121 (0x79) | input | R | - | mV | current supply voltage of the module | all | |||||
128 (0x80) | holding | RW | 1 | Modbus device address | all | ||||||
129 (0x81) | holding | RW | 0 | 0 or 1 | Go to bootloader mode | all | 4.5.0 | ||||
200-206 | input | R | see Device signature | signature | all | ||||||
220-241 | input | | | | _date__ _time__ | firmware build date | all | |||||||
245 | holding | RW | 0 | °C × 100 (signed) | Self-heating temperature compensation for temperature and humidity sensor (value is subtracted from measured temperature) | + | - | - | - | + | 4.2 |
250-269 | input | | | / string, null-terminated | firmware version | all | |||||||
270-271 | input | R | 32-bit unsigned int | unique identifier (S/N) | all | ||||||
280 | input | R | Maximum value of motion sensor with ADC | - | - | - | - | + | |||
281 | input | R | Value of the motion sensor with ADC | - | - | - | - | + | |||
282 | holding | RW | 10 | s | The width of the time window for calculating the maximum average value of the motion sensor (from 1 to 60 seconds) | - | - | - | - | + | |
283 | input | R | Current average value of movement in conventional units | - | - | - | - | + |
Coils
Registers related to IR control are described in WB-MSx_Consumer_IR_Manual/en.
Starting address | Quantity | Purpose | In modifications | From firmware version |
---|---|---|---|---|
0 | 1 | Enable buzzer (buzzer) | WB-MSW2, WB-v MSW.3 | |
1 | 1 | Forced calibration of the built-in CO2 sensor. Turn on after 20 minutes of operation at a CO2 level of 400 ppm | WB-MSW2 | |
2 | 1 | Turn on the heating (heater) in the temperature and humidity sensor chip HDC1080 | WB-MS (in the 2017 series), WB-MSW2, WB-MSW V. 3 | 3.2.0 |
3 | 1 | The inclusion of a CO2 sensor | WB-MSW V. 3 | 4.1.0 |
10 | 1 | Green led on | WB-MSW V. 3 | |
11 | 1 | Enable red led | WB-v MSW.3 |
Device signature
The 6-byte module signature is stored at address 200. The signature is unique for each model of Wiren Board devices and allows to identify the model by Modbus:
Module | Signature |
---|---|
WB-MS | WBMS,'0x00','0x00' |
WB-MSW | WBMSW,'0x00' |
WB-MSW2 | WBMSW2 |
WB-MSW v.3 | WBMSW3 |
To get the signature of a device you need to run command READ_HOLDING_REGISTERS at 200 (length of 6 registers). Writing to this area of memory is not supported, and error 3 is returned when attempting to write to an invalid location. Empty spaces in the signature text are clogged with the value 0x00. Starting from register 220, the firmware build date is recorded, in the format numberx00timex00 as a string (example: 'Jan 27 2017 17:01:13'). The length of the record is 21 registers.
Command-line device management
The Wiren Board controller software includes modbus_client utility to work with devices connected to the RS-485 outputs, via Modbus Protocol, the detailed description of the command is on the page Modbus client. Access to the command line is described in SSH.
Register reading example
Let's check whether it is true that we are connected to the module of the desired type. (Module wb-mqtt-serial needs to be stopped). At address 200, a unique signature of 6 registers is stored. Let's read 6 registers, starting with the address 200, and convert the received hexadecimal answer into a character string:
echo -e `modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 \
-a1 -t0x03 -r200 -c 6 | \
grep Data | sed -e 's/0x00/\\\x/g' -e 's/Data://' -e 's/\s//g'`
As a result of the command we receive string WBMS. The WB-MS module in the example has Modbus address 1.