iobroker.tidy 0.1.4 → 0.1.6
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/README.md +37 -7
- package/admin/i18n/de.json +0 -3
- package/admin/i18n/en.json +14 -13
- package/admin/i18n/es.json +2 -1
- package/admin/i18n/fr.json +2 -1
- package/admin/i18n/it.json +2 -1
- package/admin/i18n/nl.json +2 -1
- package/admin/i18n/pl.json +3 -2
- package/admin/i18n/pt.json +2 -1
- package/admin/i18n/ru.json +2 -1
- package/admin/i18n/uk.json +2 -1
- package/admin/i18n/zh-cn.json +2 -1
- package/admin/jsonConfig.json +1 -1
- package/io-package.json +28 -1
- package/main.js +15 -8
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
[](https://forum.iobroker.net/topic/84331/tidy-adapter-alpha)
|
|
11
11
|
[](https://github.com/skvarel)
|
|
12
|
-
[](https://github.com/inventwo/ioBroker.tidy/blob/main/.cursor/iobroker-adapter.mdc)
|
|
13
13
|
|
|
14
14
|
[](https://www.paypal.com/donate/?hosted_button_id=7W6M3TFZ4W9LW)
|
|
15
15
|
|
|
@@ -31,6 +31,8 @@ The **Tidy** adapter helps to find unused objects and states to clean up your sy
|
|
|
31
31
|
- Configurable age thresholds for "stale" and "dead" detection
|
|
32
32
|
- Optional automatic scanning at configurable intervals (hourly)
|
|
33
33
|
- Enable/disable individual scan paths
|
|
34
|
+
- Optional complete scan of the entire object tree
|
|
35
|
+
- **🌐 Complete scan**: Scan all states in the system (not limited to configured paths) via a separate result channel
|
|
34
36
|
- **🎯 Manual triggers**: Each configured path gets a trigger button to run scans on demand
|
|
35
37
|
- **📋 JSON table output**: Results are provided as JSON arrays, perfect for table widgets in VIS
|
|
36
38
|
- **📈 Statistics**: Automatic counters for total, dead, stale, and orphaned datapoints
|
|
@@ -40,6 +42,7 @@ The **Tidy** adapter helps to find unused objects and states to clean up your sy
|
|
|
40
42
|
### General Settings
|
|
41
43
|
|
|
42
44
|
- **Enable automatic scans**: When enabled, all configured paths are scanned automatically
|
|
45
|
+
- **Scan all objects (complete)**: When enabled, the adapter scans the entire object tree and stores results in a separate `complete` channel (see below)
|
|
43
46
|
- **Scan interval**: How often automatic scans should run (in hours, minimum 1)
|
|
44
47
|
- **Days until 'stale'**: Datapoints not updated for this many days are marked as stale (warning)
|
|
45
48
|
- **Days until 'dead'**: Datapoints not updated for this many days are marked as dead (critical)
|
|
@@ -65,6 +68,18 @@ For each configured path (e.g., "userdata"), the adapter creates:
|
|
|
65
68
|
- **`tidy.0.userdata.staleCount`** (number): Number of stale datapoints
|
|
66
69
|
- **`tidy.0.userdata.orphanedCount`** (number): Number of orphaned aliases
|
|
67
70
|
|
|
71
|
+
When **Scan all objects (complete)** is enabled in the general settings, the adapter additionally creates:
|
|
72
|
+
|
|
73
|
+
- **`tidy.0.complete.trigger`** (button): Click to manually start a complete scan
|
|
74
|
+
- **`tidy.0.complete.result`** (json): Scan results for all states in the system
|
|
75
|
+
- **`tidy.0.complete.lastScan`** (timestamp): When the last complete scan was performed
|
|
76
|
+
- **`tidy.0.complete.count`** (number): Total datapoints found
|
|
77
|
+
- **`tidy.0.complete.deadCount`** (number): Number of dead datapoints
|
|
78
|
+
- **`tidy.0.complete.staleCount`** (number): Number of stale datapoints
|
|
79
|
+
- **`tidy.0.complete.orphanedCount`** (number): Number of orphaned aliases
|
|
80
|
+
|
|
81
|
+
The complete scan uses the same JSON result structure as path-based scans. Automatic scans include the complete scan when this option is enabled.
|
|
82
|
+
|
|
68
83
|
### JSON Result Structure
|
|
69
84
|
|
|
70
85
|
The `result` state contains a JSON array with the following fields for each datapoint:
|
|
@@ -132,6 +147,15 @@ Use the JSON result with a table widget to display and sort your datapoints:
|
|
|
132
147
|
4. Sort by `last_ts` (oldest first) to find the "deadest" datapoints
|
|
133
148
|
5. Filter by `issue != null` to show only problematic datapoints
|
|
134
149
|
|
|
150
|
+
### Complete Scan
|
|
151
|
+
|
|
152
|
+
1. Enable **Scan all objects (complete)** in the general settings
|
|
153
|
+
2. Save configuration — the adapter performs an initial complete scan
|
|
154
|
+
3. View results in `tidy.0.complete.result`
|
|
155
|
+
4. Use `tidy.0.complete.trigger` for manual rescans at any time
|
|
156
|
+
|
|
157
|
+
Use the complete scan to get an overview of all states in your instance. For targeted cleanup, path-based scans (e.g. `0_userdata.0`, `alias.0`) are usually more practical.
|
|
158
|
+
|
|
135
159
|
### Automatic Maintenance
|
|
136
160
|
|
|
137
161
|
1. Enable "automatic scans" in settings
|
|
@@ -150,6 +174,18 @@ If you like our work and would like to support us, we appreciate any donation.
|
|
|
150
174
|
<!--
|
|
151
175
|
### **WORK IN PROGRESS**
|
|
152
176
|
-->
|
|
177
|
+
### 0.1.6 (2026-05-31)
|
|
178
|
+
- (skvarel) Fixed scan when path name is left empty (result states now use path as fallback)
|
|
179
|
+
- (skvarel) Added default for scan-all-objects option in adapter configuration
|
|
180
|
+
- (skvarel) Fixed incorrect link to Cursor project rules in README
|
|
181
|
+
- (skvarel) Unified issue tracker URL to inventwo repository
|
|
182
|
+
- (skvarel) Fixed type-check script for local development
|
|
183
|
+
- (skvarel) Documented complete scan feature in README
|
|
184
|
+
|
|
185
|
+
### 0.1.5 (2026-05-29)
|
|
186
|
+
- (skvarel) Updated dependencies
|
|
187
|
+
- (skvarel) Fixed repo checker issue
|
|
188
|
+
|
|
153
189
|
### 0.1.4 (2026-05-25)
|
|
154
190
|
- (skvarel) Revised titel and desciption
|
|
155
191
|
|
|
@@ -160,12 +196,6 @@ If you like our work and would like to support us, we appreciate any donation.
|
|
|
160
196
|
- (skvarel) Changed name of result field to optional
|
|
161
197
|
- (skvarel) Revised config
|
|
162
198
|
|
|
163
|
-
### 0.1.0 (2026-04-17)
|
|
164
|
-
- (skvarel) Added option for complete scan
|
|
165
|
-
|
|
166
|
-
### 0.0.1 (2026-04-14)
|
|
167
|
-
- (skvarel) initial release
|
|
168
|
-
|
|
169
199
|
## Older changes
|
|
170
200
|
- [CHANGELOG_OLD.md](CHANGELOG_OLD.md)
|
|
171
201
|
|
package/admin/i18n/de.json
CHANGED
|
@@ -8,16 +8,13 @@
|
|
|
8
8
|
"Days until 'stale' (warning)": "Tage bis 'veraltet' (Warnung)",
|
|
9
9
|
"Description": "Beschreibung",
|
|
10
10
|
"Detection Thresholds": "Erkennungsschwellen",
|
|
11
|
-
"Each scan result contains a JSON array with the following 10 fields per datapoint:": "Jedes Scan-Ergebnis enthält ein JSON-Array mit folgenden 10 Feldern pro Datenpunkt:",
|
|
12
11
|
"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
12
|
"Enable automatic scans": "Automatisches Scannen aktivieren",
|
|
14
13
|
"Enabled": "Aktiviert",
|
|
15
14
|
"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.",
|
|
16
|
-
"Feldbeschreibungen (Deutsch):": "Feldbeschreibungen (Deutsch):",
|
|
17
15
|
"Field": "Schlüssel",
|
|
18
16
|
"Field descriptions": "Feldbeschreibungen",
|
|
19
17
|
"Field descriptions (English):": "Feldbeschreibungen (Englisch):",
|
|
20
|
-
"Field descriptions:": "Feldbeschreibungen:",
|
|
21
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.": "Für deutsche Tabellen: Verwende status_de und issue_de Spalten\nFür englische Tabellen: Verwende status und issue Spalten\n\nFiltere nach 'issue != null' um nur problematische Datenpunkte anzuzeigen.",
|
|
22
19
|
"For alias.* paths: Check if target datapoints exist (ghost detection)": "Für alias.*-Pfade: Prüfen, ob Ziel-Datenpunkte existieren (Geister-Erkennung)",
|
|
23
20
|
"General Settings": "Allgemeine Einstellungen",
|
package/admin/i18n/en.json
CHANGED
|
@@ -1,37 +1,38 @@
|
|
|
1
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
2
|
"Automatic Scanning": "Automatic Scanning",
|
|
5
3
|
"Check alias targets": "Check alias targets",
|
|
6
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.",
|
|
7
|
-
"Days until 'dead' (critical)": "Days until 'dead' (critical)",
|
|
8
|
-
"Days until 'stale' (warning)": "Days until 'stale' (warning)",
|
|
9
5
|
"Datapoints not updated for this many days are marked as 'dead'": "Datapoints not updated for this many days are marked as 'dead'",
|
|
10
6
|
"Datapoints not updated for this many days are marked as 'stale'": "Datapoints not updated for this many days are marked as 'stale'",
|
|
7
|
+
"Days until 'dead' (critical)": "Days until 'dead' (critical)",
|
|
8
|
+
"Days until 'stale' (warning)": "Days until 'stale' (warning)",
|
|
11
9
|
"Detection Thresholds": "Detection Thresholds",
|
|
10
|
+
"Description": "Description",
|
|
12
11
|
"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
12
|
"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
13
|
"Enabled": "Enabled",
|
|
17
14
|
"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.",
|
|
15
|
+
"Field": "Key",
|
|
16
|
+
"Field descriptions": "Field descriptions",
|
|
17
|
+
"Field descriptions (English):": "Field descriptions (English):",
|
|
18
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
19
|
"For alias.* paths: Check if target datapoints exist (ghost detection)": "For alias.* paths: Check if target datapoints exist (ghost detection)",
|
|
20
20
|
"General Settings": "General Settings",
|
|
21
21
|
"Help & Documentation": "Help & Documentation",
|
|
22
22
|
"How often the automatic scan should run (minimum 1 hour)": "How often the automatic scan should run (minimum 1 hour)",
|
|
23
|
+
"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.",
|
|
23
24
|
"JSON Table Field Description": "JSON Table Field Description",
|
|
24
25
|
"Name (for result state)": "Name (for result state)",
|
|
26
|
+
"Name (for result state, optional)": "Name (for result state, optional)",
|
|
27
|
+
"Optional. If empty, the path will be used as name.": "Optional. If empty, the path will be used as name.",
|
|
25
28
|
"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
29
|
"Path Configuration": "Path Configuration",
|
|
27
30
|
"Paths to scan": "Paths to scan",
|
|
28
|
-
"
|
|
31
|
+
"Purpose": "Purpose",
|
|
29
32
|
"Scan Paths": "Scan Paths",
|
|
30
|
-
"
|
|
33
|
+
"Scan all objects (complete)": "Scan all objects (complete)",
|
|
34
|
+
"Scan interval (hours)": "Scan interval (hours)",
|
|
31
35
|
"Usage in VIS Widgets": "Usage in VIS Widgets",
|
|
32
36
|
"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
|
-
"
|
|
34
|
-
|
|
35
|
-
"Field": "Schlüssel",
|
|
36
|
-
"Description": "Description"
|
|
37
|
-
}
|
|
37
|
+
"tidy adapter settings": "Adapter settings for tidy"
|
|
38
|
+
}
|
package/admin/i18n/es.json
CHANGED
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
"Enable automatic scans": "Habilitar escaneos automáticos",
|
|
13
13
|
"Enabled": "Activado",
|
|
14
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.",
|
|
15
|
-
"Field": "
|
|
15
|
+
"Field": "Llave",
|
|
16
16
|
"Field descriptions": "Descripciones de campo",
|
|
17
|
+
"Field descriptions (English):": "Descripciones de campo (inglés):",
|
|
17
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.": "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.",
|
|
18
19
|
"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
20
|
"General Settings": "Configuraciones generales",
|
package/admin/i18n/fr.json
CHANGED
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
"Enable automatic scans": "Activer les analyses automatiques",
|
|
13
13
|
"Enabled": "Activé",
|
|
14
14
|
"Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional.": "Entrez le chemin complet, par ex. 0_userdata.0. Les dossiers (type : dossier) doivent être saisis manuellement. Le numéro d'instance est facultatif.",
|
|
15
|
-
"Field": "
|
|
15
|
+
"Field": "Clé",
|
|
16
16
|
"Field descriptions": "Description des champs",
|
|
17
|
+
"Field descriptions (English):": "Descriptions des champs (anglais) :",
|
|
17
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.": "Pour les tables allemandes : utilisez les colonnes status_de et issue_de\nPour les tableaux en anglais : utilisez les colonnes d'état et de problème\n\nFiltrez par « issue != null » pour afficher uniquement les points de données problématiques.",
|
|
18
19
|
"For alias.* paths: Check if target datapoints exist (ghost detection)": "Pour les chemins alias.* : Vérifiez si des points de données cibles existent (détection de fantômes)",
|
|
19
20
|
"General Settings": "Paramètres généraux",
|
package/admin/i18n/it.json
CHANGED
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
"Enable automatic scans": "Abilita le scansioni automatiche",
|
|
13
13
|
"Enabled": "Abilitato",
|
|
14
14
|
"Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional.": "Inserisci il percorso completo, ad es. 0_datiutente.0. Le cartelle (tipo: cartella) devono essere inserite manualmente. Il numero di istanza è facoltativo.",
|
|
15
|
-
"Field": "
|
|
15
|
+
"Field": "Chiave",
|
|
16
16
|
"Field descriptions": "Descrizioni dei campi",
|
|
17
|
+
"Field descriptions (English):": "Descrizioni dei campi (inglese):",
|
|
17
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.": "Per le tabelle tedesche: utilizzare le colonne status_de e issue_de\nPer le tabelle in inglese: utilizzare le colonne di stato e di emissione\n\nFiltra per \"problema! = null\" per mostrare solo i punti dati problematici.",
|
|
18
19
|
"For alias.* paths: Check if target datapoints exist (ghost detection)": "Per percorsi alias.*: controlla se esistono punti dati di destinazione (rilevamento fantasma)",
|
|
19
20
|
"General Settings": "Impostazioni generali",
|
package/admin/i18n/nl.json
CHANGED
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
"Enable automatic scans": "Schakel automatische scans in",
|
|
13
13
|
"Enabled": "Ingeschakeld",
|
|
14
14
|
"Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional.": "Voer het volledige pad in, b.v. 0_gebruikersgegevens.0. Mappen (type: map) moeten handmatig worden ingevoerd. Het exemplaarnummer is optioneel.",
|
|
15
|
-
"Field": "
|
|
15
|
+
"Field": "Sleutel",
|
|
16
16
|
"Field descriptions": "Veldbeschrijvingen",
|
|
17
|
+
"Field descriptions (English):": "Veldbeschrijvingen (Engels):",
|
|
17
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.": "Voor Duitse tabellen: gebruik de kolommen status_de en issue_de\nVoor Engelse tabellen: gebruik status- en probleemkolommen\n\nFilter op 'issue != null' om alleen problematische datapunten weer te geven.",
|
|
18
19
|
"For alias.* paths: Check if target datapoints exist (ghost detection)": "Voor alias.*-paden: Controleer of doeldatapunten bestaan (spookdetectie)",
|
|
19
20
|
"General Settings": "Algemene instellingen",
|
package/admin/i18n/pl.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"Check alias targets": "Sprawdź cele aliasów",
|
|
4
4
|
"Configure which paths to scan for unused datapoints. Each path will get its own result state with a JSON table.": "Skonfiguruj ścieżki do skanowania w poszukiwaniu nieużywanych punktów danych. Każda ścieżka otrzyma własny stan wyniku z tabelą JSON.",
|
|
5
5
|
"Datapoints not updated for this many days are marked as 'dead'": "Punkty danych nieaktualizowane przez tyle dni są oznaczone jako „martwe”",
|
|
6
|
-
"Datapoints not updated for this many days are marked as 'stale'": "Punkty danych nieaktualizowane przez
|
|
6
|
+
"Datapoints not updated for this many days are marked as 'stale'": "Punkty danych nieaktualizowane przez tyle dni są oznaczone jako „nieaktualne”",
|
|
7
7
|
"Days until 'dead' (critical)": "Dni do „martwy” (krytyczne)",
|
|
8
8
|
"Days until 'stale' (warning)": "Dni do „nieaktualnego” (ostrzeżenie)",
|
|
9
9
|
"Description": "Opis",
|
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
"Enable automatic scans": "Włącz automatyczne skanowanie",
|
|
13
13
|
"Enabled": "Włączony",
|
|
14
14
|
"Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional.": "Wpisz pełną ścieżkę, np. 0_dane użytkownika.0. Foldery (typ: folder) należy wprowadzić ręcznie. Numer instancji jest opcjonalny.",
|
|
15
|
-
"Field": "
|
|
15
|
+
"Field": "Klawisz",
|
|
16
16
|
"Field descriptions": "Opisy pól",
|
|
17
|
+
"Field descriptions (English):": "Opisy pól (angielski):",
|
|
17
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.": "W przypadku tabel w języku niemieckim: użyj kolumn status_de i Issue_de\nW przypadku tabel w języku angielskim: Użyj kolumn stanu i wydania\n\nFiltruj według „problem != null”, aby wyświetlić tylko problematyczne punkty danych.",
|
|
18
19
|
"For alias.* paths: Check if target datapoints exist (ghost detection)": "W przypadku ścieżek alias.*: Sprawdź, czy istnieją docelowe punkty danych (wykrywanie duchów)",
|
|
19
20
|
"General Settings": "Ustawienia ogólne",
|
package/admin/i18n/pt.json
CHANGED
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
"Enable automatic scans": "Habilitar verificações automáticas",
|
|
13
13
|
"Enabled": "Habilitado",
|
|
14
14
|
"Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional.": "Insira o caminho completo, por ex. 0_userdata.0. As pastas (tipo: pasta) devem ser inseridas manualmente. O número da instância é opcional.",
|
|
15
|
-
"Field": "
|
|
15
|
+
"Field": "Chave",
|
|
16
16
|
"Field descriptions": "Descrições de campo",
|
|
17
|
+
"Field descriptions (English):": "Descrições de campo (inglês):",
|
|
17
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.": "Para tabelas alemãs: use as colunas status_de e issue_de\nPara tabelas em inglês: use colunas de status e de problemas\n\nFiltre por 'issue != null' para mostrar apenas pontos de dados problemáticos.",
|
|
18
19
|
"For alias.* paths: Check if target datapoints exist (ghost detection)": "Para caminhos alias.*: verifique se existem pontos de dados de destino (detecção de fantasma)",
|
|
19
20
|
"General Settings": "Configurações Gerais",
|
package/admin/i18n/ru.json
CHANGED
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
"Enable automatic scans": "Включить автоматическое сканирование",
|
|
13
13
|
"Enabled": "Включено",
|
|
14
14
|
"Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional.": "Введите полный путь, например. 0_userdata.0. Папки (тип: папка) необходимо вводить вручную. Номер экземпляра не является обязательным.",
|
|
15
|
-
"Field": "
|
|
15
|
+
"Field": "Ключ",
|
|
16
16
|
"Field descriptions": "Описание полей",
|
|
17
|
+
"Field descriptions (English):": "Описания полей (на английском языке):",
|
|
17
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.": "Для немецких таблиц: используйте столбцы status_de и Issue_de.\nДля английских таблиц: используйте столбцы состояния и проблемы.\n\nОтфильтруйте по «проблеме!= null», чтобы отобразить только проблемные точки данных.",
|
|
18
19
|
"For alias.* paths: Check if target datapoints exist (ghost detection)": "Для путей alias.*: проверьте, существуют ли целевые точки данных (обнаружение призраков).",
|
|
19
20
|
"General Settings": "Общие настройки",
|
package/admin/i18n/uk.json
CHANGED
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
"Enable automatic scans": "Увімкнути автоматичне сканування",
|
|
13
13
|
"Enabled": "Увімкнено",
|
|
14
14
|
"Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional.": "Введіть повний шлях, напр. 0_користувальницькі дані.0. Папки (тип: folder) потрібно вводити вручну. Номер екземпляра необов’язковий.",
|
|
15
|
-
"Field": "
|
|
15
|
+
"Field": "ключ",
|
|
16
16
|
"Field descriptions": "Описи полів",
|
|
17
|
+
"Field descriptions (English):": "Опис полів (англійською):",
|
|
17
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.": "Для німецьких таблиць: використовуйте стовпці status_de і issue_de\nДля таблиць англійською мовою: використовуйте стовпці статусу та проблеми\n\nВідфільтруйте за «проблемою != нуль», щоб показати лише проблемні точки даних.",
|
|
18
19
|
"For alias.* paths: Check if target datapoints exist (ghost detection)": "Для шляхів alias.*: перевірте, чи існують цільові точки даних (виявлення привидів)",
|
|
19
20
|
"General Settings": "Загальні налаштування",
|
package/admin/i18n/zh-cn.json
CHANGED
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
"Enable automatic scans": "启用自动扫描",
|
|
13
13
|
"Enabled": "启用",
|
|
14
14
|
"Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional.": "输入完整路径,例如0_用户数据.0。文件夹(类型:文件夹)必须手动输入。实例编号是可选的。",
|
|
15
|
-
"Field": "
|
|
15
|
+
"Field": "钥匙",
|
|
16
16
|
"Field descriptions": "字段说明",
|
|
17
|
+
"Field descriptions (English):": "字段说明(英文):",
|
|
17
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.": "对于德语表:使用 status_de 和 issues_de 列\n对于英文表格:使用状态和问题列\n\n按“问题!= null”过滤以仅显示有问题的数据点。",
|
|
18
19
|
"For alias.* paths: Check if target datapoints exist (ghost detection)": "对于 alias.* 路径:检查目标数据点是否存在(幽灵检测)",
|
|
19
20
|
"General Settings": "常规设置",
|
package/admin/jsonConfig.json
CHANGED
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
"attr": "path",
|
|
149
149
|
"title": "Path (e.g. 0_userdata.0 or alias.0 - The instance number is optional.)",
|
|
150
150
|
"width": "40%",
|
|
151
|
-
"placeholder": "0_userdata.0",
|
|
151
|
+
"placeholder": "Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional.",
|
|
152
152
|
"tooltip": "Enter the full path, e.g. 0_userdata.0. Folders (type: folder) must be entered manually. The instance number is optional."
|
|
153
153
|
},
|
|
154
154
|
{
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "tidy",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.6",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.1.6": {
|
|
7
|
+
"en": "Fixed scan when path name is left empty (result states now use path as fallback)\nAdded default for scan-all-objects option in adapter configuration\nFixed incorrect link to Cursor project rules in README\nUnified issue tracker URL to inventwo repository\nFixed type-check script for local development\nDocumented complete scan feature in README",
|
|
8
|
+
"de": "Behobener Scan, wenn der Pfadname leer gelassen wird (Ergebnisse Zustände verwenden nun Pfad als Fallback)\nStandard für Scan-all-Objekte Option in Adapterkonfiguration hinzugefügt\nFehlerhafte Verknüpfung mit Cursor-Projektregeln in README behoben\nUnified Ausgabe Tracker URL zu erfindenwo Repository\nFixed Type-Check-Skript für lokale Entwicklung\nDokumentierte vollständige Scan-Funktion in README",
|
|
9
|
+
"ru": "Исправленное сканирование, когда имя пути оставлено пустым (в результате состояния теперь используют путь в качестве резерва)\nДобавлено по умолчанию для опции сканирования всех объектов в конфигурации адаптера\nИсправлена неправильная ссылка на правила проекта Cursor в README\nUnified Issue Tracker URL для создания репозитория\nФиксированный скрипт проверки типа для локальной разработки\nПолная функция сканирования в README",
|
|
10
|
+
"pt": "Varredura fixa quando o nome do caminho fica vazio (os estados de resultado agora usam o caminho como recuo)\nAdicionado por omissão para a opção scan-all-objects na configuração do adaptador\nLigação incorreta fixa às regras do projeto Cursor no README\nURL unificado do rastreador de problemas para inventar o repositório\nPrograma de verificação de tipo fixo para desenvolvimento local\nFuncionalidade de digitalização completa documentada no README",
|
|
11
|
+
"nl": "Fixed scan wanneer padnaam leeg gelaten wordt (resultaattoestanden gebruiken nu pad als terugval)\nStandaard toegevoegd voor optie scan-all-objecten in adapterconfiguratie\nOnjuiste link naar Cursor-projectregels in README\nUnified issue tracker URL naar inventwo repository\nVast typecontrolescript voor lokale ontwikkeling\nGedocumenteerde volledige scanfunctie in README",
|
|
12
|
+
"fr": "Correction de l'analyse lorsque le nom du chemin est laissé vide (les états de résultat utilisent maintenant le chemin comme retour)\nAjout par défaut de l'option scanner tous les objets dans la configuration de l'adaptateur\nCorrection d'un lien incorrect vers les règles du projet Cursor dans README\nURL de tracker de problèmes unifiée vers le dépôt inventwo\nCorrection du script de vérification de type pour le développement local\nFonction de numérisation complète documentée dans README",
|
|
13
|
+
"it": "Controllo fisso quando il nome del percorso viene lasciato vuoto (i risultati ora usano il percorso come fallback)\nAggiunta di default per scan-all-objects opzione nella configurazione dell'adattatore\nFisso collegamento errato alle regole del progetto Cursor in README\nURL del tracciatore di numeri unificato inventwo repository\nScript di controllo del tipo fisso per lo sviluppo locale\nFunzione di scansione completa documentata in README",
|
|
14
|
+
"es": "Escaneo fijo cuando el nombre de la ruta queda vacío (resulta estados ahora utilizan la ruta como retroceso)\nAñadido predeterminado para la opción Scan-all-objects en la configuración del adaptador\nEnlace incorrecto fijo a las reglas del proyecto Cursor en README\nUnified issue tracker URL para inventwo repository\nScript de comprobación de tipo fijo para el desarrollo local\nFunción de exploración completa documentada en README",
|
|
15
|
+
"pl": "Naprawiono skanowanie, gdy nazwa ścieżki jest pusta (stan wyniku używa ścieżki jako zapasu)\nDodano domyślne dla opcji scan- all- objects w konfiguracji adaptera\nNaprawiono nieprawidłowe łącze do zasad projektu kursora w README\nUnified issue tracker URL do wynalazku dwóch repozytorium\nStałe skrypty sprawdzania typu dla rozwoju lokalnego\nKompletna funkcja skanowania w README",
|
|
16
|
+
"uk": "Виправлено сканування, коли ім'я шляху залишається порожнім (результні стани тепер використовують шлях як випадання)\nДодано за замовчуванням для налаштування скан-all-objects\nВиправлено некоректне посилання на правила проекту Cursor в README\nУніфікований URL-адреса трекера для inventwo repository\nВиправлений сценарій типу-подібним вирізом для місцевого розвитку\nФункція повного сканування документів в README",
|
|
17
|
+
"zh-cn": "当路径名称为空时进行固定扫描( 结果状态现在使用路径作为倒置)\n在适配器配置中添加了扫描全部对象选项的默认值\n与 README 中的光标项目规则的固定错误链接\n统一问题跟踪器 URL 到 Inventwo 仓库\n本地开发的固定类型检查脚本\n在 README 中记录了完整的扫描功能"
|
|
18
|
+
},
|
|
19
|
+
"0.1.5": {
|
|
20
|
+
"en": "Updated dependencies\nFixed repo checker issue",
|
|
21
|
+
"de": "Aktualisierte Abhängigkeiten\nProblem der Repo Checker behoben",
|
|
22
|
+
"ru": "Обновленные зависимости\nФиксированная проблема проверки репо",
|
|
23
|
+
"pt": "Dependências atualizadas\nProblema fixo do verificador de repo",
|
|
24
|
+
"nl": "Bijgewerkte afhankelijkheden\nProbleem met vaste repochecker",
|
|
25
|
+
"fr": "Dépendances actualisées\nCorrection du problème de repo checker",
|
|
26
|
+
"it": "Dipendenze aggiornate\nRischio di errore",
|
|
27
|
+
"es": "Dependencias actualizadas\nNúmero de comprobación de reposo fijo",
|
|
28
|
+
"pl": "Aktualizacja zależności\nStałe wydanie kontrolera repo",
|
|
29
|
+
"uk": "Оновлені залежності\nВиправлено проблему перевірки репо",
|
|
30
|
+
"zh-cn": "更新的依赖关系\n固定回购检查器问题"
|
|
31
|
+
},
|
|
6
32
|
"0.1.4": {
|
|
7
33
|
"en": "Revised titel and desciption",
|
|
8
34
|
"de": "Überarbeiteter Titel und Abschied",
|
|
@@ -135,6 +161,7 @@
|
|
|
135
161
|
},
|
|
136
162
|
"native": {
|
|
137
163
|
"autoScan": false,
|
|
164
|
+
"scanAllObjects": false,
|
|
138
165
|
"scanInterval": 24,
|
|
139
166
|
"daysUntilStale": 90,
|
|
140
167
|
"daysUntilDead": 365,
|
package/main.js
CHANGED
|
@@ -251,9 +251,7 @@ class Tidy extends utils.Adapter {
|
|
|
251
251
|
continue;
|
|
252
252
|
}
|
|
253
253
|
|
|
254
|
-
|
|
255
|
-
const effectiveName = pathConfig.name && pathConfig.name.trim() ? pathConfig.name : pathConfig.path;
|
|
256
|
-
const channelId = this.sanitizeName(effectiveName);
|
|
254
|
+
const channelId = this.getChannelId(pathConfig);
|
|
257
255
|
|
|
258
256
|
// Create channel
|
|
259
257
|
await this.setObjectNotExistsAsync(channelId, {
|
|
@@ -392,9 +390,7 @@ class Tidy extends utils.Adapter {
|
|
|
392
390
|
// Find the corresponding path config
|
|
393
391
|
const channelId = id.replace(`${this.namespace}.`, '').replace('.trigger', '');
|
|
394
392
|
// Fallback: match also if name is empty and path is used
|
|
395
|
-
const pathConfig = this.config.paths.find(
|
|
396
|
-
p => this.sanitizeName(p.name && p.name.trim() ? p.name : p.path) === channelId,
|
|
397
|
-
);
|
|
393
|
+
const pathConfig = this.config.paths.find(p => this.getChannelId(p) === channelId);
|
|
398
394
|
|
|
399
395
|
if (pathConfig && pathConfig.enabled) {
|
|
400
396
|
await this.scanPath(pathConfig);
|
|
@@ -415,7 +411,7 @@ class Tidy extends utils.Adapter {
|
|
|
415
411
|
*/
|
|
416
412
|
async scanAllPaths() {
|
|
417
413
|
for (const pathConfig of this.config.paths) {
|
|
418
|
-
if (pathConfig.enabled) {
|
|
414
|
+
if (pathConfig.enabled && (pathConfig.name || pathConfig.path)) {
|
|
419
415
|
await this.scanPath(pathConfig);
|
|
420
416
|
}
|
|
421
417
|
}
|
|
@@ -431,7 +427,7 @@ class Tidy extends utils.Adapter {
|
|
|
431
427
|
this.log.info(`Scanning path: ${pathConfig.path}`);
|
|
432
428
|
|
|
433
429
|
try {
|
|
434
|
-
const channelId = this.
|
|
430
|
+
const channelId = this.getChannelId(pathConfig);
|
|
435
431
|
const results = [];
|
|
436
432
|
|
|
437
433
|
// Get all objects under the specified path
|
|
@@ -575,6 +571,17 @@ class Tidy extends utils.Adapter {
|
|
|
575
571
|
return result;
|
|
576
572
|
}
|
|
577
573
|
|
|
574
|
+
/**
|
|
575
|
+
* Resolve channel ID from path config (name with fallback to path)
|
|
576
|
+
*
|
|
577
|
+
* @param {object} pathConfig - Path configuration object
|
|
578
|
+
* @returns {string} Sanitized channel ID
|
|
579
|
+
*/
|
|
580
|
+
getChannelId(pathConfig) {
|
|
581
|
+
const effectiveName = pathConfig.name && pathConfig.name.trim() ? pathConfig.name : pathConfig.path;
|
|
582
|
+
return this.sanitizeName(effectiveName);
|
|
583
|
+
}
|
|
584
|
+
|
|
578
585
|
/**
|
|
579
586
|
* Sanitize name for use as object ID
|
|
580
587
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.tidy",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Analyzes ioBroker objects for unused datapoints and helps you clean up your instance",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "skvarel",
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"@iobroker/dev-server": "^0.8.0",
|
|
40
40
|
"@iobroker/eslint-config": "^2.3.4",
|
|
41
41
|
"@iobroker/testing": "^5.2.2",
|
|
42
|
-
"@tsconfig/
|
|
43
|
-
"@types/iobroker": "npm:@iobroker/types@^7.1.
|
|
42
|
+
"@tsconfig/node22": "^22.0.5",
|
|
43
|
+
"@types/iobroker": "npm:@iobroker/types@^7.1.2",
|
|
44
44
|
"@types/node": "^22.19.19",
|
|
45
45
|
"typescript": "~6.0.3"
|
|
46
46
|
},
|
|
@@ -49,7 +49,6 @@
|
|
|
49
49
|
"admin{,/!(src)/**}/!(tsconfig|tsconfig.*|.eslintrc).{json,json5}",
|
|
50
50
|
"admin{,/!(src)/**}/*.{html,css,png,svg,jpg,js}",
|
|
51
51
|
"lib/",
|
|
52
|
-
"www/",
|
|
53
52
|
"io-package.json",
|
|
54
53
|
"LICENSE",
|
|
55
54
|
"main.js"
|
|
@@ -66,10 +65,11 @@
|
|
|
66
65
|
"lint": "eslint -c eslint.config.mjs .",
|
|
67
66
|
"lint-fix": "eslint -c eslint.config.mjs . --fix",
|
|
68
67
|
"translate": "translate-adapter",
|
|
69
|
-
"dev-server": "dev-server"
|
|
68
|
+
"dev-server:start": "dev-server watch",
|
|
69
|
+
"dev-server:stop": "powershell -NonInteractive -Command \"Get-NetTCPConnection -LocalPort 8091,26436,24436,20436 -EA SilentlyContinue | Select-Object -ExpandProperty OwningProcess -Unique | ForEach-Object { Stop-Process -Id $_ -Force -EA SilentlyContinue }; Write-Host 'dev-server stopped'\""
|
|
70
70
|
},
|
|
71
71
|
"bugs": {
|
|
72
|
-
"url": "https://github.com/
|
|
72
|
+
"url": "https://github.com/inventwo/ioBroker.tidy/issues"
|
|
73
73
|
},
|
|
74
74
|
"readmeFilename": "README.md"
|
|
75
75
|
}
|