From 7bf91b7f8d938c0ccf0612b2ce7b93ab74ad86b4 Mon Sep 17 00:00:00 2001 From: thingsboard017 Date: Mon, 28 Oct 2024 17:16:56 +0200 Subject: [PATCH] Added 4 integrations for AM107 device: Loriot, Things Stack Community, Things Stack Industry and ChirpStack --- .../AM107/ChirpStack/uplink/converter.json | 35 ++++++++ .../AM107/ChirpStack/uplink/metadata.json | 4 + .../AM107/ChirpStack/uplink/payload.json | 48 +++++++++++ .../AM107/ChirpStack/uplink/result.json | 34 ++++++++ .../AM107/Loriot/uplink/converter.json | 25 ++++++ .../AM107/Loriot/uplink/metadata.json | 4 + .../AM107/Loriot/uplink/payload.json | 17 ++++ .../Milesight/AM107/Loriot/uplink/result.json | 24 ++++++ .../uplink/converter.json | 35 ++++++++ .../ThingsStackCommunity/uplink/metadata.json | 4 + .../ThingsStackCommunity/uplink/payload.json | 54 ++++++++++++ .../ThingsStackCommunity/uplink/result.json | 35 ++++++++ .../uplink/converter.json | 36 ++++++++ .../uplink/metadata.json | 4 + .../ThingsStackIndustries/uplink/payload.json | 77 ++++++++++++++++++ .../ThingsStackIndustries/uplink/result.json | 35 ++++++++ VENDORS/Milesight/AM107/guide.md | 30 +++++++ VENDORS/Milesight/AM107/info.json | 5 ++ VENDORS/Milesight/AM107/photo.png | Bin 0 -> 121420 bytes 19 files changed, 506 insertions(+) create mode 100644 VENDORS/Milesight/AM107/ChirpStack/uplink/converter.json create mode 100644 VENDORS/Milesight/AM107/ChirpStack/uplink/metadata.json create mode 100644 VENDORS/Milesight/AM107/ChirpStack/uplink/payload.json create mode 100644 VENDORS/Milesight/AM107/ChirpStack/uplink/result.json create mode 100644 VENDORS/Milesight/AM107/Loriot/uplink/converter.json create mode 100644 VENDORS/Milesight/AM107/Loriot/uplink/metadata.json create mode 100644 VENDORS/Milesight/AM107/Loriot/uplink/payload.json create mode 100644 VENDORS/Milesight/AM107/Loriot/uplink/result.json create mode 100644 VENDORS/Milesight/AM107/ThingsStackCommunity/uplink/converter.json create mode 100644 VENDORS/Milesight/AM107/ThingsStackCommunity/uplink/metadata.json create mode 100644 VENDORS/Milesight/AM107/ThingsStackCommunity/uplink/payload.json create mode 100644 VENDORS/Milesight/AM107/ThingsStackCommunity/uplink/result.json create mode 100644 VENDORS/Milesight/AM107/ThingsStackIndustries/uplink/converter.json create mode 100644 VENDORS/Milesight/AM107/ThingsStackIndustries/uplink/metadata.json create mode 100644 VENDORS/Milesight/AM107/ThingsStackIndustries/uplink/payload.json create mode 100644 VENDORS/Milesight/AM107/ThingsStackIndustries/uplink/result.json create mode 100644 VENDORS/Milesight/AM107/guide.md create mode 100644 VENDORS/Milesight/AM107/info.json create mode 100644 VENDORS/Milesight/AM107/photo.png diff --git a/VENDORS/Milesight/AM107/ChirpStack/uplink/converter.json b/VENDORS/Milesight/AM107/ChirpStack/uplink/converter.json new file mode 100644 index 0000000..c58cb20 --- /dev/null +++ b/VENDORS/Milesight/AM107/ChirpStack/uplink/converter.json @@ -0,0 +1,35 @@ +{ + "name": "ChirpStack uplink converter for Milesight AM107", + "type": "UPLINK", + "debugMode": true, + "configuration": { + "scriptLang": "TBEL", + "decoder": null, + "tbelDecoder": "var data = decodeToJson(payload);\nvar deviceName = \"AM107 \" + data.deviceInfo.deviceName;\nvar deviceType = \"AM107\";\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 historyData = {};\n for (var i = 0; i < input.length - 2;) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n if (channel_id === 0x03 && channel_type === 0x67) {\n // ℃\n decoded.temperature = parseBytesToInt(input, i,\n 2, false) / 10;\n i += 2;\n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // PIR\n if (channel_id === 0x05 && channel_type === 0x6a) {\n decoded.activity = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n \n // LIGHT\n if (channel_id === 0x06 && channel_type === 0x65) {\n decoded.illumination = parseBytesToInt(input, i, 2, false);\n decoded.infrared_and_visible = parseBytesToInt(input, i+2, 2, false);\n decoded.infrared = parseBytesToInt(input, i+4, 2, false);\n i += 6;\n }\n // CO2\n if (channel_id === 0x07 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // TVOC\n if (channel_id === 0x08 && channel_type === 0x7d) {\n decoded.tvoc = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n if (channel_id === 0x09 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n }\n\n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }, historyData];\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 bytes to decodePayload function, to get custom decoding\nvar customDecoding = decodePayload(base64ToBytes(data\n.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\nvar gatewayInfo = getGatewayInfo();\nvar addDataToTelemetry = {};\naddDataToTelemetry.snr = gatewayInfo.snr;\naddDataToTelemetry.rssi = gatewayInfo.rssi;\naddDataToTelemetry.channel = gatewayInfo.channel;\naddDataToTelemetry.rfChain = gatewayInfo.rfChain;\naddDataToTelemetry.fCnt = data.fCnt;\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\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 timestamp = -1;\n if (dateString != null) {\n timestamp = new Date(dateString).getTime();\n if (timestamp == -1) {\n var secondsSeparatorIndex = dateString.lastIndexOf(\n '.') + 1;\n var millisecondsEndIndex = dateString.lastIndexOf(\n '+');\n if (millisecondsEndIndex == -1) {\n millisecondsEndIndex = dateString.lastIndexOf(\n 'Z');\n }\n if (millisecondsEndIndex == -1) {\n millisecondsEndIndex = dateString.lastIndexOf(\n '-');\n }\n if (millisecondsEndIndex == -1) {\n if (dateString.length >= secondsSeparatorIndex +\n 3) {\n dateString = dateString.substring(0,\n secondsSeparatorIndex + 3);\n }\n } else {\n dateString = dateString.substring(0,\n secondsSeparatorIndex + 3) +\n dateString.substring(millisecondsEndIndex,\n dateString.length);\n }\n timestamp = new Date(dateString).getTime();\n }\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 = addDataToMultipleTelemetries(telemetry, addDataToTelemetry);\n }\n else if (telemetry.size == 1) {\n telemetry = addDataToSingleTelemetry(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToMultipleTelemetries(telemetry, addDataToTelemetry) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[0][\"values\"].keys.contains(element.key)) {\n telemetry[0][\"values\"][element.key] = element.value;\n }\n if (!telemetry[1][\"values\"].keys.contains(element.key)) {\n telemetry[1][\"values\"][element.key] = element.value;\n }\n }\n \n return telemetry;\n}\n\nfunction addDataToSingleTelemetry(telemetry, addDataToTelemetry) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[0][\"values\"].keys.contains(element.key)) {\n telemetry[0][\"values\"][element.key] = element.value;\n }\n }\n \n return telemetry;\n}", + "encoder": null, + "tbelEncoder": null, + "updateOnlyKeys": [ + "tenantId", + "tenantName", + "applicationId", + "applicationName", + "deviceProfileId", + "deviceProfileName", + "devAddr", + "fPort", + "frequency", + "bandwidth", + "spreadingFactor", + "codeRate", + "battery", + "channel", + "rfChain", + "eui", + "beep" + ] + }, + "additionalInfo": { + "description": "" + }, + "edgeTemplate": false +} \ No newline at end of file diff --git a/VENDORS/Milesight/AM107/ChirpStack/uplink/metadata.json b/VENDORS/Milesight/AM107/ChirpStack/uplink/metadata.json new file mode 100644 index 0000000..db001d8 --- /dev/null +++ b/VENDORS/Milesight/AM107/ChirpStack/uplink/metadata.json @@ -0,0 +1,4 @@ +{ + "integrationName": "ChirpStack integration", + "includeGatewayInfo" : false +} \ No newline at end of file diff --git a/VENDORS/Milesight/AM107/ChirpStack/uplink/payload.json b/VENDORS/Milesight/AM107/ChirpStack/uplink/payload.json new file mode 100644 index 0000000..f69ed5a --- /dev/null +++ b/VENDORS/Milesight/AM107/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": "AXVcA2c0AQRoZQVqSQAGZRwAeQAUAAd95wQIfQcACXM/Jw==", + "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/AM107/ChirpStack/uplink/result.json b/VENDORS/Milesight/AM107/ChirpStack/uplink/result.json new file mode 100644 index 0000000..ef635fc --- /dev/null +++ b/VENDORS/Milesight/AM107/ChirpStack/uplink/result.json @@ -0,0 +1,34 @@ +{ + "deviceName": "AM107 Device name", + "deviceType": "AM107", + "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": 92, + "temperature": 30.8, + "humidity": 50.5, + "activity": 73, + "illumination": 28, + "infrared_and_visible": 121, + "infrared": 20, + "co2": 1255, + "tvoc": 7, + "pressure": 1004.7 + } + }] +} \ No newline at end of file diff --git a/VENDORS/Milesight/AM107/Loriot/uplink/converter.json b/VENDORS/Milesight/AM107/Loriot/uplink/converter.json new file mode 100644 index 0000000..4e0df15 --- /dev/null +++ b/VENDORS/Milesight/AM107/Loriot/uplink/converter.json @@ -0,0 +1,25 @@ +{ + "name": "Uplink data converter for Loriot integration AM-107", + "type": "UPLINK", + "debugMode": true, + "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 = \"AM107 \" + data.EUI;\nvar deviceType = \"AM107\";\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 // --- Decoding code --- //\n var decoded = {};\n var historyData = {};\n for (var i = 0; i < input.length - 2; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n // BATTERY\n if(channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i]; \n i += 1;\n }\n // TEMPERATURE\n if (channel_id === 0x03 && channel_type === 0x67) {\n // ℃\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n i += 2;\n }\n // HUMIDITY\n if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // PIR\n if (channel_id === 0x05 && channel_type === 0x6a) {\n decoded.activity = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // LIGHT\n if (channel_id === 0x06 && channel_type === 0x65) {\n decoded.illumination = parseBytesToInt(input, i, 2, false);\n decoded.infrared_and_visible = parseBytesToInt(input, i+2, 2, false);\n decoded.infrared = parseBytesToInt(input, i+4, 2, false);\n i += 6;\n }\n // CO2\n if (channel_id === 0x07 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // TVOC\n if (channel_id === 0x08 && channel_type === 0x7d) {\n decoded.tvoc = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n if (channel_id === 0x09 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n }\n \n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }, historyData];\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 addDataToTelemetry = {};\naddDataToTelemetry.rssi = data.rssi;\naddDataToTelemetry.seqno = data.seqno;\naddDataToTelemetry.snr = data.snr;\naddDataToTelemetry.ack = data.ack;\naddDataToTelemetry.toa = data.toa;\naddDataToTelemetry.fCnt = data.fcnt;\n\nvar isIncludeGatewayInfo = metadata[\"includeGatewayInfo\"];\nif(isIncludeGatewayInfo == true) {\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 includeGatewayInfo = [\"ts\", \"gweui\", \"rssi\"];\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 gatewayInfoMsg = {\n deviceName: gatewayDeviceNamePrefix + gatewayInfo.gweui,\n deviceType: gatewayDeviceType,\n telemetry: [{\n \"ts\": parseDateToTimestamp(gatewayInfo.ts),\n \"values\": getDataList(gatewayInfo, includeGatewayInfo)\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 parseDateToTimestamp(dateString) {\n var timestamp = -1;\n if (dateString != null) {\n \n timestamp = new Date(dateString).getTime();\n if (timestamp == -1) {\n var secondsSeparatorIndex = dateString.lastIndexOf('.') + 1;\n var millisecondsEndIndex = dateString.lastIndexOf('+');\n if (millisecondsEndIndex == -1) {\n millisecondsEndIndex = dateString.lastIndexOf('Z');\n }\n if (millisecondsEndIndex == -1) {\n millisecondsEndIndex = dateString.lastIndexOf('-');\n }\n if (millisecondsEndIndex == -1) {\n if (dateString.length >= secondsSeparatorIndex + 3) {\n dateString = dateString.substring(0, secondsSeparatorIndex + 3);\n }\n } else {\n dateString = dateString.substring(0, secondsSeparatorIndex + 3) +\n dateString.substring(millisecondsEndIndex, dateString.length);\n }\n \n timestamp = new Date(dateString).getTime();\n }\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 processTelemetryData(telemetry, addDataToTelemetry) {\n if (telemetry.size > 1) {\n telemetry = addDataToMultipleTelemetries(telemetry, addDataToTelemetry);\n }\n else if (telemetry.size == 1) {\n telemetry = addDataToSingleTelemetry(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToMultipleTelemetries(telemetry, addDataToTelemetry) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[0][\"values\"].keys.contains(element.key)) {\n telemetry[0][\"values\"][element.key] = element.value;\n }\n if (!telemetry[1][\"values\"].keys.contains(element.key)) {\n telemetry[1][\"values\"][element.key] = element.value;\n }\n }\n \n return telemetry;\n}\n\nfunction addDataToSingleTelemetry(telemetry, addDataToTelemetry) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[0][\"values\"].keys.contains(element.key)) {\n telemetry[0][\"values\"][element.key] = element.value;\n }\n }\n \n return telemetry;\n}", + "encoder": null, + "tbelEncoder": null, + "updateOnlyKeys": [ + "fPort", + "battery", + "ack", + "beep", + "eui", + "frequency", + "dr" + ] + }, + "additionalInfo": { + "description": "" + }, + "edgeTemplate": false +} \ No newline at end of file diff --git a/VENDORS/Milesight/AM107/Loriot/uplink/metadata.json b/VENDORS/Milesight/AM107/Loriot/uplink/metadata.json new file mode 100644 index 0000000..e76cdcf --- /dev/null +++ b/VENDORS/Milesight/AM107/Loriot/uplink/metadata.json @@ -0,0 +1,4 @@ +{ + "integrationName": "Loriot integration", + "includeGatewayInfo" : false +} \ No newline at end of file diff --git a/VENDORS/Milesight/AM107/Loriot/uplink/payload.json b/VENDORS/Milesight/AM107/Loriot/uplink/payload.json new file mode 100644 index 0000000..4f0d5ae --- /dev/null +++ b/VENDORS/Milesight/AM107/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": "01755C03673401046865056A490006651C0079001400077DE704087D070009733F27" +} \ No newline at end of file diff --git a/VENDORS/Milesight/AM107/Loriot/uplink/result.json b/VENDORS/Milesight/AM107/Loriot/uplink/result.json new file mode 100644 index 0000000..8bd457f --- /dev/null +++ b/VENDORS/Milesight/AM107/Loriot/uplink/result.json @@ -0,0 +1,24 @@ +[{ + "deviceName": "AM107 1000000000000001", + "deviceType": "AM107", + "attributes": { + "eui": "1000000000000001", + "fPort": 85, + "frequency": 867500000 + }, + "telemetry": [{ + "ts": 1684478801936, + "values": { + "battery": 92, + "temperature": 30.8, + "humidity": 50.5, + "activity": 73, + "illumination": 28, + "infrared_and_visible": 121, + "infrared": 20, + "co2": 1255, + "tvoc": 7, + "pressure": 1004.7 + } + }] +}] \ No newline at end of file diff --git a/VENDORS/Milesight/AM107/ThingsStackCommunity/uplink/converter.json b/VENDORS/Milesight/AM107/ThingsStackCommunity/uplink/converter.json new file mode 100644 index 0000000..f05ef64 --- /dev/null +++ b/VENDORS/Milesight/AM107/ThingsStackCommunity/uplink/converter.json @@ -0,0 +1,35 @@ +{ + "name": "Uplink data converter for The Things Stack Community integration AM-107", + "type": "UPLINK", + "debugMode": true, + "configuration": { + "scriptLang": "TBEL", + "decoder": null, + "tbelDecoder": "var data = decodeToJson(payload);\n\nvar deviceName = \"AM107 \" + data.end_device_ids.device_id;\nvar deviceType = \"AM107\";\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 historyData = {};\n for (var i = 0; i < input.length - 2; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i];\n i += 1;\n }\n // TEMPERATURE\n if (channel_id === 0x03 && channel_type === 0x67) {\n // ℃\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n // i +=2;\n }\n // HUMIDITY\n if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // PIR\n if (channel_id === 0x05 && channel_type === 0x6a) {\n decoded.activity = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // LIGHT\n if (channel_id === 0x06 && channel_type === 0x65) {\n decoded.illumination = parseBytesToInt(input, i, 2, false);\n decoded.infrared_and_visible = parseBytesToInt(input, i+2, 2, false);\n decoded.infrared = parseBytesToInt(input, i+4, 2, false);\n i += 6;\n }\n // CO2\n if (channel_id === 0x07 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // TVOC\n if (channel_id === 0x08 && channel_type === 0x7d) {\n decoded.tvoc = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n if (channel_id === 0x09 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n }\n \n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }, historyData];\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 timestamp = new Date(dateString).getTime();\n var timestamp = -1;\n if (dateString != null) {\n timestamp = new Date(dateString).getTime();\n if (timestamp == -1) {\n var secondsSeparatorIndex = dateString.lastIndexOf('.') + 1;\n var millisecondsEndIndex = dateString.lastIndexOf('+');\n if (millisecondsEndIndex == -1) {\n millisecondsEndIndex = dateString.lastIndexOf('Z');\n }\n if (millisecondsEndIndex == -1) {\n millisecondsEndIndex = dateString.lastIndexOf('-');\n }\n if (millisecondsEndIndex == -1) {\n if (dateString.length >= secondsSeparatorIndex + 3) {\n dateString = dateString.substring(0, secondsSeparatorIndex + 3);\n }\n } else {\n dateString = dateString.substring(0, secondsSeparatorIndex + 3) +\n dateString.substring(millisecondsEndIndex, dateString.length);\n }\n timestamp = new Date(dateString).getTime();\n }\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 = addDataToMultipleTelemetries(telemetry, addDataToTelemetry);\n }\n else if (telemetry.size == 1) {\n telemetry = addDataToSingleTelemetry(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToMultipleTelemetries(telemetry, addDataToTelemetry) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[0][\"values\"].keys.contains(element.key)) {\n telemetry[0][\"values\"][element.key] = element.value;\n }\n if (!telemetry[1][\"values\"].keys.contains(element.key)) {\n telemetry[1][\"values\"][element.key] = element.value;\n }\n }\n \n return telemetry;\n}\n\nfunction addDataToSingleTelemetry(telemetry, addDataToTelemetry) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[0][\"values\"].keys.contains(element.key)) {\n telemetry[0][\"values\"][element.key] = element.value;\n }\n }\n \n return telemetry;\n}", + "encoder": null, + "tbelEncoder": null, + "updateOnlyKeys": [ + "fPort", + "bandwidth", + "frequency", + "net_id", + "cluster_id", + "cluster_address", + "device_id", + "join_eui", + "battery", + "eui", + "beep", + "channel", + "applicationId", + "devAddr", + "spreadingFactor", + "codeRate", + "tenantId" + ] + }, + "additionalInfo": { + "description": "" + }, + "edgeTemplate": false +} \ No newline at end of file diff --git a/VENDORS/Milesight/AM107/ThingsStackCommunity/uplink/metadata.json b/VENDORS/Milesight/AM107/ThingsStackCommunity/uplink/metadata.json new file mode 100644 index 0000000..bba449c --- /dev/null +++ b/VENDORS/Milesight/AM107/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/AM107/ThingsStackCommunity/uplink/payload.json b/VENDORS/Milesight/AM107/ThingsStackCommunity/uplink/payload.json new file mode 100644 index 0000000..d864994 --- /dev/null +++ b/VENDORS/Milesight/AM107/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": "AXVcA2c0AQRoZQVqSQAGZRwAeQAUAAd95wQIfQcACXM/Jw==", + "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/AM107/ThingsStackCommunity/uplink/result.json b/VENDORS/Milesight/AM107/ThingsStackCommunity/uplink/result.json new file mode 100644 index 0000000..eb298dc --- /dev/null +++ b/VENDORS/Milesight/AM107/ThingsStackCommunity/uplink/result.json @@ -0,0 +1,35 @@ +{ + "deviceName": "AM107 eui-1000000000000001", + "deviceType": "AM107", + "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": 92, + "temperature": 30.8, + "humidity": 50.5, + "activity": 73, + "illumination": 28, + "infrared_and_visible": 121, + "infrared": 20, + "co2": 1255, + "tvoc": 7, + "pressure": 1004.7 + } + }] +} \ No newline at end of file diff --git a/VENDORS/Milesight/AM107/ThingsStackIndustries/uplink/converter.json b/VENDORS/Milesight/AM107/ThingsStackIndustries/uplink/converter.json new file mode 100644 index 0000000..d27e904 --- /dev/null +++ b/VENDORS/Milesight/AM107/ThingsStackIndustries/uplink/converter.json @@ -0,0 +1,36 @@ +{ + "name": "Uplink data converter for The Things Stack Industries integration AM-107", + "type": "UPLINK", + "debugMode": true, + "configuration": { + "scriptLang": "TBEL", + "decoder": null, + "tbelDecoder": "var data = decodeToJson(payload);\n\nvar deviceName = \"AM107 \" + data.end_device_ids.device_id;\nvar deviceType = \"AM107\";\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 // --- Timestamp parsing\n var decoded = {};\n var historyData = {};\n for (var i = 0; i < input.length - 2; ) {\n var channel_id = input[i++] & 0xff;\n var channel_type = input[i++] & 0xff;\n // BATTERY\n if(channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = input[i]; \n i += 1;\n }\n // TEMPERATURE\n if (channel_id === 0x03 && channel_type === 0x67) {\n // ℃\n decoded.temperature = parseBytesToInt(input, i, 2, false) / 10;\n // ℉\n // decoded.temperature = parseBytesToInt(input, i, 2, false) / 10 * 1.8 + 32;\n i += 2;\n }\n // HUMIDITY\n if (channel_id === 0x04 && channel_type === 0x68) {\n decoded.humidity = parseBytesToInt(input, i, 1, false) / 2;\n i += 1;\n }\n // PIR\n if (channel_id === 0x05 && channel_type === 0x6a) {\n decoded.activity = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // LIGHT\n if (channel_id === 0x06 && channel_type === 0x65) {\n decoded.illumination = parseBytesToInt(input, i, 2, false);\n decoded.infrared_and_visible = parseBytesToInt(input, i+2, 2, false);\n decoded.infrared = parseBytesToInt(input, i+4, 2, false);\n i += 6;\n }\n // CO2\n if (channel_id === 0x07 && channel_type === 0x7d) {\n decoded.co2 = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // TVOC\n if (channel_id === 0x08 && channel_type === 0x7d) {\n decoded.tvoc = parseBytesToInt(input, i, 2, false);\n i += 2;\n }\n // PRESSURE\n if (channel_id === 0x09 && channel_type === 0x73) {\n decoded.pressure = parseBytesToInt(input, i, 2, false) / 10;\n i += 2;\n }\n }\n \n output.telemetry = [{\n ts: timestamp,\n values: decoded\n }, historyData];\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_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\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\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 timestamp = new Date(dateString).getTime();\n var timestamp = -1;\n if (dateString != null) {\n timestamp = new Date(dateString).getTime();\n if (timestamp == -1) {\n var secondsSeparatorIndex = dateString.lastIndexOf('.') + 1;\n var millisecondsEndIndex = dateString.lastIndexOf('+');\n if (millisecondsEndIndex == -1) {\n millisecondsEndIndex = dateString.lastIndexOf('Z');\n }\n if (millisecondsEndIndex == -1) {\n millisecondsEndIndex = dateString.lastIndexOf('-');\n }\n if (millisecondsEndIndex == -1) {\n if (dateString.length >= secondsSeparatorIndex + 3) {\n dateString = dateString.substring(0, secondsSeparatorIndex + 3);\n }\n } else {\n dateString = dateString.substring(0, secondsSeparatorIndex + 3) +\n dateString.substring(millisecondsEndIndex, dateString.length);\n }\n timestamp = new Date(dateString).getTime();\n }\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 = addDataToMultipleTelemetries(telemetry, addDataToTelemetry);\n }\n else if (telemetry.size == 1) {\n telemetry = addDataToSingleTelemetry(telemetry, addDataToTelemetry);\n }\n else {\n telemetry.add(addDataToTelemetry);\n }\n \n return telemetry;\n}\n\nfunction addDataToMultipleTelemetries(telemetry, addDataToTelemetry) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[0][\"values\"].keys.contains(element.key)) {\n telemetry[0][\"values\"][element.key] = element.value;\n }\n if (!telemetry[1][\"values\"].keys.contains(element.key)) {\n telemetry[1][\"values\"][element.key] = element.value;\n }\n }\n \n return telemetry;\n}\n\nfunction addDataToSingleTelemetry(telemetry, addDataToTelemetry) {\n foreach(element : addDataToTelemetry.entrySet()) {\n if(!telemetry[0][\"values\"].keys.contains(element.key)) {\n telemetry[0][\"values\"][element.key] = element.value;\n }\n }\n \n return telemetry;\n}", + "encoder": null, + "tbelEncoder": null, + "updateOnlyKeys": [ + "fPort", + "bandwidth", + "frequency", + "net_id", + "cluster_id", + "cluster_address", + "tenant_address", + "device_id", + "join_eui", + "battery", + "eui", + "beep", + "channel", + "devAddr", + "spreadingFactor", + "codeRate", + "tenantId", + "applicationId" + ] + }, + "additionalInfo": { + "description": "" + }, + "edgeTemplate": false +} \ No newline at end of file diff --git a/VENDORS/Milesight/AM107/ThingsStackIndustries/uplink/metadata.json b/VENDORS/Milesight/AM107/ThingsStackIndustries/uplink/metadata.json new file mode 100644 index 0000000..f4e6219 --- /dev/null +++ b/VENDORS/Milesight/AM107/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/AM107/ThingsStackIndustries/uplink/payload.json b/VENDORS/Milesight/AM107/ThingsStackIndustries/uplink/payload.json new file mode 100644 index 0000000..99fbc93 --- /dev/null +++ b/VENDORS/Milesight/AM107/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": "AXVcA2c0AQRoZQVqSQAGZRwAeQAUAAd95wQIfQcACXM/Jw==", + "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/AM107/ThingsStackIndustries/uplink/result.json b/VENDORS/Milesight/AM107/ThingsStackIndustries/uplink/result.json new file mode 100644 index 0000000..aa0e73d --- /dev/null +++ b/VENDORS/Milesight/AM107/ThingsStackIndustries/uplink/result.json @@ -0,0 +1,35 @@ +{ + "deviceName": "AM107 eui-1000000000000001", + "deviceType": "AM107", + "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_adress": "eu1.cloud.thethings.industries", + "bandwidth": 125000, + "frequency": "868500000" + }, + "telemetry": [{ + "ts": 1684398325906, + "values": { + "battery": 92, + "temperature": 30.8, + "humidity": 50.5, + "activity": 73, + "illumination": 28, + "infrared_and_visible": 121, + "infrared": 20, + "co2": 1255, + "tvoc": 7, + "pressure": 1004.7 + } + }] +} \ No newline at end of file diff --git a/VENDORS/Milesight/AM107/guide.md b/VENDORS/Milesight/AM107/guide.md new file mode 100644 index 0000000..8a4bf5b --- /dev/null +++ b/VENDORS/Milesight/AM107/guide.md @@ -0,0 +1,30 @@ +## 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 | +| Activity | 0x05 | 0x6A | 2 | activity(2B) | +| Illumination | 0x06 | 0x65 | 6 | illumination(6B)
illumination, unit: lux | +| CO2 | 0x07 | 0x7D | 2 | co2(2B)
co2, unit: ppm | +| tVOC | 0x08 | 0x7D | 2 | tvoc(2B)
tvoc, unit: ppb | +| Pressure | 0x09 | 0x73 | 2 | pressure(2B)
pressure, unit: hPa | + +## Example + +```json +// 01755C 03673401 046865 056A4900 06651C0079001400 077DE704 087D0700 09733F27 +{ + "battery": 92, + "temperature": 30.8, + "humidity": 50.5, + "activity": 73, + "illumination": 28, + "infrared": 20, + "infrared_and_visible": 121, + "co2": 1255, + "tvoc": 7, + "pressure": 1004.7 +} +``` \ No newline at end of file diff --git a/VENDORS/Milesight/AM107/info.json b/VENDORS/Milesight/AM107/info.json new file mode 100644 index 0000000..6c2abfe --- /dev/null +++ b/VENDORS/Milesight/AM107/info.json @@ -0,0 +1,5 @@ +{ + "url": "https://www.milesight.com/iot/product/lorawan-sensor/am107", + "label": "AM107: 7-in-1 Indoor Air Quality Sensor for Comprehensive Monitoring", + "description": "AM107 is a 7-in-1 indoor ambience monitoring sensor that provides detailed measurements for temperature, humidity, CO2 concentration, TVOC, pressure, light, and PIR (Passive Infrared) motion detection. Designed with LoRaWAN® technology, AM107 supports various frequency bands, including CN470, IN865, RU864, EU868, US915, AU915, KR920, and AS923. The sensor features high precision with temperature accuracy of ±0.3°C within the range of 0°C to +70°C and humidity accuracy of ±3% within 10% to 90% RH. Additional capabilities include PIR detection with a 5-meter range, light measurement up to 60000 lux, and CO2 monitoring. AM107 is equipped with NFC for easy configuration and is ideal for use in offices, classrooms, libraries, and hospitals, ensuring optimal indoor air quality." +} diff --git a/VENDORS/Milesight/AM107/photo.png b/VENDORS/Milesight/AM107/photo.png new file mode 100644 index 0000000000000000000000000000000000000000..b7463568833a4a93d8f27be40db169e162833d7a GIT binary patch literal 121420 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 MoI9O+>eB811IsS_tpET3 literal 0 HcmV?d00001