Академический Документы
Профессиональный Документы
Культура Документы
What is ?
A turnkey IoT Solution to monitor &
ensure effective water consumption
Who is ?
Brand from
– Pioneer in LoRaWAN IoT Solutions
IoT Solution Overview
Commercial
Buildings
akvodrops
IoT Dash board
House /
Apartments
Industries
Benefits of akvodrops
Revision Details
Version Date Details
V0 18/Nov/2019 Initial Version
Ultrasonic Water meter
akvodrops is committed to deliver highest grade hardware to ensure accurate and reliable
measurements. ADW series is a cost effective and reliable product for water meter solutions
Features
Power Supply
Parameter Description
Display unit options M3, L
Display LCD 8-digit
Volume 0.001m³
Time to LCD off 3 min.
Installation procedure
Requirements for the installation environment
ADW is an ultrasonic water meter has been designed for indoor installation with
ambient temperatures from 5~55°C.
The meter must not be under any mechanical stress when installing in the pipe.
The meter must be protected against pressure shocks in the pipe.
Protection class IP68 allows long-term submergence, provided that all cable unions
have been correctly mounted and that the plastic cover has been properly fastened.
All control cables must be drawn separately and not parallel to e.g. power cables or
other cables with the risk of inducing electromagnetic interference. There must be a
distance of min. 25cm between signal cables and other installations.
Before Installation
Prior to installation of the flow sensor, the pipe shall be thoroughly flushed out, and any dirt,
stone alike items must be removed from the pipe. Cavitation in the system must be avoided. If a
risk of frost exists, empty the system and, if necessary, remove the meter. If the water is soiled,
fit the strainer in the pipe before the meter.
Open the shut-off valves carefully and check the installation for leakage. While the piping system
is operating, check whether the volume display correctly and the temperatures display
corresponding with the actual temperatures (see the display information).
When the response thresholds are exceeded and the flow rate is positive, the volume is
summated.
Make the segment test, in order to displays all display segments for test purposes.
The operating hours are counted from the initial connection of the battery. The date is
incremented daily. As a standard, the meter is delivered with the local time, or destination time
if required.
Error and Warning
The meter constantly performs self-diagnosis and can display various faults. Visual indication
on the LCD display in the event of a warning.
Uplink
Example Data: (Port Number: 25)
1. First Uplink : 83 0A 81 0A 00 41 37 00 39 00 74 00 – Contains Meter Address
Note: if the meter is not valve control, then Status Byte 1 will have “00”.
Status Byte 2 Explanation:
Bit 0 - Battery Error - 0 & Normal - 1
Bit 1 - Empty pipe error - 0 & Normal - 1
Bit 2 - Reverse flow Error - 0 & Normal - 1
Bit 3 - Over Range Error - 0 & Normal - 1
Bit 4 - Temperature Error - 0 & Normal - 1
Bit 5 - EE Error - 0 & Normal - 1
Bit 6 - Transducer IN Error - 0 & Normal - 1
Bit 7 - Transducer OUT Error - 0 & Normal - 1
Field Explanation
D0 - Battery Error 0: Normal
1: Abnormal
D1 - Empty pipe error 0: Normal
1: Abnormal
D2 - Reverse flow Error 0: Normal
1: Abnormal
D3 - Over Range Error 0: Normal
1: Abnormal
D4- Temperature Error 0: Normal
1: Abnormal
D5 - EE Error 0: Normal
1: Abnormal
D6 - Transducer IN Error 0: Normal
1: Abnormal
D7 - Transducer OUT Error 0: Normal
1: Abnormal
Payload Format for TTN
function Decoder(bytes, port) {
var Bat, Battery, Code, Len, ID, Count, Unit, concat1, concat2, raw, output, Data1, Data2, Data3,
Data4, Data5, Data6, Data7, Status, Err, Concat, Concat1, Concat2, Concat3, Concat4, Concat5,
Concat6, Downlink;
if(bytes[0] == "131")
{
if(bytes[0] == "131"){Code = bytes[0].toString(16);}
if(bytes[1] == "10"){Len = "Length of the Data Frame : " + bytes[1];}
if(bytes[2] == "129" & bytes[3] == "10"){ID = "Read Meter Serial Number";}
Count = "Uplink Data Counter : " + bytes[4];
Data1 = bytes[5];
Data2 = bytes[6];
Data3 = bytes[7];
Data4 = bytes[8];
Data5 = bytes[9];
Data6 = bytes[10];
Data7 = bytes[11];
if(Data1 < 10){Data1 = '0' + Data1.toString(16);}else{Data1 = Data1.toString(16);}
if(Data2 < 10){Data2 = '0' + Data2.toString(16);}else{Data2 = Data2.toString(16);}
if(Data3 < 10){Data3 = '0' + Data3.toString(16);}else{Data3 = Data3.toString(16);}
if(Data4 < 10){Data4 = '0' + Data4.toString(16);}else{Data4 = Data4.toString(16);}
if(Data5 < 10){Data5 = '0' + Data5.toString(16);}else{Data5 = Data5.toString(16);}
if(Data6 < 10){Data6 = '0' + Data6.toString(16);}else{Data6 = Data6.toString(16);}
if(Data7 < 10){Data7 = '0' + Data7.toString(16);}else{Data7 = Data7.toString(16);}
Concat1 = Data7.concat(Data6);
Concat2 = Data5.concat(Data4);
Concat3 = Data3.concat(Data2);
Concat4 = Concat1.concat(Concat2);
Concat5 = Concat3.concat(Data1);
Concat = Concat4.concat(Concat5);
return {
Command_Code:Code,
Data_Length:Len,
Data_Type:ID,
Count:Count,
Meter_Addr:Concat
};
}
if(bytes[0] == "129")
{
if(bytes[0] == "129"){Code = bytes[0].toString(16);}
if(bytes[1] == "10"){Len = "Length of the Data Frame : " + bytes[1];}
if(bytes[2] == "144" & bytes[3] == "31"){ID = "Read Meter Cumulative Value";}
Count = "Uplink Data Counter : " + bytes[4];
if(bytes[5] == "43"){Unit = "Cubic Meter";}
a = bytes[6];
b = bytes[7];
c = bytes[8];
d = bytes[9];
if(a < 10){a ='0' + a.toString(16);}else{a = a.toString(16);}
if(b < 10){b ='0' + b.toString(16);}else{b = b.toString(16);}
if(c < 10){c ='0' + c.toString(16);}else{c = c.toString(16);}
if(d < 10){d ='0' + d.toString(16);}else{d = d.toString(16);}
concat1 = d.concat(c);
concat2 = b.concat(a);
raw = concat1.concat(concat2);
output = raw/1000;
if(bytes[10] == "01"){Status = "Valve Control : Available";}else{Status = "Valve Control : Not
Available";}
if(bytes[11] == "8"){Err = "Transducer Outlet Error";}
if(bytes[11] == "7"){Err = "Transducer Inlet Error";}
if(bytes[11] == "6"){Err = "EEPROM Error";}
if(bytes[11] == "5"){Err = "Temperature Alert";}
if(bytes[11] == "4"){Err = "Over Range/Flow Alert";}
if(bytes[11] == "3"){Err = "Reverse Flow Alert";}
if(bytes[11] == "2"){Err = "Empty Pipe Alert";}
if(bytes[11] == "1"){Err = "Battery Alert";}
if(bytes[11] == "0"){Err = "No Error";}
Bat = (bytes[12] - 1)/253;
Battery = (Bat*100).toFixed(2);
return {
Command_Code:Code,
Data_Length:Len,
Data_Type:ID,
Count:Count,
Unit:Unit,
Water_Flow_in_Cubic_Meter:output,
Valve_Status:Status,
Error_Status:Err,
Battery:Battery,
Raw_Data:raw
};
}
Downlink
1. Read Meter Address - 03 03 81 0A 00
Example Data Explanation
03 Control code
03 Data Length (Calculated from Data Id to Count
Number)
81 Data Identification
0A Data Identification
00 Count Number – Not necessary to update this
field
Note: This command is only for the meter which has valve control.
For Example:
If the valve state is Closed already and now you are giving Valve ON command
then it's uplink response will be 84 05 A0 17 00 01 00 and
If the valve state is Open and now I'm giving Valve OFF command then it's uplink
response will be 84 05 A0 17 00 00 00.
Note: If the meter doesn’t have valve control & if downlink command is given, it will
return “810A901F00FFFFFFFFFFFFFFFF”
4. Changing Sampling Interval - A2 05 00 00 00 01 00
Example Data Explanation
A2 Control code
05 Data Length (Calculated from Data Id to
Sampling Interval Byte)
00 Data Identification
00 Data Identification
00 Count Number – Not necessary to update this
field
01 Sampling Interval Byte
00 Sampling Interval Byte