From 8cb63d559aed9f268f172d2d26a97f9dcf24a97f Mon Sep 17 00:00:00 2001 From: Arthur Lai Date: Fri, 20 Jun 2025 05:04:58 +0800 Subject: [PATCH] Added LRS20LD0, LRS20U00, LRS20U00, renamed LRS2M001-4xx to LRS@m001-4P3P, updated the decoders for other models. --- vendor/arwin-technology/index.yaml | 5 +- vendor/arwin-technology/lrs10701-codec.yaml | 29 +++- vendor/arwin-technology/lrs10701.js | 154 +++++++++++++----- vendor/arwin-technology/lrs10701.yaml | 32 +++- vendor/arwin-technology/lrs20100-codec.yaml | 31 +++- vendor/arwin-technology/lrs20100.js | 60 +++++-- vendor/arwin-technology/lrs20100.yaml | 14 +- vendor/arwin-technology/lrs20200-codec.yaml | 57 +++++++ vendor/arwin-technology/lrs20200.js | 118 ++++++++++++++ vendor/arwin-technology/lrs20200.yaml | 101 ++++++++++++ vendor/arwin-technology/lrs20310-codec.yaml | 32 ++-- vendor/arwin-technology/lrs20310.js | 42 +++-- vendor/arwin-technology/lrs20310.yaml | 6 +- vendor/arwin-technology/lrs20600-codec.yaml | 37 ++++- vendor/arwin-technology/lrs20600.js | 92 ++++++++--- vendor/arwin-technology/lrs20600.yaml | 17 +- vendor/arwin-technology/lrs20ld0-codec.yaml | 48 ++++++ vendor/arwin-technology/lrs20ld0.jpg | Bin 0 -> 15313 bytes vendor/arwin-technology/lrs20ld0.js | 84 ++++++++++ vendor/arwin-technology/lrs20ld0.yaml | 102 ++++++++++++ vendor/arwin-technology/lrs20u00.jpg | Bin 0 -> 46252 bytes vendor/arwin-technology/lrs20u00.yaml | 102 ++++++++++++ vendor/arwin-technology/lrs20ud0.jpg | Bin 0 -> 54018 bytes vendor/arwin-technology/lrs20ud0.yaml | 102 ++++++++++++ vendor/arwin-technology/lrs20uxx-codec.yaml | 47 ++++++ vendor/arwin-technology/lrs20uxx.js | 83 ++++++++++ .../arwin-technology/lrs2m001-4p3p-codec.yaml | 152 +++++++++++++++++ .../{lrs2m001-4xxx.js => lrs2m001-4p3p.js} | 126 ++++++++++---- .../{lrs2m001-4xxx.png => lrs2m001-4p3p.png} | Bin ...{lrs2m001-4xxx.yaml => lrs2m001-4p3p.yaml} | 20 +-- .../arwin-technology/lrs2m001-4xxx-codec.yaml | 116 ------------- 31 files changed, 1499 insertions(+), 310 deletions(-) create mode 100755 vendor/arwin-technology/lrs20200-codec.yaml create mode 100755 vendor/arwin-technology/lrs20200.js create mode 100755 vendor/arwin-technology/lrs20200.yaml create mode 100755 vendor/arwin-technology/lrs20ld0-codec.yaml create mode 100755 vendor/arwin-technology/lrs20ld0.jpg create mode 100755 vendor/arwin-technology/lrs20ld0.js create mode 100755 vendor/arwin-technology/lrs20ld0.yaml create mode 100755 vendor/arwin-technology/lrs20u00.jpg create mode 100755 vendor/arwin-technology/lrs20u00.yaml create mode 100755 vendor/arwin-technology/lrs20ud0.jpg create mode 100755 vendor/arwin-technology/lrs20ud0.yaml create mode 100755 vendor/arwin-technology/lrs20uxx-codec.yaml create mode 100755 vendor/arwin-technology/lrs20uxx.js create mode 100755 vendor/arwin-technology/lrs2m001-4p3p-codec.yaml rename vendor/arwin-technology/{lrs2m001-4xxx.js => lrs2m001-4p3p.js} (50%) rename vendor/arwin-technology/{lrs2m001-4xxx.png => lrs2m001-4p3p.png} (100%) rename vendor/arwin-technology/{lrs2m001-4xxx.yaml => lrs2m001-4p3p.yaml} (89%) delete mode 100755 vendor/arwin-technology/lrs2m001-4xxx-codec.yaml diff --git a/vendor/arwin-technology/index.yaml b/vendor/arwin-technology/index.yaml index c8a6f11819..66928e4fb5 100755 --- a/vendor/arwin-technology/index.yaml +++ b/vendor/arwin-technology/index.yaml @@ -3,4 +3,7 @@ endDevices: - lrs20310 - lrs20600 - lrs10701 - - lrs2m001-4xxx + - lrs2m001-4p3p + - lrs20ld0 + - lrs20u00 + - lrs20ud0 diff --git a/vendor/arwin-technology/lrs10701-codec.yaml b/vendor/arwin-technology/lrs10701-codec.yaml index cb3fa626ab..ddf446154f 100755 --- a/vendor/arwin-technology/lrs10701-codec.yaml +++ b/vendor/arwin-technology/lrs10701-codec.yaml @@ -9,7 +9,7 @@ uplinkDecoder: bytes: [1, 17, 8, 170, 15, 125, 58, 152, 9, 41, 90] output: data: - event: heartbeat/button + event: 'heartbeat/button' aqi: 34 co2: 554 temperature: 22.7 @@ -24,8 +24,8 @@ uplinkDecoder: output: data: tvoc: 270 - pm1.0: 6.3 - pm2.5: 7.2 + 'pm1.0': 6.3 + 'pm2.5': 7.2 pm10: 8.1 - description: Firmware version 1.07.000 input: @@ -34,18 +34,28 @@ uplinkDecoder: output: data: firmwareVersion: '1.07.000' - - description: data upload interval 15 min, AQI led on, active sensor T/H, CO2, PMx, Gas 1, Gas 1 type NH3 + - description: firmware version 1.07.000, battery voltage 3.55 v, battery percentage 100 %, uplink count 66051 + input: + fPort: 9 + bytes: [1, 7, 0, 7, 13, 222, 100, 0, 1, 2, 3] + output: + data: + firmwareVersion: '1.07.007' + batteryLevel: 3550 + batteryPercentage: 100 + uplinkCount: 66051 + - description: data upload interval 15 min, AQI led on, active sensor T/H, CO2, PMx, Gas 1, Gas 1 type NH3, Gas 2, Gas 2 type H2S, Gas sensor resulution 0 input: fPort: 12 - bytes: [0, 15, 1, 29, 29, 1, 0, 1] + bytes: [0, 15, 1, 63, 63, 1, 2, 1] output: data: dataUploadInterval: 15 - statusLED: on - sensorType: 'T/H,CO2,PMx,Gas1' - sensorStatus: 'T/H,CO2,PMx,Gas1' + statusLED: 'on' + sensorType: 'T/H,TVOC,CO2,PMx,Gas1,Gas2' + sensorStatus: 'T/H,TVOC,CO2,PMx,Gas1,Gas2,gasResolution=0' gas1Type: 'NH3' - gas2Type: 'None' + gas2Type: 'H2S' - description: High temperature threshold 40C, Low temperature threshold 10C, High humidity threshold 95%, Low humidity threshold 35% input: fPort: 13 @@ -125,6 +135,7 @@ downlinkEncoder: input: data: cmd: setGasesThresholds + ec_res: 0 co2Threshold: 800 tvocThreshold: 1200 gas1Threshold: 10 diff --git a/vendor/arwin-technology/lrs10701.js b/vendor/arwin-technology/lrs10701.js index 9bf700c0df..988308e1e9 100755 --- a/vendor/arwin-technology/lrs10701.js +++ b/vendor/arwin-technology/lrs10701.js @@ -1,5 +1,6 @@ + var lrs10701_events = ['heartbeat/button', 'rsvd', 'T/H', 'CO2', 'EC1', 'EC2', 'TVOC', 'PMx']; -var sensor_list = ['T/H', 'TVOC', 'CO2', 'PMx', 'Gas1', 'Gas2']; +var sensor_list = ['T/H', 'TVOC', 'CO2', 'PMx', 'Gas1', 'Gas2', 'rsvd', 'gasResolution=0', 'gasResolution=1']; var gas_sensor_type = ['None', 'NH3', 'H2S', 'NO2', 'CO', 'HCHO', 'Custom']; function hex2dec(hex) { @@ -10,17 +11,19 @@ function hex2dec(hex) { } function decodeUplink(input) { + var i; switch (input.fPort) { case 10: // sensor data var evt=""; - for (let i=0; i<8; i++) { - if ((0x01<>7; return { data: { event: evt, @@ -28,9 +31,9 @@ function decodeUplink(input) { co2: (aqi_co2_t>>10&0x1fff), temperature: (hex2dec(aqi_co2_t&0x3ff)-300)/10, humidity: input.bytes[5]*0.5, - gas1: (input.bytes[6]<<8|input.bytes[7])/1000, - gas2: (input.bytes[8]<<8|input.bytes[9])/1000, - battery: input.bytes[10], + gas1: ec_res ? (input.bytes[6]<<8|input.bytes[7])/10 : (input.bytes[6]<<8|input.bytes[7])/1000, + gas2: ec_res ? (input.bytes[8]<<8|input.bytes[9])/10 : (input.bytes[8]<<8|input.bytes[9])/1000, + battery: input.bytes[10] }, }; case 11: // sensor data @@ -39,29 +42,44 @@ function decodeUplink(input) { tvoc: (input.bytes[0]<<8|input.bytes[1]), "pm1.0": (input.bytes[2]<<16|input.bytes[3]<<8|input.bytes[4])/1000, "pm2.5": (input.bytes[5]<<16|input.bytes[6]<<8|input.bytes[7])/1000, - "pm10": (input.bytes[8]<<16|input.bytes[9]<<8|input.bytes[10])/1000, + "pm10": (input.bytes[8]<<16|input.bytes[9]<<8|input.bytes[10])/1000 } }; case 8: // version - var ver = input.bytes[0]+"."+("00"+input.bytes[1]).slice(-2)+"."+("000"+(input.bytes[2]<<8|input.bytes[3])).slice(-3); + var ver = input.bytes[0]+"."+("00"+input.bytes[1]).slice(-2)+"."+("000"+(input.bytes[2]<<8|input.bytes[3])).slice(-3); + return { + data: { + firmwareVersion: ver + } + }; + case 9: // version, battery & uplink count + var ver = input.bytes[0]+"."+("00"+input.bytes[1]).slice(-2)+"."+("000"+(input.bytes[2]<<8|input.bytes[3])).slice(-3); return { data: { firmwareVersion: ver, + batteryLevel: input.bytes[4]<<8|input.bytes[5], + batteryPercentage: input.bytes[6], + uplinkCount: input.bytes[7]<<24|input.bytes[8]<<16|input.bytes[9]<<8|input.bytes[10] } }; case 12: // device settings + var sensor_type=""; var sensor_ok=""; - for (let i=0; i<8; i++) { - if ((0x01<>8,ult&0xff,led,dack) - }; + if (isNumber(ult) && ((led === 'on') || (led === 'off'))) { + return { + fPort: 22, + bytes: payload.concat((ult>>8)&0xff,ult&0xff, + (led === 'on')*1, + dack) + }; + } } else if (input.data.cmd === 'setTHThresholds') { - var htth = (input.data.highTemperatureThreshold&0xffff); - var ltth = (input.data.lowTemperatureThreshold&0xffff); + var htth = input.data.highTemperatureThreshold; + var ltth = input.data.lowTemperatureThreshold; var hhth = input.data.highHumidityThreshold; var lhth = input.data.lowHumidityThreshold; - return { - fPort: 23, - bytes: payload.concat(0,htth>>8,htth&0xff,ltth>>8,ltth&0xff,hhth,lhth) - }; + if (isNumber(htth) && isNumber(ltth) && isNumber(hhth) && isNumber(lhth)) { + return { + fPort: 23, + bytes: payload.concat(0x00, + (htth>>8)&0xff,htth&0xff, + (ltth>>8)&0xff,ltth&0xff, + hhth&0xff, + lhth&0xff) + }; + } } else if (input.data.cmd === 'setGasesThresholds') { + var res = input.data.ec_res; var co2th = input.data.co2Threshold; var tvocth = input.data.tvocThreshold; - var g1th = input.data.gas1Threshold*1000; - var g2th = input.data.gas2Threshold*1000; - return { - fPort: 23, - bytes: payload.concat(1,co2th>>8,co2th&0xff,tvocth>>8,tvocth&0xff,g1th>>8,g1th&0xff,g2th>>8,g2th&0xff) - }; + var g1th = input.data.gas1Threshold; + var g2th = input.data.gas2Threshold; + if (((res === 0) || (res === 1)) && isNumber(co2th) && isNumber(tvocth) && isNumber(g1th) && isNumber(g2th)) { + if (res) { + opt = 0x03; + g1th = g1th * 10; + g2th = g2th * 10; + } + else { + opt = 0x01; + g1th = g1th * 1000; + g2th = g2th * 1000; + } + return { + fPort: 23, + bytes: payload.concat(opt, + (co2th >>8)&0xff,co2th &0xff, + (tvocth>>8)&0xff,tvocth&0xff, + (g1th >>8)&0xff,g1th &0xff, + (g2th >>8)&0xff,g2th &0xff) + }; + } } else if (input.data.cmd === 'setPMThresholds') { var pm1p0th = input.data['pm1.0 Threshold']; var pm2p5th = input.data['pm2.5 Threshold']; var pm10th = input.data['pm10 Threshold']; - return { - fPort: 23, - bytes: payload.concat(2,pm1p0th>>16,(pm1p0th>>8)&0xff,pm1p0th&0xff,pm2p5th>>16,(pm2p5th>>8)&0xff,pm2p5th&0xff,pm10th>>16,(pm10th>>8)&0xff,pm10th&0xff) - }; + if (isNumber(pm1p0th) && isNumber(pm2p5th) && isNumber(pm10th)) { + return { + fPort: 23, + bytes: payload.concat(0x02, + (pm1p0th>>16)&0xff,(pm1p0th>>8)&0xff,pm1p0th&0xff, + (pm2p5th>>16)&0xff,(pm2p5th>>8)&0xff,pm2p5th&0xff, + (pm10th >>16)&0xff,(pm10th >>8)&0xff,pm10th &0xff) + }; + } } } diff --git a/vendor/arwin-technology/lrs10701.yaml b/vendor/arwin-technology/lrs10701.yaml index 072ac6321b..3da1b596c1 100755 --- a/vendor/arwin-technology/lrs10701.yaml +++ b/vendor/arwin-technology/lrs10701.yaml @@ -1,5 +1,5 @@ -name: LRS10701 - Indoor Air Quality (IAQ) Sensor -description: Indoor Air Quality (IAQ) Sensor +name: SENSO8 LRS10701 - Indoor Air Quality (IAQ) Sensor +description: Indoor Air Quality (IAQ) Sensor by Arwin Technology Ltd. # Hardware versions (optional, use when you have revisions) hardwareVersions: @@ -104,8 +104,34 @@ keySecurity: none # Product and data sheet URLs (optional) productURL: https://www.senso8.com/senso8-indoor-air-quality-sensors -dataSheetURL: https://www.senso8.com/_files/ugd/8cebc6_6f32d5db2af845149af9750b6d100de3.pdf +dataSheetURL: https://s3.ap-northeast-1.amazonaws.com/www.senso8.com/senso8_datasheet/IAQ/DS_LRS10701.pdf # Photos photos: main: lrs10701.png + +compliances: + safety: + - body: IEC + norm: EN + standard: 62368-1 + radioEquipment: + - body: ETSI + norm: EN + standard: 300 220-1 + version: 3.1.1 + - body: ETSI + norm: EN + standard: 300 220-2 + version: 3.2.1 + - body: ETSI + norm: EN + standard: 301 489-1 + version: 2.2.3 + - body: ETSI + norm: EN + standard: 301 489-3 + version: 2.3.2 + - body: ETSI + norm: EN + standard: 62479:2010 diff --git a/vendor/arwin-technology/lrs20100-codec.yaml b/vendor/arwin-technology/lrs20100-codec.yaml index 18b68d3c41..e7511a61bb 100755 --- a/vendor/arwin-technology/lrs20100-codec.yaml +++ b/vendor/arwin-technology/lrs20100-codec.yaml @@ -3,16 +3,17 @@ uplinkDecoder: fileName: lrs20100.js examples: - - description: 23 C, 58% RH, battery 90%, heartbeat + - description: 23 C, 58% RH, battery 90%, heartbeat/button, uplink count 3106 input: fPort: 10 - bytes: [1, 1, 90, 0, 230, 2, 68, 0, 0] + bytes: [1, 1, 90, 0, 230, 2, 68, 0, 0, 12, 34] output: data: - event: heartbeat + event: 'heartbeat/button' battery: 90 - temperature: 23.0 - humidity: 58.0 + temperature: 23 + humidity: 58 + uplinkCount: 3106 - description: Firmware version 1.00.001 input: fPort: 8 @@ -20,6 +21,16 @@ uplinkDecoder: output: data: firmwareVersion: '1.00.001' + - description: firmware version 1.00.001, battery voltage 3.55 v, battery percentage 100 %, uplink count 66051 + input: + fPort: 9 + bytes: [1, 0, 0, 1, 13, 222, 100, 0, 1, 2, 3] + output: + data: + firmwareVersion: '1.00.001' + batteryLevel: 3550 + batteryPercentage: 100 + uplinkCount: 66051 - description: Device settings, data upload interval = 15 min input: fPort: 12 @@ -37,3 +48,13 @@ uplinkDecoder: lowTemperatureThreshold: 10 highHumidityThreshold: 95 lowHumidityThreshold: 35 + - description: max silient time 30 min, delta temperature 0.1 C, delta humidity 0.5%, repeat 2 + input: + fPort: 16 + bytes: [1, 0, 30, 0, 1, 0, 5, 2] + output: + data: + maximumSilentTime: 30 + deltaTemperature: 0.1 + deltaHumidity: 0.5 + repeat: 2 diff --git a/vendor/arwin-technology/lrs20100.js b/vendor/arwin-technology/lrs20100.js index de971d6192..c1e01407c7 100755 --- a/vendor/arwin-technology/lrs20100.js +++ b/vendor/arwin-technology/lrs20100.js @@ -1,9 +1,10 @@ -var lrs20100_events = ['heartbeat', 'rsvd', 'temperature_high', 'temperature_low', 'humidity_high', 'humidity_low']; + +var lrs20100_events = ['heartbeat/button', 'rsvd', 'temperature_high', 'temperature_low', 'humidity_high', 'humidity_low', 'rsvd', 'rsvd']; function hex2dec(hex) { var dec = hex&0xFFFF; if (dec & 0x8000) - dec = -(0x10000-dec) + dec = -(0x10000-dec); return dec; } @@ -13,20 +14,21 @@ function decodeUplink(input) { switch (input.bytes[0]) { case 1: // LRS20100 var evt=""; - for (let i=0; i<8; i++) { - if ((0x01<= 9) { // adaptive reporting mode + return { + data: { + event: evt, + battery: input.bytes[2], + temperature: hex2dec(input.bytes[3]<<8|input.bytes[4])/10, + uplinkCount: hex2dec(input.bytes[7]<<8|input.bytes[8]) + } + }; + } + else { // periodic reporting mode + return { + data: { + event: evt, + battery: input.bytes[2], + temperature: hex2dec(input.bytes[3]<<8|input.bytes[4])/10 + } + }; + } + default: + return { + errors: ['unknown sensor type'] + }; + } + break; + case 8: // version + var ver = input.bytes[0]+"."+("00"+input.bytes[1]).slice(-2)+"."+("000"+(input.bytes[2]<<8|input.bytes[3])).slice(-3); + return { + data: { + firmwareVersion: ver + } + }; + case 9: // version, battery & uplink count + var ver = input.bytes[0]+"."+("00"+input.bytes[1]).slice(-2)+"."+("000"+(input.bytes[2]<<8|input.bytes[3])).slice(-3); + return { + data: { + firmwareVersion: ver, + batteryLevel: input.bytes[4]<<8|input.bytes[5], + batteryPercentage: input.bytes[6], + uplinkCount: input.bytes[7]<<24|input.bytes[8]<<16|input.bytes[9]<<8|input.bytes[10] + } + }; + case 12: // device settings + switch (input.bytes[0]) { + case 2: + return { + data: { + dataUploadInterval: hex2dec(input.bytes[1]<<8|input.bytes[2]) + } + }; + default: + return { + errors: ['unknown sensor type'] + }; + } + break; + case 13: // threshold settings + switch (input.bytes[0]) { + case 2: + return { + data: { + highTemperatureThreshold: hex2dec(input.bytes[1]<<8|input.bytes[2]), + lowTemperatureThreshold: hex2dec(input.bytes[3]<<8|input.bytes[4]) + } + }; + default: + return { + errors: ['unknown sensor type'] + }; + } + break; + case 16: // delta mode settings + switch (input.bytes[0]) { + case 2: + return { + data: { + maximumSilentTime: input.bytes[1]<<8|input.bytes[2], + deltaTemperature: (input.bytes[3]<<8|input.bytes[4])/10, + samplingTime: input.bytes[5]<<8|input.bytes[6], + repeat: input.bytes[7] + } + }; + default: + return { + errors: ['unknown sensor type'] + }; + } + break; + default: + return { + errors: ['unknown FPort'] + }; + } +} + diff --git a/vendor/arwin-technology/lrs20200.yaml b/vendor/arwin-technology/lrs20200.yaml new file mode 100755 index 0000000000..819a81cd24 --- /dev/null +++ b/vendor/arwin-technology/lrs20200.yaml @@ -0,0 +1,101 @@ +name: SENSO8 LRS20200 - Temperature Sensor +description: Temperature Sensor by Arwin Technology Ltd. + +# Hardware versions (optional, use when you have revisions) +hardwareVersions: + - version: '2.0' + numeric: 2 + +# Firmware versions (at least one is mandatory) +firmwareVersions: + - # Firmware version + version: '1.0.6' + numeric: 1 + # Corresponding hardware versions (optional) + hardwareVersions: + - '2.0' + + # Firmware features (optional) + # Valid values are: remote rejoin (trigger a join from the application layer), transmission interval (configure how + # often he device sends a message). + features: + - transmission interval + + # LoRaWAN Device Profiles per region + # Supported regions are EU863-870, US902-928, AU915-928, AS923, CN779-787, EU433, CN470-510, KR920-923, IN865-867, + # RU864-870 + profiles: + EU863-870: + # Identifier of the profile (lowercase, alphanumeric with dashes, max 36 characters) + id: eu868-profile + lorawanCertified: false + codec: lrs20200-codec + US902-928: + id: us915-profile + lorawanCertified: false + codec: lrs20200-codec + AS923: + id: as923-profile + lorawanCertified: false + codec: lrs20200-codec + +# Sensors that this device features (optional) +# Valid values are: +# 4-20 ma, accelerometer, altitude, analog input, auxiliary, barometer, battery, button, bvoc, co, co2, conductivity, +# current, digital input, dissolved oxygen, distance, dust, energy, gps, gyroscope, h2s, humidity, iaq, level, light, +# lightning, link, magnetometer, moisture, motion, no, no2, o3, particulate matter, ph, pir, pm2.5, pm10, potentiometer, +# power, precipitation, pressure, proximity, pulse count, pulse frequency, radar, rainfall, rssi, smart valve, snr, so2, +# solar radiation, sound, strain, surface temperature, temperature, tilt, time, tvoc, uv, vapor pressure, velocity, +# vibration, voltage, water potential, water, weight, wifi ssid, wind direction, wind speed. +sensors: + - temperature + +# Dimensions in mm (optional) +# Use width, height, length and/or diameter +dimensions: + width: 70 + length: 112 + height: 39 + +# Weight in grams (optional) +weight: 115 + +# Battery information (optional) +battery: + replaceable: true + type: ER26500 + +# Operating conditions (optional) +operatingConditions: + # Temperature (Celsius) + temperature: + min: -20 + max: 70 + +# IP rating (optional) +ipCode: IP67 + +# Key provisioning (optional) +# Valid values are: custom (user can configure keys), join server and manifest. +keyProvisioning: + - custom + - join server + +# Key programming (optional) +# Valid values are: bluetooth, nfc, wifi, serial (when the user has a serial interface to set the keys) +# and firmware (when the user should change the firmware to set the keys). +keyProgramming: + - serial + - firmware + +# Key security (optional) +# Valid values are: none, read protected and secure element. +keySecurity: none + +# Product and data sheet URLs (optional) +productURL: https://www.senso8.com/senso8-lora-sensors +dataSheetURL: https://s3.ap-northeast-1.amazonaws.com/www.senso8.com/senso8_datasheet/LoRaWAN/DS_LRS20200-TPxx.pdf + +# Photos +photos: + main: lrs20200.png diff --git a/vendor/arwin-technology/lrs20310-codec.yaml b/vendor/arwin-technology/lrs20310-codec.yaml index 4c5ade18af..47cc810b88 100755 --- a/vendor/arwin-technology/lrs20310-codec.yaml +++ b/vendor/arwin-technology/lrs20310-codec.yaml @@ -3,35 +3,45 @@ uplinkDecoder: fileName: lrs20310.js examples: - - description: water leak level 70, water leak + - description: water leakage level 10, battery 90 %, event "heartbeat/button" input: fPort: 10 - bytes: [5, 4, 80, 70, 0, 0] + bytes: [5, 1, 90, 10, 0, 0] output: data: - event: 'water_leak_alert' - battery: 80 - waterLeakLevel: 70 - - description: Firmware version 1.00.001 + event: 'heartbeat/button' + battery: 90 + waterLeakLevel: 10 + - description: firmware version 1.00.001 input: fPort: 8 bytes: [1, 0, 0, 1] output: data: firmwareVersion: '1.00.001' + - description: firmware version 1.00.001, battery level 3.55 v, battery percentage 100 %, uplink count 66051 + input: + fPort: 9 + bytes: [1, 0, 0, 1, 13, 222, 100, 0, 1, 2, 3] + output: + data: + firmwareVersion: '1.00.001' + batteryLevel: 3550 + batteryPercentage: 100 + uplinkCount: 66051 - description: device settings, data upload interval = 15 min, number of additional uploads = 3, time between addition uploads = 1 min input: fPort: 12 - bytes: [5, 0, 10, 0, 3, 1, 1] + bytes: [5, 0, 15, 0, 3, 1, 1] output: data: - dataUploadInterval: 10 + dataUploadInterval: 15 numAdditionalUploads: 3 additionalUploadsInterval: 1 - - description: water leak alert threshold = 30 + - description: water leakage threshold 15 input: fPort: 13 - bytes: [5, 30] + bytes: [5, 15] output: data: - waterLeakAlertThreshold: 30 + waterLeakAlertThreshold: 15 diff --git a/vendor/arwin-technology/lrs20310.js b/vendor/arwin-technology/lrs20310.js index d76427bb53..6d4ae9ed5e 100755 --- a/vendor/arwin-technology/lrs20310.js +++ b/vendor/arwin-technology/lrs20310.js @@ -1,9 +1,10 @@ -var lrs20310_events = ['heartbeat', 'rsvd', 'water_leak_alert', 'cable_break_alert']; + +var lrs20310_events = ['heartbeat/button', 'rsvd', 'water_leak_alert', 'cable_break_alert', 'rsvd', 'rsvd', 'rsvd', 'rsvd']; function hex2dec(hex) { var dec = hex&0xFFFF; if (dec & 0x8000) - dec = -(0x10000-dec) + dec = -(0x10000-dec); return dec; } @@ -13,8 +14,8 @@ function decodeUplink(input) { switch (input.bytes[0]) { case 5: var evt=""; - for (let i=0; i<8; i++) { - if ((0x01< 6) { + var reading = ( input.bytes[6] << 24 | input.bytes[7] << 16 | input.bytes[8] << 8 | input.bytes[9] ) + + ( input.bytes[4] << 8 | input.bytes[5] ) / Math.pow( 10, input.bytes[10] ); + return { + data: { + event: evt, + battery: input.bytes[2], + inputStatus: input.bytes[3] ? "close" : "open", + meterReading: reading + } + }; + } + else { + return { + data: { + event: evt, + battery: input.bytes[2], + inputStatus: input.bytes[3] ? "close" : "open", + eventCount: input.bytes[4]<<8|input.bytes[5] + } + }; + } default: return { errors: ['unknown sensor type'] @@ -35,10 +52,20 @@ function decodeUplink(input) { } break; case 8: // version - var ver = input.bytes[0]+"."+("00"+input.bytes[1]).slice(-2)+"."+("000"+(input.bytes[2]<<8|input.bytes[3])).slice(-3); + var ver = input.bytes[0]+"."+("00"+input.bytes[1]).slice(-2)+"."+("000"+(input.bytes[2]<<8|input.bytes[3])).slice(-3); + return { + data: { + firmwareVersion: ver + } + }; + case 9: // version, battery & uplink count + var ver = input.bytes[0]+"."+("00"+input.bytes[1]).slice(-2)+"."+("000"+(input.bytes[2]<<8|input.bytes[3])).slice(-3); return { data: { firmwareVersion: ver, + batteryLevel: input.bytes[4]<<8|input.bytes[5], + batteryPercentage: input.bytes[6], + uplinkCount: input.bytes[7]<<24|input.bytes[8]<<16|input.bytes[9]<<8|input.bytes[10] } }; case 12: // device settings @@ -47,32 +74,53 @@ function decodeUplink(input) { return { data: { dataUploadInterval: hex2dec(input.bytes[1]<<8|input.bytes[2]), - triggerMode: input.bytes[3], - triggerDeafTime: hex2dec(input.bytes[4]<<8|input.bytes[5]), + triggerMode: (input.bytes[3] < 5) ? trigger_mode[input.bytes[3]] : trigger_mode[0], + triggerDeafTime: hex2dec(input.bytes[4]<<8|input.bytes[5]) } }; default: return { errors: ['unknown sensor type'] - } + }; } - case 13: // threshold settings + break; + case 13: // dry contact settings switch (input.bytes[0]) { case 4: - var state = input.bytes[1] ? 'enable': 'disable' + var state = input.bytes[1] ? 'enable': 'disable'; return { data: { - inputEnabled: state, + inputEnabled: state } - } + }; default: return { errors: ['unknown sensor type'] - } + }; } + break; + case 16: // pulse counter mode settings + switch (input.bytes[0]) { + case 4: + return { + data: { + pulseCountMode: input.bytes[1] ? 'enable' : 'disable', + maxDigit: input.bytes[2], + resolution: input.bytes[3], + initialReadingInteger: input.bytes[4] << 24 | input.bytes[5] << 16 | input.bytes[6] << 8 | input.bytes[7], + initialReadingDecimal: input.bytes[8] << 8 | input.bytes[9] + } + }; + default: + return { + errors: ['unknown sensor type'] + }; + } + break; default: return { - errors: ['unknown FPort'], + errors: ['unknown FPort'] }; } } + diff --git a/vendor/arwin-technology/lrs20600.yaml b/vendor/arwin-technology/lrs20600.yaml index 942ab03b11..b6f4ecbe0b 100755 --- a/vendor/arwin-technology/lrs20600.yaml +++ b/vendor/arwin-technology/lrs20600.yaml @@ -1,5 +1,5 @@ -name: LRS20600 - Contact Sensor -description: Open Close Sensor +name: SENSO8 LRS20600 - Open/Close/Pulse Sensor +description: Open/Close/Pulse Sensor by Arwin Technology Ltd. # Hardware versions (optional, use when you have revisions) hardwareVersions: @@ -9,7 +9,7 @@ hardwareVersions: # Firmware versions (at least one is mandatory) firmwareVersions: - # Firmware version - version: '2.2.0' + version: '1.0.6' numeric: 1 # Corresponding hardware versions (optional) hardwareVersions: @@ -59,7 +59,7 @@ dimensions: height: 39 # Weight in grams (optional) -weight: 166 +weight: 115 # Battery information (optional) battery: @@ -72,13 +72,9 @@ operatingConditions: temperature: min: -20 max: 70 - # Relative humidity (fraction of 1) - relativeHumidity: - min: 0 - max: 0.95 # IP rating (optional) -ipCode: IP65 +ipCode: IP67 # Key provisioning (optional) # Valid values are: custom (user can configure keys), join server and manifest. @@ -91,6 +87,7 @@ keyProvisioning: # and firmware (when the user should change the firmware to set the keys). keyProgramming: - serial + - firmware # Key security (optional) # Valid values are: none, read protected and secure element. @@ -98,7 +95,7 @@ keySecurity: none # Product and data sheet URLs (optional) productURL: https://www.senso8.com/senso8-lora-sensors -dataSheetURL: https://s3.ap-northeast-1.amazonaws.com/www.senso8.com/lora/docs/DS+LRS20600-0000_V1.pdf +dataSheetURL: https://s3.ap-northeast-1.amazonaws.com/www.senso8.com/senso8_datasheet/LoRaWAN/DS_LRS20600-xxxx.pdf # Photos photos: diff --git a/vendor/arwin-technology/lrs20ld0-codec.yaml b/vendor/arwin-technology/lrs20ld0-codec.yaml new file mode 100755 index 0000000000..b00bd23605 --- /dev/null +++ b/vendor/arwin-technology/lrs20ld0-codec.yaml @@ -0,0 +1,48 @@ +# Uplink decoder decodes binary data uplink into a JSON object (optional) +# For documentation on writing encoders and decoders, see: https://www.thethingsindustries.com/docs/integrations/payload-formatters/javascript/ +uplinkDecoder: + fileName: lrs20ld0.js + examples: + - description: distance 12.3 cm, battery 90 %, event "heartbeat/button", state 1 + input: + fPort: 10 + bytes: [11, 1, 90, 0, 123, 1] + output: + data: + event: 'heartbeat/button' + battery: 90 + distance: 12.3 + state: 1 + - description: firmware version 1.00.001 + input: + fPort: 8 + bytes: [1, 0, 0, 1] + output: + data: + firmwareVersion: '1.00.001' + - description: firmware version 1.00.001, battery voltage 3.55 v, battery percentage 100 %, uplink count 66051 + input: + fPort: 9 + bytes: [1, 0, 0, 1, 13, 222, 100, 0, 1, 2, 3] + output: + data: + firmwareVersion: '1.00.001' + batteryLevel: 3550 + batteryPercentage: 100 + uplinkCount: 66051 + - description: data upload interval 15 min + input: + fPort: 12 + bytes: [11, 0, 15, 1] + output: + data: + dataUploadInterval: 15 + - description: distance threshold 10 cm, delta negative 0.5 cm, delta positive 1 cm + input: + fPort: 13 + bytes: [11, 0, 100, 0, 5, 0, 10] + output: + data: + distanceThreshold: 10 + negativeDelta: 0.5 + positiveDelta: 1 diff --git a/vendor/arwin-technology/lrs20ld0.jpg b/vendor/arwin-technology/lrs20ld0.jpg new file mode 100755 index 0000000000000000000000000000000000000000..a02c5c5f7f122d7f45d7bfe5db3b2eedc0b4d18d GIT binary patch literal 15313 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%0AF#aqO;-)FlY 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

_BW#*&4c2PZ-{}-M$2K3L4 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 tSF9vhlSXzme}4A=Z;yYE{SPZdIdlL3 literal 0 HcmV?d00001 diff --git a/vendor/arwin-technology/lrs20ud0.yaml b/vendor/arwin-technology/lrs20ud0.yaml new file mode 100755 index 0000000000..78b12c3038 --- /dev/null +++ b/vendor/arwin-technology/lrs20ud0.yaml @@ -0,0 +1,102 @@ +name: SENSO8 LRS20UD0 - Ultrasonic Sensor +description: Ultrasonic Sensor by Arwin Technology Ltd. + +# Hardware versions (optional, use when you have revisions) +hardwareVersions: + - version: '2.0' + numeric: 2 + +# Firmware versions (at least one is mandatory) +firmwareVersions: + - # Firmware version + version: '1.0.6' + numeric: 1 + # Corresponding hardware versions (optional) + hardwareVersions: + - '2.0' + + # Firmware features (optional) + # Valid values are: remote rejoin (trigger a join from the application layer), transmission interval (configure how + # often he device sends a message). + features: + - transmission interval + + # LoRaWAN Device Profiles per region + # Supported regions are EU863-870, US902-928, AU915-928, AS923, CN779-787, EU433, CN470-510, KR920-923, IN865-867, + # RU864-870 + profiles: + EU863-870: + # Identifier of the profile (lowercase, alphanumeric with dashes, max 36 characters) + id: eu868-profile + lorawanCertified: false + codec: lrs20uxx-codec + US902-928: + id: us915-profile + lorawanCertified: false + codec: lrs20uxx-codec + AS923: + id: as923-profile + lorawanCertified: false + codec: lrs20uxx-codec + +# Sensors that this device features (optional) +# Valid values are: +# 4-20 ma, accelerometer, altitude, analog input, auxiliary, barometer, battery, button, bvoc, co, co2, conductivity, +# current, digital input, dissolved oxygen, distance, dust, energy, gps, gyroscope, h2s, humidity, iaq, level, light, +# lightning, link, magnetometer, moisture, motion, no, no2, o3, particulate matter, ph, pir, pm2.5, pm10, potentiometer, +# power, precipitation, pressure, proximity, pulse count, pulse frequency, radar, rainfall, rssi, smart valve, snr, so2, +# solar radiation, sound, strain, surface temperature, temperature, tilt, time, tvoc, uv, vapor pressure, velocity, +# vibration, voltage, water potential, water, weight, wifi ssid, wind direction, wind speed. +sensors: + - distance + - proximity + +# Dimensions in mm (optional) +# Use width, height, length and/or diameter +dimensions: + width: 70 + length: 112 + height: 39 + +# Weight in grams (optional) +weight: 115 + +# Battery information (optional) +battery: + replaceable: true + type: ER26500 + +# Operating conditions (optional) +operatingConditions: + # Temperature (Celsius) + temperature: + min: -20 + max: 70 + +# IP rating (optional) +ipCode: IP67 + +# Key provisioning (optional) +# Valid values are: custom (user can configure keys), join server and manifest. +keyProvisioning: + - custom + - join server + +# Key programming (optional) +# Valid values are: bluetooth, nfc, wifi, serial (when the user has a serial interface to set the keys) +# and firmware (when the user should change the firmware to set the keys). +keyProgramming: + - serial + - firmware + +# Key security (optional) +# Valid values are: none, read protected and secure element. +keySecurity: none + +# Product and data sheet URLs (optional) +productURL: https://www.senso8.com/senso8-lora-sensors +dataSheetURL: https://s3.ap-northeast-1.amazonaws.com/www.senso8.com/senso8_datasheet/LoRaWAN/DS_LRS20UD0-0000.pdf + +# Photos +photos: + main: lrs20ud0.jpg diff --git a/vendor/arwin-technology/lrs20uxx-codec.yaml b/vendor/arwin-technology/lrs20uxx-codec.yaml new file mode 100755 index 0000000000..1f7eb9244d --- /dev/null +++ b/vendor/arwin-technology/lrs20uxx-codec.yaml @@ -0,0 +1,47 @@ +# Uplink decoder decodes binary data uplink into a JSON object (optional) +# For documentation on writing encoders and decoders, see: https://www.thethingsindustries.com/docs/integrations/payload-formatters/javascript/ +uplinkDecoder: + fileName: lrs20uxx.js + examples: + - description: distance 45.6 cm, battery 90 %, event "heartbeat/button", state 1 + input: + fPort: 10 + bytes: [12, 1, 90, 1, 200, 1] + output: + data: + event: 'heartbeat/button' + battery: 90 + distance: 45.6 + state: 1 + - description: firmware version 1.00.001 + input: + fPort: 8 + bytes: [1, 0, 0, 1] + output: + data: + firmwareVersion: '1.00.001' + - description: firmware version 1.00.001, battery voltage 3.55 v, battery percentage 100 %, uplink count 66051 + input: + fPort: 9 + bytes: [1, 0, 0, 1, 13, 222, 100, 0, 1, 2, 3] + output: + data: + firmwareVersion: '1.00.001' + batteryLevel: 3550 + batteryPercentage: 100 + uplinkCount: 66051 + - description: data upload interval 15 min + input: + fPort: 12 + bytes: [12, 0, 15, 1] + output: + data: + dataUploadInterval: 15 + - description: distance high threshold 21 cm, distance low threshold 19 cm + input: + fPort: 13 + bytes: [12, 0, 210, 0, 190] + output: + data: + distanceHighThreshold: 21 + distanceLowThreshold: 19 diff --git a/vendor/arwin-technology/lrs20uxx.js b/vendor/arwin-technology/lrs20uxx.js new file mode 100755 index 0000000000..02feb2ef57 --- /dev/null +++ b/vendor/arwin-technology/lrs20uxx.js @@ -0,0 +1,83 @@ + +var lrs20uxx_events = ['heartbeat/button', 'rsvd', 'distance_hi', 'distance_lo', 'rsvd', 'rsvd', 'rsvd', 'rsvd']; + +function decodeUplink(input) { + switch (input.fPort) { + case 10: // sensor data + switch (input.bytes[0]) { + case 12: + var evt=""; + for (var i=0; i<8; i++) { + if ((0x01<>14)) - if (evt==="") - evt=lrs2m001_phase_events[i]; - else - evt=evt+","+lrs2m001_phase_events[i]; - } - if (input.bytes[0] === 0x0a) { + if (input.bytes[0] === 10) { + var evt_amp = input.bytes[1]<<8|input.bytes[2]; + var pow_pf = input.bytes[3]<<24|input.bytes[4]<<16|input.bytes[5]<<8|input.bytes[6]; + var evt=""; + for (var i=0; i<2; i++) { + if ((0x01<>14)) + if (evt==="") + evt=lrs2m001_phase_events[i]; + else + evt=evt+","+lrs2m001_phase_events[i]; + } return { data: { channel: channel, @@ -31,11 +32,11 @@ function decodePhaseData(input, channel, phase) { power_factor: (pow_pf&0x03ff)/1000, active_energy: (input.bytes[7]<<24|input.bytes[8]<<16|input.bytes[9]<<8|input.bytes[10])/10 } - } + }; } else { return { - error: ['unknown packet type'] + errors: ['unknown packet type'] }; } } @@ -43,10 +44,10 @@ function decodePhaseData(input, channel, phase) { function decodeUplink(input) { switch (input.fPort) { case 10: // meter data - var freq_evt = input.bytes[7]<<16|input.bytes[8]<<8|input.bytes[9]; + var freq_evt = input.bytes[7]<<16|input.bytes[8]<<8|input.bytes[9]; var evt=""; - for (let i=0; i<10; i++) { - if ((0x01<>10, - backup_batt: input.bytes[10], - }, + freq: (freq_evt>>10)/100, + backup_batt: input.bytes[10] + } }; case 50: decoded = decodePhaseData(input, 1, 'A'); @@ -99,49 +100,86 @@ function decodeUplink(input) { decoded = decodePhaseData(input, 4, 'C'); return decoded; case 8: // version - var ver = input.bytes[0]+"."+("00"+input.bytes[1]).slice(-2)+"."+("000"+(input.bytes[2]<<8|input.bytes[3])).slice(-3); + var ver = input.bytes[0]+"."+("00"+input.bytes[1]).slice(-2)+"."+("000"+(input.bytes[2]<<8|input.bytes[3])).slice(-3); + return { + data: { + firmwareVersion: ver + } + }; + case 9: // version, battery & uplink count + var ver = input.bytes[0]+"."+("00"+input.bytes[1]).slice(-2)+"."+("000"+(input.bytes[2]<<8|input.bytes[3])).slice(-3); return { data: { firmwareVersion: ver, + batteryLevel: input.bytes[4]<<8|input.bytes[5], + batteryPercentage: input.bytes[6], + uplinkCount: input.bytes[7]<<24|input.bytes[8]<<16|input.bytes[9]<<8|input.bytes[10] } }; case 16: // device settings - if (input.bytes[0] === 0x0a) { + if (input.bytes[0] === 10) { return { data: { dataUploadInterval: input.bytes[1]<<8|input.bytes[2], underVoltageLimit: input.bytes[3]<<8|input.bytes[4], overVoltageLimit: input.bytes[5]<<8|input.bytes[6], - overCurrentLimit: input.bytes[7]<<8|input.bytes[8], + overCurrentLimit: (input.bytes[7]&0x80)?((input.bytes[7]&0x7F)<<8|input.bytes[8])/10 + : input.bytes[7] <<8|input.bytes[8] } - }; + }; } else { return { - error: ['unknown packet type'] + errors: ['unknown packet type'] }; - } + } + break; + case 17: // device settings + if (input.bytes[0] === 10) { + return { + data: { + overCurrentLatency: input.bytes[1]<<8|input.bytes[2], + normalCurrentLatency: input.bytes[3]<<8|input.bytes[4], + uplinkAlertClear: input.bytes[5] ? "enable" : "disable" + } + }; + } + else { + return { + errors: ['unknown packet type'] + }; + } break; default: return { - errors: ['unknown FPort'], + errors: ['unknown FPort'] }; } } +function isNumber(value) { + return typeof value === 'number'; +} + function encodeDownlink(input) { var payload = []; if (input.data.cmd === 'getFirmwareVersion') { return { fPort: 20, - bytes: [0] + bytes: [0x00] }; } else if (input.data.cmd === 'getDeviceSettings') { return { fPort: 21, - bytes: [0] + bytes: [0x0A, 0x00] + }; + } + else if (input.data.cmd === 'getLatencySettings') { + return { + fPort: 21, + bytes: [0x0A, 0x01] }; } else if (input.data.cmd === 'setDeviceSettings') { @@ -150,9 +188,31 @@ function encodeDownlink(input) { var ovl = input.data.overVoltageLimit; var ocl = input.data.overCurrentLimit; var dack = 1; - return { - fPort: 22, - bytes: payload.concat(ult>>8,ult&0xff,uvl>>8,uvl&0xff,ovl>>8,ovl&0xff,ocl>>8,ocl&0xff,dack) - }; + if (isNumber(ult) && isNumber(uvl) && isNumber(ovl) && isNumber(ocl)) { + return { + fPort: 22, + bytes: payload.concat(0x0a, + (ult>>8)&0xff,ult&0xff, + (uvl>>8)&0xff,uvl&0xff, + (ovl>>8)&0xff,ovl&0xff, + (ocl>>8)&0xff,ocl&0xff, + dack) + }; + } + } + else if (input.data.cmd === 'setLatencySettings') { + var ocla = input.data.overCurrentLatency; + var ncla = input.data.normalCurrentLatency; + var ulrm = input.data.uplinkAlertClear.toLowerCase(); + if (isNumber(ocla) && isNumber(ncla) && ((ulrm === 'enable') || (ulrm === 'disable'))) { + return { + fPort: 23, + bytes: payload.concat(0x0a, + (ocla>>8)&0xff,ocla&0xff, + (ncla>>8)&0xff,ncla&0xff, + (ulrm === 'enable')*1) + }; + } } } + diff --git a/vendor/arwin-technology/lrs2m001-4xxx.png b/vendor/arwin-technology/lrs2m001-4p3p.png similarity index 100% rename from vendor/arwin-technology/lrs2m001-4xxx.png rename to vendor/arwin-technology/lrs2m001-4p3p.png diff --git a/vendor/arwin-technology/lrs2m001-4xxx.yaml b/vendor/arwin-technology/lrs2m001-4p3p.yaml similarity index 89% rename from vendor/arwin-technology/lrs2m001-4xxx.yaml rename to vendor/arwin-technology/lrs2m001-4p3p.yaml index 3c57c882a7..b058d4b09d 100755 --- a/vendor/arwin-technology/lrs2m001-4xxx.yaml +++ b/vendor/arwin-technology/lrs2m001-4p3p.yaml @@ -1,5 +1,5 @@ -name: LRS2M001-4P3P - Power Monitoring Sensor -description: Power Monitoring Sensor +name: SENSO8 LRS2M001-4P3P - Power Monitoring Sensor +description: Power Monitoring Sensor by Arwin Technology Ltd. # Hardware versions (optional, use when you have revisions) hardwareVersions: @@ -29,15 +29,15 @@ firmwareVersions: # Identifier of the profile (lowercase, alphanumeric with dashes, max 36 characters) id: eu868-profile lorawanCertified: false - codec: lrs2m001-4xxx-codec + codec: lrs2m001-4p3p-codec US902-928: id: us915-profile lorawanCertified: false - codec: lrs2m001-4xxx-codec + codec: lrs2m001-4p3p-codec AS923: id: as923-profile lorawanCertified: false - codec: lrs2m001-4xxx-codec + codec: lrs2m001-4p3p-codec # Sensors that this device features (optional) # Valid values are: @@ -61,7 +61,7 @@ dimensions: height: 39 # Weight in grams (optional) -weight: 116 +weight: 115 # Operating conditions (optional) operatingConditions: @@ -69,10 +69,6 @@ operatingConditions: temperature: min: -20 max: 70 - # Relative humidity (fraction of 1) - relativeHumidity: - min: 0 - max: 0.95 # Key provisioning (optional) # Valid values are: custom (user can configure keys), join server and manifest. @@ -93,8 +89,8 @@ keySecurity: none # Product and data sheet URLs (optional) productURL: https://www.senso8.com/senso8-lora-sensors -dataSheetURL: https://s3.ap-northeast-1.amazonaws.com/www.senso8.com/lora/docs/DS_LRS2M001-40xx.pdf +dataSheetURL: https://s3.ap-northeast-1.amazonaws.com/www.senso8.com/senso8_datasheet/LoRaWAN/DS_LRS20M001-4xxx.pdf # Photos photos: - main: lrs2m001-4xxx.png + main: lrs2m001-4p3p.png diff --git a/vendor/arwin-technology/lrs2m001-4xxx-codec.yaml b/vendor/arwin-technology/lrs2m001-4xxx-codec.yaml deleted file mode 100755 index e0ea3a258e..0000000000 --- a/vendor/arwin-technology/lrs2m001-4xxx-codec.yaml +++ /dev/null @@ -1,116 +0,0 @@ -# Uplink decoder decodes binary data uplink into a JSON object (optional) -# For documentation on writing encoders and decoders, see: https://www.thethingsindustries.com/docs/integrations/payload-formatters/javascript/ -uplinkDecoder: - fileName: lrs2m001-4xxx.js - examples: - - description: Phase A 220V, Phase B 198V, Phase C 242V, Frequency 50Hz, Phase B under voltage, Phase C over voltage, Backup battery 80% - input: - fPort: 10 - bytes: [10, 8, 152, 7, 188, 9, 116, 0, 200, 24, 80] - output: - data: - event: ph_C_over_V,ph_B_under_V - phase_A_V: 220 - phase_B_V: 198 - phase_C_V: 242 - freq: 50 - backup_batt: 80 - - description: Channel 1 Phase A Over current, 178.9A, Active Power39358W, Power Factor 0.875, Active Energy 5678.9kWh - input: - fPort: 50 - bytes: [10, 70, 253, 21, 4, 255, 107, 0, 0, 221, 213] - output: - data: - channel: 1 - phase: A - event: 'over_current' - current: 178.9 - active_pow: 34438.3 - power_factor: 0.875 - active_energy: 5678.9 - - description: Channel 2 Phase C Over current, 620.5A, Active Power 117274.5W, Power Factor 0.9, Active Energy 2379645kWh - input: - fPort: 55 - bytes: [10, 24, 61, 71, 148, 39, 132, 1, 107, 26, 226] - output: - data: - channel: 2 - phase: C - event: '' - current: 620.5 - active_pow: 117274.5 - power_factor: 0.9 - active_energy: 2379645 - - description: Channel 3 Phase B Over current, 956.4A, Active Power 195679.4W, Power Factor 0.93, Active Energy 3765836.3 - input: - fPort: 57 - bytes: [10, 165, 92, 119, 110, 235, 162, 2, 62, 158, 251] - output: - data: - channel: 3 - phase: B - event: 'heartbeat/button' - current: 956.4 - active_pow: 195679.4 - power_factor: 0.93 - active_energy: 3765836.3 - - description: Channel 4 Phase B Over current, 865.4A, Active Power 39358W, Power Factor 0.875, Active Energy 5678.9kWh - input: - fPort: 60 - bytes: [10, 225, 206, 157, 58, 27, 82, 0, 8, 170, 84] - output: - data: - channel: 4 - phase: B - event: 'over_current,heartbeat/button' - current: 865.4 - active_pow: -161829.8 - power_factor: 0.85 - active_energy: 56789.2 - - description: Firmware version 1.00.001 - input: - fPort: 8 - bytes: [1, 0, 0, 1] - output: - data: - firmwareVersion: '1.00.001' - - description: Power meter settings, data upload interval = 15 min - input: - fPort: 16 - bytes: [10, 0, 15, 0, 195, 0, 245, 3, 232] - output: - data: - dataUploadInterval: 15 - underVoltageLimit: 195 - overVoltageLimit: 245 - overCurrentLimit: 1000 - -# Downlink encoder encodes JSON object into a binary data downlink (optional) -downlinkEncoder: - fileName: lrs2m001-4xxx.js - examples: - - description: Get firmware version - input: - data: - cmd: getFirmwareVersion - output: - fPort: 20 - bytes: [0] - - description: Get power meter settings - input: - data: - cmd: getDeviceSettings - output: - fPort: 21 - bytes: [0] - - description: Set power meter settings - input: - data: - cmd: setDeviceSettings - dataUploadInterval: 30 - underVoltageLimit: 205 - overVoltageLimit: 235 - overCurrentLimit: 300 - output: - fPort: 22 - bytes: [0, 30, 0, 205, 0, 235, 1, 44, 1]