iobroker.tidy 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 skvarel <skvarel@inventwo.com>
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 skvarel <skvarel@inventwo.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,178 +1,182 @@
1
- ![Logo](admin/tidy.svg)
2
-
3
- ## tidy adapter for ioBroker
4
-
5
- ![Number of Installations](https://iobroker.live/badges/tidy-installed.svg)
6
- ![Current version in stable repository](https://iobroker.live/badges/tidy-stable.svg)
7
- [![NPM Version](https://nodei.co/npm/iobroker.tidy.svg?style=shields&data=v,u,d&color=orange)](https://www.npmjs.com/package/iobroker.tidy)
8
- [![Downloads](https://img.shields.io/npm/dm/iobroker.tidy.svg)](https://www.npmjs.com/package/iobroker.tidy)
9
-
10
- [![Paypal Donation](https://img.shields.io/badge/paypal-donate%20|%20spenden-green.svg)](https://www.paypal.com/donate/?hosted_button_id=7W6M3TFZ4W9LW)
11
-
12
- ## What this adapter does
13
-
14
- The **Tidy** adapter helps to find unused objects and states to clean up your system. After years of using ioBroker, your system may accumulate "dead" datapoints from deleted scripts, removed adapters, or abandoned configurations. This adapter helps you identify and clean up such datapoints to keep your system tidy and performant.
15
-
16
- ## Features
17
-
18
- - **📊 Path-based scanning**: Configure multiple paths to scan (e.g., `0_userdata.0`, `alias.0`)
19
- - **🔍 Smart detection**: Identifies different types of problematic datapoints:
20
- - **Dead**: Never updated or extremely old (configurable threshold, default: 365 days)
21
- - **Stale**: Not updated recently (configurable threshold, default: 90 days)
22
- - **Orphaned aliases**: Aliases pointing to non-existent target datapoints
23
- - **Undefined**: Datapoints that were never written to since system start
24
- - **⚙️ Flexible configuration**:
25
- - Configurable age thresholds for "stale" and "dead" detection
26
- - Optional automatic scanning at configurable intervals (hourly)
27
- - Enable/disable individual scan paths
28
- - **🎯 Manual triggers**: Each configured path gets a trigger button to run scans on demand
29
- - **📋 JSON table output**: Results are provided as JSON arrays, perfect for table widgets in VIS
30
- - **📈 Statistics**: Automatic counters for total, dead, stale, and orphaned datapoints
31
-
32
- ## Configuration
33
-
34
- ### General Settings
35
-
36
- - **Enable automatic scans**: When enabled, all configured paths are scanned automatically
37
- - **Scan interval**: How often automatic scans should run (in hours, minimum 1)
38
- - **Days until 'stale'**: Datapoints not updated for this many days are marked as stale (warning)
39
- - **Days until 'dead'**: Datapoints not updated for this many days are marked as dead (critical)
40
-
41
- ### Scan Paths
42
-
43
- Configure one or more paths to monitor:
44
-
45
- - **Enabled**: Enable/disable this scan path
46
- - **Path**: The root path to scan (e.g., `0_userdata.0`, `alias.0`, `javascript.0`)
47
- - **Name**: A friendly name for this path (used for result state naming)
48
- - **Check alias targets**: For `alias.*` paths, check if target datapoints still exist (ghost detection)
49
-
50
- ## Data Points
51
-
52
- For each configured path (e.g., "userdata"), the adapter creates:
53
-
54
- - **`tidy.0.userdata.trigger`** (button): Click to manually start a scan
55
- - **`tidy.0.userdata.result`** (json): Complete scan results as JSON table
56
- - **`tidy.0.userdata.lastScan`** (timestamp): When the last scan was performed
57
- - **`tidy.0.userdata.count`** (number): Total datapoints found
58
- - **`tidy.0.userdata.deadCount`** (number): Number of dead datapoints
59
- - **`tidy.0.userdata.staleCount`** (number): Number of stale datapoints
60
- - **`tidy.0.userdata.orphanedCount`** (number): Number of orphaned aliases
61
-
62
- ### JSON Result Structure
63
-
64
- The `result` state contains a JSON array with the following fields for each datapoint:
65
-
66
- ```json
67
- [
68
- {
69
- "id": "0_userdata.0.hallway.light_auto",
70
- "name": "Hallway Light Automation",
71
- "last_ts": 1712856000000,
72
- "last_ts_iso": "4/11/2026, 6:00:00 PM",
73
- "value": true,
74
- "status": "active",
75
- "issue": null,
76
- "size": 4
77
- },
78
- {
79
- "id": "0_userdata.0.test.old_value",
80
- "name": "Test Datapoint",
81
- "last_ts": null,
82
- "last_ts_iso": "undefined",
83
- "value": 15,
84
- "status": "undefined",
85
- "issue": "dead",
86
- "size": 2
87
- }
88
- ]
89
- ```
90
-
91
- **Field descriptions:**
92
-
93
- | Field | Description | Purpose |
94
- |-------|-------------|---------|
95
- | `id` | Full datapoint path | Unique identification |
96
- | `name` | common.name or last part of ID | User-friendly name |
97
- | `last_ts` | Unix timestamp (ms) or null | Sorting in background |
98
- | `last_ts_iso` | Formatted date string | Display in table |
99
- | `value` | Current datapoint value | Final check before deletion |
100
- | `status` | `active`, `dead`, `stale`, `undefined`, `orphaned` | Classification (English) |
101
- | `status_de` | `aktiv`, `inaktiv`, `veraltet`, `undefiniert`, `verwaist` | Classification (German) |
102
- | `issue` | `dead`, `stale`, `orphaned_alias`, or `null` | Filter criterion (null = OK) |
103
- | `issue_de` | `inaktiv`, `veraltet`, `verwaistes Alias`, or `null` | Filter criterion (German) |
104
- | `size` | `JSON.stringify(val).length` | Finds "storage hogs" |
105
-
106
- ## Usage Examples
107
-
108
- ### Basic Setup
109
-
110
- 1. Install and configure the adapter
111
- 2. Add a path to scan (e.g., `0_userdata.0`)
112
- 3. Give it a name (e.g., "userdata")
113
- 4. Save configuration
114
- 5. The adapter will immediately perform an initial scan
115
- 6. View results in `tidy.0.userdata.result`
116
-
117
- ### VIS Integration
118
-
119
- Use the JSON result with a table widget to display and sort your datapoints:
120
-
121
- 1. Create a table widget in VIS (e.g., inventwo Table Widget)
122
- 2. Bind it to `tidy.0.userdata.result`
123
- 3. Configure columns:
124
- - For **German** tables: `id`, `name`, `last_ts_iso`, `status_de`, `issue_de`
125
- - For **English** tables: `id`, `name`, `last_ts_iso`, `status`, `issue`
126
- 4. Sort by `last_ts` (oldest first) to find the "deadest" datapoints
127
- 5. Filter by `issue != null` to show only problematic datapoints
128
-
129
- ### Automatic Maintenance
130
-
131
- 1. Enable "automatic scans" in settings
132
- 2. Set interval to 24 hours (once daily)
133
- 3. Monitor `deadCount` and `staleCount` statistics
134
- 4. Review results weekly to identify cleanup candidates
135
-
136
- ## Support
137
-
138
- If you like our work and would like to support us, we appreciate any donation.
139
- (This link leads to our PayPal account and is not affiliated with ioBroker.)
140
-
141
- [![Donate](img/support.png)](https://www.paypal.com/donate?hosted_button_id=7W6M3TFZ4W9LW)
142
-
143
- ## Changelog
144
- <!--
145
- ### **WORK IN PROGRESS**
1
+ ![Logo](admin/tidy.svg)
2
+
3
+ ## tidy adapter for ioBroker
4
+
5
+ ![Number of Installations](https://iobroker.live/badges/tidy-installed.svg)
6
+ ![Current version in stable repository](https://iobroker.live/badges/tidy-stable.svg)
7
+ [![NPM Version](https://nodei.co/npm/iobroker.tidy.svg?style=shields&data=v,u,d&color=orange)](https://www.npmjs.com/package/iobroker.tidy)
8
+ [![Downloads](https://img.shields.io/npm/dm/iobroker.tidy.svg)](https://www.npmjs.com/package/iobroker.tidy)
9
+
10
+ [![Paypal Donation](https://img.shields.io/badge/paypal-donate%20|%20spenden-green.svg)](https://www.paypal.com/donate/?hosted_button_id=7W6M3TFZ4W9LW)
11
+
12
+ ## What this adapter does
13
+
14
+ The **Tidy** adapter helps to find unused objects and states to clean up your system. After years of using ioBroker, your system may accumulate "dead" datapoints from deleted scripts, removed adapters, or abandoned configurations. This adapter helps you identify and clean up such datapoints to keep your system tidy and performant.
15
+
16
+ ## Features
17
+
18
+ - **📊 Path-based scanning**: Configure multiple paths to scan (e.g., `0_userdata.0`, `alias.0`)
19
+ - **🔍 Smart detection**: Identifies different types of problematic datapoints:
20
+ - **Dead**: Never updated or extremely old (configurable threshold, default: 365 days)
21
+ - **Stale**: Not updated recently (configurable threshold, default: 90 days)
22
+ - **Orphaned aliases**: Aliases pointing to non-existent target datapoints
23
+ - **Undefined**: Datapoints that were never written to since system start
24
+ - **⚙️ Flexible configuration**:
25
+ - Configurable age thresholds for "stale" and "dead" detection
26
+ - Optional automatic scanning at configurable intervals (hourly)
27
+ - Enable/disable individual scan paths
28
+ - **🎯 Manual triggers**: Each configured path gets a trigger button to run scans on demand
29
+ - **📋 JSON table output**: Results are provided as JSON arrays, perfect for table widgets in VIS
30
+ - **📈 Statistics**: Automatic counters for total, dead, stale, and orphaned datapoints
31
+
32
+ ## Configuration
33
+
34
+ ### General Settings
35
+
36
+ - **Enable automatic scans**: When enabled, all configured paths are scanned automatically
37
+ - **Scan interval**: How often automatic scans should run (in hours, minimum 1)
38
+ - **Days until 'stale'**: Datapoints not updated for this many days are marked as stale (warning)
39
+ - **Days until 'dead'**: Datapoints not updated for this many days are marked as dead (critical)
40
+
41
+ ### Scan Paths
42
+
43
+ Configure one or more paths to monitor:
44
+
45
+ - **Enabled**: Enable/disable this scan path
46
+ - **Path**: The root path to scan (e.g., `0_userdata.0`, `alias.0`, `javascript.0`)
47
+ - **Name**: A friendly name for this path (used for result state naming)
48
+ - **Check alias targets**: For `alias.*` paths, check if target datapoints still exist (ghost detection)
49
+
50
+ ## Data Points
51
+
52
+ For each configured path (e.g., "userdata"), the adapter creates:
53
+
54
+ - **`tidy.0.userdata.trigger`** (button): Click to manually start a scan
55
+ - **`tidy.0.userdata.result`** (json): Complete scan results as JSON table
56
+ - **`tidy.0.userdata.lastScan`** (timestamp): When the last scan was performed
57
+ - **`tidy.0.userdata.count`** (number): Total datapoints found
58
+ - **`tidy.0.userdata.deadCount`** (number): Number of dead datapoints
59
+ - **`tidy.0.userdata.staleCount`** (number): Number of stale datapoints
60
+ - **`tidy.0.userdata.orphanedCount`** (number): Number of orphaned aliases
61
+
62
+ ### JSON Result Structure
63
+
64
+ The `result` state contains a JSON array with the following fields for each datapoint:
65
+
66
+ ```json
67
+ [
68
+ {
69
+ "id": "0_userdata.0.hallway.light_auto",
70
+ "name": "Hallway Light Automation",
71
+ "last_ts": 1712856000000,
72
+ "last_ts_iso": "4/11/2026, 6:00:00 PM",
73
+ "value": true,
74
+ "status": "active",
75
+ "issue": null,
76
+ "size": 4
77
+ },
78
+ {
79
+ "id": "0_userdata.0.test.old_value",
80
+ "name": "Test Datapoint",
81
+ "last_ts": null,
82
+ "last_ts_iso": "undefined",
83
+ "value": 15,
84
+ "status": "undefined",
85
+ "issue": "dead",
86
+ "size": 2
87
+ }
88
+ ]
89
+ ```
90
+
91
+ **Field descriptions:**
92
+
93
+ | Field | Description | Purpose |
94
+ |-------|-------------|---------|
95
+ | `id` | Full datapoint path | Unique identification |
96
+ | `name` | common.name or last part of ID | User-friendly name |
97
+ | `last_ts` | Unix timestamp (ms) or null | Sorting in background |
98
+ | `last_ts_iso` | Formatted date string | Display in table |
99
+ | `value` | Current datapoint value | Final check before deletion |
100
+ | `status` | `active`, `dead`, `stale`, `undefined`, `orphaned` | Classification (English) |
101
+ | `status_de` | `aktiv`, `inaktiv`, `veraltet`, `undefiniert`, `verwaist` | Classification (German) |
102
+ | `issue` | `dead`, `stale`, `orphaned_alias`, or `null` | Filter criterion (null = OK) |
103
+ | `issue_de` | `inaktiv`, `veraltet`, `verwaistes Alias`, or `null` | Filter criterion (German) |
104
+ | `size` | `JSON.stringify(val).length` | Finds "storage hogs" |
105
+
106
+ ## Usage Examples
107
+
108
+ ### Basic Setup
109
+
110
+ 1. Install and configure the adapter
111
+ 2. Add a path to scan (e.g., `0_userdata.0`)
112
+ 3. Give it a name (e.g., "userdata")
113
+ 4. Save configuration
114
+ 5. The adapter will immediately perform an initial scan
115
+ 6. View results in `tidy.0.userdata.result`
116
+
117
+ ### VIS Integration
118
+
119
+ Use the JSON result with a table widget to display and sort your datapoints:
120
+
121
+ 1. Create a table widget in VIS (e.g., inventwo Table Widget)
122
+ 2. Bind it to `tidy.0.userdata.result`
123
+ 3. Configure columns:
124
+ - For **German** tables: `id`, `name`, `last_ts_iso`, `status_de`, `issue_de`
125
+ - For **English** tables: `id`, `name`, `last_ts_iso`, `status`, `issue`
126
+ 4. Sort by `last_ts` (oldest first) to find the "deadest" datapoints
127
+ 5. Filter by `issue != null` to show only problematic datapoints
128
+
129
+ ### Automatic Maintenance
130
+
131
+ 1. Enable "automatic scans" in settings
132
+ 2. Set interval to 24 hours (once daily)
133
+ 3. Monitor `deadCount` and `staleCount` statistics
134
+ 4. Review results weekly to identify cleanup candidates
135
+
136
+ ## Support
137
+
138
+ If you like our work and would like to support us, we appreciate any donation.
139
+ (This link leads to our PayPal account and is not affiliated with ioBroker.)
140
+
141
+ [![Donate](img/support.png)](https://www.paypal.com/donate?hosted_button_id=7W6M3TFZ4W9LW)
142
+
143
+ ## Changelog
144
+ <!--
145
+ ### **WORK IN PROGRESS**
146
146
  -->
147
- ### 0.1.0 (2026-04-17)
147
+ ### 0.1.1 (2026-04-18)
148
+ - (skvarel) Changed name of result field to optional
149
+ - (skvarel) Revised config
150
+
151
+ ### 0.1.0 (2026-04-17)
148
152
  - (skvarel) Added option for complete scan
149
153
 
150
- ### 0.0.1 (2026-04-14)
154
+ ### 0.0.1 (2026-04-14)
151
155
  - (skvarel) initial release
152
156
 
153
- ## Older changes
154
- - [CHANGELOG_OLD.md](CHANGELOG_OLD.md)
155
-
156
- ## License
157
-
158
- MIT License
159
-
160
- Copyright (c) 2026 skvarel <skvarel@inventwo.com>
161
-
162
- Permission is hereby granted, free of charge, to any person obtaining a copy
163
- of this software and associated documentation files (the "Software"), to deal
164
- in the Software without restriction, including without limitation the rights
165
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
166
- copies of the Software, and to permit persons to whom the Software is
167
- furnished to do so, subject to the following conditions:
168
-
169
- The above copyright notice and this permission notice shall be included in all
170
- copies or substantial portions of the Software.
171
-
172
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
173
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
174
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
175
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
176
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
177
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
157
+ ## Older changes
158
+ - [CHANGELOG_OLD.md](CHANGELOG_OLD.md)
159
+
160
+ ## License
161
+
162
+ MIT License
163
+
164
+ Copyright (c) 2026 skvarel <skvarel@inventwo.com>
165
+
166
+ Permission is hereby granted, free of charge, to any person obtaining a copy
167
+ of this software and associated documentation files (the "Software"), to deal
168
+ in the Software without restriction, including without limitation the rights
169
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
170
+ copies of the Software, and to permit persons to whom the Software is
171
+ furnished to do so, subject to the following conditions:
172
+
173
+ The above copyright notice and this permission notice shall be included in all
174
+ copies or substantial portions of the Software.
175
+
176
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
177
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
178
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
179
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
180
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
181
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
178
182
  SOFTWARE.
@@ -12,6 +12,7 @@
12
12
  "Each scan result contains a JSON array with the following fields per datapoint:": "Jedes Scanergebnis enthält ein JSON-Array mit den folgenden 10 Feldern pro Datenpunkt:",
13
13
  "Enable automatic scans": "Automatisches Scannen aktivieren",
14
14
  "Enabled": "Aktiviert",
15
+ "Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional.": "Gib hier den vollständigen Pfad ein, z.B. 0_userdata.0. Ordner (Typ: Ordner) müssen manuell eingegeben werden. Die Instanznummer ist optional.",
15
16
  "Feldbeschreibungen (Deutsch):": "Feldbeschreibungen (Deutsch):",
16
17
  "Field": "Schlüssel",
17
18
  "Field descriptions": "Feldbeschreibungen",
@@ -22,10 +23,12 @@
22
23
  "General Settings": "Allgemeine Einstellungen",
23
24
  "Help & Documentation": "Hilfe & Dokumentation",
24
25
  "How often the automatic scan should run (minimum 1 hour)": "Wie oft der automatische Scan ausgeführt werden soll (mindestens 1 Stunde)",
25
- "If enabled, the adapter will scan the entire object tree and store the result in a separate 'complete' result channel.": "Wenn aktiviert, scannt der Adapter den gesamten Objektbaum und speichert das Ergebnis in einem separaten 'complete'-Kanal.",
26
+ "If enabled, the adapter will scan the entire object tree and store the result in a separate 'complete' result channel.": "Wenn aktiviert, scannt der Adapter den gesamten Objektbaum und speichert das Ergebnis in einem separaten 'complete'-Verzeichnis.",
26
27
  "JSON Table Field Description": "JSON-Tabellen-Feldbeschreibung",
27
28
  "Name (for result state)": "Name (für Ergebnis-Datenpunkt)",
28
- "Path (e.g. 0_userdata.0 or alias.0)": "Pfad (z.B. 0_userdata.0 oder alias.0)",
29
+ "Name (for result state, optional)": "Name (für Ergebnis-Datenpunkt, optional)",
30
+ "Optional. If empty, the path will be used as name.": "Optional. Wenn leer, wird der Pfad als Name verwendet.",
31
+ "Path (e.g. 0_userdata.0 or alias.0 - The instance number is optional.)": "Pfad (z. B. 0_userdata.0 oder alias.0 – Die Instanznummer ist optional.)",
29
32
  "Path Configuration": "Pfad-Konfiguration",
30
33
  "Paths to scan": "Zu scannende Pfade",
31
34
  "Purpose": "Zweck",
@@ -1,35 +1,37 @@
1
- {
2
- "Automatic Scanning": "Automatic Scanning",
3
- "Check alias targets": "Check alias targets",
4
- "Configure which paths to scan for unused datapoints. Each path will get its own result state with a JSON table.": "Configure which paths to scan for unused datapoints. Each path will get its own result state with a JSON table.",
5
- "Days until 'dead' (critical)": "Days until 'dead' (critical)",
6
- "Days until 'stale' (warning)": "Days until 'stale' (warning)",
7
- "Datapoints not updated for this many days are marked as 'dead'": "Datapoints not updated for this many days are marked as 'dead'",
8
- "Datapoints not updated for this many days are marked as 'stale'": "Datapoints not updated for this many days are marked as 'stale'",
9
- "Detection Thresholds": "Detection Thresholds",
10
- "Each scan result contains a JSON array with the following fields per datapoint:": "Each scan result contains a JSON array with the following 10 fields per datapoint:",
11
- "Enable automatic scans": "Enable automatic scans",
12
- "Scan all objects (complete)": "Scan all objects (complete)",
13
- "If enabled, the adapter will scan the entire object tree and store the result in a separate 'complete' result channel.": "If enabled, the adapter will scan the entire object tree and store the result in a separate 'complete' result channel.",
14
- "Enabled": "Enabled",
15
- "For German tables: Use status_de and issue_de columns\nFor English tables: Use status and issue columns\n\nFilter by 'issue != null' to show only problematic datapoints.": "For German tables: Use status_de and issue_de columns\nFor English tables: Use status and issue columns\n\nFilter by 'issue != null' to show only problematic datapoints.",
16
- "For alias.* paths: Check if target datapoints exist (ghost detection)": "For alias.* paths: Check if target datapoints exist (ghost detection)",
17
- "General Settings": "General Settings",
18
- "Help & Documentation": "Help & Documentation",
19
- "How often the automatic scan should run (minimum 1 hour)": "How often the automatic scan should run (minimum 1 hour)",
20
- "JSON Table Field Description": "JSON Table Field Description",
21
- "Name (for result state)": "Name (for result state)",
22
- "Path (e.g. 0_userdata.0 or alias.0)": "Path (e.g. 0_userdata.0 or alias.0)",
23
- "Path Configuration": "Path Configuration",
24
- "Paths to scan": "Paths to scan",
25
- "Scan interval (hours)": "Scan interval (hours)",
26
- "Scan Paths": "Scan Paths",
27
- "tidy adapter settings": "Adapter settings for tidy",
28
- "Usage in VIS Widgets": "Usage in VIS Widgets",
29
- "When enabled, all configured paths will be scanned automatically at the specified interval": "When enabled, all configured paths will be scanned automatically at the specified interval",
30
- "Field descriptions": "Field descriptions",
31
- "Purpose": "Purpose",
32
- "Field": "Schlüssel",
33
- "Description": "Description"
34
-
1
+ {
2
+ "Name (for result state, optional)": "Name (for result state, optional)",
3
+ "Optional. If empty, the path will be used as name.": "Optional. If empty, the path will be used as name.",
4
+ "Automatic Scanning": "Automatic Scanning",
5
+ "Check alias targets": "Check alias targets",
6
+ "Configure which paths to scan for unused datapoints. Each path will get its own result state with a JSON table.": "Configure which paths to scan for unused datapoints. Each path will get its own result state with a JSON table.",
7
+ "Days until 'dead' (critical)": "Days until 'dead' (critical)",
8
+ "Days until 'stale' (warning)": "Days until 'stale' (warning)",
9
+ "Datapoints not updated for this many days are marked as 'dead'": "Datapoints not updated for this many days are marked as 'dead'",
10
+ "Datapoints not updated for this many days are marked as 'stale'": "Datapoints not updated for this many days are marked as 'stale'",
11
+ "Detection Thresholds": "Detection Thresholds",
12
+ "Each scan result contains a JSON array with the following fields per datapoint:": "Each scan result contains a JSON array with the following 10 fields per datapoint:",
13
+ "Enable automatic scans": "Enable automatic scans",
14
+ "Scan all objects (complete)": "Scan all objects (complete)",
15
+ "If enabled, the adapter will scan the entire object tree and store the result in a separate 'complete' result channel.": "If enabled, the adapter will scan the entire object tree and store the result in a separate 'complete' result channel.",
16
+ "Enabled": "Enabled",
17
+ "Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional.": "Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional.",
18
+ "For German tables: Use status_de and issue_de columns\nFor English tables: Use status and issue columns\n\nFilter by 'issue != null' to show only problematic datapoints.": "For German tables: Use status_de and issue_de columns\nFor English tables: Use status and issue columns\n\nFilter by 'issue != null' to show only problematic datapoints.",
19
+ "For alias.* paths: Check if target datapoints exist (ghost detection)": "For alias.* paths: Check if target datapoints exist (ghost detection)",
20
+ "General Settings": "General Settings",
21
+ "Help & Documentation": "Help & Documentation",
22
+ "How often the automatic scan should run (minimum 1 hour)": "How often the automatic scan should run (minimum 1 hour)",
23
+ "JSON Table Field Description": "JSON Table Field Description",
24
+ "Name (for result state)": "Name (for result state)",
25
+ "Path (e.g. 0_userdata.0 or alias.0 - The instance number is optional.)": "Path (e.g. 0_userdata.0 or alias.0 - The instance number is optional.)",
26
+ "Path Configuration": "Path Configuration",
27
+ "Paths to scan": "Paths to scan",
28
+ "Scan interval (hours)": "Scan interval (hours)",
29
+ "Scan Paths": "Scan Paths",
30
+ "tidy adapter settings": "Adapter settings for tidy",
31
+ "Usage in VIS Widgets": "Usage in VIS Widgets",
32
+ "When enabled, all configured paths will be scanned automatically at the specified interval": "When enabled, all configured paths will be scanned automatically at the specified interval",
33
+ "Field descriptions": "Field descriptions",
34
+ "Purpose": "Purpose",
35
+ "Field": "Schlüssel",
36
+ "Description": "Description"
35
37
  }
@@ -1,64 +1,37 @@
1
1
  {
2
- "1 - id\nFull datapoint path (unique identification)": "1 - identificación\nRuta completa del punto de datos (identificación única)",
3
- "1 - id\nVollständiger Datenpunkt-Pfad (eindeutige Identifikation)": "1 - identificación\nRuta completa del punto de datos (identificación única)",
4
- "10 - size\nJSON.stringify(val).length (finds storage hogs)": "10 - tamaño\nJSON.stringify(val).length (busca acaparadores de almacenamiento)",
5
- "2 - name\ncommon.name or last part of ID (user-friendly name)": "2 - nombre\nnombre.común o última parte del ID (nombre fácil de usar)",
6
- "3 - last_ts\nUnix timestamp in ms or null (for sorting)": "3 - últimos_ts\nMarca de tiempo de Unix en ms o nulo (para ordenar)",
7
- "4 - last_ts_iso\nFormatted date string (for display in table)": "4 - último_ts_iso\nCadena de fecha formateada (para mostrar en la tabla)",
8
- "5 - value\nCurrent datapoint value (final check before deletion)": "5 - valor\nValor actual del punto de datos (verificación final antes de la eliminación)",
9
- "6 - status\nClassification in English: active, dead, stale, undefined, orphaned": "6 - estado\nClasificación en inglés: activo, muerto, obsoleto, indefinido, huérfano",
10
- "7 - status_de\nClassification in German: aktiv, inaktiv, veraltet, undefiniert, verwaist": "7 - estado_de\nClasificación en alemán: aktiv, inaktiv, veraltet, undefiniert, verwaist",
11
- "8 - issue\nProblem indicator (English): dead, stale, orphaned_alias, or null if OK": "8 - problema\nIndicador de problema (inglés): muerto, obsoleto, alias_huérfano o nulo si está bien",
12
- "9 - issue_de\nProblem indicator (German): inaktiv, veraltet, verwaistes Alias, or null if OK": "9 - número_de\nIndicador de problema (alemán): inaktiv, veraltet, verwaistes Alias o nulo si está bien",
13
- "Automatic Scanning": "Automatic Scanning",
14
- "Check alias targets": "Check alias targets",
2
+ "Automatic Scanning": "Escaneo automático",
3
+ "Check alias targets": "Verificar destinos de alias",
15
4
  "Configure which paths to scan for unused datapoints. Each path will get its own result state with a JSON table.": "Configure qué rutas escanear en busca de puntos de datos no utilizados. Cada ruta obtendrá su propio estado de resultado con una tabla JSON.",
16
- "Datapoints not updated for this many days are marked as 'dead'": "Datapoints not updated for this many days are marked as 'dead'",
17
- "Datapoints not updated for this many days are marked as 'stale'": "Datapoints not updated for this many days are marked as 'stale'",
18
- "Days until 'dead' (critical)": "Days until 'dead' (critical)",
19
- "Days until 'stale' (warning)": "Days until 'stale' (warning)",
5
+ "Datapoints not updated for this many days are marked as 'dead'": "Los puntos de datos que no se actualizan durante tantos días se marcan como \"inactivos\"",
6
+ "Datapoints not updated for this many days are marked as 'stale'": "Los puntos de datos que no se actualizan durante tantos días se marcan como \"obsoletos\"",
7
+ "Days until 'dead' (critical)": "Días hasta la 'muerte' (crítico)",
8
+ "Days until 'stale' (warning)": "Días hasta 'obsoleto' (advertencia)",
20
9
  "Description": "Descripción",
21
- "Detection Thresholds": "Detection Thresholds",
22
- "Each scan result contains a JSON array with the following fields per datapoint:": "Cada resultado del análisis contiene una matriz JSON con los siguientes campos por punto de datos:",
23
- "Each scan result contains a JSON array with the following fields per datapoint:\n\n• id - Full datapoint path (unique identification)\n• name - common.name or last part of ID (user-friendly name)\n• last_ts - Unix timestamp in ms or null (for sorting)\n• last_ts_iso - Formatted date string (for display)\n• value - Current datapoint value (final check before deletion)\n• status - active, dead, stale, undefined, orphaned (classification in English)\n• status_de - aktiv, inaktiv, veraltet, undefiniert, verwaist (classification in German)\n• issue - dead, stale, orphaned_alias, or null (filter criterion in English)\n• issue_de - inaktiv, veraltet, verwaistes Alias, or null (filter criterion in German)\n• size - JSON.stringify(val).length (finds storage hogs)": "Cada resultado del análisis contiene una matriz JSON con los siguientes campos por punto de datos:\n\n• id: ruta completa del punto de datos (identificación única)\n• nombre: nombre.común o última parte del ID (nombre fácil de usar)\n• last_ts: marca de tiempo de Unix en ms o nulo (para ordenar)\n• last_ts_iso: cadena de fecha formateada (para visualización)\n• valor: valor del punto de datos actual (verificación final antes de la eliminación)\n• estado: activo, muerto, obsoleto, indefinido, huérfano (clasificación en inglés)\n• status_de - aktiv, inaktiv, veraltet, undefiniert, verwaist (clasificación en alemán)\n• problema: muerto, obsoleto, alias_huérfano o nulo (criterio de filtro en inglés)\n• issues_de - inaktiv, veraltet, verwaistes Alias o null (criterio de filtrado en alemán)\n• tamaño - JSON.stringify(val).length (busca grandes cantidades de almacenamiento)",
24
- "Enable automatic scans": "Enable automatic scans",
25
- "Enabled": "Enabled",
26
- "Feldbeschreibungen (Deutsch):": "Descripciones de campo (alemán):",
10
+ "Detection Thresholds": "Umbrales de detección",
11
+ "Each scan result contains a JSON array with the following fields per datapoint:": "Cada resultado del análisis contiene una matriz JSON con los siguientes 10 campos por punto de datos:",
12
+ "Enable automatic scans": "Habilitar escaneos automáticos",
13
+ "Enabled": "Activado",
14
+ "Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional.": "Ingrese la ruta completa, p.e. 0_datosdeusuario.0. Las carpetas (tipo: carpeta) deben ingresarse manualmente. El número de instancia es opcional.",
27
15
  "Field": "Schlüssel",
28
16
  "Field descriptions": "Descripciones de campo",
29
- "Field descriptions (English):": "Descripciones de campo (inglés):",
30
- "Field descriptions:": "Descripciones de campo:",
31
- "For German tables, use the '_de' fields (status_de, issue_de) in your VIS widget column configuration. For English tables, use the regular fields (status, issue). Both field sets are always included in the JSON output.": "Para tablas alemanas, utilice los campos '_de' (status_de, issues_de) en la configuración de la columna del widget VIS. Para tablas en inglés, utilice los campos habituales (estado, problema). Ambos conjuntos de campos siempre se incluyen en la salida JSON.",
32
17
  "For German tables: Use status_de and issue_de columns\nFor English tables: Use status and issue columns\n\nFilter by 'issue != null' to show only problematic datapoints.": "Para tablas alemanas: use las columnas status_de y issues_de\nPara tablas en inglés: use columnas de estado y problema\n\nFiltre por 'problema! = nulo' para mostrar solo puntos de datos problemáticos.",
33
- "For alias.* paths: Check if target datapoints exist (ghost detection)": "For alias.* paths: Check if target datapoints exist (ghost detection)",
34
- "General Settings": "General Settings",
18
+ "For alias.* paths: Check if target datapoints exist (ghost detection)": "Para rutas alias.*: compruebe si existen puntos de datos de destino (detección de fantasmas)",
19
+ "General Settings": "Configuraciones generales",
35
20
  "Help & Documentation": "Ayuda y documentación",
36
- "How often the automatic scan should run (minimum 1 hour)": "How often the automatic scan should run (minimum 1 hour)",
21
+ "How often the automatic scan should run (minimum 1 hour)": "Con qué frecuencia debe ejecutarse el análisis automático (mínimo 1 hora)",
37
22
  "If enabled, the adapter will scan the entire object tree and store the result in a separate 'complete' result channel.": "Si está habilitado, el adaptador escaneará todo el árbol de objetos y almacenará el resultado en un canal de resultados \"completo\" separado.",
38
23
  "JSON Table Field Description": "Descripción del campo de la tabla JSON",
39
- "Name (for result state)": "Name (for result state)",
40
- "Path (e.g. 0_userdata.0 or alias.0)": "Path (e.g. 0_userdata.0 or alias.0)",
24
+ "Name (for result state)": "Nombre (para el estado del resultado)",
25
+ "Name (for result state, optional)": "Nombre (para el estado del resultado, opcional)",
26
+ "Optional. If empty, the path will be used as name.": "Opcional. Si está vacía, la ruta se utilizará como nombre.",
27
+ "Path (e.g. 0_userdata.0 or alias.0 - The instance number is optional.)": "Ruta (por ejemplo, 0_userdata.0 o alias.0: el número de instancia es opcional).",
41
28
  "Path Configuration": "Configuración de ruta",
42
- "Paths to scan": "Paths to scan",
29
+ "Paths to scan": "Rutas para escanear",
43
30
  "Purpose": "Objetivo",
44
- "Scan Paths": "Scan Paths",
31
+ "Scan Paths": "Rutas de escaneo",
45
32
  "Scan all objects (complete)": "Escanear todos los objetos (completo)",
46
- "Scan interval (hours)": "Scan interval (hours)",
33
+ "Scan interval (hours)": "Intervalo de escaneo (horas)",
47
34
  "Usage in VIS Widgets": "Uso en widgets de VIS",
48
- "When enabled, all configured paths will be scanned automatically at the specified interval": "When enabled, all configured paths will be scanned automatically at the specified interval",
49
- "tidy adapter settings": "Adapter settings for tidy",
50
- "• id\n Full datapoint path (unique identification)": "• identificación\n Ruta completa del punto de datos (identificación única)",
51
- "• id - Full datapoint path\n• name - common.name or last part of ID\n• last_ts - Unix timestamp (ms) or null\n• last_ts_iso - Formatted date string\n• value - Current datapoint value": "• id: ruta completa del punto de datos\n• nombre: nombre.común o última parte del ID\n• last_ts: marca de tiempo Unix (ms) o nulo\n• last_ts_iso - Cadena de fecha formateada\n• valor: valor del punto de datos actual",
52
- "• issue\n Problem indicator (English): dead, stale, orphaned_alias, or null if OK": "• problema\n Indicador de problema (inglés): muerto, obsoleto, alias_huérfano o nulo si está bien",
53
- "• issue / issue_de - Problem indicator (null if OK)\n Values: dead/inaktiv, stale/veraltet, orphaned_alias/verwaistes Alias, or null": "• Issue / Issue_de - Indicador de problema (nulo si está bien)\n Valores: dead/inaktiv, stale/veraltet, orphaned_alias/verwaistes Alias o null",
54
- "• issue_de\n Problem indicator (German): inaktiv, veraltet, verwaistes Alias, or null if OK": "• número_es\n Indicador de problema (alemán): inaktiv, veraltet, verwaistes Alias o nulo si está bien",
55
- "• last_ts\n Unix timestamp in ms or null (for sorting)": "• últimos_ts\n Marca de tiempo de Unix en ms o nulo (para ordenar)",
56
- "• last_ts_iso\n Formatted date string (for display in table)": "• last_ts_iso\n Cadena de fecha formateada (para mostrar en la tabla)",
57
- "• name\n common.name or last part of ID (user-friendly name)": "• nombre\n nombre.común o última parte del ID (nombre fácil de usar)",
58
- "• size\n JSON.stringify(val).length (finds storage hogs)": "• tamaño\n JSON.stringify(val).length (busca acaparadores de almacenamiento)",
59
- "• size - JSON.stringify(val).length (finds storage hogs)": "• tamaño - JSON.stringify(val).length (busca grandes cantidades de almacenamiento)",
60
- "• status\n Classification in English: active, dead, stale, undefined, orphaned": "• estado\n Clasificación en inglés: activo, muerto, obsoleto, indefinido, huérfano",
61
- "• status / status_de - Classification (English / German)\n Values: active/aktiv, dead/inaktiv, stale/veraltet, undefined/undefiniert, orphaned/verwaist": "• status / status_de - Clasificación (inglés / alemán)\n Valores: activo/activo, muerto/inaktiv, obsoleto/veraltet, indefinido/indefinido, huérfano/verwaist",
62
- "• status_de\n Classification in German: aktiv, inaktiv, veraltet, undefiniert, verwaist": "• estado_de\n Clasificación en alemán: aktiv, inaktiv, veraltet, undefiniert, verwaist",
63
- "• value\n Current datapoint value (final check before deletion)": "• valor\n Valor actual del punto de datos (verificación final antes de la eliminación)"
35
+ "When enabled, all configured paths will be scanned automatically at the specified interval": "Cuando está habilitado, todas las rutas configuradas se escanearán automáticamente en el intervalo especificado",
36
+ "tidy adapter settings": "Configuración del adaptador para tidy"
64
37
  }