
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: A
- Modbus as well available
- Size: tbd
- Weight: tbd
Documents
Ordering Info
- tbd
Adding the Device to TTN
- The
JoinEUI,App EUIand theDevEUIshould be on a sticker on the cardboard box. - Before a device can communicate via “The Things Network” we have to add it to an application.
- Create a new application
- Under
End devicesin the application click(+) Register end device - Under
Input methodselectEnter end device specifics manually - Under
Frequency planselectEurope 863-870 Mhz (SF9 for RX2 - recommended) - Under
LoRaWAN versionselect1.0.2, Regional Parameters versionRP001 Regional Parameters 1.0.2 - Under
JoinEUIenter theApp EUIfrom the App and pressConfirm - Enter as well the
DevEUIand theAppKeyfrom the App - Set an end-device name
- Press
Register end device - Add the payload formatter from below, either to the device itself or if all devices in the app are from the same type, to the application
- Plug in the device or restart LoRa in Communication settings
- Now the device should join the network and you can see the incoming telegrams in the
Live datasection
Optional Settings
Change TDC (Transmit Time Interval resp. Keep Alive Interval)
tbd —
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;
}