SLGatewayV2-API_Modbus_mapping

septembre 24, 2020 Modbus mapping - Sensing-Labs SLGateway
Example Device index = 12 (SLGateway GUI→ APIs → Modbus) = 0x0C
Device is a SenlabT
We want to get the last measure (temperature in degC ) and it timestamp
Function code to use : 0x04 Resource documentation HERE
Address to get last temperature measure : 0x0C46 and 0x0C47
(two 16-bits registers)
Address to get the timestamp of the last measures : 0x0C42 to 0x0C45
(four 16-bits registers)
Useful links (for dev):
How to convert measure (log value) ? 0x41c10000 ==> 24.125degC
HEX ===> IEEE754 32bits float
Big Endian (ABCD)
Online Hex to IEEE754 float conv. HERE
How to convert timestamp ? 0x0000016AA1CD9B78
==> 1557492767608
===> Fri,10 May 2019 13:39:19 GMT
HEX ==> decimal ==> human time
Online Epoch&Unix Time conv. HERE
Slave address 1
Port 502
Modbus Mode TCP/IP
COMMON static (SLGateway)              
Information Access Function
Code(s)
Start
Address
(HEX)
YY = device index
Size Data type Units Comment
SLGateway appEUI Read 04 0001 4 HEX (8B) none 4 HEX words
(ex : 0x70b3d580a0000000)
SLGateway version Read 04 0005 1 HEX (2B) none Major.minor (ex: 0x0204)
SLGateway current time Read/write 03, 16 0000 4 UINT_64 ms Timestamp (ms)
Can be write since version 2.4.0
Number of devices Read 04 0000 1 UINT_16 none -
List of devices Read 02 0001 1...255 BOOL none 1 if device declared
0 if not declared
position is the device number
               
COMMON dynamic (all devices)              
Device EUI (devEUI) Read 04 YY00 4 HEX (8B) none 4 HEX words
Device Firrware version Read 03 YY00 1 HEX (2B) none Major.minor (ex: 0x0103)
Application ID Read 03 YY01 4 ASCII (8B) none UTF-8 (ex : SenlabM)
deviceActivation Read 02 YY01 1 BOOL none 1 if device connected
Battery level Read 04 YY24 1 UINT_16 % 0xFFFF if no value
RSSI level Read 04 YY25 1 INT_16 dBm 0x7FFF if no value
SNR level Read 04 YY26 1 INT_16 dBm 0x7FFF if no value
               
SenlabT              
Log number Read 04 YY40 1 UINT_16 none Nb max = 24
(measure is valid only when log number > 0)
Log period Read 04 YY41 1 UINT_16 Minute -
Last log Timestamp Read 04 YY42 4 UINT_64 ms Timestamp (ms)
Temperature Log values
(first value is the last log)
Read 04 YY46 (first)
YY48 (2nd)
...
YY74 (max)
2..2*24 FLOAT_32 Ceclius
degrees
1 to 24 values with size 2 each
0x7FFFFFFF if no value
Important : only last value(s) are available (no history)
Temperature2 Log values
(first value is the last log)
Read 04 YY76 (first)
YY78 (2nd)
...
YYA4 (max)
2..2*24 FLOAT_32 Ceclius
degrees
1 to 24 values with size 2 each
0x7FFFFFFF if no value
Important : only last value(s) are available (no history)
               
SenlabM
(only "basic" and "datalog" modes)
             
Log number Read 04 YY40 1 UINT_16 none Nb max = 24
(measure is valid only when log number > 0)
Log period Read 04 YY41 1 UINT_16 Minute -
Last log Timestamp Read 04 YY42 4 UINT_64 ms Timestamp (ms)
raw_index Log values
(first value is the last log)
Read 04 YY46 (first)
YY48 (2nd)
...
YY74 (max)
2..2*24 UINT_32 Pulse number 1 to 24 values with size 2 each
0x7FFFFFFF if no value
Important : only last value(s) are available (no history)
Wirecut Read 04 YY76 1 UINT_16 none Wirecut detection status
(if activated)
Max interPulse Read 04 YY77 2 FLOAT_32 100 ms Maximum duration between 2 pulse detection since the last transmission
(if activated)
raw_index2 Log values
(first value is the last log)
Read 04 YY78 (first)
YY7A (2nd)
...
YYA6 (max)
2..2*24 UINT_32 Pulse number 1 to 24 values with size 2 each
0x7FFFFFFF if no value
Important : only last value(s) are available (no history)
               
SenlabH              
Log number Read 04 YY40 1 UINT_16 none Nb max = 24
(measure is valid only when log number > 0)
Log period Read 04 YY41 1 UINT_16 Minute -
Last log Timestamp Read 04 YY42 4 UINT_64 ms Timestamp (ms)
Temperature log values
(first value is the last log)
Read 04 YY46 (first)
YY48 (2nd)
...
YY74 (max)
2..2*24 FLOAT_32 Ceclius
degrees
1 to 24 values with size 2 each
0x7FFFFFFF if no value
Important : only last value(s) are available (no history)
Humidity log values
(first value is the last log)
Read 04 YY76 (first)
YY77 (2nd)
...
YY8D (max)
1..24 INT_16 % 1 to 24 values
Important : only last value(s) are available (no history)
               
