// Décodeur LoRaWAN officiel : Flash'O - Smart Metering (WATTECO) // Source : https://github.com/TheThingsNetwork/lorawan-devices/blob/master/vendor/watteco/flasho.js // The Things Network Device Repository, fichier publié par le constructeur, distribué sans modification. // Format : decodeUplink(input) (TTN v3 / ChirpStack v4). Hébergé par smartbuildings.fr. "use strict";function _readOnlyError(e){throw new TypeError('"'+e+'" is read-only')}function _defineProperties(e,t){for(var a=0;a14?e.getNextSample(10):a>0?function(e,t,a){return e.getNextSample(10,a)+t+Math.pow(2,a)-1}(e,t,a):t}function s(e,t){var a=e.getNextSample(t);return 12===t?function(e){var t=2147483648&e?-1:1,a=(e>>23&255)-127,r=8388607&e;if(128===a)return t*(r?Number.NaN:Number.POSITIVE_INFINITY);if(-127===a){if(0===r)return 0*t;a=-126,r/=1<<22}else r=(r|1<<23)/(1<<23);return t*r*Math.pow(2,a)}(a):a}function d(e,t,a,r,n){var i=e.getNextSample(6,n);return 0===a?function(e,t,a,r){return e>=Math.pow(2,r-1)?e*t+a:(e+1-Math.pow(2,r))*t+a}(i,r,t,n):1===a?(i+Math.pow(2,n)-1)*r+t:t-(i+(Math.pow(2,n)-1))*r}Math.trunc=Math.trunc||function(e){return isNaN(e)?NaN:e>0?Math.floor(e):Math.ceil(e)},e.exports={normalisation_batch:function(e){for(var s=e.date,c=function(e,s,c,l){var _=function(){for(var e=[],t=0;t<16;)e.push({codingType:0,codingTable:0,resolution:null,uncompressSamples:[]}),t+=1;return{batch_counter:0,batch_relative_timestamp:0,series:e}}(),u=function(e){function r(e,t,a){var r=t,n=a-1;if(8*e.length0;)e[r>>3]&1<<(7&r)&&(o|=1<0&&(s=8);o>0;){for(var d=0;s>0;){var c=n>>3;this.byteArray[c]&1<<(7&n)&&(i|=1<<8*(o-1)+d),s--,d++,n+=1}o--,s=8}if((3==e||5==e||7==e||9==e)&&i&1<=2;)t.push(parseInt(e.substring(0,2),16)),e=e.substring(2,e.length);return t}(c)),p=function(e){for(var t=e.toString(2);t.length<8;)t="0"+t;return{isCommonTimestamp:parseInt(t[t.length-2],2),hasSample:!parseInt(t[t.length-3],2),batch_req:parseInt(t[t.length-4],2),nb_of_type_measure:parseInt(t.substring(0,4),2)}}(u.getNextSample(4));_.batch_counter=u.getNextSample(4,3),u.getNextSample(4,1);var f=function(e,t,a,o,s){for(var d=0,c=0,l=0;l0?n.push(t.getNextSample(10,d)+c+Math.pow(2,d)-1):n.push(c)}else n.push(t.getNextSample(10));i=n[s]}return{timestampCommon:n,lastTimestamp:i}}(e,t,s,a),_=l.timestampCommon,u=l.lastTimestamp,p=0;p0)y.data.value=d(t,h,e.series[m].codingType,r[m].resol,g);else{if(f){f=0;continue}y.data.value=h}}else y.data.value=t.getNextSample(r[m].sampletype);y.data_relative_timestamp=_[v],e.series[m].uncompressSamples.push(y)}}return u}(e,t,a,r,s,c):function(e,t,a,r,i,s){for(var c={},l=0;lr&&(r=v.data_relative_timestamp),(g=t.getNextBifromHi(e.series[_].codingTable))<=14){var y=e.series[_].uncompressSamples[e.series[_].uncompressSamples.length-1].data.value;v.data.value=g>0?d(t,y,e.series[_].codingType,a[_].resol,g):y}else v.data.value=t.getNextSample(a[_].sampletype);e.series[_].uncompressSamples.push(v)}}return r}(e,t,r,i,s,c)}(_,u,v,s,m,p,e)),_.batch_relative_timestamp=i(u,m),function(e,t,a){var r={batch_counter:e.batch_counter,batch_relative_timestamp:e.batch_relative_timestamp};return a&&(r.batch_absolute_timestamp=a),r.dataset=e.series.reduce((function(r,n,i){return r.concat(n.uncompressSamples.map((function(r){var n,o,s,d={data_relative_timestamp:r.data_relative_timestamp,data:{value:t[i].divide?r.data.value/t[i].divide:r.data.value,label:t[i].taglbl}};return t[i].lblname&&(d.data.label_name=t[i].lblname),a&&(d.data_absolute_timestamp=(n=a,o=e.batch_relative_timestamp,s=r.data_relative_timestamp,new Date(new Date(n).getTime()-1e3*(o-s)).toISOString())),d})))}),[]),r}(_,s,l)}(e.batch1,e.batch2,e.payload,s),l=[],_=0;_4)throw new Error("Unsupported Size");return 1===t&&(128&e)>0?e-=256:2===t&&(32768&e)>0?e-=65536:3===t&&(8388608&e)>0?e-=16777216:4===t&&(2147483648&e)>0&&(e-=4294967296),e},Bytes2Float32:function(e){var t=2147483648&e?-1:1,a=(e>>23&255)-127,r=8388607&e;if(128===a)return t*(r?Number.NaN:Number.POSITIVE_INFINITY);if(-127===a){if(0===r)return 0;a=-126,r/=1<<23}else r=(r|1<<23)/(1<<23);return t*r*Math.pow(2,a)},BytesToInt64:function(e,t,a,r){void 0===r&&(r=!1);var n,i,o="U"!=a.substr(0,1),s=parseInt(a.substr(1,2),10)/8,d=s;r?(n=-1,i=t+s-1):(n=1,i=t);for(var c=0,l=i;d>0;l+=n,d--)c=(c<<8)+e[l];return o&&s<8&&128&e[i]&&(c-=1<<8*s),c},decimalToHex:function(e,t){var a=e.toString(16).toUpperCase();for(t=null!=t?t:2;a.lengthnew Date(n[t].date))&&(n[t]={value:a,date:r})}}));var i={};for(var o in a)a.hasOwnProperty(o)&&(i[o]=a[o]);for(var s in n)n.hasOwnProperty(s)&&!i.hasOwnProperty(s)&&(i[s]=n[s].value);return i}e.exports={watteco_decodeUplink:function(e,t,a){e.bytes,e.fPort;var o=e.recvTime;try{var s=r.normalisation_standard(e,a),d=s.payload;if("batch"!==s.type)return{data:i(s.data),warnings:s.warning};var c={batch1:t[0],batch2:t[1],payload:d,date:o};try{return{data:i(n.normalisation_batch(c)),warnings:[]}}catch(e){return{errors:e.message,warnings:[]}}}catch(e){return{errors:e.message,warnings:[]}}}}},907:function(e,t,a){var r=a(839),n=r.UintToInt,i=r.Bytes2Float32,o=r.BytesToInt64,s=r.decimalToHex,d=r.zeroPad,c=(r.BytesToHexStr,function(){function e(t){var a;return _classCallCheck(this,e),(a=_callSuper(this,e,[t])).name="ValidationError",a}return _inherits(e,_wrapNativeSuper(Error)),_createClass(e)}()),l={16:{name:"boolean",size:1},8:{name:"general8",size:1},9:{name:"general16",size:2},10:{name:"general24",size:3},11:{name:"general32",size:4},24:{name:"bitmap8",size:1},25:{name:"bitmap16",size:2},32:{name:"uint8",size:1},33:{name:"uint16",size:2},34:{name:"uint24",size:3},35:{name:"uint32",size:4},40:{name:"int8",size:1},41:{name:"int16",size:2},43:{name:"int32",size:4},48:{name:"enum8",size:1},66:{name:"char string",size:1},65:{name:"bytes string",size:1},67:{name:"long bytes string",size:2},76:{name:"structured ordered sequence",size:2},57:{name:"single",size:4}},_={32778:{0:{0:{divider:1,function_type:"int",name:"positive_active_energy",size:4},1:{divider:1,function_type:"int",name:"negative_active_energy",size:4},2:{divider:1,function_type:"int",name:"positive_reactive_energy",size:4},3:{divider:1,function_type:"int",name:"negative_reactive_energy",size:4},4:{divider:1,function_type:"int",name:"positive_active_power",size:4},5:{divider:1,function_type:"int",name:"negative_active_power",size:4},6:{divider:1,function_type:"int",name:"positive_reactive_power",size:4},7:{divider:1,function_type:"int",name:"negative_reactive_power",size:4}}},32784:{0:{0:{divider:1,function_type:"int",name:"active_energy_a",size:4},1:{divider:1,function_type:"int",name:"reactive_energy_a",size:4},2:{divider:1,function_type:"int",name:"active_energy_b",size:4},3:{divider:1,function_type:"int",name:"reactive_energy_b",size:4},4:{divider:1,function_type:"int",name:"active_energy_c",size:4},5:{divider:1,function_type:"int",name:"reactive_energy_c",size:4},6:{divider:1,function_type:"int",name:"active_energy_abc",size:4},7:{divider:1,function_type:"int",name:"reactive_energy_abc",size:4}},1:{0:{divider:1,function_type:"int",name:"active_power_a",size:4},1:{divider:1,function_type:"int",name:"reactive_power_a",size:4},2:{divider:1,function_type:"int",name:"active_power_b",size:4},3:{divider:1,function_type:"int",name:"reactive_power_b",size:4},4:{divider:1,function_type:"int",name:"active_power_c",size:4},5:{divider:1,function_type:"int",name:"reactive_power_c",size:4},6:{divider:1,function_type:"int",name:"active_power_abc",size:4},7:{divider:1,function_type:"int",name:"reactive_power_abc",size:4}}},32779:{0:{0:{divider:10,function_type:"int",name:"Vrms",size:2},1:{divider:10,function_type:"int",name:"Irms",size:2},2:{divider:1,function_type:"int",name:"angle",size:2}}},32781:{0:{0:{divider:10,function_type:"int",name:"Vrms_a",size:2},1:{divider:10,function_type:"int",name:"Irms_a",size:2},2:{divider:1,function_type:"int",name:"angle_a",size:2},3:{divider:10,function_type:"int",name:"Vrms_b",size:2},4:{divider:10,function_type:"int",name:"Irms_b",size:2},5:{divider:1,function_type:"int",name:"angle_b",size:2},6:{divider:10,function_type:"int",name:"Vrms_c",size:2},7:{divider:10,function_type:"int",name:"Irms_c",size:2},8:{divider:1,function_type:"int",name:"angle_c",size:2}}},32850:{0:{0:{divider:1e3,function_type:"int",name:"frequency",size:2},1:{divider:1e3,function_type:"int",name:"frequency_min",size:2},2:{divider:1e3,function_type:"int",name:"frequency_max",size:2},3:{divider:10,function_type:"int",name:"Vrms",size:2},4:{divider:10,function_type:"int",name:"Vrms_min",size:2},5:{divider:10,function_type:"int",name:"Vrms_max",size:2},6:{divider:10,function_type:"int",name:"Vpeak",size:2},7:{divider:10,function_type:"int",name:"Vpeak_min",size:2},8:{divider:10,function_type:"int",name:"Vpeak_max",size:2},9:{divider:1,function_type:"int",name:"over_voltage",size:2},10:{divider:1,function_type:"int",name:"sag_voltage",size:2}}},32773:{0:{0:{divider:1,function_type:"none",name:"pin_state_1",size:1},1:{divider:1,function_type:"none",name:"pin_state_2",size:1},2:{divider:1,function_type:"none",name:"pin_state_3",size:1},3:{divider:1,function_type:"none",name:"pin_state_4",size:1},4:{divider:1,function_type:"none",name:"pin_state_5",size:1},5:{divider:1,function_type:"none",name:"pin_state_6",size:1},6:{divider:1,function_type:"none",name:"pin_state_7",size:1},7:{divider:1,function_type:"none",name:"pin_state_8",size:1},8:{divider:1,function_type:"none",name:"pin_state_9",size:1},9:{divider:1,function_type:"none",name:"pin_state_10",size:1}}},80:{6:{0:{divider:1e3,function_type:"none",name:"power_modes",size:2},1:{divider:1e3,function_type:"none",name:"current_power_source",size:2},2:{divider:1e3,function_type:"none",name:"constant_power",size:2},3:{divider:1e3,function_type:"none",name:"rechargeable_battery",size:2},4:{divider:1e3,function_type:"none",name:"disposable_battery",size:2},5:{divider:1e3,function_type:"none",name:"solar_harvesting",size:2},6:{divider:1e3,function_type:"none",name:"TIC_harvesting",size:2}}}};function u(e){var t="",a=e.toString(2);return t+=d(a,8)}function p(e,t,a,r,o,s,d,c,u,p){if(138===e||10==e){var f=l[d],m=u,v=f.size,g=f.name;void 0===m&&(m="single"===g?"float":"int8"===g||"int16"===g||"int32"===g?"int":"none");var y=function(e,t,a,r,o,s,d,c,l){var u={reportCauses:[],causesMessages:[]};138===e&&u.causesMessages.push("alarm triggered");var p=o;if(p>=r.length)return u;var f=!1,m=3&(r[o]>>=4);if(2==m)f=!0;else if(1!=m)throw new Error("Alarm decoding: Unexpected cause type. (ReportParams byte = ".concat(r[o],")"));if(++p>=r.length)throw new Error("Alarm decoding: Unexpected end of causes.)");function v(e,t,a){if(p+t-1>=r.length)throw new Error("Alarm decoding: Unexpected end of data while reading value.");for(var o=0,s=0;s=r.length)throw new Error("Alarm decoding: Unexpected end of data before reading CSD.");var y=r[p++];g.criterionIndex=7&y;var h=y>>3&3;g.mode=1===h?"delta":2===h?"threshold":"unused",g.hasFallen=!!(32&y),g.hasExceeded=!!(64&y),g.isAlarm=!!(128&y);var b=void 0,z=void 0,w=void 0,x=void 0,S=void 0,N=void 0,I=void 0,U=g.hasExceeded&&g.hasFallen?"exceed&fall":g.hasExceeded?"exceed":g.hasFallen?"fall":"",T=null;if(f){if(p>=r.length)throw new Error("Alarm decoding: Unexpected end of data before reading FI.");var P=s,O=d,C=c;if(g.fieldIndex=0,null!=l&&!0===l&&(T=r[p++],g.fieldIndex=T,_[t]&&_[t][a]&&_[t][a][T])){var E=_[t][a][T];P=E.function_type||s,O=E.size||d,C=E.divider||c,N=E.name||"FieldUndef !"}b=v(P,O,C),"threshold"===g.mode&&(z=v(P,O,C))}if("threshold"===g.mode&&f){if(p>=r.length)throw new Error("Alarm decoding: Unexpected end of data before reading Occ.");var M=r[p++];if(w=M,M>0&&128&M){if(p+3>=r.length)throw new Error("Alarm decoding: Invalid OccH or OccL read.");x=r[p++]<<8|r[p++],S=r[p++]<<8|r[p++]}}u.reportCauses.push(g),f?(I="threshold"===g.mode?void 0!==x?"cause:{alarm:".concat(g.isAlarm,", criterion_index: ").concat(g.criterionIndex,", mode: threshold, crossing: ").concat(U,", value: ").concat(b,", gap: ").concat(z,", occurences_up: ").concat(x,", occurences_down: ").concat(S):"cause:{alarm:".concat(g.isAlarm,", criterion_index: ").concat(g.criterionIndex,", mode: threshold, crossing: ").concat(U,", value: ").concat(b,", gap: ").concat(z,", occurences: ").concat(w):"cause:{alarm:".concat(g.isAlarm,", criterion_index: ").concat(g.criterionIndex,", mode: delta, value: ").concat(b),N&&(I+=", field: ".concat(N)),I+="}"):(I="cause:{alarm:".concat(g.isAlarm,", criterion_index: ").concat(g.criterionIndex,", mode: ").concat(g.mode),"threshold"===g.mode&&(I+=", crossing: ".concat(U)),I+="}"),u.causesMessages.push(I)}if(p!==r.length)throw new Error("Alarm decoding: Remaining unprocessed bytes detected. Expected ".concat(r.length,", but stopped at ").concat(p,"."));return u}(e,t,a,r,s,m,v,c,p);o.zclheader.alarmmsg=y.causesMessages}}e.exports={normalisation_standard:function(e,t){var a=[],r=e.bytes,d=function(e,t){var a={},r=0;a.lora={},a.lora.port=t;var d=e.length,l="";a.lora.payload="";for(var _=0;_>5|(6&e[0])<<2,m=e[1],a.zclheader.cmdID=s(m,2),v=256*e[2]+e[3],a.zclheader.clustID=s(v,4),10===m||138===m||1===m){r=1,a.data={},g=256*e[4]+e[5],a.zclheader.attID=s(g,4);var y=e[4],h=0;if(10!==m&&138!==m||(h=7),138===m&&(a.zclheader.alarm=1),1===m&&(h=8,a.zclheader.status=e[6]),83===v||84===v||85===v||86===v||87===v){if("function"!=typeof globalThis.TIC_Decode)throw new c("TIC_Decode function not found");a.data=globalThis.TIC_Decode(v,g,e.slice(h+1))}if(0===v&&2===g){a.data.firmware="";for(var b=0;b<3;b++)a.data.firmware+=String(e[h+b]),b<2&&(a.data.firmware+=".");var z=256*e[h+3]*256+256*e[h+4]+e[h+5];a.data.firmware+="."+z.toString()}if(0===v&&3===g){var w=e[h];a.data.kernel="";for(var x=0;x>13,a.data.modbus_last_frame_of_serie=(7168&Q)>>10;for(var $=0;$<=9;$++)a.data["modbus_EP".concat($)]=!!(Q&1<<$);function Fe(e,t,a,r,n,i){if(!0===e){if(0===a&&(n.data["modbus_slaveID_EP".concat(i)]=r[t],n.data["modbus_fnctID_EP".concat(i)]=r[t+1],n.data["modbus_datasize_EP".concat(i)]=r[t+2],t+=3),n.data["modbus_payload_EP".concat(i)]="",void 0===r[t])return n;for(var o=0;o0;)a.zclheader.modepower=e[14+5*Be],a.zclheader.powersource=e[15+5*Be],a.zclheader.delta=256*e[16+5*Be]+e[17+5*Be],a.zclheader.changedpowersource=e[18+5*Be],Be++,He--}if(0===r)throw new c("bad payload3")}else a.batch={},a.batch.report="batch";return a}(r,e.fPort);if(void 0!==d.zclheader){if(void 0!==d.zclheader.alarmmsg&&(a=d.zclheader.alarmmsg),7===r[1])return{data:d.zclheader,warning:a};if(9===r[1])return{data:d.zclheader,warning:a};if(1===r[1]){if(void 0===d.zclheader.data){for(var l=[],_=!0,f=0;_;){var m=Object.keys(d.data)[f];if(void 0===m){_=!1;break}l.push({variable:m,value:d.data[m],date:e.recvTime}),f++}return{data:l,type:"standard",warning:a}}return{data:{variable:"read reporting configuration response status",value:d.zclheader.data,date:e.recvTime},warning:a}}}if(void 0!==d.zclheader){if(void 0!==t){for(var v=d.zclheader.endpoint,g=!0,y=0,h=[],b="";g;){var z=Object.keys(d.data)[y];if(void 0===z){g=!1;break}void 0===t[z]?h.push({variable:z,value:d.data[z],date:e.recvTime}):"NA"===(b=t[z][v])?h.push({variable:b,value:"NA",date:e.recvTime}):h.push({variable:b,value:d.data[z],date:e.recvTime}),y++}return{data:h,type:"standard",warning:a}}throw new c("bad decoding")}return{type:d.batch.report,payload:d.lora.payload}}}},846:function(e,t,a){var r=a(174),n=[1,[{taglbl:0,resol:1,sampletype:10,lblname:"index",divide:1},{taglbl:1,resol:100,sampletype:6,lblname:"battery_voltage",divide:1e3}]],i={};function o(e){return r.watteco_decodeUplink(e,n,i)}t.decodeUplink=o,(globalThis||this).decodeUplink=o}},t={},a=function a(r){var n=t[r];if(void 0!==n)return n.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,a),i.exports}(846);driver=a}(),"undefined"!=typeof exports&&"undefined"!=typeof module&&module.exports&&(exports.driver=driver);