From 10e2241ef63d8bac1b4b6845c2645c0e06dcad09 Mon Sep 17 00:00:00 2001 From: thingsboard017 Date: Fri, 13 Dec 2024 10:30:35 +0200 Subject: [PATCH 1/3] Added 4 LNS integrations for EM500-CO2 --- .../ChirpStack/uplink/converter.json | 39 +++++++++ .../EM500-CO2/ChirpStack/uplink/metadata.json | 4 + .../EM500-CO2/ChirpStack/uplink/payload.json | 48 +++++++++++ .../EM500-CO2/ChirpStack/uplink/result.json | 29 +++++++ .../EM500-CO2/LORIOT/uplink/converter.json | 29 +++++++ .../EM500-CO2/LORIOT/uplink/metadata.json | 4 + .../EM500-CO2/LORIOT/uplink/payload.json | 17 ++++ .../EM500-CO2/LORIOT/uplink/result.json | 19 +++++ .../uplink/converter.json | 39 +++++++++ .../ThingsStackCommunity/uplink/metadata.json | 4 + .../ThingsStackCommunity/uplink/payload.json | 54 ++++++++++++ .../ThingsStackCommunity/uplink/result.json | 30 +++++++ .../uplink/converter.json | 40 +++++++++ .../uplink/metadata.json | 4 + .../ThingsStackIndustries/uplink/payload.json | 77 ++++++++++++++++++ .../ThingsStackIndustries/uplink/result.json | 30 +++++++ VENDORS/Milesight/EM500-CO2/guide.md | 15 ++++ VENDORS/Milesight/EM500-CO2/info.json | 5 ++ VENDORS/Milesight/EM500-CO2/photo.png | Bin 0 -> 115101 bytes 19 files changed, 487 insertions(+) create mode 100644 VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/converter.json create mode 100644 VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/metadata.json create mode 100644 VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/payload.json create mode 100644 VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/result.json create mode 100644 VENDORS/Milesight/EM500-CO2/LORIOT/uplink/converter.json create mode 100644 VENDORS/Milesight/EM500-CO2/LORIOT/uplink/metadata.json create mode 100644 VENDORS/Milesight/EM500-CO2/LORIOT/uplink/payload.json create mode 100644 VENDORS/Milesight/EM500-CO2/LORIOT/uplink/result.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/converter.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/metadata.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/payload.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/result.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/converter.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/metadata.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/payload.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/result.json create mode 100644 VENDORS/Milesight/EM500-CO2/guide.md create mode 100644 VENDORS/Milesight/EM500-CO2/info.json create mode 100644 VENDORS/Milesight/EM500-CO2/photo.png diff --git a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/converter.json b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/converter.json new file mode 100644 index 00000000..e802bdfc --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/converter.json @@ -0,0 +1,39 @@ +{ + "name": "ChirpStack Uplink Decoder for EM500-C02", + "type": "UPLINK", + "debugMode": false, + "debugSettings": { + "failuresEnabled": true, + "allEnabled": false, + "allEnabledUntil": 1733331880270 + }, + "configuration": { + "scriptLang": "TBEL", + "decoder": null, + "tbelDecoder": "var data = decodeToJson(payload);\nvar deviceName = data.deviceInfo.deviceName + \" \" + data.deviceInfo.devEui;\nvar deviceType = \"EM500-C02\";\nvar groupName = null; // If groupName is not null - created device will be added to the entity group with such name.\nvar customerName = null; // If customerName is not null - created devices will be assigned to customer with such name. \n\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// If you want to parse incoming data somehow, you can add your code to this function.\n// input: bytes\n// expected output:\n// {\n// \"attributes\": {\"attributeKey\": \"attributeValue\"},\n// \"telemetry\": [{\"ts\": 1...1, \"values\": {\"telemetryKey\":\"telemetryValue\"}, {\"ts\": 1...2, \"values\": {\"telemetryKey\":\"telemetryValue\"}}]\n// }\n\nfunction decodePayload(input) {\n var output = {\n attributes: {},\n telemetry: []\n };\n \n // --- Decoding code --- //\n var decoded = {};\n var historyDataList = [];\n for (var i = 0; i < input.length - 2 ; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n \n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n else if (channel_id === 0x03 && channel_type === 0x67) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n \n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n else if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // CO2\n else if (channel_id === 0x05 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n else if (channel_id === 0x06 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n // TEMPERATURE CHANGE ALARM\n else if (channel_id === 0x83 && channel_type === 0xd7) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n decoded.temperature_change = parseBytesToInt(input, i + 2, 2, false) / 10;\n decoded.temperature_alarm = readTemperatureAlarm(input[i + 4]);\n i += 5;\n }\n // HISTROY\n else if (channel_id === 0x20 && channel_type === 0xce) {\n var historyData = {\n ts: parseBytesToInt(input, i, 4, false) * 1000,\n values: {\n co2: parseBytesToInt(input, i + 4, 2, false),\n pressure: parseBytesToInt(input, i + 6, 1, false) / 10,\n temperature: parseBytesToInt(input, i + 8, 2, false) / 10,\n humidity: parseBytesToInt(input, i + 10, 1, false, false) / 2\n }\n };\n i += 11;\n \n historyDataList.add(historyData);\n } \n }\n\n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }];\n \n output.telemetry.addAll(historyDataList);\n // --- Decoding code --- //\n return output;\n}\n\n// --- attributes and telemetry objects ---\nvar telemetry = [];\nvar attributes = {};\n// --- attributes and telemetry objects ---\n\n// --- Timestamp parsing\nvar dateString = data.time;\ntimestamp = parseDateToTimestamp(dateString);\n// --- Timestamp parsing\n\n// Passing incoming bytes to decodePayload function, to get custom decoding\nvar customDecoding = decodePayload(base64ToBytes(data.data));\n\n\nattributes.eui = data.deviceInfo.devEui;\n\n// Collecting data to result\nif (customDecoding.?telemetry.size() > 0) {\n if (customDecoding.telemetry instanceof java.util.ArrayList) {\n foreach(telemetryObj: customDecoding.telemetry) {\n if (telemetryObj.ts != null && telemetryObj.values != null) {\n telemetry.add(telemetryObj);\n }\n }\n } else {\n telemetry.putAll(customDecoding.telemetry);\n }\n}\n\nif (customDecoding.?attributes.size() > 0) {\n attributes.putAll(customDecoding.attributes);\n}\n\n// You can add some keys manually to attributes or telemetry\nattributes.eui = data.deviceInfo.?devEui;\nattributes.devAddr = data.devAddr;\nattributes.fPort = data.fPort;\nattributes.applicationId = data.deviceInfo.?applicationId;\nattributes.applicationName = data.deviceInfo.?applicationName;\nattributes.tenantId = data.deviceInfo.?tenantId;\nattributes.tenantName = data.deviceInfo.?tenantName;\nattributes.deviceProfileId = data.deviceInfo.?deviceProfileId;\nattributes.deviceProfileName = data.deviceInfo.?deviceProfileName;\nattributes.frequency = data.txInfo.?frequency;\nattributes.bandwidth = data.txInfo.?modulation.?lora.?bandwidth;\nattributes.spreadingFactor = data.txInfo.?modulation.?lora.?spreadingFactor;\nattributes.codeRate = data.txInfo.?modulation.?lora.?codeRate;\n\nif(Boolean.parseBoolean(metadata[\"includeGatewayInfo\"])) {\n var gatewayInfo = getGatewayInfo();\n var addDataToTelemetry = {};\n addDataToTelemetry.snr = gatewayInfo.snr;\n addDataToTelemetry.rssi = gatewayInfo.rssi;\n addDataToTelemetry.channel = gatewayInfo.channel;\n addDataToTelemetry.rfChain = gatewayInfo.rfChain;\n addDataToTelemetry.fCnt = data.fCnt;\n \n telemetry = processTelemetryData(telemetry, addDataToTelemetry);\n}\n\nvar result = {\n deviceName: deviceName,\n deviceType: deviceType,\n // assetName: assetName,\n // assetType: assetType,\n attributes: attributes,\n telemetry: telemetry\n};\n\naddAdditionalInfoForDeviceMsg(result, customerName, groupName);\n\nreturn result;\n\nfunction addAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName) {\n if (customerName != null) {\n deviceInfo.customerName = customerName;\n }\n if (groupName != null) {\n deviceInfo.groupName = groupName;\n }\n}\n\nfunction parseDateToTimestamp(dateString) {\n var date = new Date(dateString);\n var timestamp = date.getTime();\n \n // If we cannot parse timestamp - we will use the current timestamp\n if (timestamp == -1) {\n timestamp = Date.now();\n }\n \n return timestamp;\n}\n\nfunction getGatewayInfo() {\n var gatewayList = data.rxInfo;\n var maxRssi = Integer.MIN_VALUE;\n var gatewayInfo = {};\n \n foreach (gateway : gatewayList) {\n if(gateway.rssi > maxRssi) {\n maxRssi = gateway.rssi;\n gatewayInfo = gateway;\n }\n }\n \n return gatewayInfo;\n}\n\nfunction processTelemetryData(telemetry, addDataToTelemetry) {\n if (telemetry.size >= 1) {\n telemetry = addDataToTelemetries(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToTelemetries(telemetries, addDataToTelemetry) {\n foreach(telemetry : telemetries) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[\"values\"].keys.contains(element.key)) {\n telemetry[\"values\"][element.key] = element.value;\n }\n } \n }\n \n return telemetries;\n}\n\nfunction readTemperatureAlarm(type) {\n switch (type) {\n case 0:\n return \"threshold alarm\";\n case 1:\n return \"threshold alarm release\";\n case 2:\n return \"mutation alarm\";\n default:\n return \"unkown\";\n }\n}", + "encoder": null, + "tbelEncoder": null, + "updateOnlyKeys": [ + "tenantId", + "tenantName", + "applicationId", + "applicationName", + "deviceProfileId", + "deviceProfileName", + "devAddr", + "fPort", + "frequency", + "bandwidth", + "spreadingFactor", + "codeRate", + "channel", + "rfChain", + "eui", + "battery" + ] + }, + "additionalInfo": { + "description": "" + }, + "edgeTemplate": false +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/metadata.json b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/metadata.json new file mode 100644 index 00000000..23f54b34 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/metadata.json @@ -0,0 +1,4 @@ +{ + "integrationName": "ChirpStack integration", + "includeGatewayInfo": "false" +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/payload.json b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/payload.json new file mode 100644 index 00000000..88086852 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/payload.json @@ -0,0 +1,48 @@ +{ + "deduplicationId": "57433366-50a6-4dc2-8145-2df1bbc70d9e", + "time": "2023-05-22T07:47:05.404859+00:00", + "deviceInfo": { + "tenantId": "52f14cd4-c6f1-4fbd-8f87-4025e1d49242", + "tenantName": "ChirpStack", + "applicationId": "ca739e26-7b67-4f14-b69e-d568c22a5a75", + "applicationName": "Chirpstack application", + "deviceProfileId": "605d08d4-65f5-4d2c-8a5a-3d2457662f79", + "deviceProfileName": "Chirpstack default device profile", + "deviceName": "Device name", + "devEui": "1000000000000001", + "tags": {} + }, + "devAddr": "20000001", + "adr": true, + "dr": 5, + "fCnt": 4, + "fPort": 85, + "confirmed": false, + "data": "AXVkA2cZAQRocwV9ZwQGc2gn", + "rxInfo": [{ + "gatewayId": "6a7e111a10000000", + "uplinkId": 24022, + "time": "2023-05-22T07:47:05.404859+00:00", + "rssi": -35, + "snr": 11.5, + "channel": 2, + "rfChain": 1, + "location": {}, + "context": "EFwMtA==", + "metadata": { + "region_common_name": "EU868", + "region_config_id": "eu868" + }, + "crcStatus": "CRC_OK" + }], + "txInfo": { + "frequency": 868500000, + "modulation": { + "lora": { + "bandwidth": 125000, + "spreadingFactor": 7, + "codeRate": "CR_4_5" + } + } + } +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/result.json b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/result.json new file mode 100644 index 00000000..84dcc988 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/result.json @@ -0,0 +1,29 @@ +{ + "deviceName": "Device name 1000000000000001", + "deviceType": "EM500-C02", + "attributes": { + "eui": "1000000000000001", + "devAddr": "20000001", + "fPort": 85, + "applicationId": "ca739e26-7b67-4f14-b69e-d568c22a5a75", + "applicationName": "Chirpstack application", + "tenantId": "52f14cd4-c6f1-4fbd-8f87-4025e1d49242", + "tenantName": "ChirpStack", + "deviceProfileId": "605d08d4-65f5-4d2c-8a5a-3d2457662f79", + "deviceProfileName": "Chirpstack default device profile", + "frequency": 868500000, + "bandwidth": 125000, + "spreadingFactor": 7, + "codeRate": "CR_4_5" + }, + "telemetry": [{ + "ts": 1684741625404, + "values": { + "battery": 100, + "temperature": 28.1, + "humidity": 57.5, + "co2": 1127, + "pressure": 1008.8 + } + }] +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/converter.json b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/converter.json new file mode 100644 index 00000000..593aaa31 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/converter.json @@ -0,0 +1,29 @@ +{ + "name": "Loriot Uplink Decoder for EM500-C02", + "type": "UPLINK", + "debugMode": false, + "debugSettings": { + "failuresEnabled": true, + "allEnabled": false, + "allEnabledUntil": 1733331880270 + }, + "configuration": { + "scriptLang": "TBEL", + "decoder": "// Decode an uplink message from a buffer\n// payload - array of bytes\n// metadata - key/value object\n\n/** Decoder **/\n\n// decode payload to string\nvar payloadStr = decodeToString(payload);\n\n// decode payload to JSON\n// var data = decodeToJson(payload);\n\nvar deviceName = 'Device A';\nvar deviceType = 'thermostat';\nvar customerName = 'Customer C';\nvar groupName = 'thermostat devices';\nvar manufacturer = 'Example corporation';\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// Result object with device/asset attributes/telemetry data\nvar result = {\n// Use deviceName and deviceType or assetName and assetType, but not both.\n deviceName: deviceName,\n deviceType: deviceType,\n// assetName: assetName,\n// assetType: assetType,\n// customerName: customerName,\n groupName: groupName,\n attributes: {\n model: 'Model A',\n serialNumber: 'SN111',\n integrationName: metadata['integrationName'],\n manufacturer: manufacturer\n },\n telemetry: {\n temperature: 42,\n humidity: 80,\n rawData: payloadStr\n }\n};\n\n/** Helper functions **/\n\nfunction decodeToString(payload) {\n return String.fromCharCode.apply(String, payload);\n}\n\nfunction decodeToJson(payload) {\n // covert payload to string.\n var str = decodeToString(payload);\n\n // parse string to JSON\n var data = JSON.parse(str);\n return data;\n}\n\nreturn result;", + "tbelDecoder": "var data = decodeToJson(payload);\nvar deviceName = data.EUI;\nvar deviceType = \"EM500-C02\";\nvar groupName = null; // If groupName is not null - created device will be added to the entity group with such name.\nvar customerName = null; // If customerName is not null - created devices will be assigned to customer with such name. \n\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// If you want to parse incoming data somehow, you can add your code to this function.\n// input: bytes\n// expected output:\n// {\n// \"attributes\": {\"attributeKey\": \"attributeValue\"},\n// \"telemetry\": {\"telemetryKey\": \"telemetryValue\"}\n// }\n\nfunction decodePayload(input) {\n var output = { attributes: {}, telemetry: []};\n \n var decoded = {};\n var historyDataList = [];\n for (var i = 0; i < input.length - 2 ; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n \n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n else if (channel_id === 0x03 && channel_type === 0x67) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n \n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n else if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // CO2\n else if (channel_id === 0x05 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n else if (channel_id === 0x06 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n // TEMPERATURE CHANGE ALARM\n else if (channel_id === 0x83 && channel_type === 0xd7) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n decoded.temperature_change = parseBytesToInt(input, i + 2, 2, false) / 10;\n decoded.temperature_alarm = readTemperatureAlarm(input[i + 4]);\n i += 5;\n }\n // HISTROY\n else if (channel_id === 0x20 && channel_type === 0xce) {\n var historyData = {\n ts: parseBytesToInt(input, i, 4, false) * 1000,\n values: {\n co2: parseBytesToInt(input, i + 4, 2, false),\n pressure: parseBytesToInt(input, i + 6, 1, false) / 10,\n temperature: parseBytesToInt(input, i + 8, 2, false) / 10,\n humidity: parseBytesToInt(input, i + 10, 1, false, false) / 2\n }\n };\n i += 11;\n \n historyDataList.add(historyData);\n } \n }\n \n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }];\n\n // --- Decoding code --- //\n return output;\n}\n\n// --- attributes and telemetry objects ---\nvar telemetry = [];\nvar attributes = {};\n// --- attributes and telemetry objects ---\n\n// --- Timestamp parsing\ntimestamp = data.ts;\n// --- Timestamp parsing\n\n// Message parsing\n// To avoid paths in the decoded objects we passing false value to function as \"pathInKey\" argument.\n// Warning: pathInKey can cause already found fields to be overwritten with the last value found.\n\nvar uplinkDataList = [];\n\n// Passing incoming bytes to decodePayload function, to get custom decoding\nvar customDecoding = decodePayload(hexToBytes(data.data));\n\n// Collecting data to result\nif (customDecoding.?telemetry.size() > 0) {\n if (customDecoding.telemetry instanceof java.util.ArrayList) {\n foreach(telemetryObj: customDecoding.telemetry) {\n if (telemetryObj.ts != null && telemetryObj.values != null) {\n telemetry.add(telemetryObj);\n }\n }\n } else {\n telemetry.putAll(customDecoding.telemetry);\n }\n}\n\nif (customDecoding.?attributes.size() > 0) {\n attributes.putAll(customDecoding.attributes);\n}\n\n// You can add some keys manually to attributes or telemetry\nattributes.eui = data.EUI;\nattributes.fPort = data.port;\nattributes.frequency = data.freq;\n\nvar isIncludeGatewayInfo = metadata[\"includeGatewayInfo\"];\nif(isIncludeGatewayInfo == true) {\n var addDataToTelemetry = {};\n addDataToTelemetry.rssi = data.rssi;\n addDataToTelemetry.seqno = data.seqno;\n addDataToTelemetry.snr = data.snr;\n addDataToTelemetry.ack = data.ack;\n addDataToTelemetry.toa = data.toa;\n addDataToTelemetry.fCnt = data.fcnt;\n \n telemetry = processTelemetryData(telemetry, addDataToTelemetry);\n}\n\nvar deviceInfo = {\n deviceName: deviceName,\n deviceType: deviceType,\n// assetName: assetName,\n// assetType: assetType,\n attributes: attributes,\n telemetry: telemetry, \n};\n\naddAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName);\n\nuplinkDataList.add(deviceInfo);\n\nvar gatewayDeviceNamePrefix = \"Gateway \";\nvar gatewayDeviceType = \"Lora gateway\";\nvar gatewayGroupName = null; // If gatewayGroupName is not null - created device will be added to the entity group with such name.\n\nif (data.cmd == \"gw\") {\n foreach( gatewayInfo : data.gws ) {\n var addGatewayInfo = {};\n\n // You can add some keys manually telemetry\n addGatewayInfo.rssi = gatewayInfo.rssi;\n addGatewayInfo.snr = gatewayInfo.snr;\n // You can add some keys manually telemetry\n \n var gatewayInfoMsg = {\n deviceName: gatewayDeviceNamePrefix + gatewayInfo.gweui,\n deviceType: gatewayDeviceType,\n telemetry: [{\n \"ts\": gatewayInfo.ts,\n \"values\": addGatewayInfo\n }],\n attributes: {\n eui: gatewayInfo.gweui\n }\n };\n addAdditionalInfoForDeviceMsg(gatewayInfoMsg, customerName, gatewayGroupName);\n uplinkDataList.add(gatewayInfoMsg);\n }\n}\n\nreturn uplinkDataList;\n\nfunction addAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName) {\n if (customerName != null) {\n deviceInfo.customerName = customerName;\n }\n if (groupName != null) {\n deviceInfo.groupName = groupName;\n }\n}\n\nfunction processTelemetryData(telemetry, addDataToTelemetry) {\n if (telemetry.size >= 1) {\n telemetry = addDataToTelemetries(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToTelemetries(telemetries, addDataToTelemetry) {\n foreach(telemetry : telemetries) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[\"values\"].keys.contains(element.key)) {\n telemetry[\"values\"][element.key] = element.value;\n }\n } \n }\n \n return telemetries;\n}\n\nfunction readTemperatureAlarm(type) {\n switch (type) {\n case 0:\n return \"threshold alarm\";\n case 1:\n return \"threshold alarm release\";\n case 2:\n return \"mutation alarm\";\n default:\n return \"unkown\";\n }\n}", + "encoder": null, + "tbelEncoder": null, + "updateOnlyKeys": [ + "fPort", + "ack", + "eui", + "frequency", + "dr", + "battery" + ] + }, + "additionalInfo": { + "description": "" + }, + "edgeTemplate": false +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/metadata.json b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/metadata.json new file mode 100644 index 00000000..ae2ee743 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/metadata.json @@ -0,0 +1,4 @@ +{ + "integrationName": "Loriot integration", + "includeGatewayInfo": "false" +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/payload.json b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/payload.json new file mode 100644 index 00000000..0bbb8113 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/payload.json @@ -0,0 +1,17 @@ +{ + "cmd": "rx", + "seqno": 3040, + "EUI": "1000000000000001", + "ts": 1684478801936, + "fcnt": 2, + "port": 85, + "freq": 867500000, + "rssi": -21, + "snr": 10, + "toa": 206, + "dr": "SF9 BW125 4/5", + "ack": false, + "bat": 94, + "offline": false, + "data": "01756403671901046873057D670406736827" +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/result.json b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/result.json new file mode 100644 index 00000000..08bd685b --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/result.json @@ -0,0 +1,19 @@ +[{ + "deviceName": "1000000000000001", + "deviceType": "EM500-C02", + "attributes": { + "eui": "1000000000000001", + "fPort": 85, + "frequency": 867500000 + }, + "telemetry": [{ + "ts": 1684478801936, + "values": { + "battery": 100, + "temperature": 28.1, + "humidity": 57.5, + "co2": 1127, + "pressure": 1008.8 + } + }] +}] \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/converter.json b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/converter.json new file mode 100644 index 00000000..6a810945 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/converter.json @@ -0,0 +1,39 @@ +{ + "name": "The Things Stack Community Uplink Decoder for EM500-C02", + "type": "UPLINK", + "debugMode": false, + "debugSettings": { + "failuresEnabled": true, + "allEnabled": false, + "allEnabledUntil": 1733331880270 + }, + "configuration": { + "scriptLang": "TBEL", + "decoder": null, + "tbelDecoder": "var data = decodeToJson(payload);\n\nvar deviceName = data.end_device_ids.device_id;\nvar deviceType = \"EM500-C02\";\nvar groupName = null; // If groupName is not null - created device will be added to the entity group with such name.\nvar customerName = null; // If customerName is not null - created devices will be assigned to customer with such name. \n\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// If you want to parse incoming data somehow, you can add your code to this function.\n// input: bytes\n// expected output:\n// {\n// \"attributes\": {\"attributeKey\": \"attributeValue\"},\n// \"telemetry\": [{\"ts\": 1...1, \"values\": {\"telemetryKey\":\"telemetryValue\"}, {\"ts\": 1...2, \"values\": {\"telemetryKey\":\"telemetryValue\"}}]\n// }\n\nfunction decodeFrmPayload(input) {\n var output = {\n attributes: {}, telemetry: {}\n };\n \n // --- Decoding code --- //\n var decoded = {};\n var historyDataList = [];\n for (var i = 0; i < input.length - 2 ; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n \n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n else if (channel_id === 0x03 && channel_type === 0x67) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n \n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n else if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // CO2\n else if (channel_id === 0x05 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n else if (channel_id === 0x06 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n // TEMPERATURE CHANGE ALARM\n else if (channel_id === 0x83 && channel_type === 0xd7) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n decoded.temperature_change = parseBytesToInt(input, i + 2, 2, false) / 10;\n decoded.temperature_alarm = readTemperatureAlarm(input[i + 4]);\n i += 5;\n }\n // HISTROY\n else if (channel_id === 0x20 && channel_type === 0xce) {\n var historyData = {\n ts: parseBytesToInt(input, i, 4, false) * 1000,\n values: {\n co2: parseBytesToInt(input, i + 4, 2, false),\n pressure: parseBytesToInt(input, i + 6, 1, false) / 10,\n temperature: parseBytesToInt(input, i + 8, 2, false) / 10,\n humidity: parseBytesToInt(input, i + 10, 1, false, false) / 2\n }\n };\n i += 11;\n \n historyDataList.add(historyData);\n } \n }\n \n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }];\n \n // --- Decoding code --- //\n return output;\n}\n\n\n// --- attributes and telemetry objects ---\nvar telemetry = [];\nvar attributes = {};\n// --- attributes and telemetry objects ---\n\n// --- Timestamp parsing\nvar dateString = data.uplink_message.received_at;\n// If data is simulated or device doesn't send his own date string - we will use date from upcoming message, set by network server\nif ((data.simulated != null && data.simulated) || dateString == null) {\n dateString = data.received_at;\n}\ntimestamp = parseDateToTimestamp(dateString);\n// --- Timestamp parsing\n\n// Message parsing\n// To avoid paths in the decoded objects we passing false value to function as \"pathInKey\" argument.\n// Warning: pathInKey can cause already found fields to be overwritten with the last value found, e.g. receive_at from uplink_message will be written receive_at in the root.\n\n// Passing incoming bytes to decodeFrmPayload function, to get custom decoding\nvar customDecoding = {};\nif (data.uplink_message.get(\"frm_payload\") != null) {\n customDecoding = decodeFrmPayload(base64ToBytes(data.uplink_message.frm_payload));\n}\n\n// Collecting data to result\nif (customDecoding.?telemetry.size() > 0) {\n if (customDecoding.telemetry instanceof java.util.ArrayList) {\n foreach(telemetryObj: customDecoding.telemetry) {\n if (telemetryObj.ts != null && telemetryObj.values != null) {\n telemetry.add(telemetryObj);\n }\n }\n } else {\n telemetry.putAll(customDecoding.telemetry);\n }\n}\n\nif (customDecoding.?attributes.size() > 0) {\n attributes.putAll(customDecoding.attributes);\n}\n\n// You can add some keys manually to attributes or telemetry\nvar applicationId = data.end_device_ids.?application_ids.?application_id;\nvar devAddr = data.end_device_ids.?dev_addr;\nvar spreadingFactor = data.uplink_message.?settings.?data_rate.?lora.?spreading_factor;\nvar codeRate = data.uplink_message.?settings.?data_rate.?lora.?coding_rate;\nvar tenantId = data.uplink_message.?network_ids.?tenant_id;\nattributes.eui = data.end_device_ids.dev_eui;\nattributes.fPort = data.uplink_message.f_port;\nattributes.applicationId = applicationId;\nattributes.devAddr = devAddr;\nattributes.spreadingFactor = spreadingFactor;\nattributes.codeRate = codeRate;\nattributes.tenantId = tenantId;\nattributes.device_id = data.end_device_ids.?device_id;\nattributes.join_eui = data.end_device_ids.?join_eui;\nattributes.net_id = data.uplink_message.?network_ids.?net_id;\nattributes.cluster_id = data.uplink_message.?network_ids.?cluster_id;\nattributes.cluster_adress = data.uplink_message.?network_ids.?cluster_address;\nattributes.bandwidth = data.uplink_message.?settings.?data_rate.?lora.?bandwidth;\nattributes.frequency = data.uplink_message.?settings.?frequency;\n\n\nvar gatewayInfo = getGatewayInfo();\nvar addDataToTelemetry = {};\naddDataToTelemetry.snr = gatewayInfo.snr;\naddDataToTelemetry.rssi = gatewayInfo.rssi;\naddDataToTelemetry.channel = gatewayInfo.channel_index;\naddDataToTelemetry.consumed_airtime = data.uplink_message.?consumed_airtime;\naddDataToTelemetry.fCnt = data.uplink_message.?f_cnt;\n\nvar isIncludeGatewayInfo = metadata[\"includeGatewayInfo\"];\nif(isIncludeGatewayInfo == true) {\n telemetry = processTelemetryData(telemetry, addDataToTelemetry);\n}\n\nvar result = {\n deviceName: deviceName,\n deviceType: deviceType,\n// assetName: assetName,\n// assetType: assetType,\n attributes: attributes,\n telemetry: telemetry\n};\n\naddAdditionalInfoForDeviceMsg(result, customerName, groupName);\n\nreturn result;\n\n\nfunction addAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName) {\n if (customerName != null) {\n deviceInfo.customerName = customerName;\n }\n if (groupName != null) {\n deviceInfo.groupName = groupName;\n }\n}\n\nfunction parseDateToTimestamp(dateString) {\n var date = new Date(dateString);\n var timestamp = date.getTime();\n \n // If we cannot parse timestamp - we will use the current timestamp\n if (timestamp == -1) {\n timestamp = Date.now();\n }\n \n return timestamp;\n}\n\nfunction getGatewayInfo() {\n var gatewayList = data.uplink_message.?rx_metadata;\n var maxRssi = Integer.MIN_VALUE;\n var gatewayInfo = {};\n \n foreach (gateway : gatewayList) {\n if(gateway.rssi > maxRssi) {\n maxRssi = gateway.rssi;\n gatewayInfo = gateway;\n }\n }\n \n return gatewayInfo;\n}\n\nfunction processTelemetryData(telemetry, addDataToTelemetry) {\n if (telemetry.size >= 1) {\n telemetry = addDataToTelemetries(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToTelemetries(telemetries, addDataToTelemetry) {\n foreach(telemetry : telemetries) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[\"values\"].keys.contains(element.key)) {\n telemetry[\"values\"][element.key] = element.value;\n }\n } \n }\n \n return telemetries;\n}\n\nfunction readTemperatureAlarm(type) {\n switch (type) {\n case 0:\n return \"threshold alarm\";\n case 1:\n return \"threshold alarm release\";\n case 2:\n return \"mutation alarm\";\n default:\n return \"unkown\";\n }\n}", + "encoder": null, + "tbelEncoder": null, + "updateOnlyKeys": [ + "fPort", + "bandwidth", + "frequency", + "net_id", + "cluster_id", + "cluster_address", + "device_id", + "join_eui", + "battery", + "eui", + "channel", + "applicationId", + "devAddr", + "spreadingFactor", + "codeRate", + "tenantId" + ] + }, + "additionalInfo": { + "description": "" + }, + "edgeTemplate": false +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/metadata.json b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/metadata.json new file mode 100644 index 00000000..0d75c374 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/metadata.json @@ -0,0 +1,4 @@ +{ + "integrationName": "The Things Stack Community integration", + "includeGatewayInfo": "false" +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/payload.json b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/payload.json new file mode 100644 index 00000000..db5532f6 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/payload.json @@ -0,0 +1,54 @@ +{ + "end_device_ids": { + "device_id": "eui-1000000000000001", + "application_ids": { + "application_id": "application-tts-name" + }, + "dev_eui": "1000000000000001", + "join_eui": "2000000000000001", + "dev_addr": "20000001" + }, + "correlation_ids": ["as:up:01H0S7ZJQ9MQPMVY49FT3SE07M", "gs:conn:01H03BQZ9342X3Y86DJ2P704E5", "gs:up:host:01H03BQZ99EGAM52KK1300GFKN", "gs:uplink:01H0S7ZJGS6D9TJSKJN8XNTMAV", "ns:uplink:01H0S7ZJGS9KKD4HTTPKFEMWCV", "rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01H0S7ZJGSF3M38ZRZVTM38DEC", "rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01H0S7ZJQ8R2EH5AA269AKM8DX"], + "received_at": "2023-05-19T05:33:35.848446463Z", + "uplink_message": { + "session_key_id": "AYfqmb0pc/1uRZv9xUydgQ==", + "f_port": 85, + "f_cnt": 10335, + "frm_payload": "AXVkA2cZAQRocwV9ZwQGc2gn", + "rx_metadata": [{ + "gateway_ids": { + "gateway_id": "eui-6a7e111a10000000", + "eui": "6A7E111A10000000" + }, + "time": "2023-05-19T05:33:35.608982Z", + "timestamp": 3893546133, + "rssi": -35, + "channel_rssi": -35, + "snr": 13.2, + "frequency_offset": "69", + "uplink_token": "CiIKIAoUZXVpLTZhN2UxMTFhMTAwMDAwMDASCCThJP/+9k6eEJWZy8AOGgwIr5ScowYQvNbUsQIgiMy8y6jwpwE=", + "channel_index": 3, + "received_at": "2023-05-19T05:33:35.607383681Z" + }], + "settings": { + "data_rate": { + "lora": { + "bandwidth": 125000, + "spreading_factor": 7, + "coding_rate": "4/5" + } + }, + "frequency": "867100000", + "timestamp": 3893546133, + "time": "2023-05-19T05:33:35.608982Z" + }, + "received_at": "2023-05-19T05:33:35.641841782Z", + "consumed_airtime": "0.056576s", + "network_ids": { + "net_id": "000013", + "tenant_id": "ttn", + "cluster_id": "eu1", + "cluster_address": "eu1.cloud.thethings.network" + } + } +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/result.json b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/result.json new file mode 100644 index 00000000..ac2cd036 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/result.json @@ -0,0 +1,30 @@ +{ + "deviceName": "eui-1000000000000001", + "deviceType": "EM500-C02", + "attributes": { + "eui": "1000000000000001", + "fPort": 85, + "applicationId": "application-tts-name", + "devAddr": "20000001", + "spreadingFactor": 7, + "codeRate": "4/5", + "tenantId": "ttn", + "device_id": "eui-1000000000000001", + "join_eui": "2000000000000001", + "net_id": "000013", + "cluster_id": "eu1", + "cluster_adress": "eu1.cloud.thethings.network", + "bandwidth": 125000, + "frequency": "867100000" + }, + "telemetry": [{ + "ts": 1684474415641, + "values": { + "battery": 100, + "temperature": 28.1, + "humidity": 57.5, + "co2": 1127, + "pressure": 1008.8 + } + }] +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/converter.json b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/converter.json new file mode 100644 index 00000000..966af784 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/converter.json @@ -0,0 +1,40 @@ +{ + "name": "The Things Stack Industries Uplink Decoder for EM500-C02", + "type": "UPLINK", + "debugMode": false, + "debugSettings": { + "failuresEnabled": true, + "allEnabled": false, + "allEnabledUntil": 1733331880270 + }, + "configuration": { + "scriptLang": "TBEL", + "decoder": null, + "tbelDecoder": "var data = decodeToJson(payload);\n\nvar deviceName = data.end_device_ids.device_id;\nvar deviceType = \"EM500-C02\";\nvar groupName = null; // If groupName is not null - created device will be added to the entity group with such name.\nvar customerName = null; // If customerName is not null - created devices will be assigned to customer with such name. \n\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// If you want to parse incoming data somehow, you can add your code to this function.\n// input: bytes\n// expected output:\n// {\n// \"attributes\": {\"attributeKey\": \"attributeValue\"},\n// \"telemetry\": [{\"ts\": 1...1, \"values\": {\"telemetryKey\":\"telemetryValue\"}, {\"ts\": 1...2, \"values\": {\"telemetryKey\":\"telemetryValue\"}}]\n// }\n\nfunction decodeFrmPayload(input) {\n var output = { attributes: {}, telemetry: []};\n \n // --- Decoding code --- //\n var decoded = {};\n var historyDataList = [];\n for (var i = 0; i < input.length - 2 ; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n \n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n else if (channel_id === 0x03 && channel_type === 0x67) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n \n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n else if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // CO2\n else if (channel_id === 0x05 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n else if (channel_id === 0x06 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n // TEMPERATURE CHANGE ALARM\n else if (channel_id === 0x83 && channel_type === 0xd7) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n decoded.temperature_change = parseBytesToInt(input, i + 2, 2, false) / 10;\n decoded.temperature_alarm = readTemperatureAlarm(input[i + 4]);\n i += 5;\n }\n // HISTROY\n else if (channel_id === 0x20 && channel_type === 0xce) {\n var historyData = {\n ts: parseBytesToInt(input, i, 4, false) * 1000,\n values: {\n co2: parseBytesToInt(input, i + 4, 2, false),\n pressure: parseBytesToInt(input, i + 6, 1, false) / 10,\n temperature: parseBytesToInt(input, i + 8, 2, false) / 10,\n humidity: parseBytesToInt(input, i + 10, 1, false, false) / 2\n }\n };\n i += 11;\n \n historyDataList.add(historyData);\n } \n }\n \n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }];\n\n // --- Decoding code --- //\n return output;\n}\n\n// --- attributes and telemetry objects ---\nvar telemetry = [];\nvar attributes = {};\n// --- attributes and telemetry objects ---\n\n// --- Timestamp parsing\nvar dateString = data.uplink_message.received_at;\n\nif ((data.simulated != null && data.simulated) || dateString == null) {\n dateString = data.received_at;\n}\n\ntimestamp = parseDateToTimestamp(dateString);\n// --- Timestamp parsing\n\n// Message parsing\n// To avoid paths in the decoded objects we passing false value to function as \"pathInKey\" argument.\n// Warning: pathInKey can cause already found fields to be overwritten with the last value found, e.g. receive_at from uplink_message will be written receive_at in the root.\n\n// Passing incoming bytes to decodeFrmPayload function, to get custom decoding\nvar customDecoding = {};\nif (data.uplink_message.get(\"frm_payload\") != null) {\n customDecoding = decodeFrmPayload(base64ToBytes(data.uplink_message.frm_payload));\n}\n\n// Collecting data to result\nif (customDecoding.?telemetry.size() > 0) {\n if (customDecoding.telemetry instanceof java.util.ArrayList) {\n foreach(telemetryObj: customDecoding.telemetry) {\n if (telemetryObj.ts != null && telemetryObj.values != null) {\n telemetry.add(telemetryObj);\n }\n }\n } else {\n telemetry.putAll(customDecoding.telemetry);\n }\n}\n\nif (customDecoding.?attributes.size() > 0) {\n attributes.putAll(customDecoding.attributes);\n}\n\n// You can add some keys manually to attributes or telemetry\nvar applicationId = data.end_device_ids.?application_ids.?application_id;\nvar devAddr = data.end_device_ids.?dev_addr;\nvar spreadingFactor = data.uplink_message.?settings.?data_rate.?lora.?spreading_factor;\nvar codeRate = data.uplink_message.?settings.?data_rate.?lora.?coding_rate;\nvar tenantId = data.uplink_message.?network_ids.?tenant_id;\nattributes.eui = data.end_device_ids.dev_eui;\nattributes.fPort = data.uplink_message.f_port;\nattributes.applicationId = applicationId;\nattributes.devAddr = devAddr;\nattributes.spreadingFactor = spreadingFactor;\nattributes.codeRate = codeRate;\nattributes.tenantId = tenantId;\nattributes.device_id = data.end_device_ids.?device_id;\nattributes.join_eui = data.end_device_ids.?join_eui;\nattributes.net_id = data.uplink_message.?network_ids.?net_id;\nattributes.cluster_id = data.uplink_message.?network_ids.?cluster_id;\nattributes.cluster_address = data.uplink_message.?network_ids.?cluster_address;\nattributes.bandwidth = data.uplink_message.?settings.?data_rate.?lora.?bandwidth;\nattributes.frequency = data.uplink_message.?settings.?frequency;\n\nvar isIncludeGatewayInfo = metadata[\"includeGatewayInfo\"];\nif(isIncludeGatewayInfo == true) {\n var gatewayInfo = getGatewayInfo();\n var addDataToTelemetry = {};\n addDataToTelemetry.snr = gatewayInfo.snr;\n addDataToTelemetry.rssi = gatewayInfo.rssi;\n addDataToTelemetry.channel = gatewayInfo.channel_index;\n addDataToTelemetry.consumed_airtime = data.uplink_message.?consumed_airtime;\n addDataToTelemetry.fCnt = data.uplink_message.?f_cnt;\n\n telemetry = processTelemetryData(telemetry, addDataToTelemetry);\n}\n\nvar result = {\n deviceName: deviceName,\n deviceType: deviceType,\n // assetName: assetName,\n // assetType: assetType,\n attributes: attributes,\n telemetry: telemetry\n};\n\naddAdditionalInfoForDeviceMsg(result, customerName, groupName);\n\nreturn result;\n\nfunction addAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName) {\n if (customerName != null) {\n deviceInfo.customerName = customerName;\n }\n if (groupName != null) {\n deviceInfo.groupName = groupName;\n }\n}\n\nfunction parseDateToTimestamp(dateString) {\n var date = new Date(dateString);\n var timestamp = date.getTime();\n \n // If we cannot parse timestamp - we will use the current timestamp\n if (timestamp == -1) {\n timestamp = Date.now();\n }\n \n return timestamp;\n}\n\nfunction getGatewayInfo() {\n var gatewayList = data.uplink_message.?rx_metadata;\n var maxRssi = Integer. MIN_VALUE;\n var gatewayInfo = {};\n \n foreach (gateway : gatewayList) {\n if(gateway.rssi > maxRssi) {\n maxRssi = gateway.rssi;\n gatewayInfo = gateway;\n }\n }\n \n return gatewayInfo;\n}\n\nfunction processTelemetryData(telemetry, addDataToTelemetry) {\n if (telemetry.size >= 1) {\n telemetry = addDataToTelemetries(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToTelemetries(telemetries, addDataToTelemetry) {\n foreach(telemetry : telemetries) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[\"values\"].keys.contains(element.key)) {\n telemetry[\"values\"][element.key] = element.value;\n }\n } \n }\n \n return telemetries;\n}\n\nfunction readTemperatureAlarm(type) {\n switch (type) {\n case 0:\n return \"threshold alarm\";\n case 1:\n return \"threshold alarm release\";\n case 2:\n return \"mutation alarm\";\n default:\n return \"unkown\";\n }\n}", + "encoder": null, + "tbelEncoder": null, + "updateOnlyKeys": [ + "fPort", + "bandwidth", + "frequency", + "net_id", + "cluster_id", + "cluster_address", + "tenant_address", + "device_id", + "join_eui", + "eui", + "channel", + "devAddr", + "spreadingFactor", + "codeRate", + "tenantId", + "applicationId", + "battery" + ] + }, + "additionalInfo": { + "description": "" + }, + "edgeTemplate": false +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/metadata.json b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/metadata.json new file mode 100644 index 00000000..904c0fa0 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/metadata.json @@ -0,0 +1,4 @@ +{ + "integrationName": "The Things Stack Industries integration new", + "includeGatewayInfo": "false" +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/payload.json b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/payload.json new file mode 100644 index 00000000..798b317e --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/payload.json @@ -0,0 +1,77 @@ +{ + "end_device_ids": { + "device_id": "eui-1000000000000001", + "application_ids": { + "application_id": "application-tti-name" + }, + "dev_eui": "1000000000000001", + "join_eui": "2000000000000001", + "dev_addr": "20000001" + }, + "correlation_ids": ["as:up:01H0PZDGB1NW6NAPD815NGHPF6", "gs:conn:01H0FJRSXSYT7VKNYXJ89F95XT", "gs:up:host:01H0FJRSY3MZMGPPFBQ4FZV4T8", "gs:uplink:01H0PZDG4HHGFRTXRTXD4PFTH7", "ns:uplink:01H0PZDG4JZ3BM0K6J89EQK1J7", "rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01H0PZDG4J02F85RYFPCNSNXCR", "rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01H0PZDGB081PMP806BJHNHX1A"], + "received_at": "2023-05-18T08:25:26.112483370Z", + "uplink_message": { + "session_key_id": "AYfg8rhha5n+FWx0ZaAprA==", + "f_port": 85, + "f_cnt": 5017, + "frm_payload": "AXVkA2cZAQRocwV9ZwQGc2gn", + "rx_metadata": [{ + "gateway_ids": { + "gateway_id": "eui-6A7E111A10000000", + "eui": "6A7E111A10000000" + }, + "time": "2023-05-18T08:25:25.885310Z", + "timestamp": 818273765, + "rssi": -24, + "channel_rssi": -24, + "snr": 12, + "frequency_offset": "671", + "uplink_token": "CiIKIAoUZXVpLTZBN0UxMTFBMTAwMDAwMDASCCThJP/+9k6eEOW7l4YDGgwI9cGXowYQ5KPhrwMgiI2rp+jpOA=", + "channel_index": 2, + "received_at": "2023-05-18T08:25:25.869324983Z" + }, { + "gateway_ids": { + "gateway_id": "packetbroker" + }, + "packet_broker": { + "message_id": "01H0PZDG4MF9AYSMNY44MAVTDH", + "forwarder_net_id": "000013", + "forwarder_tenant_id": "ttn", + "forwarder_cluster_id": "eu1.cloud.thethings.network", + "forwarder_gateway_eui": "6A7E111A10000000", + "forwarder_gateway_id": "eui-6a7e111a10000000", + "home_network_net_id": "000013", + "home_network_tenant_id": "tenant", + "home_network_cluster_id": "eu1.cloud.thethings.industries" + }, + "time": "2023-05-18T08:25:25.885310Z", + "rssi": -24, + "channel_rssi": -24, + "snr": 12, + "frequency_offset": "671", + "uplink_token": "eyJnIjoiWlhsS2FHSkhZMmxQYVVwQ1RWUkpORkl3VGs1VE1XTnBURU5LYkdKdFRXbFBhVXBDVFZSSk5GSXdUazVKYVhkcFlWaFphVTlwU201a01uaGhWVlJvZDFSWFVuRmlSM1JtVFcxT2RVbHBkMmxrUjBadVNXcHZhV05ZY0RKT1IyeExaREpSZVZwR1pIUmpNRXBLVlVoR2RFNVZkR3BWVTBvNUxua3paVVJTWVRaM1lXOU1kbTQwVm5sdmIyWmlPWGN1ZUhCZmVrcElaa3hIWlZadGRVUlFVeTVuYlRaVlZXRXdkakpHV0VKMGJUUjZaMjVXUkVoeGVHRjRaMlJKTlVkS1VsbERhemc1VDNCbk5rVk1iM1JDUkVZM1VWbHdZbEJDTkdOblNqWjBlbkphYUV4MFRVMHhZMVZFTTFac01XdExURUo0YURaMFExTnhhMVJsWWw4eE5FdHlVVXcyZUhsRWFFbEhlakJITXpoTE0xaFdlRzR5VUVjMk4wNUViME5WTkhoTmRrazFZVk5oWkUwd2FXVnFjR294VGtoMFduZHlZMDFxVlVGNmRsbERUazlNY2s5eFdVeFpWMk5XTG1WVFFYVkpNVkptT1U5NWRqUTNhSEoxTUZoalYxRT0iLCJhIjp7ImZuaWQiOiIwMDAwMTMiLCJmdGlkIjoidHRuIiwiZmNpZCI6ImV1MS5jbG91ZC50aGV0aGluZ3MubmV0d29yayJ9fQ==", + "received_at": "2023-05-18T08:25:25.906038642Z" + }], + "settings": { + "data_rate": { + "lora": { + "bandwidth": 125000, + "spreading_factor": 7, + "coding_rate": "4/5" + } + }, + "frequency": "868500000", + "timestamp": 818273765, + "time": "2023-05-18T08:25:25.885310Z" + }, + "received_at": "2023-05-18T08:25:25.906399073Z", + "consumed_airtime": "0.097536s", + "network_ids": { + "net_id": "000013", + "tenant_id": "tenant", + "cluster_id": "eu1", + "cluster_address": "eu1.cloud.thethings.industries", + "tenant_address": "tenant.eu1.cloud.thethings.industries" + } + } +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/result.json b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/result.json new file mode 100644 index 00000000..2c54a417 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/result.json @@ -0,0 +1,30 @@ +{ + "deviceName": "eui-1000000000000001", + "deviceType": "EM500-C02", + "attributes": { + "eui": "1000000000000001", + "fPort": 85, + "applicationId": "application-tti-name", + "devAddr": "20000001", + "spreadingFactor": 7, + "codeRate": "4/5", + "tenantId": "tenant", + "device_id": "eui-1000000000000001", + "join_eui": "2000000000000001", + "net_id": "000013", + "cluster_id": "eu1", + "cluster_address": "eu1.cloud.thethings.industries", + "bandwidth": 125000, + "frequency": "868500000" + }, + "telemetry": [{ + "ts": 1684398325906, + "values": { + "battery": 100, + "temperature": 28.1, + "humidity": 57.5, + "co2": 1127, + "pressure": 1008.8 + } + }] +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/guide.md b/VENDORS/Milesight/EM500-CO2/guide.md new file mode 100644 index 00000000..e84fdf21 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/guide.md @@ -0,0 +1,15 @@ +# CO2 Sensor - Milesight IoT + +The payload decoder function is applicable to EM500-CO2. + +## Payload Definition + +| CHANNEL | ID | TYPE | LENGTH | DESCRIPTION | +| :---------------: | :--: | :--: | :----: | ----------------------------------------------------------------------------------------- | +| Battery | 0x01 | 0x75 | 1 | battery(1B)
battery, unit: % | +| Temperature | 0x03 | 0x67 | 2 | temperature(2B)
temperature,unit: ℃ | +| Humidity | 0x04 | 0x68 | 1 | humidity(1B)
humidity, unit: %RH | +| CO2 | 0x05 | 0x7D | 2 | co2(2B)
co2, unit: ppm | +| Pressure | 0x06 | 0x73 | 2 | pressure(2B)
pressure, unit: hPa | +| Temperature Alarm | 0x83 | 0xD7 | 5 | temperature(2B) + temperature_change(2B) + temperature_alarm(1B)
temperature, unit: ℃ | +| Historical Data | 0x20 | 0XCE | 11 | timestamp(4B) + co2(2B) + pressure(2B) + temperature(2B) + humidity(1B) | \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/info.json b/VENDORS/Milesight/EM500-CO2/info.json new file mode 100644 index 00000000..9e9bbf75 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/info.json @@ -0,0 +1,5 @@ +{ + "url": "https://www.milesight.com/iot/product/lorawan-sensor/em500-co2", + "label": "EM500-C02: LoRaWAN® Carbon Dioxide sensor", + "description": "EM500-CO2 is designed for measuring CO2, temperature, humidity and barometric pressure in harsh environments and transmitting data using LoRaWAN® technology." +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/photo.png b/VENDORS/Milesight/EM500-CO2/photo.png new file mode 100644 index 0000000000000000000000000000000000000000..74ff895322f2f097c3263ce64c473af703536dba GIT binary patch literal 115101 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 z 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%0DfuPdFolS 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 Date: Fri, 13 Dec 2024 10:35:08 +0200 Subject: [PATCH 2/3] Revert "Added 4 LNS integrations for EM500-CO2" This reverts commit 10e2241ef63d8bac1b4b6845c2645c0e06dcad09. --- .../ChirpStack/uplink/converter.json | 39 --------- .../EM500-CO2/ChirpStack/uplink/metadata.json | 4 - .../EM500-CO2/ChirpStack/uplink/payload.json | 48 ----------- .../EM500-CO2/ChirpStack/uplink/result.json | 29 ------- .../EM500-CO2/LORIOT/uplink/converter.json | 29 ------- .../EM500-CO2/LORIOT/uplink/metadata.json | 4 - .../EM500-CO2/LORIOT/uplink/payload.json | 17 ---- .../EM500-CO2/LORIOT/uplink/result.json | 19 ----- .../uplink/converter.json | 39 --------- .../ThingsStackCommunity/uplink/metadata.json | 4 - .../ThingsStackCommunity/uplink/payload.json | 54 ------------ .../ThingsStackCommunity/uplink/result.json | 30 ------- .../uplink/converter.json | 40 --------- .../uplink/metadata.json | 4 - .../ThingsStackIndustries/uplink/payload.json | 77 ------------------ .../ThingsStackIndustries/uplink/result.json | 30 ------- VENDORS/Milesight/EM500-CO2/guide.md | 15 ---- VENDORS/Milesight/EM500-CO2/info.json | 5 -- VENDORS/Milesight/EM500-CO2/photo.png | Bin 115101 -> 0 bytes 19 files changed, 487 deletions(-) delete mode 100644 VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/converter.json delete mode 100644 VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/metadata.json delete mode 100644 VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/payload.json delete mode 100644 VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/result.json delete mode 100644 VENDORS/Milesight/EM500-CO2/LORIOT/uplink/converter.json delete mode 100644 VENDORS/Milesight/EM500-CO2/LORIOT/uplink/metadata.json delete mode 100644 VENDORS/Milesight/EM500-CO2/LORIOT/uplink/payload.json delete mode 100644 VENDORS/Milesight/EM500-CO2/LORIOT/uplink/result.json delete mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/converter.json delete mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/metadata.json delete mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/payload.json delete mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/result.json delete mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/converter.json delete mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/metadata.json delete mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/payload.json delete mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/result.json delete mode 100644 VENDORS/Milesight/EM500-CO2/guide.md delete mode 100644 VENDORS/Milesight/EM500-CO2/info.json delete mode 100644 VENDORS/Milesight/EM500-CO2/photo.png diff --git a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/converter.json b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/converter.json deleted file mode 100644 index e802bdfc..00000000 --- a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/converter.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "ChirpStack Uplink Decoder for EM500-C02", - "type": "UPLINK", - "debugMode": false, - "debugSettings": { - "failuresEnabled": true, - "allEnabled": false, - "allEnabledUntil": 1733331880270 - }, - "configuration": { - "scriptLang": "TBEL", - "decoder": null, - "tbelDecoder": "var data = decodeToJson(payload);\nvar deviceName = data.deviceInfo.deviceName + \" \" + data.deviceInfo.devEui;\nvar deviceType = \"EM500-C02\";\nvar groupName = null; // If groupName is not null - created device will be added to the entity group with such name.\nvar customerName = null; // If customerName is not null - created devices will be assigned to customer with such name. \n\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// If you want to parse incoming data somehow, you can add your code to this function.\n// input: bytes\n// expected output:\n// {\n// \"attributes\": {\"attributeKey\": \"attributeValue\"},\n// \"telemetry\": [{\"ts\": 1...1, \"values\": {\"telemetryKey\":\"telemetryValue\"}, {\"ts\": 1...2, \"values\": {\"telemetryKey\":\"telemetryValue\"}}]\n// }\n\nfunction decodePayload(input) {\n var output = {\n attributes: {},\n telemetry: []\n };\n \n // --- Decoding code --- //\n var decoded = {};\n var historyDataList = [];\n for (var i = 0; i < input.length - 2 ; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n \n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n else if (channel_id === 0x03 && channel_type === 0x67) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n \n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n else if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // CO2\n else if (channel_id === 0x05 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n else if (channel_id === 0x06 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n // TEMPERATURE CHANGE ALARM\n else if (channel_id === 0x83 && channel_type === 0xd7) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n decoded.temperature_change = parseBytesToInt(input, i + 2, 2, false) / 10;\n decoded.temperature_alarm = readTemperatureAlarm(input[i + 4]);\n i += 5;\n }\n // HISTROY\n else if (channel_id === 0x20 && channel_type === 0xce) {\n var historyData = {\n ts: parseBytesToInt(input, i, 4, false) * 1000,\n values: {\n co2: parseBytesToInt(input, i + 4, 2, false),\n pressure: parseBytesToInt(input, i + 6, 1, false) / 10,\n temperature: parseBytesToInt(input, i + 8, 2, false) / 10,\n humidity: parseBytesToInt(input, i + 10, 1, false, false) / 2\n }\n };\n i += 11;\n \n historyDataList.add(historyData);\n } \n }\n\n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }];\n \n output.telemetry.addAll(historyDataList);\n // --- Decoding code --- //\n return output;\n}\n\n// --- attributes and telemetry objects ---\nvar telemetry = [];\nvar attributes = {};\n// --- attributes and telemetry objects ---\n\n// --- Timestamp parsing\nvar dateString = data.time;\ntimestamp = parseDateToTimestamp(dateString);\n// --- Timestamp parsing\n\n// Passing incoming bytes to decodePayload function, to get custom decoding\nvar customDecoding = decodePayload(base64ToBytes(data.data));\n\n\nattributes.eui = data.deviceInfo.devEui;\n\n// Collecting data to result\nif (customDecoding.?telemetry.size() > 0) {\n if (customDecoding.telemetry instanceof java.util.ArrayList) {\n foreach(telemetryObj: customDecoding.telemetry) {\n if (telemetryObj.ts != null && telemetryObj.values != null) {\n telemetry.add(telemetryObj);\n }\n }\n } else {\n telemetry.putAll(customDecoding.telemetry);\n }\n}\n\nif (customDecoding.?attributes.size() > 0) {\n attributes.putAll(customDecoding.attributes);\n}\n\n// You can add some keys manually to attributes or telemetry\nattributes.eui = data.deviceInfo.?devEui;\nattributes.devAddr = data.devAddr;\nattributes.fPort = data.fPort;\nattributes.applicationId = data.deviceInfo.?applicationId;\nattributes.applicationName = data.deviceInfo.?applicationName;\nattributes.tenantId = data.deviceInfo.?tenantId;\nattributes.tenantName = data.deviceInfo.?tenantName;\nattributes.deviceProfileId = data.deviceInfo.?deviceProfileId;\nattributes.deviceProfileName = data.deviceInfo.?deviceProfileName;\nattributes.frequency = data.txInfo.?frequency;\nattributes.bandwidth = data.txInfo.?modulation.?lora.?bandwidth;\nattributes.spreadingFactor = data.txInfo.?modulation.?lora.?spreadingFactor;\nattributes.codeRate = data.txInfo.?modulation.?lora.?codeRate;\n\nif(Boolean.parseBoolean(metadata[\"includeGatewayInfo\"])) {\n var gatewayInfo = getGatewayInfo();\n var addDataToTelemetry = {};\n addDataToTelemetry.snr = gatewayInfo.snr;\n addDataToTelemetry.rssi = gatewayInfo.rssi;\n addDataToTelemetry.channel = gatewayInfo.channel;\n addDataToTelemetry.rfChain = gatewayInfo.rfChain;\n addDataToTelemetry.fCnt = data.fCnt;\n \n telemetry = processTelemetryData(telemetry, addDataToTelemetry);\n}\n\nvar result = {\n deviceName: deviceName,\n deviceType: deviceType,\n // assetName: assetName,\n // assetType: assetType,\n attributes: attributes,\n telemetry: telemetry\n};\n\naddAdditionalInfoForDeviceMsg(result, customerName, groupName);\n\nreturn result;\n\nfunction addAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName) {\n if (customerName != null) {\n deviceInfo.customerName = customerName;\n }\n if (groupName != null) {\n deviceInfo.groupName = groupName;\n }\n}\n\nfunction parseDateToTimestamp(dateString) {\n var date = new Date(dateString);\n var timestamp = date.getTime();\n \n // If we cannot parse timestamp - we will use the current timestamp\n if (timestamp == -1) {\n timestamp = Date.now();\n }\n \n return timestamp;\n}\n\nfunction getGatewayInfo() {\n var gatewayList = data.rxInfo;\n var maxRssi = Integer.MIN_VALUE;\n var gatewayInfo = {};\n \n foreach (gateway : gatewayList) {\n if(gateway.rssi > maxRssi) {\n maxRssi = gateway.rssi;\n gatewayInfo = gateway;\n }\n }\n \n return gatewayInfo;\n}\n\nfunction processTelemetryData(telemetry, addDataToTelemetry) {\n if (telemetry.size >= 1) {\n telemetry = addDataToTelemetries(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToTelemetries(telemetries, addDataToTelemetry) {\n foreach(telemetry : telemetries) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[\"values\"].keys.contains(element.key)) {\n telemetry[\"values\"][element.key] = element.value;\n }\n } \n }\n \n return telemetries;\n}\n\nfunction readTemperatureAlarm(type) {\n switch (type) {\n case 0:\n return \"threshold alarm\";\n case 1:\n return \"threshold alarm release\";\n case 2:\n return \"mutation alarm\";\n default:\n return \"unkown\";\n }\n}", - "encoder": null, - "tbelEncoder": null, - "updateOnlyKeys": [ - "tenantId", - "tenantName", - "applicationId", - "applicationName", - "deviceProfileId", - "deviceProfileName", - "devAddr", - "fPort", - "frequency", - "bandwidth", - "spreadingFactor", - "codeRate", - "channel", - "rfChain", - "eui", - "battery" - ] - }, - "additionalInfo": { - "description": "" - }, - "edgeTemplate": false -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/metadata.json b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/metadata.json deleted file mode 100644 index 23f54b34..00000000 --- a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/metadata.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "integrationName": "ChirpStack integration", - "includeGatewayInfo": "false" -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/payload.json b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/payload.json deleted file mode 100644 index 88086852..00000000 --- a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/payload.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "deduplicationId": "57433366-50a6-4dc2-8145-2df1bbc70d9e", - "time": "2023-05-22T07:47:05.404859+00:00", - "deviceInfo": { - "tenantId": "52f14cd4-c6f1-4fbd-8f87-4025e1d49242", - "tenantName": "ChirpStack", - "applicationId": "ca739e26-7b67-4f14-b69e-d568c22a5a75", - "applicationName": "Chirpstack application", - "deviceProfileId": "605d08d4-65f5-4d2c-8a5a-3d2457662f79", - "deviceProfileName": "Chirpstack default device profile", - "deviceName": "Device name", - "devEui": "1000000000000001", - "tags": {} - }, - "devAddr": "20000001", - "adr": true, - "dr": 5, - "fCnt": 4, - "fPort": 85, - "confirmed": false, - "data": "AXVkA2cZAQRocwV9ZwQGc2gn", - "rxInfo": [{ - "gatewayId": "6a7e111a10000000", - "uplinkId": 24022, - "time": "2023-05-22T07:47:05.404859+00:00", - "rssi": -35, - "snr": 11.5, - "channel": 2, - "rfChain": 1, - "location": {}, - "context": "EFwMtA==", - "metadata": { - "region_common_name": "EU868", - "region_config_id": "eu868" - }, - "crcStatus": "CRC_OK" - }], - "txInfo": { - "frequency": 868500000, - "modulation": { - "lora": { - "bandwidth": 125000, - "spreadingFactor": 7, - "codeRate": "CR_4_5" - } - } - } -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/result.json b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/result.json deleted file mode 100644 index 84dcc988..00000000 --- a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/result.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "deviceName": "Device name 1000000000000001", - "deviceType": "EM500-C02", - "attributes": { - "eui": "1000000000000001", - "devAddr": "20000001", - "fPort": 85, - "applicationId": "ca739e26-7b67-4f14-b69e-d568c22a5a75", - "applicationName": "Chirpstack application", - "tenantId": "52f14cd4-c6f1-4fbd-8f87-4025e1d49242", - "tenantName": "ChirpStack", - "deviceProfileId": "605d08d4-65f5-4d2c-8a5a-3d2457662f79", - "deviceProfileName": "Chirpstack default device profile", - "frequency": 868500000, - "bandwidth": 125000, - "spreadingFactor": 7, - "codeRate": "CR_4_5" - }, - "telemetry": [{ - "ts": 1684741625404, - "values": { - "battery": 100, - "temperature": 28.1, - "humidity": 57.5, - "co2": 1127, - "pressure": 1008.8 - } - }] -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/converter.json b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/converter.json deleted file mode 100644 index 593aaa31..00000000 --- a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/converter.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "Loriot Uplink Decoder for EM500-C02", - "type": "UPLINK", - "debugMode": false, - "debugSettings": { - "failuresEnabled": true, - "allEnabled": false, - "allEnabledUntil": 1733331880270 - }, - "configuration": { - "scriptLang": "TBEL", - "decoder": "// Decode an uplink message from a buffer\n// payload - array of bytes\n// metadata - key/value object\n\n/** Decoder **/\n\n// decode payload to string\nvar payloadStr = decodeToString(payload);\n\n// decode payload to JSON\n// var data = decodeToJson(payload);\n\nvar deviceName = 'Device A';\nvar deviceType = 'thermostat';\nvar customerName = 'Customer C';\nvar groupName = 'thermostat devices';\nvar manufacturer = 'Example corporation';\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// Result object with device/asset attributes/telemetry data\nvar result = {\n// Use deviceName and deviceType or assetName and assetType, but not both.\n deviceName: deviceName,\n deviceType: deviceType,\n// assetName: assetName,\n// assetType: assetType,\n// customerName: customerName,\n groupName: groupName,\n attributes: {\n model: 'Model A',\n serialNumber: 'SN111',\n integrationName: metadata['integrationName'],\n manufacturer: manufacturer\n },\n telemetry: {\n temperature: 42,\n humidity: 80,\n rawData: payloadStr\n }\n};\n\n/** Helper functions **/\n\nfunction decodeToString(payload) {\n return String.fromCharCode.apply(String, payload);\n}\n\nfunction decodeToJson(payload) {\n // covert payload to string.\n var str = decodeToString(payload);\n\n // parse string to JSON\n var data = JSON.parse(str);\n return data;\n}\n\nreturn result;", - "tbelDecoder": "var data = decodeToJson(payload);\nvar deviceName = data.EUI;\nvar deviceType = \"EM500-C02\";\nvar groupName = null; // If groupName is not null - created device will be added to the entity group with such name.\nvar customerName = null; // If customerName is not null - created devices will be assigned to customer with such name. \n\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// If you want to parse incoming data somehow, you can add your code to this function.\n// input: bytes\n// expected output:\n// {\n// \"attributes\": {\"attributeKey\": \"attributeValue\"},\n// \"telemetry\": {\"telemetryKey\": \"telemetryValue\"}\n// }\n\nfunction decodePayload(input) {\n var output = { attributes: {}, telemetry: []};\n \n var decoded = {};\n var historyDataList = [];\n for (var i = 0; i < input.length - 2 ; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n \n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n else if (channel_id === 0x03 && channel_type === 0x67) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n \n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n else if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // CO2\n else if (channel_id === 0x05 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n else if (channel_id === 0x06 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n // TEMPERATURE CHANGE ALARM\n else if (channel_id === 0x83 && channel_type === 0xd7) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n decoded.temperature_change = parseBytesToInt(input, i + 2, 2, false) / 10;\n decoded.temperature_alarm = readTemperatureAlarm(input[i + 4]);\n i += 5;\n }\n // HISTROY\n else if (channel_id === 0x20 && channel_type === 0xce) {\n var historyData = {\n ts: parseBytesToInt(input, i, 4, false) * 1000,\n values: {\n co2: parseBytesToInt(input, i + 4, 2, false),\n pressure: parseBytesToInt(input, i + 6, 1, false) / 10,\n temperature: parseBytesToInt(input, i + 8, 2, false) / 10,\n humidity: parseBytesToInt(input, i + 10, 1, false, false) / 2\n }\n };\n i += 11;\n \n historyDataList.add(historyData);\n } \n }\n \n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }];\n\n // --- Decoding code --- //\n return output;\n}\n\n// --- attributes and telemetry objects ---\nvar telemetry = [];\nvar attributes = {};\n// --- attributes and telemetry objects ---\n\n// --- Timestamp parsing\ntimestamp = data.ts;\n// --- Timestamp parsing\n\n// Message parsing\n// To avoid paths in the decoded objects we passing false value to function as \"pathInKey\" argument.\n// Warning: pathInKey can cause already found fields to be overwritten with the last value found.\n\nvar uplinkDataList = [];\n\n// Passing incoming bytes to decodePayload function, to get custom decoding\nvar customDecoding = decodePayload(hexToBytes(data.data));\n\n// Collecting data to result\nif (customDecoding.?telemetry.size() > 0) {\n if (customDecoding.telemetry instanceof java.util.ArrayList) {\n foreach(telemetryObj: customDecoding.telemetry) {\n if (telemetryObj.ts != null && telemetryObj.values != null) {\n telemetry.add(telemetryObj);\n }\n }\n } else {\n telemetry.putAll(customDecoding.telemetry);\n }\n}\n\nif (customDecoding.?attributes.size() > 0) {\n attributes.putAll(customDecoding.attributes);\n}\n\n// You can add some keys manually to attributes or telemetry\nattributes.eui = data.EUI;\nattributes.fPort = data.port;\nattributes.frequency = data.freq;\n\nvar isIncludeGatewayInfo = metadata[\"includeGatewayInfo\"];\nif(isIncludeGatewayInfo == true) {\n var addDataToTelemetry = {};\n addDataToTelemetry.rssi = data.rssi;\n addDataToTelemetry.seqno = data.seqno;\n addDataToTelemetry.snr = data.snr;\n addDataToTelemetry.ack = data.ack;\n addDataToTelemetry.toa = data.toa;\n addDataToTelemetry.fCnt = data.fcnt;\n \n telemetry = processTelemetryData(telemetry, addDataToTelemetry);\n}\n\nvar deviceInfo = {\n deviceName: deviceName,\n deviceType: deviceType,\n// assetName: assetName,\n// assetType: assetType,\n attributes: attributes,\n telemetry: telemetry, \n};\n\naddAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName);\n\nuplinkDataList.add(deviceInfo);\n\nvar gatewayDeviceNamePrefix = \"Gateway \";\nvar gatewayDeviceType = \"Lora gateway\";\nvar gatewayGroupName = null; // If gatewayGroupName is not null - created device will be added to the entity group with such name.\n\nif (data.cmd == \"gw\") {\n foreach( gatewayInfo : data.gws ) {\n var addGatewayInfo = {};\n\n // You can add some keys manually telemetry\n addGatewayInfo.rssi = gatewayInfo.rssi;\n addGatewayInfo.snr = gatewayInfo.snr;\n // You can add some keys manually telemetry\n \n var gatewayInfoMsg = {\n deviceName: gatewayDeviceNamePrefix + gatewayInfo.gweui,\n deviceType: gatewayDeviceType,\n telemetry: [{\n \"ts\": gatewayInfo.ts,\n \"values\": addGatewayInfo\n }],\n attributes: {\n eui: gatewayInfo.gweui\n }\n };\n addAdditionalInfoForDeviceMsg(gatewayInfoMsg, customerName, gatewayGroupName);\n uplinkDataList.add(gatewayInfoMsg);\n }\n}\n\nreturn uplinkDataList;\n\nfunction addAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName) {\n if (customerName != null) {\n deviceInfo.customerName = customerName;\n }\n if (groupName != null) {\n deviceInfo.groupName = groupName;\n }\n}\n\nfunction processTelemetryData(telemetry, addDataToTelemetry) {\n if (telemetry.size >= 1) {\n telemetry = addDataToTelemetries(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToTelemetries(telemetries, addDataToTelemetry) {\n foreach(telemetry : telemetries) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[\"values\"].keys.contains(element.key)) {\n telemetry[\"values\"][element.key] = element.value;\n }\n } \n }\n \n return telemetries;\n}\n\nfunction readTemperatureAlarm(type) {\n switch (type) {\n case 0:\n return \"threshold alarm\";\n case 1:\n return \"threshold alarm release\";\n case 2:\n return \"mutation alarm\";\n default:\n return \"unkown\";\n }\n}", - "encoder": null, - "tbelEncoder": null, - "updateOnlyKeys": [ - "fPort", - "ack", - "eui", - "frequency", - "dr", - "battery" - ] - }, - "additionalInfo": { - "description": "" - }, - "edgeTemplate": false -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/metadata.json b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/metadata.json deleted file mode 100644 index ae2ee743..00000000 --- a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/metadata.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "integrationName": "Loriot integration", - "includeGatewayInfo": "false" -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/payload.json b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/payload.json deleted file mode 100644 index 0bbb8113..00000000 --- a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/payload.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "cmd": "rx", - "seqno": 3040, - "EUI": "1000000000000001", - "ts": 1684478801936, - "fcnt": 2, - "port": 85, - "freq": 867500000, - "rssi": -21, - "snr": 10, - "toa": 206, - "dr": "SF9 BW125 4/5", - "ack": false, - "bat": 94, - "offline": false, - "data": "01756403671901046873057D670406736827" -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/result.json b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/result.json deleted file mode 100644 index 08bd685b..00000000 --- a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/result.json +++ /dev/null @@ -1,19 +0,0 @@ -[{ - "deviceName": "1000000000000001", - "deviceType": "EM500-C02", - "attributes": { - "eui": "1000000000000001", - "fPort": 85, - "frequency": 867500000 - }, - "telemetry": [{ - "ts": 1684478801936, - "values": { - "battery": 100, - "temperature": 28.1, - "humidity": 57.5, - "co2": 1127, - "pressure": 1008.8 - } - }] -}] \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/converter.json b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/converter.json deleted file mode 100644 index 6a810945..00000000 --- a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/converter.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "The Things Stack Community Uplink Decoder for EM500-C02", - "type": "UPLINK", - "debugMode": false, - "debugSettings": { - "failuresEnabled": true, - "allEnabled": false, - "allEnabledUntil": 1733331880270 - }, - "configuration": { - "scriptLang": "TBEL", - "decoder": null, - "tbelDecoder": "var data = decodeToJson(payload);\n\nvar deviceName = data.end_device_ids.device_id;\nvar deviceType = \"EM500-C02\";\nvar groupName = null; // If groupName is not null - created device will be added to the entity group with such name.\nvar customerName = null; // If customerName is not null - created devices will be assigned to customer with such name. \n\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// If you want to parse incoming data somehow, you can add your code to this function.\n// input: bytes\n// expected output:\n// {\n// \"attributes\": {\"attributeKey\": \"attributeValue\"},\n// \"telemetry\": [{\"ts\": 1...1, \"values\": {\"telemetryKey\":\"telemetryValue\"}, {\"ts\": 1...2, \"values\": {\"telemetryKey\":\"telemetryValue\"}}]\n// }\n\nfunction decodeFrmPayload(input) {\n var output = {\n attributes: {}, telemetry: {}\n };\n \n // --- Decoding code --- //\n var decoded = {};\n var historyDataList = [];\n for (var i = 0; i < input.length - 2 ; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n \n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n else if (channel_id === 0x03 && channel_type === 0x67) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n \n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n else if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // CO2\n else if (channel_id === 0x05 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n else if (channel_id === 0x06 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n // TEMPERATURE CHANGE ALARM\n else if (channel_id === 0x83 && channel_type === 0xd7) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n decoded.temperature_change = parseBytesToInt(input, i + 2, 2, false) / 10;\n decoded.temperature_alarm = readTemperatureAlarm(input[i + 4]);\n i += 5;\n }\n // HISTROY\n else if (channel_id === 0x20 && channel_type === 0xce) {\n var historyData = {\n ts: parseBytesToInt(input, i, 4, false) * 1000,\n values: {\n co2: parseBytesToInt(input, i + 4, 2, false),\n pressure: parseBytesToInt(input, i + 6, 1, false) / 10,\n temperature: parseBytesToInt(input, i + 8, 2, false) / 10,\n humidity: parseBytesToInt(input, i + 10, 1, false, false) / 2\n }\n };\n i += 11;\n \n historyDataList.add(historyData);\n } \n }\n \n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }];\n \n // --- Decoding code --- //\n return output;\n}\n\n\n// --- attributes and telemetry objects ---\nvar telemetry = [];\nvar attributes = {};\n// --- attributes and telemetry objects ---\n\n// --- Timestamp parsing\nvar dateString = data.uplink_message.received_at;\n// If data is simulated or device doesn't send his own date string - we will use date from upcoming message, set by network server\nif ((data.simulated != null && data.simulated) || dateString == null) {\n dateString = data.received_at;\n}\ntimestamp = parseDateToTimestamp(dateString);\n// --- Timestamp parsing\n\n// Message parsing\n// To avoid paths in the decoded objects we passing false value to function as \"pathInKey\" argument.\n// Warning: pathInKey can cause already found fields to be overwritten with the last value found, e.g. receive_at from uplink_message will be written receive_at in the root.\n\n// Passing incoming bytes to decodeFrmPayload function, to get custom decoding\nvar customDecoding = {};\nif (data.uplink_message.get(\"frm_payload\") != null) {\n customDecoding = decodeFrmPayload(base64ToBytes(data.uplink_message.frm_payload));\n}\n\n// Collecting data to result\nif (customDecoding.?telemetry.size() > 0) {\n if (customDecoding.telemetry instanceof java.util.ArrayList) {\n foreach(telemetryObj: customDecoding.telemetry) {\n if (telemetryObj.ts != null && telemetryObj.values != null) {\n telemetry.add(telemetryObj);\n }\n }\n } else {\n telemetry.putAll(customDecoding.telemetry);\n }\n}\n\nif (customDecoding.?attributes.size() > 0) {\n attributes.putAll(customDecoding.attributes);\n}\n\n// You can add some keys manually to attributes or telemetry\nvar applicationId = data.end_device_ids.?application_ids.?application_id;\nvar devAddr = data.end_device_ids.?dev_addr;\nvar spreadingFactor = data.uplink_message.?settings.?data_rate.?lora.?spreading_factor;\nvar codeRate = data.uplink_message.?settings.?data_rate.?lora.?coding_rate;\nvar tenantId = data.uplink_message.?network_ids.?tenant_id;\nattributes.eui = data.end_device_ids.dev_eui;\nattributes.fPort = data.uplink_message.f_port;\nattributes.applicationId = applicationId;\nattributes.devAddr = devAddr;\nattributes.spreadingFactor = spreadingFactor;\nattributes.codeRate = codeRate;\nattributes.tenantId = tenantId;\nattributes.device_id = data.end_device_ids.?device_id;\nattributes.join_eui = data.end_device_ids.?join_eui;\nattributes.net_id = data.uplink_message.?network_ids.?net_id;\nattributes.cluster_id = data.uplink_message.?network_ids.?cluster_id;\nattributes.cluster_adress = data.uplink_message.?network_ids.?cluster_address;\nattributes.bandwidth = data.uplink_message.?settings.?data_rate.?lora.?bandwidth;\nattributes.frequency = data.uplink_message.?settings.?frequency;\n\n\nvar gatewayInfo = getGatewayInfo();\nvar addDataToTelemetry = {};\naddDataToTelemetry.snr = gatewayInfo.snr;\naddDataToTelemetry.rssi = gatewayInfo.rssi;\naddDataToTelemetry.channel = gatewayInfo.channel_index;\naddDataToTelemetry.consumed_airtime = data.uplink_message.?consumed_airtime;\naddDataToTelemetry.fCnt = data.uplink_message.?f_cnt;\n\nvar isIncludeGatewayInfo = metadata[\"includeGatewayInfo\"];\nif(isIncludeGatewayInfo == true) {\n telemetry = processTelemetryData(telemetry, addDataToTelemetry);\n}\n\nvar result = {\n deviceName: deviceName,\n deviceType: deviceType,\n// assetName: assetName,\n// assetType: assetType,\n attributes: attributes,\n telemetry: telemetry\n};\n\naddAdditionalInfoForDeviceMsg(result, customerName, groupName);\n\nreturn result;\n\n\nfunction addAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName) {\n if (customerName != null) {\n deviceInfo.customerName = customerName;\n }\n if (groupName != null) {\n deviceInfo.groupName = groupName;\n }\n}\n\nfunction parseDateToTimestamp(dateString) {\n var date = new Date(dateString);\n var timestamp = date.getTime();\n \n // If we cannot parse timestamp - we will use the current timestamp\n if (timestamp == -1) {\n timestamp = Date.now();\n }\n \n return timestamp;\n}\n\nfunction getGatewayInfo() {\n var gatewayList = data.uplink_message.?rx_metadata;\n var maxRssi = Integer.MIN_VALUE;\n var gatewayInfo = {};\n \n foreach (gateway : gatewayList) {\n if(gateway.rssi > maxRssi) {\n maxRssi = gateway.rssi;\n gatewayInfo = gateway;\n }\n }\n \n return gatewayInfo;\n}\n\nfunction processTelemetryData(telemetry, addDataToTelemetry) {\n if (telemetry.size >= 1) {\n telemetry = addDataToTelemetries(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToTelemetries(telemetries, addDataToTelemetry) {\n foreach(telemetry : telemetries) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[\"values\"].keys.contains(element.key)) {\n telemetry[\"values\"][element.key] = element.value;\n }\n } \n }\n \n return telemetries;\n}\n\nfunction readTemperatureAlarm(type) {\n switch (type) {\n case 0:\n return \"threshold alarm\";\n case 1:\n return \"threshold alarm release\";\n case 2:\n return \"mutation alarm\";\n default:\n return \"unkown\";\n }\n}", - "encoder": null, - "tbelEncoder": null, - "updateOnlyKeys": [ - "fPort", - "bandwidth", - "frequency", - "net_id", - "cluster_id", - "cluster_address", - "device_id", - "join_eui", - "battery", - "eui", - "channel", - "applicationId", - "devAddr", - "spreadingFactor", - "codeRate", - "tenantId" - ] - }, - "additionalInfo": { - "description": "" - }, - "edgeTemplate": false -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/metadata.json b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/metadata.json deleted file mode 100644 index 0d75c374..00000000 --- a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/metadata.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "integrationName": "The Things Stack Community integration", - "includeGatewayInfo": "false" -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/payload.json b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/payload.json deleted file mode 100644 index db5532f6..00000000 --- a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/payload.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "end_device_ids": { - "device_id": "eui-1000000000000001", - "application_ids": { - "application_id": "application-tts-name" - }, - "dev_eui": "1000000000000001", - "join_eui": "2000000000000001", - "dev_addr": "20000001" - }, - "correlation_ids": ["as:up:01H0S7ZJQ9MQPMVY49FT3SE07M", "gs:conn:01H03BQZ9342X3Y86DJ2P704E5", "gs:up:host:01H03BQZ99EGAM52KK1300GFKN", "gs:uplink:01H0S7ZJGS6D9TJSKJN8XNTMAV", "ns:uplink:01H0S7ZJGS9KKD4HTTPKFEMWCV", "rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01H0S7ZJGSF3M38ZRZVTM38DEC", "rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01H0S7ZJQ8R2EH5AA269AKM8DX"], - "received_at": "2023-05-19T05:33:35.848446463Z", - "uplink_message": { - "session_key_id": "AYfqmb0pc/1uRZv9xUydgQ==", - "f_port": 85, - "f_cnt": 10335, - "frm_payload": "AXVkA2cZAQRocwV9ZwQGc2gn", - "rx_metadata": [{ - "gateway_ids": { - "gateway_id": "eui-6a7e111a10000000", - "eui": "6A7E111A10000000" - }, - "time": "2023-05-19T05:33:35.608982Z", - "timestamp": 3893546133, - "rssi": -35, - "channel_rssi": -35, - "snr": 13.2, - "frequency_offset": "69", - "uplink_token": "CiIKIAoUZXVpLTZhN2UxMTFhMTAwMDAwMDASCCThJP/+9k6eEJWZy8AOGgwIr5ScowYQvNbUsQIgiMy8y6jwpwE=", - "channel_index": 3, - "received_at": "2023-05-19T05:33:35.607383681Z" - }], - "settings": { - "data_rate": { - "lora": { - "bandwidth": 125000, - "spreading_factor": 7, - "coding_rate": "4/5" - } - }, - "frequency": "867100000", - "timestamp": 3893546133, - "time": "2023-05-19T05:33:35.608982Z" - }, - "received_at": "2023-05-19T05:33:35.641841782Z", - "consumed_airtime": "0.056576s", - "network_ids": { - "net_id": "000013", - "tenant_id": "ttn", - "cluster_id": "eu1", - "cluster_address": "eu1.cloud.thethings.network" - } - } -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/result.json b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/result.json deleted file mode 100644 index ac2cd036..00000000 --- a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/result.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "deviceName": "eui-1000000000000001", - "deviceType": "EM500-C02", - "attributes": { - "eui": "1000000000000001", - "fPort": 85, - "applicationId": "application-tts-name", - "devAddr": "20000001", - "spreadingFactor": 7, - "codeRate": "4/5", - "tenantId": "ttn", - "device_id": "eui-1000000000000001", - "join_eui": "2000000000000001", - "net_id": "000013", - "cluster_id": "eu1", - "cluster_adress": "eu1.cloud.thethings.network", - "bandwidth": 125000, - "frequency": "867100000" - }, - "telemetry": [{ - "ts": 1684474415641, - "values": { - "battery": 100, - "temperature": 28.1, - "humidity": 57.5, - "co2": 1127, - "pressure": 1008.8 - } - }] -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/converter.json b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/converter.json deleted file mode 100644 index 966af784..00000000 --- a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/converter.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "The Things Stack Industries Uplink Decoder for EM500-C02", - "type": "UPLINK", - "debugMode": false, - "debugSettings": { - "failuresEnabled": true, - "allEnabled": false, - "allEnabledUntil": 1733331880270 - }, - "configuration": { - "scriptLang": "TBEL", - "decoder": null, - "tbelDecoder": "var data = decodeToJson(payload);\n\nvar deviceName = data.end_device_ids.device_id;\nvar deviceType = \"EM500-C02\";\nvar groupName = null; // If groupName is not null - created device will be added to the entity group with such name.\nvar customerName = null; // If customerName is not null - created devices will be assigned to customer with such name. \n\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// If you want to parse incoming data somehow, you can add your code to this function.\n// input: bytes\n// expected output:\n// {\n// \"attributes\": {\"attributeKey\": \"attributeValue\"},\n// \"telemetry\": [{\"ts\": 1...1, \"values\": {\"telemetryKey\":\"telemetryValue\"}, {\"ts\": 1...2, \"values\": {\"telemetryKey\":\"telemetryValue\"}}]\n// }\n\nfunction decodeFrmPayload(input) {\n var output = { attributes: {}, telemetry: []};\n \n // --- Decoding code --- //\n var decoded = {};\n var historyDataList = [];\n for (var i = 0; i < input.length - 2 ; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n \n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n else if (channel_id === 0x03 && channel_type === 0x67) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n \n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n else if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // CO2\n else if (channel_id === 0x05 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n else if (channel_id === 0x06 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n // TEMPERATURE CHANGE ALARM\n else if (channel_id === 0x83 && channel_type === 0xd7) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n decoded.temperature_change = parseBytesToInt(input, i + 2, 2, false) / 10;\n decoded.temperature_alarm = readTemperatureAlarm(input[i + 4]);\n i += 5;\n }\n // HISTROY\n else if (channel_id === 0x20 && channel_type === 0xce) {\n var historyData = {\n ts: parseBytesToInt(input, i, 4, false) * 1000,\n values: {\n co2: parseBytesToInt(input, i + 4, 2, false),\n pressure: parseBytesToInt(input, i + 6, 1, false) / 10,\n temperature: parseBytesToInt(input, i + 8, 2, false) / 10,\n humidity: parseBytesToInt(input, i + 10, 1, false, false) / 2\n }\n };\n i += 11;\n \n historyDataList.add(historyData);\n } \n }\n \n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }];\n\n // --- Decoding code --- //\n return output;\n}\n\n// --- attributes and telemetry objects ---\nvar telemetry = [];\nvar attributes = {};\n// --- attributes and telemetry objects ---\n\n// --- Timestamp parsing\nvar dateString = data.uplink_message.received_at;\n\nif ((data.simulated != null && data.simulated) || dateString == null) {\n dateString = data.received_at;\n}\n\ntimestamp = parseDateToTimestamp(dateString);\n// --- Timestamp parsing\n\n// Message parsing\n// To avoid paths in the decoded objects we passing false value to function as \"pathInKey\" argument.\n// Warning: pathInKey can cause already found fields to be overwritten with the last value found, e.g. receive_at from uplink_message will be written receive_at in the root.\n\n// Passing incoming bytes to decodeFrmPayload function, to get custom decoding\nvar customDecoding = {};\nif (data.uplink_message.get(\"frm_payload\") != null) {\n customDecoding = decodeFrmPayload(base64ToBytes(data.uplink_message.frm_payload));\n}\n\n// Collecting data to result\nif (customDecoding.?telemetry.size() > 0) {\n if (customDecoding.telemetry instanceof java.util.ArrayList) {\n foreach(telemetryObj: customDecoding.telemetry) {\n if (telemetryObj.ts != null && telemetryObj.values != null) {\n telemetry.add(telemetryObj);\n }\n }\n } else {\n telemetry.putAll(customDecoding.telemetry);\n }\n}\n\nif (customDecoding.?attributes.size() > 0) {\n attributes.putAll(customDecoding.attributes);\n}\n\n// You can add some keys manually to attributes or telemetry\nvar applicationId = data.end_device_ids.?application_ids.?application_id;\nvar devAddr = data.end_device_ids.?dev_addr;\nvar spreadingFactor = data.uplink_message.?settings.?data_rate.?lora.?spreading_factor;\nvar codeRate = data.uplink_message.?settings.?data_rate.?lora.?coding_rate;\nvar tenantId = data.uplink_message.?network_ids.?tenant_id;\nattributes.eui = data.end_device_ids.dev_eui;\nattributes.fPort = data.uplink_message.f_port;\nattributes.applicationId = applicationId;\nattributes.devAddr = devAddr;\nattributes.spreadingFactor = spreadingFactor;\nattributes.codeRate = codeRate;\nattributes.tenantId = tenantId;\nattributes.device_id = data.end_device_ids.?device_id;\nattributes.join_eui = data.end_device_ids.?join_eui;\nattributes.net_id = data.uplink_message.?network_ids.?net_id;\nattributes.cluster_id = data.uplink_message.?network_ids.?cluster_id;\nattributes.cluster_address = data.uplink_message.?network_ids.?cluster_address;\nattributes.bandwidth = data.uplink_message.?settings.?data_rate.?lora.?bandwidth;\nattributes.frequency = data.uplink_message.?settings.?frequency;\n\nvar isIncludeGatewayInfo = metadata[\"includeGatewayInfo\"];\nif(isIncludeGatewayInfo == true) {\n var gatewayInfo = getGatewayInfo();\n var addDataToTelemetry = {};\n addDataToTelemetry.snr = gatewayInfo.snr;\n addDataToTelemetry.rssi = gatewayInfo.rssi;\n addDataToTelemetry.channel = gatewayInfo.channel_index;\n addDataToTelemetry.consumed_airtime = data.uplink_message.?consumed_airtime;\n addDataToTelemetry.fCnt = data.uplink_message.?f_cnt;\n\n telemetry = processTelemetryData(telemetry, addDataToTelemetry);\n}\n\nvar result = {\n deviceName: deviceName,\n deviceType: deviceType,\n // assetName: assetName,\n // assetType: assetType,\n attributes: attributes,\n telemetry: telemetry\n};\n\naddAdditionalInfoForDeviceMsg(result, customerName, groupName);\n\nreturn result;\n\nfunction addAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName) {\n if (customerName != null) {\n deviceInfo.customerName = customerName;\n }\n if (groupName != null) {\n deviceInfo.groupName = groupName;\n }\n}\n\nfunction parseDateToTimestamp(dateString) {\n var date = new Date(dateString);\n var timestamp = date.getTime();\n \n // If we cannot parse timestamp - we will use the current timestamp\n if (timestamp == -1) {\n timestamp = Date.now();\n }\n \n return timestamp;\n}\n\nfunction getGatewayInfo() {\n var gatewayList = data.uplink_message.?rx_metadata;\n var maxRssi = Integer. MIN_VALUE;\n var gatewayInfo = {};\n \n foreach (gateway : gatewayList) {\n if(gateway.rssi > maxRssi) {\n maxRssi = gateway.rssi;\n gatewayInfo = gateway;\n }\n }\n \n return gatewayInfo;\n}\n\nfunction processTelemetryData(telemetry, addDataToTelemetry) {\n if (telemetry.size >= 1) {\n telemetry = addDataToTelemetries(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToTelemetries(telemetries, addDataToTelemetry) {\n foreach(telemetry : telemetries) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[\"values\"].keys.contains(element.key)) {\n telemetry[\"values\"][element.key] = element.value;\n }\n } \n }\n \n return telemetries;\n}\n\nfunction readTemperatureAlarm(type) {\n switch (type) {\n case 0:\n return \"threshold alarm\";\n case 1:\n return \"threshold alarm release\";\n case 2:\n return \"mutation alarm\";\n default:\n return \"unkown\";\n }\n}", - "encoder": null, - "tbelEncoder": null, - "updateOnlyKeys": [ - "fPort", - "bandwidth", - "frequency", - "net_id", - "cluster_id", - "cluster_address", - "tenant_address", - "device_id", - "join_eui", - "eui", - "channel", - "devAddr", - "spreadingFactor", - "codeRate", - "tenantId", - "applicationId", - "battery" - ] - }, - "additionalInfo": { - "description": "" - }, - "edgeTemplate": false -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/metadata.json b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/metadata.json deleted file mode 100644 index 904c0fa0..00000000 --- a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/metadata.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "integrationName": "The Things Stack Industries integration new", - "includeGatewayInfo": "false" -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/payload.json b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/payload.json deleted file mode 100644 index 798b317e..00000000 --- a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/payload.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "end_device_ids": { - "device_id": "eui-1000000000000001", - "application_ids": { - "application_id": "application-tti-name" - }, - "dev_eui": "1000000000000001", - "join_eui": "2000000000000001", - "dev_addr": "20000001" - }, - "correlation_ids": ["as:up:01H0PZDGB1NW6NAPD815NGHPF6", "gs:conn:01H0FJRSXSYT7VKNYXJ89F95XT", "gs:up:host:01H0FJRSY3MZMGPPFBQ4FZV4T8", "gs:uplink:01H0PZDG4HHGFRTXRTXD4PFTH7", "ns:uplink:01H0PZDG4JZ3BM0K6J89EQK1J7", "rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01H0PZDG4J02F85RYFPCNSNXCR", "rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01H0PZDGB081PMP806BJHNHX1A"], - "received_at": "2023-05-18T08:25:26.112483370Z", - "uplink_message": { - "session_key_id": "AYfg8rhha5n+FWx0ZaAprA==", - "f_port": 85, - "f_cnt": 5017, - "frm_payload": "AXVkA2cZAQRocwV9ZwQGc2gn", - "rx_metadata": [{ - "gateway_ids": { - "gateway_id": "eui-6A7E111A10000000", - "eui": "6A7E111A10000000" - }, - "time": "2023-05-18T08:25:25.885310Z", - "timestamp": 818273765, - "rssi": -24, - "channel_rssi": -24, - "snr": 12, - "frequency_offset": "671", - "uplink_token": "CiIKIAoUZXVpLTZBN0UxMTFBMTAwMDAwMDASCCThJP/+9k6eEOW7l4YDGgwI9cGXowYQ5KPhrwMgiI2rp+jpOA=", - "channel_index": 2, - "received_at": "2023-05-18T08:25:25.869324983Z" - }, { - "gateway_ids": { - "gateway_id": "packetbroker" - }, - "packet_broker": { - "message_id": "01H0PZDG4MF9AYSMNY44MAVTDH", - "forwarder_net_id": "000013", - "forwarder_tenant_id": "ttn", - "forwarder_cluster_id": "eu1.cloud.thethings.network", - "forwarder_gateway_eui": "6A7E111A10000000", - "forwarder_gateway_id": "eui-6a7e111a10000000", - "home_network_net_id": "000013", - "home_network_tenant_id": "tenant", - "home_network_cluster_id": "eu1.cloud.thethings.industries" - }, - "time": "2023-05-18T08:25:25.885310Z", - "rssi": -24, - "channel_rssi": -24, - "snr": 12, - "frequency_offset": "671", - "uplink_token": "eyJnIjoiWlhsS2FHSkhZMmxQYVVwQ1RWUkpORkl3VGs1VE1XTnBURU5LYkdKdFRXbFBhVXBDVFZSSk5GSXdUazVKYVhkcFlWaFphVTlwU201a01uaGhWVlJvZDFSWFVuRmlSM1JtVFcxT2RVbHBkMmxrUjBadVNXcHZhV05ZY0RKT1IyeExaREpSZVZwR1pIUmpNRXBLVlVoR2RFNVZkR3BWVTBvNUxua3paVVJTWVRaM1lXOU1kbTQwVm5sdmIyWmlPWGN1ZUhCZmVrcElaa3hIWlZadGRVUlFVeTVuYlRaVlZXRXdkakpHV0VKMGJUUjZaMjVXUkVoeGVHRjRaMlJKTlVkS1VsbERhemc1VDNCbk5rVk1iM1JDUkVZM1VWbHdZbEJDTkdOblNqWjBlbkphYUV4MFRVMHhZMVZFTTFac01XdExURUo0YURaMFExTnhhMVJsWWw4eE5FdHlVVXcyZUhsRWFFbEhlakJITXpoTE0xaFdlRzR5VUVjMk4wNUViME5WTkhoTmRrazFZVk5oWkUwd2FXVnFjR294VGtoMFduZHlZMDFxVlVGNmRsbERUazlNY2s5eFdVeFpWMk5XTG1WVFFYVkpNVkptT1U5NWRqUTNhSEoxTUZoalYxRT0iLCJhIjp7ImZuaWQiOiIwMDAwMTMiLCJmdGlkIjoidHRuIiwiZmNpZCI6ImV1MS5jbG91ZC50aGV0aGluZ3MubmV0d29yayJ9fQ==", - "received_at": "2023-05-18T08:25:25.906038642Z" - }], - "settings": { - "data_rate": { - "lora": { - "bandwidth": 125000, - "spreading_factor": 7, - "coding_rate": "4/5" - } - }, - "frequency": "868500000", - "timestamp": 818273765, - "time": "2023-05-18T08:25:25.885310Z" - }, - "received_at": "2023-05-18T08:25:25.906399073Z", - "consumed_airtime": "0.097536s", - "network_ids": { - "net_id": "000013", - "tenant_id": "tenant", - "cluster_id": "eu1", - "cluster_address": "eu1.cloud.thethings.industries", - "tenant_address": "tenant.eu1.cloud.thethings.industries" - } - } -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/result.json b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/result.json deleted file mode 100644 index 2c54a417..00000000 --- a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/result.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "deviceName": "eui-1000000000000001", - "deviceType": "EM500-C02", - "attributes": { - "eui": "1000000000000001", - "fPort": 85, - "applicationId": "application-tti-name", - "devAddr": "20000001", - "spreadingFactor": 7, - "codeRate": "4/5", - "tenantId": "tenant", - "device_id": "eui-1000000000000001", - "join_eui": "2000000000000001", - "net_id": "000013", - "cluster_id": "eu1", - "cluster_address": "eu1.cloud.thethings.industries", - "bandwidth": 125000, - "frequency": "868500000" - }, - "telemetry": [{ - "ts": 1684398325906, - "values": { - "battery": 100, - "temperature": 28.1, - "humidity": 57.5, - "co2": 1127, - "pressure": 1008.8 - } - }] -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/guide.md b/VENDORS/Milesight/EM500-CO2/guide.md deleted file mode 100644 index e84fdf21..00000000 --- a/VENDORS/Milesight/EM500-CO2/guide.md +++ /dev/null @@ -1,15 +0,0 @@ -# CO2 Sensor - Milesight IoT - -The payload decoder function is applicable to EM500-CO2. - -## Payload Definition - -| CHANNEL | ID | TYPE | LENGTH | DESCRIPTION | -| :---------------: | :--: | :--: | :----: | ----------------------------------------------------------------------------------------- | -| Battery | 0x01 | 0x75 | 1 | battery(1B)
battery, unit: % | -| Temperature | 0x03 | 0x67 | 2 | temperature(2B)
temperature,unit: ℃ | -| Humidity | 0x04 | 0x68 | 1 | humidity(1B)
humidity, unit: %RH | -| CO2 | 0x05 | 0x7D | 2 | co2(2B)
co2, unit: ppm | -| Pressure | 0x06 | 0x73 | 2 | pressure(2B)
pressure, unit: hPa | -| Temperature Alarm | 0x83 | 0xD7 | 5 | temperature(2B) + temperature_change(2B) + temperature_alarm(1B)
temperature, unit: ℃ | -| Historical Data | 0x20 | 0XCE | 11 | timestamp(4B) + co2(2B) + pressure(2B) + temperature(2B) + humidity(1B) | \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/info.json b/VENDORS/Milesight/EM500-CO2/info.json deleted file mode 100644 index 9e9bbf75..00000000 --- a/VENDORS/Milesight/EM500-CO2/info.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "url": "https://www.milesight.com/iot/product/lorawan-sensor/em500-co2", - "label": "EM500-C02: LoRaWAN® Carbon Dioxide sensor", - "description": "EM500-CO2 is designed for measuring CO2, temperature, humidity and barometric pressure in harsh environments and transmitting data using LoRaWAN® technology." -} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/photo.png b/VENDORS/Milesight/EM500-CO2/photo.png deleted file mode 100644 index 74ff895322f2f097c3263ce64c473af703536dba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115101 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 z 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%0DfuPdFolS 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
@q07>x(%s!?43A%ng8-^ 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 Date: Fri, 13 Dec 2024 10:30:35 +0200 Subject: [PATCH 3/3] Added 4 LNS integrations for EM500-CO2 (cherry picked from commit 10e2241ef63d8bac1b4b6845c2645c0e06dcad09) --- .../ChirpStack/uplink/converter.json | 39 +++++++++ .../EM500-CO2/ChirpStack/uplink/metadata.json | 4 + .../EM500-CO2/ChirpStack/uplink/payload.json | 48 +++++++++++ .../EM500-CO2/ChirpStack/uplink/result.json | 29 +++++++ .../EM500-CO2/LORIOT/uplink/converter.json | 29 +++++++ .../EM500-CO2/LORIOT/uplink/metadata.json | 4 + .../EM500-CO2/LORIOT/uplink/payload.json | 17 ++++ .../EM500-CO2/LORIOT/uplink/result.json | 19 +++++ .../uplink/converter.json | 39 +++++++++ .../ThingsStackCommunity/uplink/metadata.json | 4 + .../ThingsStackCommunity/uplink/payload.json | 54 ++++++++++++ .../ThingsStackCommunity/uplink/result.json | 30 +++++++ .../uplink/converter.json | 40 +++++++++ .../uplink/metadata.json | 4 + .../ThingsStackIndustries/uplink/payload.json | 77 ++++++++++++++++++ .../ThingsStackIndustries/uplink/result.json | 30 +++++++ VENDORS/Milesight/EM500-CO2/guide.md | 15 ++++ VENDORS/Milesight/EM500-CO2/info.json | 5 ++ VENDORS/Milesight/EM500-CO2/photo.png | Bin 0 -> 115101 bytes 19 files changed, 487 insertions(+) create mode 100644 VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/converter.json create mode 100644 VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/metadata.json create mode 100644 VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/payload.json create mode 100644 VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/result.json create mode 100644 VENDORS/Milesight/EM500-CO2/LORIOT/uplink/converter.json create mode 100644 VENDORS/Milesight/EM500-CO2/LORIOT/uplink/metadata.json create mode 100644 VENDORS/Milesight/EM500-CO2/LORIOT/uplink/payload.json create mode 100644 VENDORS/Milesight/EM500-CO2/LORIOT/uplink/result.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/converter.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/metadata.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/payload.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/result.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/converter.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/metadata.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/payload.json create mode 100644 VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/result.json create mode 100644 VENDORS/Milesight/EM500-CO2/guide.md create mode 100644 VENDORS/Milesight/EM500-CO2/info.json create mode 100644 VENDORS/Milesight/EM500-CO2/photo.png diff --git a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/converter.json b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/converter.json new file mode 100644 index 00000000..e802bdfc --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/converter.json @@ -0,0 +1,39 @@ +{ + "name": "ChirpStack Uplink Decoder for EM500-C02", + "type": "UPLINK", + "debugMode": false, + "debugSettings": { + "failuresEnabled": true, + "allEnabled": false, + "allEnabledUntil": 1733331880270 + }, + "configuration": { + "scriptLang": "TBEL", + "decoder": null, + "tbelDecoder": "var data = decodeToJson(payload);\nvar deviceName = data.deviceInfo.deviceName + \" \" + data.deviceInfo.devEui;\nvar deviceType = \"EM500-C02\";\nvar groupName = null; // If groupName is not null - created device will be added to the entity group with such name.\nvar customerName = null; // If customerName is not null - created devices will be assigned to customer with such name. \n\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// If you want to parse incoming data somehow, you can add your code to this function.\n// input: bytes\n// expected output:\n// {\n// \"attributes\": {\"attributeKey\": \"attributeValue\"},\n// \"telemetry\": [{\"ts\": 1...1, \"values\": {\"telemetryKey\":\"telemetryValue\"}, {\"ts\": 1...2, \"values\": {\"telemetryKey\":\"telemetryValue\"}}]\n// }\n\nfunction decodePayload(input) {\n var output = {\n attributes: {},\n telemetry: []\n };\n \n // --- Decoding code --- //\n var decoded = {};\n var historyDataList = [];\n for (var i = 0; i < input.length - 2 ; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n \n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n else if (channel_id === 0x03 && channel_type === 0x67) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n \n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n else if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // CO2\n else if (channel_id === 0x05 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n else if (channel_id === 0x06 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n // TEMPERATURE CHANGE ALARM\n else if (channel_id === 0x83 && channel_type === 0xd7) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n decoded.temperature_change = parseBytesToInt(input, i + 2, 2, false) / 10;\n decoded.temperature_alarm = readTemperatureAlarm(input[i + 4]);\n i += 5;\n }\n // HISTROY\n else if (channel_id === 0x20 && channel_type === 0xce) {\n var historyData = {\n ts: parseBytesToInt(input, i, 4, false) * 1000,\n values: {\n co2: parseBytesToInt(input, i + 4, 2, false),\n pressure: parseBytesToInt(input, i + 6, 1, false) / 10,\n temperature: parseBytesToInt(input, i + 8, 2, false) / 10,\n humidity: parseBytesToInt(input, i + 10, 1, false, false) / 2\n }\n };\n i += 11;\n \n historyDataList.add(historyData);\n } \n }\n\n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }];\n \n output.telemetry.addAll(historyDataList);\n // --- Decoding code --- //\n return output;\n}\n\n// --- attributes and telemetry objects ---\nvar telemetry = [];\nvar attributes = {};\n// --- attributes and telemetry objects ---\n\n// --- Timestamp parsing\nvar dateString = data.time;\ntimestamp = parseDateToTimestamp(dateString);\n// --- Timestamp parsing\n\n// Passing incoming bytes to decodePayload function, to get custom decoding\nvar customDecoding = decodePayload(base64ToBytes(data.data));\n\n\nattributes.eui = data.deviceInfo.devEui;\n\n// Collecting data to result\nif (customDecoding.?telemetry.size() > 0) {\n if (customDecoding.telemetry instanceof java.util.ArrayList) {\n foreach(telemetryObj: customDecoding.telemetry) {\n if (telemetryObj.ts != null && telemetryObj.values != null) {\n telemetry.add(telemetryObj);\n }\n }\n } else {\n telemetry.putAll(customDecoding.telemetry);\n }\n}\n\nif (customDecoding.?attributes.size() > 0) {\n attributes.putAll(customDecoding.attributes);\n}\n\n// You can add some keys manually to attributes or telemetry\nattributes.eui = data.deviceInfo.?devEui;\nattributes.devAddr = data.devAddr;\nattributes.fPort = data.fPort;\nattributes.applicationId = data.deviceInfo.?applicationId;\nattributes.applicationName = data.deviceInfo.?applicationName;\nattributes.tenantId = data.deviceInfo.?tenantId;\nattributes.tenantName = data.deviceInfo.?tenantName;\nattributes.deviceProfileId = data.deviceInfo.?deviceProfileId;\nattributes.deviceProfileName = data.deviceInfo.?deviceProfileName;\nattributes.frequency = data.txInfo.?frequency;\nattributes.bandwidth = data.txInfo.?modulation.?lora.?bandwidth;\nattributes.spreadingFactor = data.txInfo.?modulation.?lora.?spreadingFactor;\nattributes.codeRate = data.txInfo.?modulation.?lora.?codeRate;\n\nif(Boolean.parseBoolean(metadata[\"includeGatewayInfo\"])) {\n var gatewayInfo = getGatewayInfo();\n var addDataToTelemetry = {};\n addDataToTelemetry.snr = gatewayInfo.snr;\n addDataToTelemetry.rssi = gatewayInfo.rssi;\n addDataToTelemetry.channel = gatewayInfo.channel;\n addDataToTelemetry.rfChain = gatewayInfo.rfChain;\n addDataToTelemetry.fCnt = data.fCnt;\n \n telemetry = processTelemetryData(telemetry, addDataToTelemetry);\n}\n\nvar result = {\n deviceName: deviceName,\n deviceType: deviceType,\n // assetName: assetName,\n // assetType: assetType,\n attributes: attributes,\n telemetry: telemetry\n};\n\naddAdditionalInfoForDeviceMsg(result, customerName, groupName);\n\nreturn result;\n\nfunction addAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName) {\n if (customerName != null) {\n deviceInfo.customerName = customerName;\n }\n if (groupName != null) {\n deviceInfo.groupName = groupName;\n }\n}\n\nfunction parseDateToTimestamp(dateString) {\n var date = new Date(dateString);\n var timestamp = date.getTime();\n \n // If we cannot parse timestamp - we will use the current timestamp\n if (timestamp == -1) {\n timestamp = Date.now();\n }\n \n return timestamp;\n}\n\nfunction getGatewayInfo() {\n var gatewayList = data.rxInfo;\n var maxRssi = Integer.MIN_VALUE;\n var gatewayInfo = {};\n \n foreach (gateway : gatewayList) {\n if(gateway.rssi > maxRssi) {\n maxRssi = gateway.rssi;\n gatewayInfo = gateway;\n }\n }\n \n return gatewayInfo;\n}\n\nfunction processTelemetryData(telemetry, addDataToTelemetry) {\n if (telemetry.size >= 1) {\n telemetry = addDataToTelemetries(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToTelemetries(telemetries, addDataToTelemetry) {\n foreach(telemetry : telemetries) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[\"values\"].keys.contains(element.key)) {\n telemetry[\"values\"][element.key] = element.value;\n }\n } \n }\n \n return telemetries;\n}\n\nfunction readTemperatureAlarm(type) {\n switch (type) {\n case 0:\n return \"threshold alarm\";\n case 1:\n return \"threshold alarm release\";\n case 2:\n return \"mutation alarm\";\n default:\n return \"unkown\";\n }\n}", + "encoder": null, + "tbelEncoder": null, + "updateOnlyKeys": [ + "tenantId", + "tenantName", + "applicationId", + "applicationName", + "deviceProfileId", + "deviceProfileName", + "devAddr", + "fPort", + "frequency", + "bandwidth", + "spreadingFactor", + "codeRate", + "channel", + "rfChain", + "eui", + "battery" + ] + }, + "additionalInfo": { + "description": "" + }, + "edgeTemplate": false +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/metadata.json b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/metadata.json new file mode 100644 index 00000000..23f54b34 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/metadata.json @@ -0,0 +1,4 @@ +{ + "integrationName": "ChirpStack integration", + "includeGatewayInfo": "false" +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/payload.json b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/payload.json new file mode 100644 index 00000000..88086852 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/payload.json @@ -0,0 +1,48 @@ +{ + "deduplicationId": "57433366-50a6-4dc2-8145-2df1bbc70d9e", + "time": "2023-05-22T07:47:05.404859+00:00", + "deviceInfo": { + "tenantId": "52f14cd4-c6f1-4fbd-8f87-4025e1d49242", + "tenantName": "ChirpStack", + "applicationId": "ca739e26-7b67-4f14-b69e-d568c22a5a75", + "applicationName": "Chirpstack application", + "deviceProfileId": "605d08d4-65f5-4d2c-8a5a-3d2457662f79", + "deviceProfileName": "Chirpstack default device profile", + "deviceName": "Device name", + "devEui": "1000000000000001", + "tags": {} + }, + "devAddr": "20000001", + "adr": true, + "dr": 5, + "fCnt": 4, + "fPort": 85, + "confirmed": false, + "data": "AXVkA2cZAQRocwV9ZwQGc2gn", + "rxInfo": [{ + "gatewayId": "6a7e111a10000000", + "uplinkId": 24022, + "time": "2023-05-22T07:47:05.404859+00:00", + "rssi": -35, + "snr": 11.5, + "channel": 2, + "rfChain": 1, + "location": {}, + "context": "EFwMtA==", + "metadata": { + "region_common_name": "EU868", + "region_config_id": "eu868" + }, + "crcStatus": "CRC_OK" + }], + "txInfo": { + "frequency": 868500000, + "modulation": { + "lora": { + "bandwidth": 125000, + "spreadingFactor": 7, + "codeRate": "CR_4_5" + } + } + } +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/result.json b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/result.json new file mode 100644 index 00000000..84dcc988 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ChirpStack/uplink/result.json @@ -0,0 +1,29 @@ +{ + "deviceName": "Device name 1000000000000001", + "deviceType": "EM500-C02", + "attributes": { + "eui": "1000000000000001", + "devAddr": "20000001", + "fPort": 85, + "applicationId": "ca739e26-7b67-4f14-b69e-d568c22a5a75", + "applicationName": "Chirpstack application", + "tenantId": "52f14cd4-c6f1-4fbd-8f87-4025e1d49242", + "tenantName": "ChirpStack", + "deviceProfileId": "605d08d4-65f5-4d2c-8a5a-3d2457662f79", + "deviceProfileName": "Chirpstack default device profile", + "frequency": 868500000, + "bandwidth": 125000, + "spreadingFactor": 7, + "codeRate": "CR_4_5" + }, + "telemetry": [{ + "ts": 1684741625404, + "values": { + "battery": 100, + "temperature": 28.1, + "humidity": 57.5, + "co2": 1127, + "pressure": 1008.8 + } + }] +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/converter.json b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/converter.json new file mode 100644 index 00000000..593aaa31 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/converter.json @@ -0,0 +1,29 @@ +{ + "name": "Loriot Uplink Decoder for EM500-C02", + "type": "UPLINK", + "debugMode": false, + "debugSettings": { + "failuresEnabled": true, + "allEnabled": false, + "allEnabledUntil": 1733331880270 + }, + "configuration": { + "scriptLang": "TBEL", + "decoder": "// Decode an uplink message from a buffer\n// payload - array of bytes\n// metadata - key/value object\n\n/** Decoder **/\n\n// decode payload to string\nvar payloadStr = decodeToString(payload);\n\n// decode payload to JSON\n// var data = decodeToJson(payload);\n\nvar deviceName = 'Device A';\nvar deviceType = 'thermostat';\nvar customerName = 'Customer C';\nvar groupName = 'thermostat devices';\nvar manufacturer = 'Example corporation';\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// Result object with device/asset attributes/telemetry data\nvar result = {\n// Use deviceName and deviceType or assetName and assetType, but not both.\n deviceName: deviceName,\n deviceType: deviceType,\n// assetName: assetName,\n// assetType: assetType,\n// customerName: customerName,\n groupName: groupName,\n attributes: {\n model: 'Model A',\n serialNumber: 'SN111',\n integrationName: metadata['integrationName'],\n manufacturer: manufacturer\n },\n telemetry: {\n temperature: 42,\n humidity: 80,\n rawData: payloadStr\n }\n};\n\n/** Helper functions **/\n\nfunction decodeToString(payload) {\n return String.fromCharCode.apply(String, payload);\n}\n\nfunction decodeToJson(payload) {\n // covert payload to string.\n var str = decodeToString(payload);\n\n // parse string to JSON\n var data = JSON.parse(str);\n return data;\n}\n\nreturn result;", + "tbelDecoder": "var data = decodeToJson(payload);\nvar deviceName = data.EUI;\nvar deviceType = \"EM500-C02\";\nvar groupName = null; // If groupName is not null - created device will be added to the entity group with such name.\nvar customerName = null; // If customerName is not null - created devices will be assigned to customer with such name. \n\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// If you want to parse incoming data somehow, you can add your code to this function.\n// input: bytes\n// expected output:\n// {\n// \"attributes\": {\"attributeKey\": \"attributeValue\"},\n// \"telemetry\": {\"telemetryKey\": \"telemetryValue\"}\n// }\n\nfunction decodePayload(input) {\n var output = { attributes: {}, telemetry: []};\n \n var decoded = {};\n var historyDataList = [];\n for (var i = 0; i < input.length - 2 ; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n \n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n else if (channel_id === 0x03 && channel_type === 0x67) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n \n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n else if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // CO2\n else if (channel_id === 0x05 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n else if (channel_id === 0x06 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n // TEMPERATURE CHANGE ALARM\n else if (channel_id === 0x83 && channel_type === 0xd7) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n decoded.temperature_change = parseBytesToInt(input, i + 2, 2, false) / 10;\n decoded.temperature_alarm = readTemperatureAlarm(input[i + 4]);\n i += 5;\n }\n // HISTROY\n else if (channel_id === 0x20 && channel_type === 0xce) {\n var historyData = {\n ts: parseBytesToInt(input, i, 4, false) * 1000,\n values: {\n co2: parseBytesToInt(input, i + 4, 2, false),\n pressure: parseBytesToInt(input, i + 6, 1, false) / 10,\n temperature: parseBytesToInt(input, i + 8, 2, false) / 10,\n humidity: parseBytesToInt(input, i + 10, 1, false, false) / 2\n }\n };\n i += 11;\n \n historyDataList.add(historyData);\n } \n }\n \n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }];\n\n // --- Decoding code --- //\n return output;\n}\n\n// --- attributes and telemetry objects ---\nvar telemetry = [];\nvar attributes = {};\n// --- attributes and telemetry objects ---\n\n// --- Timestamp parsing\ntimestamp = data.ts;\n// --- Timestamp parsing\n\n// Message parsing\n// To avoid paths in the decoded objects we passing false value to function as \"pathInKey\" argument.\n// Warning: pathInKey can cause already found fields to be overwritten with the last value found.\n\nvar uplinkDataList = [];\n\n// Passing incoming bytes to decodePayload function, to get custom decoding\nvar customDecoding = decodePayload(hexToBytes(data.data));\n\n// Collecting data to result\nif (customDecoding.?telemetry.size() > 0) {\n if (customDecoding.telemetry instanceof java.util.ArrayList) {\n foreach(telemetryObj: customDecoding.telemetry) {\n if (telemetryObj.ts != null && telemetryObj.values != null) {\n telemetry.add(telemetryObj);\n }\n }\n } else {\n telemetry.putAll(customDecoding.telemetry);\n }\n}\n\nif (customDecoding.?attributes.size() > 0) {\n attributes.putAll(customDecoding.attributes);\n}\n\n// You can add some keys manually to attributes or telemetry\nattributes.eui = data.EUI;\nattributes.fPort = data.port;\nattributes.frequency = data.freq;\n\nvar isIncludeGatewayInfo = metadata[\"includeGatewayInfo\"];\nif(isIncludeGatewayInfo == true) {\n var addDataToTelemetry = {};\n addDataToTelemetry.rssi = data.rssi;\n addDataToTelemetry.seqno = data.seqno;\n addDataToTelemetry.snr = data.snr;\n addDataToTelemetry.ack = data.ack;\n addDataToTelemetry.toa = data.toa;\n addDataToTelemetry.fCnt = data.fcnt;\n \n telemetry = processTelemetryData(telemetry, addDataToTelemetry);\n}\n\nvar deviceInfo = {\n deviceName: deviceName,\n deviceType: deviceType,\n// assetName: assetName,\n// assetType: assetType,\n attributes: attributes,\n telemetry: telemetry, \n};\n\naddAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName);\n\nuplinkDataList.add(deviceInfo);\n\nvar gatewayDeviceNamePrefix = \"Gateway \";\nvar gatewayDeviceType = \"Lora gateway\";\nvar gatewayGroupName = null; // If gatewayGroupName is not null - created device will be added to the entity group with such name.\n\nif (data.cmd == \"gw\") {\n foreach( gatewayInfo : data.gws ) {\n var addGatewayInfo = {};\n\n // You can add some keys manually telemetry\n addGatewayInfo.rssi = gatewayInfo.rssi;\n addGatewayInfo.snr = gatewayInfo.snr;\n // You can add some keys manually telemetry\n \n var gatewayInfoMsg = {\n deviceName: gatewayDeviceNamePrefix + gatewayInfo.gweui,\n deviceType: gatewayDeviceType,\n telemetry: [{\n \"ts\": gatewayInfo.ts,\n \"values\": addGatewayInfo\n }],\n attributes: {\n eui: gatewayInfo.gweui\n }\n };\n addAdditionalInfoForDeviceMsg(gatewayInfoMsg, customerName, gatewayGroupName);\n uplinkDataList.add(gatewayInfoMsg);\n }\n}\n\nreturn uplinkDataList;\n\nfunction addAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName) {\n if (customerName != null) {\n deviceInfo.customerName = customerName;\n }\n if (groupName != null) {\n deviceInfo.groupName = groupName;\n }\n}\n\nfunction processTelemetryData(telemetry, addDataToTelemetry) {\n if (telemetry.size >= 1) {\n telemetry = addDataToTelemetries(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToTelemetries(telemetries, addDataToTelemetry) {\n foreach(telemetry : telemetries) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[\"values\"].keys.contains(element.key)) {\n telemetry[\"values\"][element.key] = element.value;\n }\n } \n }\n \n return telemetries;\n}\n\nfunction readTemperatureAlarm(type) {\n switch (type) {\n case 0:\n return \"threshold alarm\";\n case 1:\n return \"threshold alarm release\";\n case 2:\n return \"mutation alarm\";\n default:\n return \"unkown\";\n }\n}", + "encoder": null, + "tbelEncoder": null, + "updateOnlyKeys": [ + "fPort", + "ack", + "eui", + "frequency", + "dr", + "battery" + ] + }, + "additionalInfo": { + "description": "" + }, + "edgeTemplate": false +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/metadata.json b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/metadata.json new file mode 100644 index 00000000..ae2ee743 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/metadata.json @@ -0,0 +1,4 @@ +{ + "integrationName": "Loriot integration", + "includeGatewayInfo": "false" +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/payload.json b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/payload.json new file mode 100644 index 00000000..0bbb8113 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/payload.json @@ -0,0 +1,17 @@ +{ + "cmd": "rx", + "seqno": 3040, + "EUI": "1000000000000001", + "ts": 1684478801936, + "fcnt": 2, + "port": 85, + "freq": 867500000, + "rssi": -21, + "snr": 10, + "toa": 206, + "dr": "SF9 BW125 4/5", + "ack": false, + "bat": 94, + "offline": false, + "data": "01756403671901046873057D670406736827" +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/result.json b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/result.json new file mode 100644 index 00000000..08bd685b --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/LORIOT/uplink/result.json @@ -0,0 +1,19 @@ +[{ + "deviceName": "1000000000000001", + "deviceType": "EM500-C02", + "attributes": { + "eui": "1000000000000001", + "fPort": 85, + "frequency": 867500000 + }, + "telemetry": [{ + "ts": 1684478801936, + "values": { + "battery": 100, + "temperature": 28.1, + "humidity": 57.5, + "co2": 1127, + "pressure": 1008.8 + } + }] +}] \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/converter.json b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/converter.json new file mode 100644 index 00000000..6a810945 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/converter.json @@ -0,0 +1,39 @@ +{ + "name": "The Things Stack Community Uplink Decoder for EM500-C02", + "type": "UPLINK", + "debugMode": false, + "debugSettings": { + "failuresEnabled": true, + "allEnabled": false, + "allEnabledUntil": 1733331880270 + }, + "configuration": { + "scriptLang": "TBEL", + "decoder": null, + "tbelDecoder": "var data = decodeToJson(payload);\n\nvar deviceName = data.end_device_ids.device_id;\nvar deviceType = \"EM500-C02\";\nvar groupName = null; // If groupName is not null - created device will be added to the entity group with such name.\nvar customerName = null; // If customerName is not null - created devices will be assigned to customer with such name. \n\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// If you want to parse incoming data somehow, you can add your code to this function.\n// input: bytes\n// expected output:\n// {\n// \"attributes\": {\"attributeKey\": \"attributeValue\"},\n// \"telemetry\": [{\"ts\": 1...1, \"values\": {\"telemetryKey\":\"telemetryValue\"}, {\"ts\": 1...2, \"values\": {\"telemetryKey\":\"telemetryValue\"}}]\n// }\n\nfunction decodeFrmPayload(input) {\n var output = {\n attributes: {}, telemetry: {}\n };\n \n // --- Decoding code --- //\n var decoded = {};\n var historyDataList = [];\n for (var i = 0; i < input.length - 2 ; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n \n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n else if (channel_id === 0x03 && channel_type === 0x67) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n \n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n else if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // CO2\n else if (channel_id === 0x05 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n else if (channel_id === 0x06 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n // TEMPERATURE CHANGE ALARM\n else if (channel_id === 0x83 && channel_type === 0xd7) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n decoded.temperature_change = parseBytesToInt(input, i + 2, 2, false) / 10;\n decoded.temperature_alarm = readTemperatureAlarm(input[i + 4]);\n i += 5;\n }\n // HISTROY\n else if (channel_id === 0x20 && channel_type === 0xce) {\n var historyData = {\n ts: parseBytesToInt(input, i, 4, false) * 1000,\n values: {\n co2: parseBytesToInt(input, i + 4, 2, false),\n pressure: parseBytesToInt(input, i + 6, 1, false) / 10,\n temperature: parseBytesToInt(input, i + 8, 2, false) / 10,\n humidity: parseBytesToInt(input, i + 10, 1, false, false) / 2\n }\n };\n i += 11;\n \n historyDataList.add(historyData);\n } \n }\n \n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }];\n \n // --- Decoding code --- //\n return output;\n}\n\n\n// --- attributes and telemetry objects ---\nvar telemetry = [];\nvar attributes = {};\n// --- attributes and telemetry objects ---\n\n// --- Timestamp parsing\nvar dateString = data.uplink_message.received_at;\n// If data is simulated or device doesn't send his own date string - we will use date from upcoming message, set by network server\nif ((data.simulated != null && data.simulated) || dateString == null) {\n dateString = data.received_at;\n}\ntimestamp = parseDateToTimestamp(dateString);\n// --- Timestamp parsing\n\n// Message parsing\n// To avoid paths in the decoded objects we passing false value to function as \"pathInKey\" argument.\n// Warning: pathInKey can cause already found fields to be overwritten with the last value found, e.g. receive_at from uplink_message will be written receive_at in the root.\n\n// Passing incoming bytes to decodeFrmPayload function, to get custom decoding\nvar customDecoding = {};\nif (data.uplink_message.get(\"frm_payload\") != null) {\n customDecoding = decodeFrmPayload(base64ToBytes(data.uplink_message.frm_payload));\n}\n\n// Collecting data to result\nif (customDecoding.?telemetry.size() > 0) {\n if (customDecoding.telemetry instanceof java.util.ArrayList) {\n foreach(telemetryObj: customDecoding.telemetry) {\n if (telemetryObj.ts != null && telemetryObj.values != null) {\n telemetry.add(telemetryObj);\n }\n }\n } else {\n telemetry.putAll(customDecoding.telemetry);\n }\n}\n\nif (customDecoding.?attributes.size() > 0) {\n attributes.putAll(customDecoding.attributes);\n}\n\n// You can add some keys manually to attributes or telemetry\nvar applicationId = data.end_device_ids.?application_ids.?application_id;\nvar devAddr = data.end_device_ids.?dev_addr;\nvar spreadingFactor = data.uplink_message.?settings.?data_rate.?lora.?spreading_factor;\nvar codeRate = data.uplink_message.?settings.?data_rate.?lora.?coding_rate;\nvar tenantId = data.uplink_message.?network_ids.?tenant_id;\nattributes.eui = data.end_device_ids.dev_eui;\nattributes.fPort = data.uplink_message.f_port;\nattributes.applicationId = applicationId;\nattributes.devAddr = devAddr;\nattributes.spreadingFactor = spreadingFactor;\nattributes.codeRate = codeRate;\nattributes.tenantId = tenantId;\nattributes.device_id = data.end_device_ids.?device_id;\nattributes.join_eui = data.end_device_ids.?join_eui;\nattributes.net_id = data.uplink_message.?network_ids.?net_id;\nattributes.cluster_id = data.uplink_message.?network_ids.?cluster_id;\nattributes.cluster_adress = data.uplink_message.?network_ids.?cluster_address;\nattributes.bandwidth = data.uplink_message.?settings.?data_rate.?lora.?bandwidth;\nattributes.frequency = data.uplink_message.?settings.?frequency;\n\n\nvar gatewayInfo = getGatewayInfo();\nvar addDataToTelemetry = {};\naddDataToTelemetry.snr = gatewayInfo.snr;\naddDataToTelemetry.rssi = gatewayInfo.rssi;\naddDataToTelemetry.channel = gatewayInfo.channel_index;\naddDataToTelemetry.consumed_airtime = data.uplink_message.?consumed_airtime;\naddDataToTelemetry.fCnt = data.uplink_message.?f_cnt;\n\nvar isIncludeGatewayInfo = metadata[\"includeGatewayInfo\"];\nif(isIncludeGatewayInfo == true) {\n telemetry = processTelemetryData(telemetry, addDataToTelemetry);\n}\n\nvar result = {\n deviceName: deviceName,\n deviceType: deviceType,\n// assetName: assetName,\n// assetType: assetType,\n attributes: attributes,\n telemetry: telemetry\n};\n\naddAdditionalInfoForDeviceMsg(result, customerName, groupName);\n\nreturn result;\n\n\nfunction addAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName) {\n if (customerName != null) {\n deviceInfo.customerName = customerName;\n }\n if (groupName != null) {\n deviceInfo.groupName = groupName;\n }\n}\n\nfunction parseDateToTimestamp(dateString) {\n var date = new Date(dateString);\n var timestamp = date.getTime();\n \n // If we cannot parse timestamp - we will use the current timestamp\n if (timestamp == -1) {\n timestamp = Date.now();\n }\n \n return timestamp;\n}\n\nfunction getGatewayInfo() {\n var gatewayList = data.uplink_message.?rx_metadata;\n var maxRssi = Integer.MIN_VALUE;\n var gatewayInfo = {};\n \n foreach (gateway : gatewayList) {\n if(gateway.rssi > maxRssi) {\n maxRssi = gateway.rssi;\n gatewayInfo = gateway;\n }\n }\n \n return gatewayInfo;\n}\n\nfunction processTelemetryData(telemetry, addDataToTelemetry) {\n if (telemetry.size >= 1) {\n telemetry = addDataToTelemetries(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToTelemetries(telemetries, addDataToTelemetry) {\n foreach(telemetry : telemetries) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[\"values\"].keys.contains(element.key)) {\n telemetry[\"values\"][element.key] = element.value;\n }\n } \n }\n \n return telemetries;\n}\n\nfunction readTemperatureAlarm(type) {\n switch (type) {\n case 0:\n return \"threshold alarm\";\n case 1:\n return \"threshold alarm release\";\n case 2:\n return \"mutation alarm\";\n default:\n return \"unkown\";\n }\n}", + "encoder": null, + "tbelEncoder": null, + "updateOnlyKeys": [ + "fPort", + "bandwidth", + "frequency", + "net_id", + "cluster_id", + "cluster_address", + "device_id", + "join_eui", + "battery", + "eui", + "channel", + "applicationId", + "devAddr", + "spreadingFactor", + "codeRate", + "tenantId" + ] + }, + "additionalInfo": { + "description": "" + }, + "edgeTemplate": false +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/metadata.json b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/metadata.json new file mode 100644 index 00000000..0d75c374 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/metadata.json @@ -0,0 +1,4 @@ +{ + "integrationName": "The Things Stack Community integration", + "includeGatewayInfo": "false" +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/payload.json b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/payload.json new file mode 100644 index 00000000..db5532f6 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/payload.json @@ -0,0 +1,54 @@ +{ + "end_device_ids": { + "device_id": "eui-1000000000000001", + "application_ids": { + "application_id": "application-tts-name" + }, + "dev_eui": "1000000000000001", + "join_eui": "2000000000000001", + "dev_addr": "20000001" + }, + "correlation_ids": ["as:up:01H0S7ZJQ9MQPMVY49FT3SE07M", "gs:conn:01H03BQZ9342X3Y86DJ2P704E5", "gs:up:host:01H03BQZ99EGAM52KK1300GFKN", "gs:uplink:01H0S7ZJGS6D9TJSKJN8XNTMAV", "ns:uplink:01H0S7ZJGS9KKD4HTTPKFEMWCV", "rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01H0S7ZJGSF3M38ZRZVTM38DEC", "rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01H0S7ZJQ8R2EH5AA269AKM8DX"], + "received_at": "2023-05-19T05:33:35.848446463Z", + "uplink_message": { + "session_key_id": "AYfqmb0pc/1uRZv9xUydgQ==", + "f_port": 85, + "f_cnt": 10335, + "frm_payload": "AXVkA2cZAQRocwV9ZwQGc2gn", + "rx_metadata": [{ + "gateway_ids": { + "gateway_id": "eui-6a7e111a10000000", + "eui": "6A7E111A10000000" + }, + "time": "2023-05-19T05:33:35.608982Z", + "timestamp": 3893546133, + "rssi": -35, + "channel_rssi": -35, + "snr": 13.2, + "frequency_offset": "69", + "uplink_token": "CiIKIAoUZXVpLTZhN2UxMTFhMTAwMDAwMDASCCThJP/+9k6eEJWZy8AOGgwIr5ScowYQvNbUsQIgiMy8y6jwpwE=", + "channel_index": 3, + "received_at": "2023-05-19T05:33:35.607383681Z" + }], + "settings": { + "data_rate": { + "lora": { + "bandwidth": 125000, + "spreading_factor": 7, + "coding_rate": "4/5" + } + }, + "frequency": "867100000", + "timestamp": 3893546133, + "time": "2023-05-19T05:33:35.608982Z" + }, + "received_at": "2023-05-19T05:33:35.641841782Z", + "consumed_airtime": "0.056576s", + "network_ids": { + "net_id": "000013", + "tenant_id": "ttn", + "cluster_id": "eu1", + "cluster_address": "eu1.cloud.thethings.network" + } + } +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/result.json b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/result.json new file mode 100644 index 00000000..ac2cd036 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackCommunity/uplink/result.json @@ -0,0 +1,30 @@ +{ + "deviceName": "eui-1000000000000001", + "deviceType": "EM500-C02", + "attributes": { + "eui": "1000000000000001", + "fPort": 85, + "applicationId": "application-tts-name", + "devAddr": "20000001", + "spreadingFactor": 7, + "codeRate": "4/5", + "tenantId": "ttn", + "device_id": "eui-1000000000000001", + "join_eui": "2000000000000001", + "net_id": "000013", + "cluster_id": "eu1", + "cluster_adress": "eu1.cloud.thethings.network", + "bandwidth": 125000, + "frequency": "867100000" + }, + "telemetry": [{ + "ts": 1684474415641, + "values": { + "battery": 100, + "temperature": 28.1, + "humidity": 57.5, + "co2": 1127, + "pressure": 1008.8 + } + }] +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/converter.json b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/converter.json new file mode 100644 index 00000000..966af784 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/converter.json @@ -0,0 +1,40 @@ +{ + "name": "The Things Stack Industries Uplink Decoder for EM500-C02", + "type": "UPLINK", + "debugMode": false, + "debugSettings": { + "failuresEnabled": true, + "allEnabled": false, + "allEnabledUntil": 1733331880270 + }, + "configuration": { + "scriptLang": "TBEL", + "decoder": null, + "tbelDecoder": "var data = decodeToJson(payload);\n\nvar deviceName = data.end_device_ids.device_id;\nvar deviceType = \"EM500-C02\";\nvar groupName = null; // If groupName is not null - created device will be added to the entity group with such name.\nvar customerName = null; // If customerName is not null - created devices will be assigned to customer with such name. \n\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// If you want to parse incoming data somehow, you can add your code to this function.\n// input: bytes\n// expected output:\n// {\n// \"attributes\": {\"attributeKey\": \"attributeValue\"},\n// \"telemetry\": [{\"ts\": 1...1, \"values\": {\"telemetryKey\":\"telemetryValue\"}, {\"ts\": 1...2, \"values\": {\"telemetryKey\":\"telemetryValue\"}}]\n// }\n\nfunction decodeFrmPayload(input) {\n var output = { attributes: {}, telemetry: []};\n \n // --- Decoding code --- //\n var decoded = {};\n var historyDataList = [];\n for (var i = 0; i < input.length - 2 ; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n \n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n else if (channel_id === 0x03 && channel_type === 0x67) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n \n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n else if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // CO2\n else if (channel_id === 0x05 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n else if (channel_id === 0x06 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n // TEMPERATURE CHANGE ALARM\n else if (channel_id === 0x83 && channel_type === 0xd7) {\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n decoded.temperature_change = parseBytesToInt(input, i + 2, 2, false) / 10;\n decoded.temperature_alarm = readTemperatureAlarm(input[i + 4]);\n i += 5;\n }\n // HISTROY\n else if (channel_id === 0x20 && channel_type === 0xce) {\n var historyData = {\n ts: parseBytesToInt(input, i, 4, false) * 1000,\n values: {\n co2: parseBytesToInt(input, i + 4, 2, false),\n pressure: parseBytesToInt(input, i + 6, 1, false) / 10,\n temperature: parseBytesToInt(input, i + 8, 2, false) / 10,\n humidity: parseBytesToInt(input, i + 10, 1, false, false) / 2\n }\n };\n i += 11;\n \n historyDataList.add(historyData);\n } \n }\n \n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }];\n\n // --- Decoding code --- //\n return output;\n}\n\n// --- attributes and telemetry objects ---\nvar telemetry = [];\nvar attributes = {};\n// --- attributes and telemetry objects ---\n\n// --- Timestamp parsing\nvar dateString = data.uplink_message.received_at;\n\nif ((data.simulated != null && data.simulated) || dateString == null) {\n dateString = data.received_at;\n}\n\ntimestamp = parseDateToTimestamp(dateString);\n// --- Timestamp parsing\n\n// Message parsing\n// To avoid paths in the decoded objects we passing false value to function as \"pathInKey\" argument.\n// Warning: pathInKey can cause already found fields to be overwritten with the last value found, e.g. receive_at from uplink_message will be written receive_at in the root.\n\n// Passing incoming bytes to decodeFrmPayload function, to get custom decoding\nvar customDecoding = {};\nif (data.uplink_message.get(\"frm_payload\") != null) {\n customDecoding = decodeFrmPayload(base64ToBytes(data.uplink_message.frm_payload));\n}\n\n// Collecting data to result\nif (customDecoding.?telemetry.size() > 0) {\n if (customDecoding.telemetry instanceof java.util.ArrayList) {\n foreach(telemetryObj: customDecoding.telemetry) {\n if (telemetryObj.ts != null && telemetryObj.values != null) {\n telemetry.add(telemetryObj);\n }\n }\n } else {\n telemetry.putAll(customDecoding.telemetry);\n }\n}\n\nif (customDecoding.?attributes.size() > 0) {\n attributes.putAll(customDecoding.attributes);\n}\n\n// You can add some keys manually to attributes or telemetry\nvar applicationId = data.end_device_ids.?application_ids.?application_id;\nvar devAddr = data.end_device_ids.?dev_addr;\nvar spreadingFactor = data.uplink_message.?settings.?data_rate.?lora.?spreading_factor;\nvar codeRate = data.uplink_message.?settings.?data_rate.?lora.?coding_rate;\nvar tenantId = data.uplink_message.?network_ids.?tenant_id;\nattributes.eui = data.end_device_ids.dev_eui;\nattributes.fPort = data.uplink_message.f_port;\nattributes.applicationId = applicationId;\nattributes.devAddr = devAddr;\nattributes.spreadingFactor = spreadingFactor;\nattributes.codeRate = codeRate;\nattributes.tenantId = tenantId;\nattributes.device_id = data.end_device_ids.?device_id;\nattributes.join_eui = data.end_device_ids.?join_eui;\nattributes.net_id = data.uplink_message.?network_ids.?net_id;\nattributes.cluster_id = data.uplink_message.?network_ids.?cluster_id;\nattributes.cluster_address = data.uplink_message.?network_ids.?cluster_address;\nattributes.bandwidth = data.uplink_message.?settings.?data_rate.?lora.?bandwidth;\nattributes.frequency = data.uplink_message.?settings.?frequency;\n\nvar isIncludeGatewayInfo = metadata[\"includeGatewayInfo\"];\nif(isIncludeGatewayInfo == true) {\n var gatewayInfo = getGatewayInfo();\n var addDataToTelemetry = {};\n addDataToTelemetry.snr = gatewayInfo.snr;\n addDataToTelemetry.rssi = gatewayInfo.rssi;\n addDataToTelemetry.channel = gatewayInfo.channel_index;\n addDataToTelemetry.consumed_airtime = data.uplink_message.?consumed_airtime;\n addDataToTelemetry.fCnt = data.uplink_message.?f_cnt;\n\n telemetry = processTelemetryData(telemetry, addDataToTelemetry);\n}\n\nvar result = {\n deviceName: deviceName,\n deviceType: deviceType,\n // assetName: assetName,\n // assetType: assetType,\n attributes: attributes,\n telemetry: telemetry\n};\n\naddAdditionalInfoForDeviceMsg(result, customerName, groupName);\n\nreturn result;\n\nfunction addAdditionalInfoForDeviceMsg(deviceInfo, customerName, groupName) {\n if (customerName != null) {\n deviceInfo.customerName = customerName;\n }\n if (groupName != null) {\n deviceInfo.groupName = groupName;\n }\n}\n\nfunction parseDateToTimestamp(dateString) {\n var date = new Date(dateString);\n var timestamp = date.getTime();\n \n // If we cannot parse timestamp - we will use the current timestamp\n if (timestamp == -1) {\n timestamp = Date.now();\n }\n \n return timestamp;\n}\n\nfunction getGatewayInfo() {\n var gatewayList = data.uplink_message.?rx_metadata;\n var maxRssi = Integer. MIN_VALUE;\n var gatewayInfo = {};\n \n foreach (gateway : gatewayList) {\n if(gateway.rssi > maxRssi) {\n maxRssi = gateway.rssi;\n gatewayInfo = gateway;\n }\n }\n \n return gatewayInfo;\n}\n\nfunction processTelemetryData(telemetry, addDataToTelemetry) {\n if (telemetry.size >= 1) {\n telemetry = addDataToTelemetries(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToTelemetries(telemetries, addDataToTelemetry) {\n foreach(telemetry : telemetries) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[\"values\"].keys.contains(element.key)) {\n telemetry[\"values\"][element.key] = element.value;\n }\n } \n }\n \n return telemetries;\n}\n\nfunction readTemperatureAlarm(type) {\n switch (type) {\n case 0:\n return \"threshold alarm\";\n case 1:\n return \"threshold alarm release\";\n case 2:\n return \"mutation alarm\";\n default:\n return \"unkown\";\n }\n}", + "encoder": null, + "tbelEncoder": null, + "updateOnlyKeys": [ + "fPort", + "bandwidth", + "frequency", + "net_id", + "cluster_id", + "cluster_address", + "tenant_address", + "device_id", + "join_eui", + "eui", + "channel", + "devAddr", + "spreadingFactor", + "codeRate", + "tenantId", + "applicationId", + "battery" + ] + }, + "additionalInfo": { + "description": "" + }, + "edgeTemplate": false +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/metadata.json b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/metadata.json new file mode 100644 index 00000000..904c0fa0 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/metadata.json @@ -0,0 +1,4 @@ +{ + "integrationName": "The Things Stack Industries integration new", + "includeGatewayInfo": "false" +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/payload.json b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/payload.json new file mode 100644 index 00000000..798b317e --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/payload.json @@ -0,0 +1,77 @@ +{ + "end_device_ids": { + "device_id": "eui-1000000000000001", + "application_ids": { + "application_id": "application-tti-name" + }, + "dev_eui": "1000000000000001", + "join_eui": "2000000000000001", + "dev_addr": "20000001" + }, + "correlation_ids": ["as:up:01H0PZDGB1NW6NAPD815NGHPF6", "gs:conn:01H0FJRSXSYT7VKNYXJ89F95XT", "gs:up:host:01H0FJRSY3MZMGPPFBQ4FZV4T8", "gs:uplink:01H0PZDG4HHGFRTXRTXD4PFTH7", "ns:uplink:01H0PZDG4JZ3BM0K6J89EQK1J7", "rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01H0PZDG4J02F85RYFPCNSNXCR", "rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01H0PZDGB081PMP806BJHNHX1A"], + "received_at": "2023-05-18T08:25:26.112483370Z", + "uplink_message": { + "session_key_id": "AYfg8rhha5n+FWx0ZaAprA==", + "f_port": 85, + "f_cnt": 5017, + "frm_payload": "AXVkA2cZAQRocwV9ZwQGc2gn", + "rx_metadata": [{ + "gateway_ids": { + "gateway_id": "eui-6A7E111A10000000", + "eui": "6A7E111A10000000" + }, + "time": "2023-05-18T08:25:25.885310Z", + "timestamp": 818273765, + "rssi": -24, + "channel_rssi": -24, + "snr": 12, + "frequency_offset": "671", + "uplink_token": "CiIKIAoUZXVpLTZBN0UxMTFBMTAwMDAwMDASCCThJP/+9k6eEOW7l4YDGgwI9cGXowYQ5KPhrwMgiI2rp+jpOA=", + "channel_index": 2, + "received_at": "2023-05-18T08:25:25.869324983Z" + }, { + "gateway_ids": { + "gateway_id": "packetbroker" + }, + "packet_broker": { + "message_id": "01H0PZDG4MF9AYSMNY44MAVTDH", + "forwarder_net_id": "000013", + "forwarder_tenant_id": "ttn", + "forwarder_cluster_id": "eu1.cloud.thethings.network", + "forwarder_gateway_eui": "6A7E111A10000000", + "forwarder_gateway_id": "eui-6a7e111a10000000", + "home_network_net_id": "000013", + "home_network_tenant_id": "tenant", + "home_network_cluster_id": "eu1.cloud.thethings.industries" + }, + "time": "2023-05-18T08:25:25.885310Z", + "rssi": -24, + "channel_rssi": -24, + "snr": 12, + "frequency_offset": "671", + "uplink_token": "eyJnIjoiWlhsS2FHSkhZMmxQYVVwQ1RWUkpORkl3VGs1VE1XTnBURU5LYkdKdFRXbFBhVXBDVFZSSk5GSXdUazVKYVhkcFlWaFphVTlwU201a01uaGhWVlJvZDFSWFVuRmlSM1JtVFcxT2RVbHBkMmxrUjBadVNXcHZhV05ZY0RKT1IyeExaREpSZVZwR1pIUmpNRXBLVlVoR2RFNVZkR3BWVTBvNUxua3paVVJTWVRaM1lXOU1kbTQwVm5sdmIyWmlPWGN1ZUhCZmVrcElaa3hIWlZadGRVUlFVeTVuYlRaVlZXRXdkakpHV0VKMGJUUjZaMjVXUkVoeGVHRjRaMlJKTlVkS1VsbERhemc1VDNCbk5rVk1iM1JDUkVZM1VWbHdZbEJDTkdOblNqWjBlbkphYUV4MFRVMHhZMVZFTTFac01XdExURUo0YURaMFExTnhhMVJsWWw4eE5FdHlVVXcyZUhsRWFFbEhlakJITXpoTE0xaFdlRzR5VUVjMk4wNUViME5WTkhoTmRrazFZVk5oWkUwd2FXVnFjR294VGtoMFduZHlZMDFxVlVGNmRsbERUazlNY2s5eFdVeFpWMk5XTG1WVFFYVkpNVkptT1U5NWRqUTNhSEoxTUZoalYxRT0iLCJhIjp7ImZuaWQiOiIwMDAwMTMiLCJmdGlkIjoidHRuIiwiZmNpZCI6ImV1MS5jbG91ZC50aGV0aGluZ3MubmV0d29yayJ9fQ==", + "received_at": "2023-05-18T08:25:25.906038642Z" + }], + "settings": { + "data_rate": { + "lora": { + "bandwidth": 125000, + "spreading_factor": 7, + "coding_rate": "4/5" + } + }, + "frequency": "868500000", + "timestamp": 818273765, + "time": "2023-05-18T08:25:25.885310Z" + }, + "received_at": "2023-05-18T08:25:25.906399073Z", + "consumed_airtime": "0.097536s", + "network_ids": { + "net_id": "000013", + "tenant_id": "tenant", + "cluster_id": "eu1", + "cluster_address": "eu1.cloud.thethings.industries", + "tenant_address": "tenant.eu1.cloud.thethings.industries" + } + } +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/result.json b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/result.json new file mode 100644 index 00000000..2c54a417 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/ThingsStackIndustries/uplink/result.json @@ -0,0 +1,30 @@ +{ + "deviceName": "eui-1000000000000001", + "deviceType": "EM500-C02", + "attributes": { + "eui": "1000000000000001", + "fPort": 85, + "applicationId": "application-tti-name", + "devAddr": "20000001", + "spreadingFactor": 7, + "codeRate": "4/5", + "tenantId": "tenant", + "device_id": "eui-1000000000000001", + "join_eui": "2000000000000001", + "net_id": "000013", + "cluster_id": "eu1", + "cluster_address": "eu1.cloud.thethings.industries", + "bandwidth": 125000, + "frequency": "868500000" + }, + "telemetry": [{ + "ts": 1684398325906, + "values": { + "battery": 100, + "temperature": 28.1, + "humidity": 57.5, + "co2": 1127, + "pressure": 1008.8 + } + }] +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/guide.md b/VENDORS/Milesight/EM500-CO2/guide.md new file mode 100644 index 00000000..e84fdf21 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/guide.md @@ -0,0 +1,15 @@ +# CO2 Sensor - Milesight IoT + +The payload decoder function is applicable to EM500-CO2. + +## Payload Definition + +| CHANNEL | ID | TYPE | LENGTH | DESCRIPTION | +| :---------------: | :--: | :--: | :----: | ----------------------------------------------------------------------------------------- | +| Battery | 0x01 | 0x75 | 1 | battery(1B)
battery, unit: % | +| Temperature | 0x03 | 0x67 | 2 | temperature(2B)
temperature,unit: ℃ | +| Humidity | 0x04 | 0x68 | 1 | humidity(1B)
humidity, unit: %RH | +| CO2 | 0x05 | 0x7D | 2 | co2(2B)
co2, unit: ppm | +| Pressure | 0x06 | 0x73 | 2 | pressure(2B)
pressure, unit: hPa | +| Temperature Alarm | 0x83 | 0xD7 | 5 | temperature(2B) + temperature_change(2B) + temperature_alarm(1B)
temperature, unit: ℃ | +| Historical Data | 0x20 | 0XCE | 11 | timestamp(4B) + co2(2B) + pressure(2B) + temperature(2B) + humidity(1B) | \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/info.json b/VENDORS/Milesight/EM500-CO2/info.json new file mode 100644 index 00000000..9e9bbf75 --- /dev/null +++ b/VENDORS/Milesight/EM500-CO2/info.json @@ -0,0 +1,5 @@ +{ + "url": "https://www.milesight.com/iot/product/lorawan-sensor/em500-co2", + "label": "EM500-C02: LoRaWAN® Carbon Dioxide sensor", + "description": "EM500-CO2 is designed for measuring CO2, temperature, humidity and barometric pressure in harsh environments and transmitting data using LoRaWAN® technology." +} \ No newline at end of file diff --git a/VENDORS/Milesight/EM500-CO2/photo.png b/VENDORS/Milesight/EM500-CO2/photo.png new file mode 100644 index 0000000000000000000000000000000000000000..74ff895322f2f097c3263ce64c473af703536dba GIT binary patch literal 115101 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 z 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%0DfuPdFolS zDyeeSU*~G0M>M?i=gW9|e;vNqvQQIdK^^144ScTvr22TX{V>u46@vK!7~O$=aB@3H z_Z$Y)I#?14301xNSLf`Rz@lgmsEGHA`i}#F5=Wyr($78cn(Ay?#R_7vC1r#;74${D z6y0#%2X9o=zRyU26`03Mi%#a5vr+M1a`VnQMzRsW4|+LH8gZ}K=p`I9F3@0%{`Zub z3jzq2WWO9#31`$|8_fGT;YI3l!*V|g7Wv8-=T`WEW(p{M+Vzt=eILJcms#GJ2F8F` zAorEWtk|ho=}FdIR76B9j#gOi2a+^x+p4H`)qF^_mzQ}cda(4)y7@}Quj~5CCorEo zY9o|;Bq`yLl3p6*v9996h=}lzZr$xK+ zn;n69inw&egi(_h*FobHq=XE1@E^_*2AsNaSXNYvj=D&ZVe>5P=Fs`IrW7c5dZK_L z<~#0B6oM`+OIwn@g!!F`rlsFYY_U7RQ_6dZQ@KtP(xvl#ssH&?h{1%EADe$yLeqgC z&d%0F!$Q_GFZ*GvjZAnsP%r_$oP%8uPWdZJTzhCiomb%hO#S<{PAkq0$Y6JBKdSC7 z&zR1zEm_sLNDnrBd?R4e1>$cR9XjhJV-LCi>1q}Hvpd#V;KqsS`Mi_wJGu?~^UjKt6>-9Za>sK6hs zaJX(V>;hYQ5bRdA{Yin|2mg~g0KFNI>ykNW(ZFhDk-K*taFLT6=8Z2qP9Y=Y!eQs5 zuAITX0ei{`g?v=l_x;9v7OAmfrMIhWU)}y{af>ElWrAdo75KQlkW@bM;(}o#Lt~*h zt->jPRFo3#KS$D8pgICcS?3e+GKda`)c50|PT+WlO}zsE-1Z#l!5{6-^HOmqZzv(C z3`i?TJ^YLtQ}@mNsu64YuRhRFmK-96<(Dmoyc4*WL|;5amh@Hi&97=imZgrM?@A@c z)rxiGnb*2P-H_5E-<@i1;lbp~{P#}GPwj=KkBi6U^+qWnBie^XgwWQco`kOWT5awE zJAy`Bp6$?0mm66>x{R#+l0Yt$FR~}mnJ*6ALfL5UTAI|KJUR7ifl(^FBuzL6pEx>A zJyoTaxGE{r;vbKcY&4&n_kVL^{@1StwSV|%m+O`_4X!>295yF+g4PK?s7Mx9*v&%7w}rzidoV3q-9A z(z7(ppSbVVd&Q6x)OT_Bi4+4E62|K7yjie}y7f+#({*A*+pNsnhVp4VLKY$Md@L*s zK0}e(L$j7HXN4R;ufB95#P7Y|X84HvhFT(5+e_QXA3!~!(#YVv%MD}FxCc&jP9;95 z{ivH>tApL`&Cc(!~NTqdbH?eT}dJ~`m(%8 z2k)gazWE$3_&G?!y0_zoT9arDthd0Bsy6W3Gti`Gs`9UBgL4L#+wwJLtv&L$p)Bpr+GSl~$f^P@92O&E6GfRe4`QQKuYfl)Nyw-RPmPwH&R?DW4hGs-o zp|HYD0F1s;^%}5y{&;MXCQB2?T3?B9Hdec|+ulmdOI#_tV!?2Z*JU3NgZ>9@4n+p;6pGSW2_VtCN^;)BTSy~8a35`J8_VNn<-a4D*) z{D+KK$l5G0Yfbd1qtBjvJ7cF$+0>kuqi|`q?z-rJuiI|riyKdGNvJsQd45jivegYM z%BQZ&Hk7K!>=5bcd;5R{h+nNpde@k2Styfs=!FQw`Whob|M`r^NiGT7tfN^U!_MqS zzM0m-o^QM-RkILYJ^s{J5Geb{n>Vb2F*MYA8gm+z4rcgBpALh63kQjrTs!^*u*V0V zjGZYbcOXi3IkE3rdX;z8iV(1+BL8h5VyebuaecKpt(S0Xv1P=v*Leqs9>j=if|Rlv zE(yV41VEinhgsVb%+z(z+L|Io_+la>YyNJFV<|PKtE|U2p4MvbT3p}HN3jKC!kmmS z9%weIJ3n7uMJLhBo&aJ7GSA?R#0m|(LP1o|z|*m3U~Zn95RjASnQEDX1HGLt)d4O> z8fVc+?E@FK!)R^fy_(K(jm%dVS}pm8!a6i^v10aQm#Fo{-83CUwdkC0u1#ydm+8)_ zy||XTJ*$~=Tk1!mBXB~Hx{r0^pohy6(w?Y(T_xPN7^)BQ#|!yRpGP|U_WbYIZj6*7 z6czdM&@5FR621?7ZNj*9{mQ#Ti-{idpi#ISpkmI{NRaKMsn8Vtm!!(-n!Dxba!~3S zYTL|8SG)i?3#O?$A!L#30{Bcf#(Lzvy77&s(2NULrMGxGxPnVEjgX4dXfUj@8vTwR zl2`9BKSBZdlDrURAp0-CVV;f&0oXK8L6Z*sJq`MKaP0vAXy;OElC2_`;4uQS`eG=$ z)qR}kt9zP=kmx&&HEj>f8g6!12*h7SA15_N{pJFD68R6(?#Tls@MBY1or^pP{ch{O zHnbN*`t|<=PH)bj9HS(iZZ)7nZQk(uoz=6|uSSM&yXR%b$9hm~vu;0)GDpTMdsx8t zIB*R_lR_}}7Kma>@fg~5VyX@Gra)Kx*Ld0(VO!DTwRpLls$?jBXx;ff?2|?~#%EysJ03iu?Nby}9+3U)k_-sxF&qbPW1Wbu*M|`Rand)RaF@>?b-EQXN4J6_5W%=em; z5TaA7UZoLT%Zwm2-5dE78m&^h5M=E#?B7DDmG^Fow&==!5DJ7i6qE2jRn~ooz)JE= zUbDRp_ArImt^ESXW=-Uu3VXuU55HZm_Mz`thXEYt#3G-Ce;5?o`d^C&(zZIxMcr31yv&vg%DMUt8*NsZ*BrFRVd?q$x;y?v;;%9Im?hYH{QyZ=#` z+Q;ypKbXH}Q$Ol$PM&kGSUN_sb3^o^RhJ98GLTNXvmu&a1%u5%ViZerRf!j8f-13_ zcjpYkzBanknsDcOPE%q|*}Z3lzi9ucOI`Gz3&hMPrEfIPhVZ#L_aZ=+p{V(Mixwx% zH{eaIL39;?q=90G4VgwoMsw*&zMr6-Gr6YBNIAn?3K==Ex{#Z*_*N9feyzaI$4-k( zaRDrALg2}3iD;mmZaq$;j68k6_(C~>3?Vao(j}CQkRskcB;uNU zw?oRMV>kLcA6z|eB-K3o23`4qh_2*Ex;QIy1nq;kyZy3}L0XIr|KUf3XC$2qCWT17 z5RWIKro`X_@2@mBCq;JD4DAH~PyE9BQcV+zWx9mfZ5vo@pz?tVrzhV>JJGUv--o%# z?!@HPCU|^ZJM#EnXT)zOzQw!!6GQ zlhprUO_BO+WEC&YmD|T=Ah49W)az;kD;jBGn8P71gn(`WU*^*8)Lo1>G;qKjYUbI}SJFM&3ru?QLkLYQYz z4n~~as>WUJd~*Z}m$#vkw@Nr!*fT)pute9)Xa{4`2OkH<1_3Q-z?D$GA@e)Pc<=Wq z>P(VO>2Ase@0W8RnJO*rab^UWWVde?;ZWque5IQZh)~R+e>BB&{YkuO%rH|(h&Tws z$g_&1t3=^+?I2+qceX?-AAe(`jB|Y9SaladhS<0BkW5(ld56@ zl^~=?F2p@R>9p*5DV;w{ga!m?(W!1L)dP{o1ml-nopTy64ashyG21zqp>>R)jNIKQS8BNg+M7^P+H zx3&y9)&^KU#OmkLYYcr!q3ZB|&OS52d2_!)81Y#}=PAj{4=%i(zZ2$T|LuT5S>qdq zUCgh^K&LixrP2}~XAtM07X0*G%OT@=q{H+1-zKI8#S4>*BQgU0w;&k_X#8Lk03#~<^Wkx!? z+0Ze}0QqpZb%tV?jGm0zFn5*oYCiGFuHw+}aP%a8N^C3}`#tQD8=SlGmhnPHFv*g$m)zdd0v*yo3B^MqsMl+A}yz#)qZ~i)C`BA#?7x+IQa>L=q7`7Cs~k^eIXwT zIef6R|A@WG7B&CyLBmsY_`0w>Dwy|mQgbD)?o9z47>J}cDGwds*v%NVd&n!6;Z-;zL_+l3`@+lS-Lr2X77F3? ztjx5PeX}6SD40B2Sz33;?LVK9oh{fuA^PuRY1mc5uo$dLc4O{^Q3JA+aAR+o)Dj2- zso4|u;k1!!x?khk)U5)r>GIqGibAsNbBqL8S~#BuGvzibO36Kdeae7uO61?T+GKID zQo?NEY*WP6=sRR^gdRKE2F77QlUx#s&!ZQtLhl)&$+x*7ciNPe$i>pG0mg94_+fMP z?$w#WvADUfHMs5}FsxDfj?K9e?$mHp|9h7?J>5+y z-Jh?Q8O5b2*^_+x5eT58j(>~*7A$_)8>}@ylRa@!$R43Poe9h_Nrnxdb$T|J(Wx*jQ}+r;(F+h+Uzlb}1-Ha`>h)@GURz!XBldbKv4VbveBJrI(N)&{y{@<5 zpuz=tgOC1LLkbzs>s69|xKPbJ0ilic#IaAiAKboUlbC|lwh}ybfS$v(=KP3j37PeY zD%F!9{tN-f@JlFp1x#tn6iE--6Ff6^x9;b=UlpgXgY&k0cqMsf;h3mcX~n-(@|DJ4 zAEHrfOc~m*0P+1$>hM>R&KK%V%56r=LE=3XlPb6JCrGxW2x6h@@b&fc%ALcOjHi7j zh#SAwFyTtCPDRuyD`uW`pm{QiN7^@K;kLvMX zbD}|8TlSiD2M_k-PD@Pr2>n>nd37eMO!?I|D^ojM_PX;kH+OJH*k_9ibYHH&M5Az- zhm(0IT!$5tf~-!cLAZu@t%4BJ)7m5r8JvIEb%rX1V}+!=PQIP?DP0c3KIaw6nkgS~ zdJmMcq+<~QuPILXP@H5Ym$Q?zpjdTLv0=vQ{DluD5l5T2e)ev!p1ZG<%1BV; z8Y=F(E{I~~s5zw|gRlc%6cSF~$&C!M8{XhVZ&Rdu%w)chp!XoR>#Ms5tN5pt$tW}R z%Gafs#>iNux(DS63_p6-;j#S>e?aPKt5(&Vffg!zR-sJWQrGaZ+@T;RMApcI@`K@3 z=uGfv-%rG2G0YK1!Uxxz(s5E)&*;aQrgpLGb;a*aJefS2b0b?{sZlApnp1uFqi#s= z_3bg?XCo2reL%`=+jhg~>`UK->}xuN@##;V-S_uXmsIGp6>F7~=X*T#mwu;z}1ApKPXqM@Q%`now7ypVDC>#kSr zKsO>?DA+s>MSEnWU9Z3>cHNoeI?x|*{rZAh(1h~pZQi?5oqZlwB*xR}UyUCp)Kfp! z`@QP(D8E&AE5p_RrqRr<=ib>1YctwtX5>V8ZDw0}_^z|#luKFuwb3>Bow@lZMiy$@ zK-`|ay&Bvu2WQyGq7yUgkvpHGaK|+~doSenMVIlpJbb*-X(@+AO0-5Of4JoDW9Q-D z*_>(f{%B9lf@ZhohURgvLW8Zog*IzL)&Lt73N9HGlTGG_naPA6<t6;Q!>mau$qy2RC#BpF(vCxVJ{XzRXZhp>;9aibV|9ZUS~3Nh{Li{_@Y>I}xhWI#P=K!%?-$(6wpNwxYy& zj-nl>=laS{OyaxaJHO1ft~VXGB0UeOHP5`4LBKV6S&>^CqjBATs;?VNx%))b@ilS? zCGh$*;dC#uE}&SP`Z<1Lq2gJfA>s8IRbnVxYQ0Y2RLPSSIz(}Ea${QXU61?tQ@&Yn5d8VIsm#YPI58{6JD z^wu8U>7ZqKq|Q^NM8Gl-E1vavzjw~J;WWC=>NSJlsEi`@o*+WYG41_qgyO(rB|e6W z6bPBT)xxA%^m9-#t`5B{v8JA|vTx)S=3C*~@w2ZY9u0>@DhBL?YWInDEi?b_V;+Ut z-*ajDog1rocxC?<1plmZJ&yRA`~98j)}Sprx>*z3r0g8yF>^f=Avf?-zfw+O9QyjI zmg-!KQC3JWwf!iyp5QjWik|v3YHsmggzJ2>->oON`d;rxHpgx5tjrw^R@l1hm=j^v zNuU1FNHuBu)BJa)ZewRk7L^<;&}(6*mZ?{G7*dmC*$T{DEl}W}rgohI42o!PZ&dGw zN6g<)C-6|fA2$Yn(b-3N?x{SE<*bela+1TYx)g5?jgx?0aviDu_zkBlD)@e+AC~d- z+sUQ&7ama{YKPH#4X#k&k1kujX&9;1Z2!7u;Xw4Kt;INt!YA!nY^868yqHN~mBZqXNw zE=xkO%m1x@&&8vyT>6f{F5194^JQN;m9Ecg6^A`j_VZ<&2^{Q9SY-u-)W zFXEVAeE1kY7s_4*#5#QNnTm32@Ntb_jt)NFr1{S61}Oo(9Jh(?zRwwx!O7U!xbu81 z`%*~Lqf0s00~dm{Q&XGf`FBv7ciYGsJ2#e_Hj&AOZ$C8|hPeG+{Mi+}zxl>FJ@4=+ zd8`}W=$uKK-?t^ik{ov)w&9`!&E!qix()@jzbcTad%zo#j{M#9OCYWhQBX<@-gkao zgYUc(e!SEWt)YBTrFXm|XTqFuLq^B+921D@^N6Hpv}e%6*(8UjzV>9peuEP~f`4Xh zT8{5ay;FCWyX(MY(}_vtR|l+=n&Y_V;}Kq6t~XsSz7icq9ch*rw=g^PVNzr*Ap6zl zK{>QoC~5<<=Emr_N?kZXN!MTaAjCSLnPqjPb6=`_JohQWyuex1sBouL5QOwjGVBjJ zacEntWyffVS7IM!;gmtTCy3K>yZ2^hg>mu%VR8mKWgs@Bqx0FC7Y;G0+Ryk_x?3oK zflvSadrQkBNH7c*c+;R@1Kwmzw2xLUl_3AHa}fNvLcz7z5POW`4+stQ4;6A$$5fZ9 zBvJS$;$x3B3;$8rd6{NTm6<-ByT~)jp{*?T_5Vn^%77-{x4SVqm1cyb($X+;fFL4D zE2Bh#F*-&gFd9Wl=^QEDAqYrF{9w#Uhm>@qga{(<1uwv_9>4>;H1&q!s>3UF_T2|7Re#u}yi+T}H2jJcyqfEWG3kE z^5tbr(W_eVeQKbmz0BaVe#Do)08DQ9($1UCOi;VOJ8?_B6cQfll25cOzZ#4^VCxWq z&!3+h-`!HFdqXPcAL_p>1iuU*#RD%O90=NQ@Z^3CQgP$mRHvh0ii|B995x1EkQk5^ zHHG*`b2X7wgGbTPXibnJ-9VrU>CVMHLoFWFMmECsE2fj-W?F(yBOeLiQ4C2%Za(J& zGk4>Tbx>P{rX2c1(aTxC9J|ks@*%m#A5L-$%#ya7wgQy>b`ygZ+8{ z??w#FQXRzEwY8|=BhkV=-*rssAIqv-QcFaT(lG(Sx|5fS!W3<4z^MSR zolpKf69|BMk~-*bap4L7s>*M-)hkxa-6V2$DYr`9JmCT*Ke22CEgDneVg?C^=VAr8 z-66lff8yp>Sg|^%A<(^oJ(Ll}wpYXgthYSycnv1}>7vGXlbB%3O1ev5-B-B08g3tc z95lWtnDiSw1DP^tMlJU)Q9U8P93_`AQ14^&ANwZ6;6`6(;$eBTT2FgP9MY(?*jgsV zpbtLR`4y#f@RTs)e?$SdE z4VD@?ni0+7HzCsZrLn8Vpr$f@J31(fn*jkzpvTh>6XBo@meFbcWvr`*FLCKsdE92Z0=5Lodoo)y4Y*P+@_JEOS*uMV^mQx53b0n=d|WE%DE1iMcGrCMIT zw`NMOdn)QmOEY7(26*P4w^^k-*QGIN*=(RlyBDv$~FSU>p>+e@q4eRo_m;?O#JXIuKG_`b$avUlBXylks+TdHI6#b zuln^M$1DRdi6Mm4jmTeYLX>F!hw7iJg7y`jRq4KWQ8aMo)I^Mgbxbx1qjZQd2I@^v;QJLoSdua{Ghx+XK0V6%J|*S+T26V z7S6M6A1zNEpP77H&$aTc&l|CzEHT<);MxKZIVY%7d|zD}D_PMRbF$J$fsJcW&@Gu2 ziYs~`XY$`k|JNIs1n|>ZbY|Xeu#6eI@DA11WdVTN;wk>We6;Z0YsHA;Bc?#;8*4ht znM7rRBJwY4SER1;*v>10y%An}UNEp1B~FV6i`!Huf{xT7meVy|V{o+KO~Epi4B4F1 z_7=tBtj7TavX`M8n8sF^nbt%2Dru)18cHa}-od{0;06+t9|C`I0A>5P(!~#4p22gw zHI*CFnrevHH-cmY>beV%xihyxqw$GUS$33!)iirnaj0ne+Y z2^vO^+Yl6GZKgoFSP_F<#* zkR$~=6V@4UB*hpIVjBK!>H^}X$b52|aaNCYFVWt=T#FaY_1OKcPw^97Kh4(bNA_U_ z&vS&1b=mUdgo)SnV}`W^H;cY`lyI{Wo+H#1A;2^;2$nM=z&ZnYM+Hzk)Yac#MgWwR z=DjRVb9!dKnP+aszrExD!mEiN1K6rh z??lHjQ#RV^MJ~=Zq35`=wZ55G=P$SKJ6{6|RyEcz4d_Mzi*a+l+%gj=*!c?7bmeb7 zIPE=g8J!qtg#s}7qT++D#;R^0B z(p57A^;kf~2f-am)V{jBEd0&_5MdUttC5dPxAo-5j)0r;7119KJnBk_JVNq zz2_VvaXp#f+(wQFG~?LVViM*oDWPQ6wNZX!S^ct00R*HLEBzBdc?#a%2q3JRa{xD} z812W!6K#`Z$}FBykEtD4DOT3owtz?Mxn+|+HJ*m)7tz*bazD??H&)Q7ru73lMUc6J zCkP&R!r1mwlxix7;wrBrCrqOE*8Lg$pa8IXclo3Y5~7H_#fyb>yAcuQptc&!V|8GE zQEbJM<+do~gx`i=mM%Wd3)85 z;4oK@QMV<*9y59aRj!`;e1lxpGrB8&V0@T4B&#PXz-p!HIc@~n3(bNOe8SMyC=?6W zTx9E#W=s3&gN&cpUjXf7#zB@#Hfr+#Vh%n+jWJr_PrZZzdF$DorMvQLo_#~F47mcQ*}5PwxbZ5l0Rs#V zF1$;7rp^Wg1P~Xqc>z~Ryerx!A%$tLcB%F;4~T=LaqbSui#G8Q*ylh>f+DX3UeJNG zk;r>sV<=2oXpO5BG49 z3NVB^8C*Z>ajpOijt(U-d0(Xf7XsKki13J+F!VhMkkek7%0SEm3Dk}>D_*?%lE+dp z*3+2I>7;xHh<7qsu$nN%2nirzfwt^Lrsv~4sY;%>&ZUvch@*byt6+1Da0%E#bqhxN z3P}sT!z-yI*Vx!5-ZxsL!&1aawgo*o!p0tWk|rXb;SC#|Acgl6-V|`@VhA8!`4#_* zEyy-rAKN1b`rBS|$;6i#<@}R5oa6d{-&d;!cpwZS+us^kaQc+sR|$TCJW+~$!0SG4s5)D~cX7LZ^Q;zxl}wlWo~IR(U3+8X|< zGSmzZZ|D7PGy-4ApK_*6P0->NXM#=y48!Qg*0s5Y0D!4Xa)q^^SB>3%G5~ZkEpCH5 z6T!J=971ra50b>;!_-tv|A-(ZS5(?0&J!XYNW9$ zNdZ6`Jb8AJ1fcxHs}@Lec@v@Bc5)BmivIk?j*!UIJhGU2`2SGX>H%w`!a09x5mwgU z2XQm$G*A)xq7vo0 zRQQ?c;4NMvdx}kvBh40L#wifiOX^KLQB@YvpG>yJS|xyO4iqOkQ7r&$C1L4JeurvPc~Z2f22-Oi@Z8Fr zUQQ0)7qOwM;ZLxr4&R`r^)?g&1N(9nlQ!b>njW~{=VdHy?H$jD*MEX@iO|;fY&fW# zio@H8q$}6o1g2r0)cM++c`zs88|D4QEf|JPl(=TunOWL%tvW;4ujE0fX#@NA?FDxU zFd(L@?*Z5fCPv{&Bj*UW@Si}avzXF5%}h0m0w4j}vJOHVjvHXybmEF~4zzE5CXVAP z2lAJ0=>StW=K3Pw?;!G|#iWk6y`aSksktPcNVWPJHH!m=C<#-_pAGF_hkQtu%@8s# z44#Zgu8V?m!*~_Ku{oEXsbd%WGEs}!ZCV#GVvI@JGFo^1ZsM+_}!b+$ajw$-(eCE z9QA+@I&%?8>g#ev$3*aHR)ErB)ucyMu+#3^Sqs)g0N%L=Ozk3#5F-7=YGb_a6FU?1 zGjI=WYhUk0v)tioD7gERJPGnaHiabCYRl(VQ~tbKNg>6Aqt>XwV+*d{IA$AK)uyL- z#RYNj$@2niE1-z?;&Ln=1rW-kg}eGfEbo_qtN`2wYIhVyf$k$cKXZ$LtARlzlU{sh zise~{EIBtzK-I_CLqB)l^}v7Htigj1tYDPM4FSv(E}5SDpbOMkT<()jl+_T%J2k@7 zv})4Zs*s$}w*GR@D|6Zu!HB1}v1aC}eq&Z_6HoAJk<)w^5JeXMn(+IAE zvv{nYDLe%2Cc!t_XlcGFAEgOz3X%Y*YS-2iuu7b-%0c0w7nz7ICruz5ZL1n|ve<_Y zRqej=So4;xST^%bF&Yi|NL;;m|5n7eJ1n0Ys!(bqR-Jj_^_KWo?I1-GTk(-FujIE= zTuqOgsX_op`m^uqMNc(P=(=!!=x04Sj@(Zp9a^)Nk??U5m65~rgEd&Jrica|Dw;xMi(1B5*vv)5 zXh_Q*R=|Tho~SSTX(>3^5;xTSL6Fzr-?iaoXqVDxhCjv{vvCAq6X01!`&Hr5{ZTK^ zW!YQjuLrb^2o%_HW-{)0=W=pF31ib47AO>)Yu^7W6o9o_sd7ySYF1!IVk=gZ5S~H zv^KYNQMRillkG)^*V6`Qq6FcqUrdPsg>fMRboF&KvAi(^6xhd1hLX>E-Ky}XACE~R zjCE5dli74WI%JrC78&VWeoF1#uloGiVyTTKISPPJ)(Q6p=781>ok7h0^z59Dx<#2i z8(WYj#vA}_=9`+v=|yLxou2btP6+dlf$tDa-l>@??#Y=lt}Wa09;~NiDsJCCENiYp zMS$_=zt&CYrLdl^dG4<{&!n+FBs>uFUIgSK1Y@oZ*uo=#)DQyo<`N5b>EmB@koTD3 zTLVJjEn1^6YB9QYlOvru>N(zJz&6~v+h8kzu{7Y);0SF}zGGywQFa$AZSyz{0oy%o zst{k%Y<6hIId!lCjiC$$##di(W*9Ero90=6(@R&|Sl)@M*yPFOG53qrBK_ zi|Z;XF3yxUsut{bQ`>~!DGE^fAb=U^mLo-3)r`ED-@Q=+$`vX)ydea<8H-+|Q-yT2 zs?VTf&#mBQ6-c(s1`x89!$y=xY&j>)JAo{>0Y+FaW1S7^&l*MkXqYT*s2I@8Q=O)U z%FUf@O%A@{QW*czRFvGAUMqWCk)Bm9y_vaE zbSJ}2A(uqyTaC3qljduEd ze0=G=@F8*>IVxW?@L0;K{Zy(inns@QenLYMmwl;Trp6h`U;Xo2K*^XuCMK3}dm9+h zXGn~a+dh=X!env|$%^9`Wx7I*n-x_5Y?TH_E@U`q#SU740_CCQc7HaF!6>#QBO4X> zY@&Mcafzwj0DF>~Bwm!mH{q8)q;8A^U`4y>KL>Kfljjt@HjkM7@=$1t7>D?0f9jMh zs;7KESG`y_>I2)kj0C(TqrzJurPr7+z?R- zMA8x$d=j(;69WoxO(L_JT~|ZyT^|x#nhok=uyrTbE9xY`Wye9*WCV192?@|B#H}+H zr@l@2{ngS?$CiP2QhZJ0gR85BN@-M z+v&C#1!ard^t4?p7M;Ck>xtVHr9e+EcYf+EUk<_U-sdG*HA|t`tP|`0psW+)6Ww5i zFLU6ue&7JFHkDc4+jK#@%!`Ro%4hbEOl7oDrDX_>Z)O$n4P+(ce$3?2jD9-_)&UkY z_wOda4vAw1nrH2@1JfZup(oDL-YS0yW`g@V~2YXrs>bw z`!r|y<7d$^sUVw9o}5;dJN*9ZmfBTScK6^M5nc#PnjvW!B-XeNuRXDGlnnL)NyiLr zC=^3$bmBDUIlei*?Rd-dAYt!kVD1o?e;`<`u2G1E%m@H!gJ=azEO&xt2J=@ zP{b4fL|x~0t2_T)M)my#`!p0tM^7DvX)=OjNlvR(Ut2xsB190l+GEwwfZEGatoC~? zt#eDxVUXwByEmFTv+N+5atAt8zV#qRr7FzA%^#~h@#Y1XYsP%rdI#UGd+q=>3{;{;&Ij&?@h}iAib> zg&}IF@(eYX@@LVq3SMsDy-Df6X$+WMoXh`RMgf%O7hlZPm+sy&@3ZJ@D+dAeEZ}Ec zmG(VUx)%&bA0O}s_06(>K(z(<37t~wi~#HwS5&?AUB2P)2I|mnLac)=$8t<1;C*#~ z3h08_OG-HGy~*(@FOvq)JZVx9Hlb&h?EO5+tvOZ1e=kup978c&a!wuFgtm{{3m+4= z)od_q3aA?aV;@3fup_Py1XZ>+@NapA%_|(XHJ9As&Jqt5(s#;ha+ZI6cIXE!m;rXZ zyrVAn+<@$M7N67ze9*?f2L6vl-aL(+;14==C7ALaix{0Si%;*(9Fl%|xnwWif!KKd ziCS;K#SnW7zBAZ3;zqJQ6x?;Cz{19yVD2h{4%TM{Jym>9)HA@q!KZ??Un1nVk!3@+ zeQodPl??Z`>?>t<1z%=@A!Kjg=E2ZuZT8o@k|b8NSkFfny1k{DNU~)Vd{e!hLxIIr z^+EcUq2(qrV;+G_9(jQAvCEaG64_R#0=cl*XBUz+&uxijn^g98`9`8~#@)&VZlO zU$Ukxx}IPBx&`+gT;|clrHNT=eX3U3GGZpHQAg^(8~q-8O2&CyFuN!i?p;+?!?Pl^ zVo5m$0R3N;Z;t>f`S5tk;{9lunGHEMfhf;VcJ++~&JV)N?0Cq(9HZOO0PHEVX&ryTO1N?+*yH2>8#Yx^!gQ}t}k zr$M>nn*YkY6@LkQHI#R66Jl?>f0#CRpcdEiDC0%z<@BZ0udMPjzx=%x;}5}urg}xL zW&^(6{%bRo(l00crTu460E+P#Z~OvkkTq}KM_C6~rv{w0rQ?d!0&vPduWn`0aw-|R zH8m<~XS6=f#|r}X)if^ecO(Ee!)Z*QM$t@NL`T;zKB2^&z6t_Nt4!WEv9pW*H!uT1 zoC^L!)QvXUZ#bmG#5F93Fboj?oi}aBi>d(Rz}{~;=8R0VLWPdjXpJQbY5FAQcU7A> zYQ7_?rDM+BZ>8mFTW~;bt7-f6kIVLehWth5#hBKW4=>pg64l}oCf%~1N1UC`*WDc! z-20^otBrAOv^x6bb7;ym+;?_ly*>S?HSwxLb>Wl#3^Tr51f73qofv%jw<&((FY9l! zKR*f!X~V802K~H8{$5`E^4lceO#1Taav#O{slP+3#-+w$;Be@2{8!VUguS+a&)dlC z!7a~sqlDyDJvFM`gU*ZWv)uM<=Gs;{eU;-J)3GlZTq=QCAy*d+WnW*>f2R3+2#|Xd zmx6Hl(JlqMhrIyiCm(}0t!wM4j1aKZ?%$}ehw0(sgArXU@YUx05TIcC_`H!#){VFP zjyDTzRD*T7(y}g+%kjtgM^t$*qxC@*-5YFJG=+bMb=!b_Aoo)!*ILD?g(E9}-fA+3 z>>oz<)_3n8)l<~JOZ%Oys=PS9dM)k%c9~r#+O_a~XOBr%o>BBj7VUFd#;kYO|Mz7j z-EFZxF-yo6_WAL>7gin$BA*ew9QfOwz7K>ua(mIVRmNcwuiuM`j$V1U5|8Blz7{+sd*~Sa;b>c zSyP=Md+mL)ys=`wzP)5nYD!< z9dPqz%iZY=l9BV;y=fz&^YKWY;qb@mK%dI|O6jX?i3Zq*h8s>nKTlvt+_{il1l+XM zZTc&4fAybi&Bno1yk|TbUFUt<<#fU3C9|@frHjm5p}|)dr?;%yy|)8`h^(8s9bGq7 z_B!6HJQzyOvsr2K`m)%$giU;!GqXSMm%*vzo0Y5Nmlo+_rP=lDX3j3XWYQ9_HDdZb z)s#_2xU(z$Tvg{M)eESNr_&ib{msZ%rUS|w%ZimK!vd{UT65F?JO;F&pwZu7Cc*E*Q(ZqNTqHe|En8sN0SlJY5%o)>rNgW5wBMcr0v=-Y`WapzJ@JK^= z(xVC=_rbQ^WCT%kDCMYS3Q~P-k!iPr9H45fEaSZ?-2P%%Pugkko-}GpaJ=#m{vvzTEa>9+3jO?k7?5j2-N3&#+z^YG>fnKbZ zK0+REjGmP?j4qnA%>VivZy(cHzbEza*PdjMi$n+86iAkPl&Q2{`JbqG45Cp;r$V{( z?YezCPcqtUahZ1v>%ifx>N1?Zvxp;}rgH8C7=##JV8qL2{A0_cpFQ8{P4tJ%#2!YgUXCvlSNJuo|oDW?k%TsdRg9 zFUGXr-k*H`iB0ZBQ>Ofxc(kmF*~6=OL52XIITM01Fczklf8lK*tR{%)iEnVNIn?@_9aD3)iEwN3sDO)rb$ z9miWD9G40jw+T1>_7A+L52lLJw-*~*w`V`rc1F<2bY7mx2Vc_3TwTyfU6FoZmGFpV zlX8g+re=RmO2_FIJ=6X2=*CUo;F%*s#=iRra(wsWWo-u@NiZ?I&-l-{G*f6CnNdFO zkhLw1%w&^x$j)rs$jWR4xD41aE@$}n8L50eezk*Sva}+wzTCR$v#6z|ty7x#d$X2r ziy2N&v*ws8M=K_sM|YZcN83-?M=xly_Z~S^&el0n^>0)w;imSLMh8YMM%!u5B+;|F z#%(sqnXqZojnT|jf^e2VsnZXy#xi6HKue^(w3|*9oQFP!q4A9-cz-*j2XR#FlSq0y z>OQ`HU31O!-bzOrRGTH^_OD;u_`S^$slgo65h$Kb=e|u2i%@eFAJL{A0+hu^hU*!N z4TH|_fKXXM{W#G^W6s-^fBt$6;umg-)*z4-qQ#qc&0>}E z5eCgiU0^7>?3v(Jz;V@!eAyAbT*XxQLSeu2#^K+;w{Uc~uF3=cZ0Z}hN`kJwQQgf> ze-<#>G1buQIN6@-I9^la2xMbDwp2vu_#Mpkd2dgRdpD~eA9Na_Y4@fJjOEAiT`jJc z_|nv<;7U189J}jWw!C?(yqHCEk$=SSH@RZAX2J<4RpUzcJO!n$jiR z^Bemm00|#l7R984J=hA=N9-GvsTMkHbf^sCRz-})47o>Q;R<)j@zgJ9>^f_BNs#v# zamhy#Y48MbDhUThnFxfaGeG^E#ha27&M2svK8Z}jvLT#;>RLrUJkVOb9L2b?Gwp;- zomsAPeL6PPtTDwq`nlk*o}CD`rByrq<$O-%la2ND=1N?lz(b0$;y-&Ym%6Uly5;V5 z(=9eTrz2Y3IE5T%py&-;0at^0vzzPRgHItNLR)w8q`oL$b_D$GPaloD+bSVu?QYLA zmtZdKvo(?0O%3wf{W@QDrc(mGvd9P zQmdF6VjJRN1^OGm8n_R%ZX7ID=5J3?9p*<#dg zdA$t|IV#>xA&t>xm0`?~YaBCp%{um_${Z;IiKhebH}*BW3_9Fp_7UbCPJAd)k^{-H zO7t=OmnSvD>dzGoZK7fO11pzeyO=ruu;!U|Gs-3*RST%TO|WlTOA0Jm;JZFFK+Pz< zgXmTSAtL4?VEzOR^*(ydckU*PybNS=WTfx3>{oiTQd4M%D8Pd6-ULyot|so@;gof)HDAwu#qc%0Je|pTIud^9VU@mal4XeK6cg1Xi{2q?QOC+F6!*N*h`gL*o1^FPO7T%%cFK1n!pOkF`2ETZDp^@+Uk28CWpz z7rS0{6(N}#^JY-lB&R!FQ+Q0GQuth-iu)re5$({oB~`C{Kp5s;ozt@H0Susl;$1`vlyu?uGrk(#;I;Y3ucf$&-S4{ zSPH{@8M8Vuc%TV^ncnVU7r85)%}2SFLvE1JjlfG|($qf{+^U|x4{8ZV7Xls%PD4V? zQ>CVgZ};VceioGX^Hpw5^3!jKmlfP;FP9b;D|TQgZd)1oEF_Kl_M2+-K!xngc~M6H zG~;oOLR-LodpvSmsuGtb$|n$y85T>GyeT5WR8|HlOBM=$t!Bd7@K#$s`g$q!chGTT zzS{G=zzg{&Dt$q2j@F^TeL-{BR%DE)b^x`ul6c-KoBk_)LBq-s-*q(PVzZQY=3~%P z90}g#GMK^_!m&7T0A|6DTgdKgW~L?yjub2sV8-t4QM&!^rwm{Y@UughovO!kzAPeH z6YlHc76c#?$&-@qXQUaD!&1VI92xQo5*CxVG}1mc7A6sgopLUr_tzxdCaXe*(J#ZL|t&5D(R~CbJ#4K9gj-`UR(Oa$^D(-658>Es$O*0KX zA_z{*$y)*0(uRhyKYv(0HBnwrIGJDktgJQO{ilP!YX*N|Yatb-Dtke;##4IT&4cX5 z7BE7{Ec}VE!lbm(!_7|9L}}{#Ca3Ul2@58>r)E*#21V>9jD8)%qg~YvxKszI>)~9A zFF0tbUP1SPl31YVw|Kc7o&DwesKhrqAtG5MvMuyQde?FY`rH#*ZGkz8f^d=J*t2 zb6BXY%vo%hN7z{3^WK-dB4-!jl1j(ppg;^4B1v|oxKk+N&gllW@ zyhO=ZRy1F$QOEQPLz$xM6uG62h-2@l$I>Z-r$nFG=cnl7rm7tCb|iCEgF?nOs^>>5 zWOw!Uhh@QI&QmpaVu>m;ShQU7&De-`*o2|o+D_j}A7$g_nw^CvX?39yMykL5#FZ+TuSLG@B?LM&fx*L9MLnMu%KBwhU40lSp84;5}jZXOpTi$8W1T&P8fx2gHQgPN& zBK8wzbeyn+6e-^G|5mM@k^4_*-j_CDbg}w??5W8VPx)zCsZ5l@BIeii^DPtcdjE)- zSZ$HG1{>}u6O8m9eJuMi;pGRZB;)O|7HugbT}u34PfHCUl4f##cBvPKLTdWqnHwt~ z8ZO(GZO;n2^hpOe=!ZM1rc)=ANzkfTfwJ|Sw0`$qL*f?zvFFSOhly^QFp?TjIrCu@ z|BKQV;4!x-^tlZJHt25xNTvaHL>xn##XO~O7fJ-7F*~|Of~EZa@?L(ja!AO3>5N4_ zIyOn%?u~kQ)w(|u>^GTpitHb5E-rRXtL7eoz(#c9-hp@dT7Vo#tZ3_VPE{Fryw92x zUu(eW&g9ztyVe~uxMp3bqhGF~U%~B?eMRq<9kwabpQ2<*_TXk5oJ&J?Xy^@Vb#Gey z(MU!jtL7zbL!GvEKd8*vrDqWzOzgn> znmq^&MJTls-E!IMsXFE)z$ZvF!FGtiD1w`ezw~S*0h1v*M@<2%cARR;c9+t`cgysJ+ZoxTx>=0KHlU^JaD6xM$9 z8f;0N7NF8nrP=jZ9D+x!lcmxy#WyLHq0WjbEA}`8=47C4;BD_R*2q9@du|t+2B~Q3 z);dnMD}RuV!&b8Un>4jZk}g1%)iVla&F?Y@MINoU+KydyOslF=YV z_>bCxt)_@`T8QSQy)vzaCtMPO%X!sfvvI%=Ms7;pu^AxgwX$}b+h~x{kuAE^J0GRT z7w4o_uYhyIspXxK7z%=8>_B%#7<=4A7v*<05V|e0;#;23@rYOG&CK^irnh-=t3Dpz zjPQ5>hkOpfA5B)kNSyzO5BsHI@x&2kqMHFt_7gq|3yk0^HlrRojYf~okFNVIUS|IPzT9bcP6Yn{hy-8Ic4}qy zYm1dCS`5^>$+@IeTDI0*qH0C6Z^MSE({ok3alnGp;H$I)zW8S3S5}f8woI0z+y^i^ zpNdQ#9@onebn^t6ylsYlLIk+WG2p z>(%Sz2V6KEC5;e43%2v|-eJtJjYtGzBXOev&Oh>v5b_|Mm4&85z3Ig33U(=@_%quo zPr4GB`*;(Jqcp-~YIaM*WsJDs(Aj(q8H4{8?z`y6Tz2@cxr{Fr-6NKecJaxaNh8|= zS+wbM#q#Y^17*M0Z)=d)G6z+Qyp-@<qXaHCDNuGX$JiAPh976Enoa%pFBH zY(;RW1WyLX1SwkU`=wFFdy}S&$T`_w)rOo;Ey)Z>3=PG{&VfxMG zWd*3n@(>$h&ioAHBhR>Clj2EF(J{EVeBn+Tw^R#h45*0~5WY8-p4>B6U){)w@-YFt zyHp0wbU;4te{1mCXpyPj7-Tj?c#eh^q@%>sfP055uJB>jz8{L4u*|GUYiGg{We@z zSlD}V55mA+#u!<>vb@)=M`-5eg0Nl&#QrGjU{GJL6BP9ZKO?HI+*>_SV4=u(?!aHc z=ArFyx;3NvBTLBsu^E(l)5h_fV}muv9!V-r#N`9=7+5WdM1Pn6D5KaSTP8(-C|a(m zrqbSA=EbH`(Dai_$eJDA-?G&KE10Lz0dA=mW>f}L9u7951v#yjH%>{L-Y{YrB#bkk z;MG+ec=q99?3L%D304o#?kzyrb1jC>^}2Oz17jaU&HrbqGJPUzU1T~_<&t*c_g2w- zXgOkBdD6BWy@~&%aG2G7FI<; zoAM(k-ErX{X8LFs6hv$@ni^A8xT1v~d@!^HSAzy$(D7Q>&ggh+B;M2zCW;(x*U4x^N7s_$E=Ip~ z+j0KJHC)?g%58Qaxy)a!>DG*AxNgMR4?dO_vswRgl$t zsAcu+9YDh zBIDp{m(olr<^s0(haGR-e`MwfUJT5`2i|3)~DerUuA*CES zwkG7OI;xi|w}8uljo|WBVj3hizC5$3U=f#zW4T+vu~{+^WF=-wTu8zL?{LfAEl3b! zJS!|HT+!6eR?SsZfGWH2|Hfg2yOpPiSh%_L`#^21bX4KcXzX1o(L3|KXRq7@x#e+* z#tTD3*rV5(ok*w#>btiQo*vJ-&g${Fy?bg{yJ#+FBE$XjOw99keFJ1|ZV^d;i)a zkJn?$K8k>UMO|!bua$ILfy&@Lw-_(k7CAtvjt*#^BIqLi_d43?uiffAJ^S4_@4I)KBz|!mTR59YTKwP6(Y7DPdp$gA zVvmhRoA8W8kxN67gAAH#a7Lmivonzzm>psI^`8a9X4wWh=rXZYkKFq}L3|GIMOkfV z5itTwl$#FN`@~<~_YW}@o|0_s6=~NMd?%|7o8sKxrbGi|x#O4Z`ZFMDKdNe>3=oduk*mI02 z&1UhX0SnaHv0KQe0y}G9xDz~ngL$xY#CAzNy*x>RcDEtti>V8Y4oCeAQJUhdt$1na55-V_$3$x9{o~DP z3zy<)bK5f}ou}T?NPQ9hK}r4RK}2YK56nl88m$&9WO7$%$qwOWE09ZFDnvSYvW*t{ zg6KxfLyvM`gD@H8a?h6N;~WIcz3~1$2WS8Fy_oQ~!> zgf}I|GL6Kss!9S|*EuXMe{y+e@J?cS&wirNsnvvH-&67NHUp0|V1J8Z*I{D!#YSwn zN7i|D$jl&Jb<%)mn}^dF?>H%{yhUCWV3*2>)e7YRddQmR-N2(XPjcwu?`U#8;0PzK z0OnV4ZcNNlv1cjiI(2XFOgfLB9jLj;xi>qxjmuG<6+M0T))!lPqEuPTGCk3L(o|4X zmPmPG0X8UFEdcE%SW!%EH85zddidqle)>AqfefQDgG}80G&j~^*YoCaGH8co?@v^^ zwQNK*wX{2znw#(8tn+PKen*f$rB}kj(Ac{_Ia5O4ykrEQ!ZI}tk7I|nJ%-sbp&0bg z)H0Gc z%wk9H%@r+aHr&8##^O2>^sG~igMs8$x^QA}x)dK|L$COY70CPcTXZf_gZY=3MvUYX z+b}&Lpn$tNq9?~_%m`NLd1IV;Fgd9|*^qGd2?|68pe{oPuCu_8^yB0R7e3=tRvWms z5o0mzHT!7hMtRzL5)(`W8l!%+3Q7AI);ftpR7N`e@2?hOq2 zQ$~jLKf3Ui`2UOpU_xka{b6D9v5=WSQdtCaTr_qxosOEOv2zC zAuZQ16}=lKo~xVgkAEO+HRp$1&v6tGG?ms6>|vacT7Eb3n>%&A{>mHSqVnWm_>W}N zs`p?@VC{_GaznTv$x=%AS&w|1Xoi-KM5UmG!2RyZNiU+cs`%vax;NyQ2%|G@d}J** z|MhI8!}J~RxBV-^6jruOf8PK1z3$qxcpj$yUHb%Bj#^mg4|A5$jE!xsQaZIiN6+#V zugAF`nukKGbg}+@n%1?&#UU0K1OMrv2A}zRG7$ zzdRJGw@y2Bq`IK$KT=0`Yxl{i@*U9b6rMD!q2)Cco3BcR$$5y)i=GNZvA#%$mFnG} zo8QAJD!OM%(fswKH`7#>0rxnb~Wxr#Bj|^>zYa%N=v}LbKPGJEs=7MaccG-^&peOXF`G^A4Ve zKLZ-9{hsbExQ8kPk$r0qmL~}dj3aA)I_?r=B34nbF*Z~MM?0Rxy-A2Bc&c1H)E3}v zKfV__Og}-s!@qPnS*Ln~+6e~+Hkz|m5@{27Arrj;Xa}2yxMet*81bR5bZ}|5Qc}_Q zB|m|rFru9b19gH{KqY+BqA}7ba`rC#)x-sPK(}tmQC?+EXBe{f!8#TnfF$XR61GsN zrsZmSSQ%HjWrCMhSKI{*|8~+adeoin$K1D-Cpm_;0}K-Wp3-A7gL@q+Ps4}8$NI*W zA{%xQHn*4cHZo)3GL$A=Y-zE)Wu?o*2BtP7CXTd8y4?ryAZCwvOxmQob$1Iq3LTsK z04}+z#&WSV)2?)mugU>Cyw71cWMj6jli%YwBmJ`}ub
@q07>x(%s!?43A%ng8-^ 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