
pFlow - E3R
The E3R is a LoRaWAN Ultrasonic Heat Flow Meter.
Table of contents
Specifications
- indoor device
- Price ca. CHF 350.- (03.06.2025)
- Built-in sensors
- Water Flow, [m3/h]
- Pipe size range: DN20,DN25,DN32,DN40,DN50,DN65,DN80
- Power Supply: 10-36 VDC/500mA
- LoRaWAN version: 1.0.2
- LoRaWAN device class: C
- Modbus as well available
Documents
Ordering Info
- tbd
Settings (mandatory!)
- On the device, go to
Device Settings / 3. Communication / 4. Lora USCand set it to868100000 Hz- you can enter the
Device Settingsby pressing the button with the three lines on the device
- you can enter the
- Make shure, that in ttn
Device Class Cis configured underNetwork layer - Reset Lora (in
Device Settings / 3. Communication / 8. Reset Lora) - Mount the device on the pipe
- use a lot of ultrasonic contact gel on the ultrasonic contacts
- mount as well the temperature sensors with thermal paste
- Set the pipe Diameter, Wall Thickness and Pipe Material (in
Device Settings / 1. Pipe Parameter)- the thickness could also be measured with a separate ultrasonic thickness sensor
- Stop the water flow in the hydraulic circuit and make a zero set (in
Device Settings / 5. Select Setting / 4. Reset Zero) - Start the water flow, done
- If possible (recommended):
- Make a paralell measurement with a high quality ultrasonic flow meter
- Calculate the correction factor and set it in the device (in
Device Settings / 6. Calibration / 1. Scale Factor)
Payload Decoder
function decodeUplink(input) {
var bytes = input.bytes;
var fPort = input.fPort;
var decoded = {};
// Uplink payload decoding
decoded.uplink = readUplinkInfo(bytes);
return {
data: decoded
};
}
function readUplinkInfo(bytes) {
var uplink = {};
uplink["volumeFlow_m3perh_abs"] = readUInt32(0, bytes) / 100;
uplink["volume_m3_inc"] = readUInt32(4, bytes) / 100;
uplink["energy_kWh_inc@heating"] = readUInt32(13,bytes) /100;
uplink["energy_kWh_inc@cooling"] = readUInt32(19,bytes) / 100;
uplink["temperature_degrC_abs@return"] = readUInt16(11,bytes) / 100;
uplink["temperature_degrC_abs@flow"] = readUInt16(17,bytes) / 100;
uplink["velocity_mpers_abs"] = readUInt16(8, bytes) / 100;
uplink["signalQuality_perc_abs"] = readUInt8(10, bytes);
return uplink;
}
// helper functions
function readUInt32(index, bytes) {
var value = (bytes[index] << 24 & 0xff000000) | (bytes[index + 1] << 16 & 0x00ff0000) | (bytes[index + 2] << 8 & 0x0000ff00) | (bytes[index + 3] & 0x000000ff);
return value & 0xffffffff;
}
function readUInt16(index, bytes) {
var value = ((bytes[index] << 8) & 0xff00) | ((bytes[index + 1]) & 0x00ff);
return value & 0xffff;
}
function readUInt8(index, bytes) {
var value = ((bytes[index]) & 0xff);
return value & 0xff;
}