From e790eb2270542e1c148c158fdb8cb8b06608a26d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Penas=20D=C3=ADaz?= Date: Tue, 9 Jun 2026 10:22:57 +0200 Subject: [PATCH 1/5] Create Changelog for dingtek-dc413 --- dingtek-dc413/CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 dingtek-dc413/CHANGELOG.md diff --git a/dingtek-dc413/CHANGELOG.md b/dingtek-dc413/CHANGELOG.md new file mode 100644 index 000000000..d86775c7c --- /dev/null +++ b/dingtek-dc413/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## 1.0.0 - 2026-06-09 + +- First version of plugin \ No newline at end of file From a4121aae40a1bface1bf0aa7f280ca7a43b1f5de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Penas=20D=C3=ADaz?= Date: Tue, 9 Jun 2026 10:22:58 +0200 Subject: [PATCH 2/5] Create LICENSE for dingtek-dc413 --- dingtek-dc413/LICENSE.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 dingtek-dc413/LICENSE.md diff --git a/dingtek-dc413/LICENSE.md b/dingtek-dc413/LICENSE.md new file mode 100644 index 000000000..bffeef341 --- /dev/null +++ b/dingtek-dc413/LICENSE.md @@ -0,0 +1,7 @@ +Copyright 2026 Thinger.io + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file From b680ad4a1925f8371bb73cdd58764faaa9f805b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Penas=20D=C3=ADaz?= Date: Tue, 9 Jun 2026 10:23:20 +0200 Subject: [PATCH 3/5] Upload image dingtek-dc413 --- dingtek-dc413/assets/dc413.png | Bin 0 -> 54528 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 dingtek-dc413/assets/dc413.png diff --git a/dingtek-dc413/assets/dc413.png b/dingtek-dc413/assets/dc413.png new file mode 100644 index 0000000000000000000000000000000000000000..d2a5322ec98beeb82d7d3252e1ad71005e8498dc GIT binary patch literal 54528 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 literal 0 HcmV?d00001 From 73bcbc9f64f1e205d38a331801db34b2e35e9070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Penas=20D=C3=ADaz?= Date: Tue, 9 Jun 2026 10:24:43 +0200 Subject: [PATCH 4/5] Create README for dingtek-dc413 --- dingtek-dc413/README.md | 59 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 dingtek-dc413/README.md diff --git a/dingtek-dc413/README.md b/dingtek-dc413/README.md new file mode 100644 index 000000000..683ca98ed --- /dev/null +++ b/dingtek-dc413/README.md @@ -0,0 +1,59 @@ +# DC413 - Manhole Sensor + +The CNDingtek DC413 is a smart manhole sensor that integrates a liquid/solid level sensor and a movement sensor. Suitable for measuring water and sewage levels in wells and manholes. The data is sent to a LoRaWAN network, then the application server for further processing. + +## Features + +- **Dual Sensing Technology**: Combines manhole cover status detection and ultrasonic water/sewage level monitoring in a single device +- **Cover Movement Detection**: Monitors cover movement and abnormal opening using acceleration detection +- **Ultrasonic Level Monitoring**: Measures water and sewage levels inside manholes and drainage wells +- **IP68 Protection**: Fully waterproof outdoor enclosure for harsh environments +- **LoRaWAN Connectivity**: Long-range wireless transmission for remote monitoring +- **Compact Design**: 119 x 119 x 40 mm dimensions, 450g weight +- **Operating Temperature**: -20°C to 70°C +- **Durable Construction**: ABS material in black color + +## Use Cases + +- Municipal manhole cover safety monitoring +- Urban drainage system level monitoring +- Sewage overflow prevention and early warning +- Smart city infrastructure management +- Flood risk detection in drainage networks +- Theft and unauthorized access detection + +## Thinger.io Integration + +The DC413 manhole sensor integrates seamlessly with Thinger.io through LoRaWAN network servers, enabling real-time monitoring of manhole cover status and water levels with automated alerts and historical trend analysis. + +## Requirements + +A LoRaWAN server is required to communicate the CNDingtek DC413 into Thinger.io, some options are: + +- [The Things Stack](https://www.thethingsindustries.com/stack/) +- [LORIOT](https://loriot.io/) +- [ChirpStack](https://www.chirpstack.io/) + +Alongside, the corresponding plugin for the selected LoRaWAN server needs to be installed in your Thinger.io instance. + +## Get Started + +### Installation + +Look for the plugin in the [Thinger.io Plugin Store](https://marketplace.thinger.io/) and install it in your Thinger.io instance. Once the plugin is installed a new Product will be created for this device. + +### Configuration + +The Product is already preconfigured, check that the auto provision prefix matches the one selected in your LoRaWAN server plugin in Thinger.io, or change it to your desire. + +### Usage + +Start sending uplinks for autoprovisioning devices and buckets. This product also provides a predefined dashboard and downlinks. + +## Additional Resources + +CNDingtek resources can be found at: + +- [Product Page](https://www.dingtek.com/manhole-sensor-dc413) +- [Device Repository](https://www.thethingsnetwork.org/device-repository/devices/dingtek/dc413) +- [Thinger docs](https://docs.thinger.io) \ No newline at end of file From 039923ebe88004b6a70e363a2c597a5b075be2b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Penas=20D=C3=ADaz?= Date: Tue, 9 Jun 2026 10:25:46 +0200 Subject: [PATCH 5/5] Create plugin.json for dingtek-dc413 --- dingtek-dc413/plugin.json | 125 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 dingtek-dc413/plugin.json diff --git a/dingtek-dc413/plugin.json b/dingtek-dc413/plugin.json new file mode 100644 index 000000000..5d11127d0 --- /dev/null +++ b/dingtek-dc413/plugin.json @@ -0,0 +1,125 @@ +{ + "name": "dingtek_dc413", + "version": "1.0.0", + "description": "The CNDingtek dc413 is a smart manhole sensor that integrates a liquid/solid level sensor and a movement sensor. Suitable for measuring water and sewage levels in wells and manholes. The data is sent to a LoRaWAN network, then the application server for f", + "author": "Thinger.io", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/thinger-io/plugins.git", + "directory": "dingtek-dc413" + }, + "metadata": { + "name": "Dingtek DC413", + "description": "The CNDingtek dc413 is a smart manhole sensor that integrates a liquid/solid level sensor and a movement sensor. Suitable for measuring water and sewage levels in wells and manholes. The data is sent to a LoRaWAN network, then the application server for f", + "image": "assets/dc413.png", + "category": "devices", + "vendor": "dingtek" + }, + "resources": { + "products": [ + { + "description": "The CNDingtek dc413 is a smart manhole sensor that integrates a liquid/solid level sensor and a movement sensor. Suitable for measuring water and sewage levels in wells and manholes. The data is sent to a LoRaWAN network, then the application server for f", + "enabled": true, + "name": "Dingtek DC413", + "product": "dingtek_dc413", + "profile": { + "api": { + "downlink": { + "enabled": true, + "handle_connectivity": false, + "request": { + "data": { + "path": "/downlink", + "payload": "{\n \"data\" : \"{{payload.data=\"\"}}\",\n \"port\" : {{payload.port=3}},\n \"priority\": {{payload.priority=3}},\n \"confirmed\" : {{payload.confirmed=false}},\n \"uplink\" : {{property.uplink}} \n}", + "payload_function": "", + "payload_type": "", + "plugin": "{{property.uplink.source}}", + "target": "plugin_endpoint" + } + } + }, + "uplink": { + "device_id_resolver": "getId", + "enabled": true, + "handle_connectivity": true, + "request": { + "data": { + "payload": "{{payload}}", + "payload_function": "", + "payload_type": "source_payload", + "resource_stream": "uplink", + "target": "resource_stream" + } + } + } + }, + "buckets": { + "dingtek_dc413_data": { + "backend": "mongodb", + "data": { + "payload": "{{payload}}", + "payload_function": "", + "payload_type": "source_payload", + "resource_stream": "uplink_decoded", + "source": "resource_stream" + }, + "enabled": true, + "retention": { + "period": 3, + "unit": "months" + }, + "tags": [] + } + }, + "code": { + "code": "function decodeThingerUplink(thingerData) {\n // 0. If data has already been decoded, we will return it\n if (thingerData.decodedPayload) return thingerData.decodedPayload;\n \n // 1. Extract and Validate Input\n // We need 'payload' (hex string) and 'fPort' (integer)\n const hexPayload = thingerData.payload || \"\";\n const port = thingerData.fPort || 1;\n\n // 2. Convert Hex String to Byte Array\n const bytes = [];\n for (let i = 0; i < hexPayload.length; i += 2) {\n bytes.push(parseInt(hexPayload.substr(i, 2), 16));\n }\n\n // 3. Dynamic Function Detection and Execution\n \n // CASE A: (The Things Stack v3)\n if (typeof decodeUplink === 'function') {\n try {\n const input = {\n bytes: bytes,\n fPort: port\n };\n var result = decodeUplink(input);\n \n if (result.data) return result.data;\n\n return result; \n } catch (e) {\n console.error(\"Error inside decodeUplink:\", e);\n throw e;\n }\n }\n\n // CASE B: Legacy TTN (v2)\n else if (typeof Decoder === 'function') {\n try {\n return Decoder(bytes, port);\n } catch (e) {\n console.error(\"Error inside Decoder:\", e);\n throw e;\n }\n }\n\n // CASE C: No decoder found\n else {\n throw new Error(\"No compatible TTN decoder function (decodeUplink or Decoder) found in scope.\");\n }\n}\n\n\n// TTN decoder\nvar units = [' ℃', ' hours', ' minutes', ' mm', ' °', ' cm'];\n//IEEE754 hex to float convert\nfunction hex2float(num) {\n var sign = num & 0x80000000 ? -1 : 1;\n var exponent = ((num >> 23) & 0xff) - 127;\n var mantissa = 1 + (num & 0x7fffff) / 0x7fffff;\n return sign * mantissa * Math.pow(2, exponent);\n}\n\nfunction decodeUplink(input) {\n if (input.fPort != 3) {\n return {\n errors: ['unknown FPort'],\n };\n }\n\n switch (input.bytes.length) {\n case 17:\n return {\n // Decoded data\n data: {\n level: (input.bytes[5] << 8) + input.bytes[6],\n alarmLevel: Boolean(input.bytes[11] >> 4),\n alarmFall: Boolean(input.bytes[12] >> 4),\n alarmBattery: Boolean(input.bytes[12] & 0x0f),\n angle: input.bytes[9] & (0x0f === 0x00) ? input.bytes[10] : 0 - input.bytes[10],\n temperature: input.bytes[8],\n frameCounter: (input.bytes[13] << 8) + input.bytes[14],\n },\n };\n case 25:\n var data_type = input.bytes[3];\n if (data_type === 0x03) {\n return {\n // Decoded parameter\n data: {\n firmware: input.bytes[5] + '.' + input.bytes[6],\n uploadInterval: input.bytes[7],\n detectInterval: input.bytes[8],\n levelThreshold: input.bytes[9], \n fallThreshold: input.bytes[11],\n fallEnable: Boolean(input.bytes[12]),\n workMode: input.bytes[14],\n },\n };\n }\n default:\n return {\n errors: ['wrong length'],\n };\n }\n}\n\nfunction encodeDownlink(input) {\n if (input.data.uploadInterval != null && !isNaN(input.data.uploadInterval)) {\n var periodic_interval = input.data.uploadInterval;\n var periodic_interval_high = periodic_interval.toString(16).padStart(2, '0').toUpperCase()[0].charCodeAt(0);\n var periodic_interval_low = periodic_interval.toString(16).padStart(2, '0').toUpperCase()[1].charCodeAt(0);\n if (periodic_interval > 168 || periodic_interval < 1) {\n return {\n errors: ['periodic upload interval range 1-168 hours.'],\n };\n } else {\n return {\n // LoRaWAN FPort used for the downlink message\n fPort: 3,\n // Encoded bytes\n bytes: [0x38, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x30, 0x31, periodic_interval_high, periodic_interval_low, 0x38, 0x31],\n };\n }\n }\n if (input.data.detectInterval != null && !isNaN(input.data.detectInterval)) {\n var detection_interval = input.data.detectInterval;\n var detection_interval_high = detection_interval.toString(16).padStart(2, '0').toUpperCase()[0].charCodeAt(0);\n var detection_interval_low = detection_interval.toString(16).padStart(2, '0').toUpperCase()[1].charCodeAt(0);\n if (detection_interval > 60 || detection_interval < 1) {\n return {\n errors: ['periodic detection interval range 1-60 minutes.'],\n };\n } else {\n return {\n // LoRaWAN FPort used for the downlink message\n fPort: 3,\n // Encoded bytes\n bytes: [0x38, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x30, 0x38, detection_interval_high, detection_interval_low, 0x38, 0x31],\n };\n }\n }\n if (input.data.levelThreshold != null && !isNaN(input.data.levelThreshold)) {\n var full_alarm_threshold = input.data.levelThreshold;\n var full_alarm_threshold_high = full_alarm_threshold.toString(16).padStart(2, '0').toUpperCase()[0].charCodeAt(0);\n var full_alarm_threshold_low = full_alarm_threshold.toString(16).padStart(2, '0').toUpperCase()[1].charCodeAt(0);\n if (full_alarm_threshold > 255 || full_alarm_threshold < 15) {\n return {\n errors: ['full alarm threshold range 15-255 cm.'],\n };\n } else {\n return {\n // LoRaWAN FPort used for the downlink message\n fPort: 3,\n // Encoded bytes\n bytes: [0x38, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x30, 0x32, full_alarm_threshold_high, full_alarm_threshold_low, 0x38, 0x31],\n };\n }\n }\n\n if (input.data.fallThreshold != null && !isNaN(input.data.fallThreshold)) {\n var tilt_alarm_threshold = input.data.fallThreshold;\n var tilt_alarm_threshold_high = tilt_alarm_threshold.toString(16).padStart(2, '0').toUpperCase()[0].charCodeAt(0);\n var tilt_alarm_threshold_low = tilt_alarm_threshold.toString(16).padStart(2, '0').toUpperCase()[1].charCodeAt(0);\n if (tilt_alarm_threshold > 90 || tilt_alarm_threshold < 15) {\n return {\n errors: ['tilt alarm threshold range 15-90 °.'],\n };\n } else {\n return {\n // LoRaWAN FPort used for the downlink message\n fPort: 3,\n // Encoded bytes\n bytes: [0x38, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x30, 0x34, tilt_alarm_threshold_high, tilt_alarm_threshold_low, 0x38, 0x31],\n };\n }\n }\n if (input.data.fallEnable != null && input.data.fallEnable === !!input.data.fallEnable) {\n var tilt_enable = input.data.fallEnable;\n if (tilt_enable === true) {\n return {\n // LoRaWAN FPort used for the downlink message\n fPort: 3,\n // Encoded bytes\n bytes: [0x38, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x30, 0x39, 0x30, 0x41, 0x38, 0x31],\n };\n } else {\n return {\n // LoRaWAN FPort used for the downlink message\n fPort: 3,\n // Encoded bytes\n bytes: [0x38, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x30, 0x39, 0x30, 0x39, 0x38, 0x31],\n };\n }\n } \n return {\n errors: ['invalid downlink parameter.'],\n };\n}\n\nfunction decodeDownlink(input) {\n var input_length = input.bytes.length;\n if (input.fPort != 3) {\n return {\n errors: ['invalid FPort.'],\n };\n }\n\n if (\n input_length < 12 ||\n input.bytes[0] != 0x38 ||\n input.bytes[1] != 0x30 ||\n input.bytes[2] != 0x30 ||\n input.bytes[3] != 0x32 ||\n input.bytes[4] != 0x39 ||\n input.bytes[5] != 0x39 ||\n input.bytes[6] != 0x39 ||\n input.bytes[7] != 0x39 ||\n input.bytes[input_length - 2] != 0x38 ||\n input.bytes[input_length - 1] != 0x31\n ) {\n return {\n errors: ['invalid format.'],\n };\n }\n var option = parseInt(String.fromCharCode(input.bytes[8]) + String.fromCharCode(input.bytes[9]), 16);\n var value = parseInt(String.fromCharCode(input.bytes[10]) + String.fromCharCode(input.bytes[11]), 16);\n switch (option) {\n case 1:\n return {\n data: {\n uploadInterval: value,\n },\n };\n case 8:\n return {\n data: {\n detectInterval: value,\n },\n };\n case 2:\n return {\n data: {\n levelThreshold: value,\n },\n };\n case 4:\n return {\n data: {\n fallThreshold: value,\n },\n };\n case 9:\n switch (value) { \n case 0x09:\n return {\n data: {\n fallEnable: false,\n },\n };\n case 0x0a:\n return {\n data: {\n fallEnable: true,\n },\n };\n default:\n return {\n errors: ['invalid parameter value.'],\n };\n }\n default:\n return {\n errors: ['invalid parameter key.'],\n };\n }\n}\n", + "environment": "javascript", + "storage": "", + "version": "1.0" + }, + "flows": { + "dingtek_dc413_decoder": { + "data": { + "payload": "{{payload}}", + "payload_function": "decodeThingerUplink", + "payload_type": "source_payload", + "resource": "uplink", + "source": "resource", + "update": "events" + }, + "enabled": true, + "sink": { + "payload": "{{payload}}", + "payload_function": "", + "payload_type": "source_payload", + "resource_stream": "uplink_decoded", + "target": "resource_stream" + }, + "split_data": false + } + }, + "properties": { + "uplink": { + "data": { + "payload": "{{payload}}", + "payload_function": "", + "payload_type": "source_payload", + "resource": "uplink", + "source": "resource", + "update": "events" + }, + "default": { + "source": "value" + }, + "enabled": true + } + } + }, + "_resources": { + "properties": [] + } + } + ] + } +} \ No newline at end of file