From 02e9f94562578ae270a53d52184c3edcbf22604a Mon Sep 17 00:00:00 2001 From: Artem Barysh Date: Tue, 11 Feb 2025 17:01:58 +0200 Subject: [PATCH] Added 4 LNS integrations for CD10 --- .../CD10/ChirpStack/uplink/converter.json | 39 +++++++++ .../CD10/ChirpStack/uplink/metadata.json | 4 + .../CD10/ChirpStack/uplink/payload.json | 48 +++++++++++ .../Browan/CD10/ChirpStack/uplink/result.json | 32 ++++++++ .../Browan/CD10/LORIOT/uplink/converter.json | 29 +++++++ .../Browan/CD10/LORIOT/uplink/metadata.json | 4 + .../Browan/CD10/LORIOT/uplink/payload.json | 17 ++++ VENDORS/Browan/CD10/LORIOT/uplink/result.json | 22 +++++ .../uplink/converter.json | 39 +++++++++ .../ThingsStackCommunity/uplink/metadata.json | 4 + .../ThingsStackCommunity/uplink/payload.json | 54 ++++++++++++ .../ThingsStackCommunity/uplink/result.json | 33 ++++++++ .../uplink/converter.json | 40 +++++++++ .../uplink/metadata.json | 4 + .../ThingsStackIndustries/uplink/payload.json | 77 ++++++++++++++++++ .../ThingsStackIndustries/uplink/result.json | 33 ++++++++ VENDORS/Browan/CD10/info.json | 5 ++ VENDORS/Browan/CD10/photo.png | Bin 0 -> 84040 bytes VENDORS/Browan/info.json | 4 + VENDORS/Browan/photo.png | Bin 0 -> 12030 bytes 20 files changed, 488 insertions(+) create mode 100644 VENDORS/Browan/CD10/ChirpStack/uplink/converter.json create mode 100644 VENDORS/Browan/CD10/ChirpStack/uplink/metadata.json create mode 100644 VENDORS/Browan/CD10/ChirpStack/uplink/payload.json create mode 100644 VENDORS/Browan/CD10/ChirpStack/uplink/result.json create mode 100644 VENDORS/Browan/CD10/LORIOT/uplink/converter.json create mode 100644 VENDORS/Browan/CD10/LORIOT/uplink/metadata.json create mode 100644 VENDORS/Browan/CD10/LORIOT/uplink/payload.json create mode 100644 VENDORS/Browan/CD10/LORIOT/uplink/result.json create mode 100644 VENDORS/Browan/CD10/ThingsStackCommunity/uplink/converter.json create mode 100644 VENDORS/Browan/CD10/ThingsStackCommunity/uplink/metadata.json create mode 100644 VENDORS/Browan/CD10/ThingsStackCommunity/uplink/payload.json create mode 100644 VENDORS/Browan/CD10/ThingsStackCommunity/uplink/result.json create mode 100644 VENDORS/Browan/CD10/ThingsStackIndustries/uplink/converter.json create mode 100644 VENDORS/Browan/CD10/ThingsStackIndustries/uplink/metadata.json create mode 100644 VENDORS/Browan/CD10/ThingsStackIndustries/uplink/payload.json create mode 100644 VENDORS/Browan/CD10/ThingsStackIndustries/uplink/result.json create mode 100644 VENDORS/Browan/CD10/info.json create mode 100644 VENDORS/Browan/CD10/photo.png create mode 100644 VENDORS/Browan/info.json create mode 100644 VENDORS/Browan/photo.png diff --git a/VENDORS/Browan/CD10/ChirpStack/uplink/converter.json b/VENDORS/Browan/CD10/ChirpStack/uplink/converter.json new file mode 100644 index 00000000..ba909ce5 --- /dev/null +++ b/VENDORS/Browan/CD10/ChirpStack/uplink/converter.json @@ -0,0 +1,39 @@ +{ + "name": "ChirpStack Uplink Decoder for Browan CD10", + "type": "UPLINK", + "debugMode": false, + "debugSettings": { + "failuresEnabled": true, + "allEnabled": false, + "allEnabledUntil": 1738687349599 + }, + "configuration": { + "scriptLang": "TBEL", + "decoder": null, + "tbelDecoder": "var data = decodeToJson(payload);\nvar deviceName = \"CD10 \" + data.deviceInfo.devEui;\nvar deviceType = \"CD10\";\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: input\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 fPort = data.fPort;\n if (fPort == 127) {\n output.attributes.status = input[0] & 0x01;\n output.attributes.button = (input[0] >> 1) & 0x01;\n decoded.co2threshold = (input[0] >> 4) & 0x01;\n decoded.co2calibration = (input[0] >> 5) & 0x01;\n decoded.battery = (21.0 + (input[1] & 0x0f)) / 10;\n decoded.temperature = parseBytesToInt(input, 2, 2, false) / 10;\n decoded.humidity = input[4];\n decoded.co2_ppm = parseBytesToInt(input, 5, 2, false);\n }\n else {\n decoded.errors = \"unknown fPort\";\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.time;\ntimestamp = parseDateToTimestamp(dateString);\n// --- Timestamp parsing\n\n// Passing incoming input 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}", + "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/Browan/CD10/ChirpStack/uplink/metadata.json b/VENDORS/Browan/CD10/ChirpStack/uplink/metadata.json new file mode 100644 index 00000000..23f54b34 --- /dev/null +++ b/VENDORS/Browan/CD10/ChirpStack/uplink/metadata.json @@ -0,0 +1,4 @@ +{ + "integrationName": "ChirpStack integration", + "includeGatewayInfo": "false" +} \ No newline at end of file diff --git a/VENDORS/Browan/CD10/ChirpStack/uplink/payload.json b/VENDORS/Browan/CD10/ChirpStack/uplink/payload.json new file mode 100644 index 00000000..043e35d4 --- /dev/null +++ b/VENDORS/Browan/CD10/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": 127, + "confirmed": false, + "data": "EQ/nAEMHGQ==", + "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/Browan/CD10/ChirpStack/uplink/result.json b/VENDORS/Browan/CD10/ChirpStack/uplink/result.json new file mode 100644 index 00000000..ba398c6a --- /dev/null +++ b/VENDORS/Browan/CD10/ChirpStack/uplink/result.json @@ -0,0 +1,32 @@ +{ + "deviceName": "CD10 1000000000000001", + "deviceType": "CD10", + "attributes": { + "eui": "1000000000000001", + "status": 1, + "button": 0, + "devAddr": "20000001", + "fPort": 127, + "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": { + "co2threshold": 1, + "co2calibration": 0, + "battery": 3.6, + "temperature": 23.1, + "humidity": 67, + "co2_ppm": 6407 + } + }] +} \ No newline at end of file diff --git a/VENDORS/Browan/CD10/LORIOT/uplink/converter.json b/VENDORS/Browan/CD10/LORIOT/uplink/converter.json new file mode 100644 index 00000000..64a122e1 --- /dev/null +++ b/VENDORS/Browan/CD10/LORIOT/uplink/converter.json @@ -0,0 +1,29 @@ +{ + "name": "Loriot Uplink Decoder for Browan CD10", + "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 = \"CD10 \" + data.EUI;\nvar deviceType = \"CD10\";\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 fPort = data.port;\n if (fPort == 127) {\n output.attributes.status = input[0] & 0x01;\n output.attributes.button = (input[0] >> 1) & 0x01;\n decoded.co2threshold = (input[0] >> 4) & 0x01;\n decoded.co2calibration = (input[0] >> 5) & 0x01;\n decoded.battery = (21.0 + (input[1] & 0x0f)) / 10;\n decoded.temperature = parseBytesToInt(input, 2, 2, false) / 10;\n decoded.humidity = input[4];\n decoded.co2_ppm = parseBytesToInt(input, 5, 2, false);\n }\n else {\n decoded.errors = \"unknown fPort\";\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}", + "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/Browan/CD10/LORIOT/uplink/metadata.json b/VENDORS/Browan/CD10/LORIOT/uplink/metadata.json new file mode 100644 index 00000000..ae2ee743 --- /dev/null +++ b/VENDORS/Browan/CD10/LORIOT/uplink/metadata.json @@ -0,0 +1,4 @@ +{ + "integrationName": "Loriot integration", + "includeGatewayInfo": "false" +} \ No newline at end of file diff --git a/VENDORS/Browan/CD10/LORIOT/uplink/payload.json b/VENDORS/Browan/CD10/LORIOT/uplink/payload.json new file mode 100644 index 00000000..1c341b5d --- /dev/null +++ b/VENDORS/Browan/CD10/LORIOT/uplink/payload.json @@ -0,0 +1,17 @@ +{ + "cmd": "rx", + "seqno": 3040, + "EUI": "1000000000000001", + "ts": 1684478801936, + "fcnt": 2, + "port": 127, + "freq": 867500000, + "rssi": -21, + "snr": 10, + "toa": 206, + "dr": "SF9 BW125 4/5", + "ack": false, + "bat": 94, + "offline": false, + "data": "110fe700430719" +} \ No newline at end of file diff --git a/VENDORS/Browan/CD10/LORIOT/uplink/result.json b/VENDORS/Browan/CD10/LORIOT/uplink/result.json new file mode 100644 index 00000000..ba8188e0 --- /dev/null +++ b/VENDORS/Browan/CD10/LORIOT/uplink/result.json @@ -0,0 +1,22 @@ +[{ + "deviceName": "CD10 1000000000000001", + "deviceType": "CD10", + "attributes": { + "status": 1, + "button": 0, + "eui": "1000000000000001", + "fPort": 127, + "frequency": 867500000 + }, + "telemetry": [{ + "ts": 1684478801936, + "values": { + "co2threshold": 1, + "co2calibration": 0, + "battery": 3.6, + "temperature": 23.1, + "humidity": 67, + "co2_ppm": 6407 + } + }] +}] \ No newline at end of file diff --git a/VENDORS/Browan/CD10/ThingsStackCommunity/uplink/converter.json b/VENDORS/Browan/CD10/ThingsStackCommunity/uplink/converter.json new file mode 100644 index 00000000..701f7e43 --- /dev/null +++ b/VENDORS/Browan/CD10/ThingsStackCommunity/uplink/converter.json @@ -0,0 +1,39 @@ +{ + "name": "The Things Stack Community Uplink Decoder for Browan CD10", + "type": "UPLINK", + "debugMode": false, + "debugSettings": { + "failuresEnabled": true, + "allEnabled": false, + "allEnabledUntil": 1733331880270 + }, + "configuration": { + "scriptLang": "TBEL", + "decoder": null, + "tbelDecoder": "var data = decodeToJson(payload);\n\nvar deviceName = \"CD10 \" + data.end_device_ids.device_id;\nvar deviceType = \"CD10\";\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: {}, \n telemetry: {}\n };\n \n // --- Decoding code --- //\n var decoded = {};\n var fPort = data.uplink_message.f_port;\n if (fPort == 127) {\n output.attributes.status = input[0] & 0x01;\n output.attributes.button = (input[0] >> 1) & 0x01;\n decoded.co2threshold = (input[0] >> 4) & 0x01;\n decoded.co2calibration = (input[0] >> 5) & 0x01;\n decoded.battery = (21.0 + (input[1] & 0x0f)) / 10;\n decoded.temperature = parseBytesToInt(input, 2, 2, false) / 10;\n decoded.humidity = input[4];\n decoded.co2_ppm = parseBytesToInt(input, 5, 2, false);\n }\n else {\n decoded.errors = \"unknown fPort\";\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 includes(datas, value) {\n var size = datas.length;\n for (var i = 0; i < size; i++) {\n if (datas[i] == value) {\n return true;\n }\n }\n return false;\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/Browan/CD10/ThingsStackCommunity/uplink/metadata.json b/VENDORS/Browan/CD10/ThingsStackCommunity/uplink/metadata.json new file mode 100644 index 00000000..0d75c374 --- /dev/null +++ b/VENDORS/Browan/CD10/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/Browan/CD10/ThingsStackCommunity/uplink/payload.json b/VENDORS/Browan/CD10/ThingsStackCommunity/uplink/payload.json new file mode 100644 index 00000000..08c8c56d --- /dev/null +++ b/VENDORS/Browan/CD10/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": 127, + "f_cnt": 10335, + "frm_payload": "EQ/nAEMHGQ==", + "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/Browan/CD10/ThingsStackCommunity/uplink/result.json b/VENDORS/Browan/CD10/ThingsStackCommunity/uplink/result.json new file mode 100644 index 00000000..a2de1b74 --- /dev/null +++ b/VENDORS/Browan/CD10/ThingsStackCommunity/uplink/result.json @@ -0,0 +1,33 @@ +{ + "deviceName": "CD10 eui-1000000000000001", + "deviceType": "CD10", + "attributes": { + "status": 1, + "button": 0, + "eui": "1000000000000001", + "fPort": 127, + "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": { + "co2threshold": 1, + "co2calibration": 0, + "battery": 3.6, + "temperature": 23.1, + "humidity": 67, + "co2_ppm": 6407 + } + }] +} \ No newline at end of file diff --git a/VENDORS/Browan/CD10/ThingsStackIndustries/uplink/converter.json b/VENDORS/Browan/CD10/ThingsStackIndustries/uplink/converter.json new file mode 100644 index 00000000..7dbb78c6 --- /dev/null +++ b/VENDORS/Browan/CD10/ThingsStackIndustries/uplink/converter.json @@ -0,0 +1,40 @@ +{ + "name": "The Things Stack Industries Uplink Decoder for Browan CD10", + "type": "UPLINK", + "debugMode": false, + "debugSettings": { + "failuresEnabled": true, + "allEnabled": false, + "allEnabledUntil": 1733331880270 + }, + "configuration": { + "scriptLang": "TBEL", + "decoder": null, + "tbelDecoder": "var data = decodeToJson(payload);\n\nvar deviceName = \"CD10 \" + data.end_device_ids.device_id;\nvar deviceType = \"CD10\";\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 fPort = data.uplink_message.f_port;\n if (fPort == 127) {\n output.attributes.status = input[0] & 0x01;\n output.attributes.button = (input[0] >> 1) & 0x01;\n decoded.co2threshold = (input[0] >> 4) & 0x01;\n decoded.co2calibration = (input[0] >> 5) & 0x01;\n decoded.battery = (21.0 + (input[1] & 0x0f)) / 10;\n decoded.temperature = parseBytesToInt(input, 2, 2, false) / 10;\n decoded.humidity = input[4];\n decoded.co2_ppm = parseBytesToInt(input, 5, 2, false);\n }\n else {\n decoded.errors = \"unknown fPort\";\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 includes(datas, value) {\n var size = datas.length;\n for (var i = 0; i < size; i++) {\n if (datas[i] == value) {\n return true;\n }\n }\n return false;\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/Browan/CD10/ThingsStackIndustries/uplink/metadata.json b/VENDORS/Browan/CD10/ThingsStackIndustries/uplink/metadata.json new file mode 100644 index 00000000..23f54b34 --- /dev/null +++ b/VENDORS/Browan/CD10/ThingsStackIndustries/uplink/metadata.json @@ -0,0 +1,4 @@ +{ + "integrationName": "ChirpStack integration", + "includeGatewayInfo": "false" +} \ No newline at end of file diff --git a/VENDORS/Browan/CD10/ThingsStackIndustries/uplink/payload.json b/VENDORS/Browan/CD10/ThingsStackIndustries/uplink/payload.json new file mode 100644 index 00000000..301ed227 --- /dev/null +++ b/VENDORS/Browan/CD10/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": 127, + "f_cnt": 5017, + "frm_payload": "EQ/nAEMHGQ==", + "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/Browan/CD10/ThingsStackIndustries/uplink/result.json b/VENDORS/Browan/CD10/ThingsStackIndustries/uplink/result.json new file mode 100644 index 00000000..165ccd34 --- /dev/null +++ b/VENDORS/Browan/CD10/ThingsStackIndustries/uplink/result.json @@ -0,0 +1,33 @@ +{ + "deviceName": "CD10 eui-1000000000000001", + "deviceType": "CD10", + "attributes": { + "status": 1, + "button": 0, + "eui": "1000000000000001", + "fPort": 127, + "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": { + "co2threshold": 1, + "co2calibration": 0, + "battery": 3.6, + "temperature": 23.1, + "humidity": 67, + "co2_ppm": 6407 + } + }] +} \ No newline at end of file diff --git a/VENDORS/Browan/CD10/info.json b/VENDORS/Browan/CD10/info.json new file mode 100644 index 00000000..c74db6a2 --- /dev/null +++ b/VENDORS/Browan/CD10/info.json @@ -0,0 +1,5 @@ +{ + "url": "https://www.browan.com/products-detail/Air-Quality-CO2-Sensor-LoRaWAN/", + "label": "CD10: Air Quality CO2 Sensor", + "description": "CD10 is a professional LoRaWAN smart device.\nIts minimalistic design makes it ideal for mounting on walls at home or at work. It\nprovides full surveillance over the CO2 levels, temperature, and humidity." +} diff --git a/VENDORS/Browan/CD10/photo.png b/VENDORS/Browan/CD10/photo.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ce520b11e128844c7383f996d9483bca6267e6 GIT binary patch literal 84040 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ℑ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

Ymkef`J0YfPTjF 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