Lobaro Pressure Sensor
Reading from the Lobaro Pressure Sensor using the Hybrid Gateway can be done by setting the following parameters in the configuration:
Paramter | Value | Comment |
---|---|---|
PlFmt | 5 | Sets the payload to a short format |
MbCmd | 0 0/5 * * * *:R,9600,8N1:010300020003 | Reads the Registers 2 to 5, the cron can be changed |
Sample upload from the Gateway:
0x00 | 0x00 0x07 | 0x00 0x03 | 0x02 0x11 |
---|---|---|---|
Header, see main documentation | Unit is mH2O | 3 decimals precision | Current Value |
The Value is transmitted as 16 bit signed int in Big Endian format with 3 decimals presicion.
The sample hex value of 0x0211 translates to 529 decimal. Considering the 3 decimals precision the value is 0,529 mH2O.
Sample Parser
Sample Parser
function signed(val, bits) { // max positive value possible for signed int with bits: var mx = Math.pow(2, bits-1); if (val < mx) { // is positive value, just return return val; } else { // is negative value, convert to neg: return val - (2 * mx); } } function int16_BE(bytes, idx) { bytes = bytes.slice(idx || 0); return signed(bytes[0] << 8 | bytes[1] << 0, 2*8); } function uint16_BE(bytes, idx) { bytes = bytes.slice(idx || 0); return bytes[0] << 8 | bytes[1] << 0; } /** * LoRaServer decoder function. */ function Decode(fPort, bytes) { // wrap TTN Decoder: return Decoder(bytes, fPort); } function Parse(input) { var data = bytes(atob(input.data)); var port = input.fPort; var fcnt = input.fCnt; var vals = {}; if( port == 20 ){ if( (uint16_BE(data, 1)==7) && (uint16_BE(data, 3)==3)){ if( int16_BE(data, 5)/10 < 0){ vals["mH2O"] = "Err" // Most propably not under water } vals["mH2O"] = int16_BE(data, 5)/1000; } else{ vals["mH2O"] = "Invalid configuration"; } } vals["port"] = port; vals["data"] = data; vals["fcnt"] = fcnt; var lastFcnt = Device.getProperty("lastFcnt"); vals["reset"] = fcnt <= lastFcnt; Device.setProperty("lastFcnt", fcnt); return vals; }