SenlabA (4-20mA)              
Log number Read 04 YY40 1 UINT_16 none Nb max = 24
(measure is valid only when log number > 0)
Log period Read 04 YY41 1 UINT_16 Minute -
Last log Timestamp Read 04 YY42 4 UINT_64 ms Timestamp (ms)
Log values
(first value is the last log)
Read 04 YY46 (first)
YY48 (2nd)
...
YY74 (max)
2..2*24 FLOAT_32 mA 1 to 24 values with size 2 each
0x7FFFFFFF if no value
Important : only last value(s) are available (no history)
               
SenlabD              
state Timestamp Read 04 YY42 4 UINT_64 ms Timestamp (ms)
State value Read 04 YY46 2 UINT_32 none 0x7FFFFFFF if no value
00000000 if digital state is closed
00000001 if digital state is opened
               
SenlabP
(since version 2.4.2)
             
Log number Read 04 YY40 1 UINT_16 none Nb max = 24
(measure is valid only when log number > 0)
Log period Read 04 YY41 1 UINT_16 Minute -
Last log Timestamp Read 04 YY42 4 UINT_64 ms Timestamp (ms)
Log values
(first value is the last log)
Read 04 YY46 (first)
YY48 (2nd)
...
YY74 (max)
2..2*24 UINT_32 Number of detection 1 to 24 values with size 2 each
0x7FFFFFFF if no value
Important : only last value(s) are available (no history)
               
SenlabO
(since version 2.5.0)
             
Log number Read 04 YY40 1 UINT_16 none Nb max = 12
(measure is valid only when log number > 0)
Log period Read 04 YY41 1 UINT_16 Minute -
Last log Timestamp Read 04 YY42 4 UINT_64 ms Timestamp (ms)
Temperature log values
(first value is the last log)
Read 04 YY46 (first)
YY48 (2nd)
...
YY5C (max)
2..2*12 FLOAT_32 Ceclius
degrees
1 to 12 values with size 2 each
0x7FFFFFFF if no value
Important : only last value(s) are available (no history)
Luminosity log values
(first value is the last log)
Read 04 YY5E (first)
YY60 (2nd)
...
YY74 (max)
2..2*12 UINT_32 Lux 1 to 12 values with size 2 each
0x7FFFFFFF if no value
Important : only last value(s) are available (no history)
Humidity log values
(first value is the last log)
Read 04 YY76 (first)
YY77 (2nd)
...
YY81 (max)
1..12 INT_16 % 1 to 12 values
Important : only last value(s) are available (no history)
Presence log values
(first value is the last log)
Read 04 YY82 (first)
YY83 (2nd)
...
YY8D (max)
1..12 INT_16 none 1 to 12 values
Important : only last value(s) are available (no history)
Ratio log values
(first value is the last log)
Read 04 YY8E (first)
YY90 (2nd)
...
YYA4 (max)
2..2*12 UINT_32 none 1 to 12 values
Important : only last value(s) are available (no history)
               
Generic (raw payload)              
Byte length of payload Read/write 04, 16 YY40 1 UINT_16 none -
Payload port Read/write 04, 16 YY41 1 UINT_16 none -
Payload Timestamp Read/write 04, 16 YY42 4 UINT_64 ms Timestamp (ms)
Write function accepted, but no action done
Payload values Read/write 04, 16 YY46 26 HEX (52B) none Payload is concatenated up to 52 bytes with 0x00
Length of payload can be read with specific register
Important : only last payload is available (no history)
RESOURCE DOCUMENTATION
Data model structure            
Register tablel countain separated register areas to manage independently the gateway and data for each device:  
hx0000 to hx00FF are dedicated to the gateway data  
For each device YY (device index), a register range hxYY00 to hxYYFF is reserved  
  hx0000 --> hx00FF Gateway register area  
  hx0100 --> hx01FF Device 01 register area  
  hx0200 --> hx02FF Device 02 register area  
  ... ...  
  hxC800 --> hxC8FF Device 200 register area  
   
Supported Modbus functions  
The SLgateway Modbus supports the following Modbus functions, dependant from the register address (in decimal):
02 Read multiple discrete inputs (read n bits)
03 Read multiple holding registers (read n 16-bits registers)
04 Read multiple input registers (read n 16-bits registers)
16 Write multiple holding registers (write n 16-bits registers)
   
Resource format  
Except if mentioned, all device data are coded into one of the following format and processed as MSB first byte array.
INT_16 Signed integer value on 16 bits
UINT_16 Unsigned integer value on 16 bits
INT_32 Signed integer value on 32 bits
UINT_32 Unsigned integer value on 32 bits
UINT_64 Unsigned integer value on 64 bits
FLOAT_32 Real value (IEEE 754 floating-point "single format" bit layout)
BOOL boolean (0 is false, 1 is true) information on 1 bit
ASCII String in ASCII code. The number of character is specified.
When ASCII string are not full, they are completed with null bytes.
HEX String in hexadecimal format. The number of bytes is specified.
When Hexadecimal string are not full, they are completed with null bytes.
TIMESTAMPS Number of ms since the 1st jan of 1970 at 00h00 and the event on 64 bits.