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 EUI
and theDevEUI
should 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 devices
in the application click(+) Register end device
- Under
Input method
selectEnter end device specifics manually
- Under
Frequency plan
selectEurope 863-870 Mhz (SF9 for RX2 - recommended)
- Under
LoRaWAN version
select1.0.2
, Regional Parameters versionRP001 Regional Parameters 1.0.2
- Under
JoinEUI
enter theApp EUI
from the App and pressConfirm
- Enter as well the
DevEUI
and theAppKey
from 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 data
section
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"] = 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;
}