Skip to content

Commit

Permalink
Update fludia pulse decoder (TheThingsNetwork#780)
Browse files Browse the repository at this point in the history
Co-authored-by: Jaime Trinidad <[email protected]>
  • Loading branch information
rflud and Jaime-Trinidad authored May 8, 2024
1 parent 939ced1 commit 7b7f6e7
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 15 deletions.
18 changes: 9 additions & 9 deletions vendor/fludia/fm432e-10-15mn-decode.js
Original file line number Diff line number Diff line change
Expand Up @@ -174,16 +174,16 @@ function decode_T2(payload){

function decode_T2_adjustable_step(payload){
var data = {};
data.firmware_version = payload[1];
data.time_step = payload[2];
data.nb_values = payload[3];
data.redundancy = payload[4];
data.number_of_starts = payload[5];
data.param_id = payload[6];
data.low_battery = payload[7];
data.meter_type = payload[10];
data.number_of_starts = payload[1];
data.param_id = payload[4];
data.firmware_version = payload[5];
data.meter_type = payload[6];
if(data.meter_type == 0) data.meter_type = "Electromechanical (Position A)"
if(data.meter_type == 1) data.meter_type = "Electronic (Position B)"
data.index = (payload[11] & 0xFF) << 24 | (payload[12] & 0xFF) << 16 | (payload[13] & 0xFF) << 8 | (payload[14] & 0xFF);
data.low_battery = payload[7];
data.index = (payload[8] & 0xFF) << 24 | (payload[9] & 0xFF) << 16 | (payload[10] & 0xFF) << 8 | (payload[11] & 0xFF);
data.time_step = payload[12];
data.nb_values = payload[13];
data.redundancy = payload[14];
return data;
}
57 changes: 51 additions & 6 deletions vendor/fludia/fm432p-10-15mn-decode.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
const PAYLOAD_TYPE = {
T1_10MN : {header: 0x2b, size: 20/*in bytes*/, name: "T1_10MN"},
T1_15MN : {header: 0x2c, size: 20/*in bytes*/, name: "T1_15MN"},
T1_1H : {header: 0x2d, size: 20/*in bytes*/, name: "T1_1H"},
T2 : {header: 0x29, size: 10/*in bytes*/, name: "T2"},
START : {header: 0x01, size: 3/*in bytes*/, name: "START"}
T1_10MN : {header: 0x2b, size: 20/*in bytes*/, name: "T1_10MN"},
T1_15MN : {header: 0x2c, size: 20/*in bytes*/, name: "T1_15MN"},
T1_1H : {header: 0x2d, size: 20/*in bytes*/, name: "T1_1H"},
T1_ADJUSTABLE_STEP : {header: 0x6b, size_min: 8/*in bytes*/, size_max: 46/*in bytes*/, name: "T1_ADJUSTABLE_STEP"},
T2 : {header: 0x29, size: 10/*in bytes*/, name: "T2"},
T2_ADJUSTABLE_STEP : {header: 0x6c, size: 11/*in bytes*/, name: "T2_ADJUSTABLE_STEP"},
START : {header: 0x01, size: 3/*in bytes*/, name: "START"}
}

//Main function Decoder
Expand All @@ -17,7 +19,9 @@ function decodeUplink(input){
meter_type : "Pulse",
firmware_version: null,
values: null,
step: null
step: null,
nb_values: null,
redundancy: null
},
warnings: [],
errors: []
Expand All @@ -37,11 +41,24 @@ function decodeUplink(input){
var data = decode_T1(input.bytes, decoded.data.time_step);
decoded.data.index = data.index;
decoded.data.increments = data.increments;
}else if(decoded.data.message_type == PAYLOAD_TYPE.T1_ADJUSTABLE_STEP.name){
var data = decode_T1_adjustable_step(input.bytes);
decoded.data.time_step = data.time_step;
decoded.data.index = data.index;
decoded.data.increments = data.increments;
decoded.data.powers = data.powers;
}else if(decoded.data.message_type == PAYLOAD_TYPE.T2.name){
var data = decode_T2(input.bytes);
decoded.data.index = data.index;
decoded.data.firmware_version = data.firmware_version;
decoded.data.time_step = data.time_step;
}else if(decoded.data.message_type == PAYLOAD_TYPE.T2_ADJUSTABLE_STEP.name){
var data = decode_T2_adjustable_step(input.bytes);
decoded.data.index = data.index;
decoded.data.firmware_version = data.firmware_version;
decoded.data.time_step = data.time_step;
decoded.data.nb_values = data.nb_values;
decoded.data.redundancy = data.redundancy;
}
decoded.data.step = decoded.data.time_step;
decoded.data.values = decoded.data.increments;
Expand All @@ -60,9 +77,15 @@ function find_message_type(payload){
case PAYLOAD_TYPE.T1_1H.header:
if(payload.length == PAYLOAD_TYPE.T1_1H.size) return PAYLOAD_TYPE.T1_1H.name
break;
case PAYLOAD_TYPE.T1_ADJUSTABLE_STEP.header:
if(payload.length >= PAYLOAD_TYPE.T1_ADJUSTABLE_STEP.size_min && payload.length <= PAYLOAD_TYPE.T1_ADJUSTABLE_STEP.size_max) return PAYLOAD_TYPE.T1_ADJUSTABLE_STEP.name
break;
case PAYLOAD_TYPE.T2.header:
if(payload.length == PAYLOAD_TYPE.T2.size) return PAYLOAD_TYPE.T2.name
break;
case PAYLOAD_TYPE.T2_ADJUSTABLE_STEP.header:
if(payload.length == PAYLOAD_TYPE.T2_ADJUSTABLE_STEP.size) return PAYLOAD_TYPE.T2_ADJUSTABLE_STEP.name
break;
case PAYLOAD_TYPE.START.header:
if(payload.length == PAYLOAD_TYPE.START.size) return PAYLOAD_TYPE.START.name
break;
Expand All @@ -80,10 +103,32 @@ function decode_T1(payload,time_step){
return data
}

function decode_T1_adjustable_step(payload){
var data = {};
data.time_step = payload[1];
data.index = (payload[2] & 0xFF) << 24 | (payload[3] & 0xFF) << 16 | (payload[4] & 0xFF) << 8 | (payload[5] & 0xFF);
data.increments = []
var nb_values_in_payload = (payload.length-6)/2
for(i=0;i<nb_values_in_payload;i++){
data.increments.push((payload[6+2*i] & 0xFF) << 8 | (payload[7+2*i] & 0xFF))
}
return data
}

function decode_T2(payload){
var data = {};
data.index = (payload[4] & 0xFF) << 24 | (payload[5] & 0xFF) << 16 | (payload[6] & 0xFF) << 8 | (payload[7] & 0xFF);
data.firmware_version = String.fromCharCode(payload[1])+"."+String.fromCharCode(payload[2])+"."+String.fromCharCode(payload[3]);
data.time_step = payload[9];
return data;
}

function decode_T2_adjustable_step(payload){
var data = {};
data.firmware_version = payload[1]+"."+payload[2]+"."+payload[3];
data.index = (payload[4] & 0xFF) << 24 | (payload[5] & 0xFF) << 16 | (payload[6] & 0xFF) << 8 | (payload[7] & 0xFF);
data.time_step = payload[8];
data.nb_values = payload[9];
data.redundancy = payload[10];
return data;
}

0 comments on commit 7b7f6e7

Please sign in to comment.