Tidy

Tidy hilft dabei, ungenutzte Zustände zu finden, um dein System aufzuräumen.

Aktueller Release
0.3.3
Entwickler
skvarel
Lizenz
MIT

Was dieser Adapter bewirkt

Der Tidy- Adapter hilft Ihnen, ungenutzte Objekte und Zustände zu finden und Ihr System zu bereinigen. Nach jahrelanger Nutzung von ioBroker können sich auf Ihrem System „tote“ Datenpunkte ansammeln, die durch gelöschte Skripte, entfernte Adapter oder verwaiste Konfigurationen entstanden sind. Dieser Adapter unterstützt Sie dabei, solche Datenpunkte zu identifizieren und zu entfernen, damit Ihr System übersichtlich und leistungsstark bleibt.

Merkmale

  • 📊 Pfadbasiertes Scannen : Konfigurieren Sie mehrere Pfade, die über die Objektauswahl durchsucht werden sollen (z. B.0_userdata.0 ,alias.0 )
  • 🚫 Ausnahmen : Absichtlich statische Datenpunkte, ganze Ordner oder Platzhaltermuster von den Scanergebnissen ausschließen
  • 🔍 Intelligente Erkennung : Identifiziert verschiedene Arten problematischer Datenpunkte:
    • Veraltet : Nie aktualisiert oder extrem alt (konfigurierbarer Schwellenwert, Standard: 365 Tage)
    • Veraltet : Wurde in letzter Zeit nicht aktualisiert (konfigurierbarer Schwellenwert, Standard: 90 Tage)
    • Verwaiste Aliase : Aliase, die auf nicht existierende Zieldatenpunkte verweisen
    • Nicht definiert : Datenpunkte, die seit dem Systemstart nie beschrieben wurden.
  • ⚙️ Flexible Konfiguration :
    • Konfigurierbare Altersschwellenwerte für die Erkennung von „veralteten“ und „toten“ Geräten
    • Optionale automatische Scans in konfigurierbaren Intervallen (stündlich)
    • Einzelne Scanpfade aktivieren/deaktivieren
    • Optionaler vollständiger Scan des gesamten Objektbaums
  • 🌐 Vollständiger Scan : Scannen Sie alle Zustände im System (nicht beschränkt auf konfigurierte Pfade) über einen separaten Ergebniskanal.
  • 🎯 Manuelle Auslöser : Jeder konfigurierte Pfad verfügt über eine Auslöseschaltfläche, um Scans bei Bedarf auszuführen.
  • 📋 JSON-Tabellenausgabe : Die Ergebnisse werden als JSON-Arrays bereitgestellt und eignen sich ideal für Tabellen-Widgets in VIS.
  • 📈 Statistiken : Automatische Zähler für Gesamt-, Tot-, veraltete und verwaiste Datenpunkte

Konfiguration

Allgemeine Einstellungen

  • Automatische Scans aktivieren : Wenn diese Option aktiviert ist, werden alle konfigurierten Pfade automatisch gescannt.
  • Alle Objekte scannen (vollständig) : Wenn diese Option aktiviert ist, scannt der Adapter den gesamten Objektbaum und speichert die Ergebnisse in einer separaten Datei.complete Kanal (siehe unten)
  • Scanintervall : Wie oft automatische Scans ausgeführt werden sollen (in Stunden, mindestens 1)
  • Tage bis zur „Veraltung“ : Datenpunkte, die seit so vielen Tagen nicht aktualisiert wurden, werden als veraltet markiert (Warnung).
  • Tage bis zum Status „tot“ : Datenpunkte, die über diese Anzahl von Tagen nicht aktualisiert wurden, werden als tot (kritisch) markiert.

Scanpfade

Konfigurieren Sie einen oder mehrere zu überwachende Pfade:

  • Aktiviert : Diesen Scanpfad aktivieren/deaktivieren
  • Scanpfad : Wählen Sie einen Ordner aus der Objektstruktur aus oder geben Sie einen Pfad manuell ein (z. B.0_userdata.0 ,alias.0 ,javascript.0 Das Feld bleibt nach der Auswahl bearbeitbar.
  • Alle Adapterinstanzen : Entfernen Sie die Instanznummer, um jede Instanz zu scannen – z. B.alias anstattalias.0 Spielealias.0 ,alias.1 , und so weiter
  • Name : Ein aussagekräftiger Name für diesen Pfad (wird zur Benennung des Ergebniszustands verwendet)
  • Alias-Ziele prüfen : Füralias.* Pfade, prüfen, ob Zieldatenpunkte noch vorhanden sind (Geistererkennung)

Ausnahmen

Datenpunkte ausschließen, die nicht in den Scan-Ergebnissen oder Statistiken erscheinen sollen:

  • Objekt : Wählen Sie einen einzelnen Status oder einen Ordner/Kanal aus, um einen gesamten Unterbaum auszuschließen. Platzhalter werden unterstützt:* passt zu jedem Suffix,? entspricht einem einzelnen Zeichen (z. B.0_userdata.0.rollo.trigger* )
  • Kommentar : Optionale Anmerkung (z. B. warum dieser Datenpunkt ausgeschlossen wurde)

Verwenden Sie dies für Konfigurationswerte, die sich selten ändern (z. B. eine gespeicherte Radiostation für ein Alarmskript), damit sie nicht als ungültig oder veraltet gekennzeichnet werden.

Ausnahmen gelten für pfadbasierte Scans und den vollständigen Scan. Jeder Scankanal liefertexceptionCount — die Anzahl der Datenpunkte, die beim letzten Scan ausgeschlossen wurden (0, falls keine vorhanden sind).

Datenpunkte

Für jeden konfigurierten Pfad (z. B. „userdata“) erstellt der Adapter Folgendes:

  • tidy.0.userdata.trigger (Schaltfläche): Klicken Sie hier, um einen Scan manuell zu starten.
  • tidy.0.userdata.result (json): Vollständige Scan-Ergebnisse als JSON-Tabelle
  • tidy.0.userdata.lastScan (Zeitstempel): Wann wurde der letzte Scan durchgeführt?
  • tidy.0.userdata.count (Anzahl): Insgesamt gefundene Datenpunkte
  • tidy.0.userdata.deadCount (Zahl): Anzahl der ausgefallenen Datenpunkte
  • tidy.0.userdata.staleCount (Zahl): Anzahl der veralteten Datenpunkte
  • tidy.0.userdata.orphanedCount (Zahl): Anzahl der verwaisten Aliase
  • tidy.0.userdata.exceptionCount (Zahl): Anzahl der von der Ausnahmeliste ausgeschlossenen Datenpunkte

Wenn in den allgemeinen Einstellungen die Option „Alle Objekte scannen (vollständig)“ aktiviert ist, erstellt der Adapter zusätzlich Folgendes:

  • tidy.0.complete.trigger (Schaltfläche): Klicken Sie hier, um einen vollständigen Scan manuell zu starten.
  • tidy.0.complete.result (JSON): Scan-Ergebnisse für alle Zustände im System
  • tidy.0.complete.lastScan (Zeitstempel): Wann der letzte vollständige Scan durchgeführt wurde
  • tidy.0.complete.count (Anzahl): Insgesamt gefundene Datenpunkte
  • tidy.0.complete.deadCount (Zahl): Anzahl der ausgefallenen Datenpunkte
  • tidy.0.complete.staleCount (Zahl): Anzahl der veralteten Datenpunkte
  • tidy.0.complete.orphanedCount (Zahl): Anzahl der verwaisten Aliase
  • tidy.0.complete.exceptionCount (Zahl): Anzahl der von der Ausnahmeliste ausgeschlossenen Datenpunkte

Der vollständige Scan verwendet dieselbe JSON-Ergebnisstruktur wie pfadbasierte Scans. Automatische Scans beinhalten den vollständigen Scan, wenn diese Option aktiviert ist.

JSON-Ergebnisstruktur

Derresult Der Zustand enthält ein JSON-Array mit den folgenden Feldern für jeden Datenpunkt:

[
  {
    "id": "0_userdata.0.hallway.light_auto",
    "name": "Hallway Light Automation",
    "last_ts": 1712856000000,
    "last_ts_iso": "2026-04-11T16:00:00.000Z",
    "value": true,
    "status": "active",
    "issue": null,
    "size": 4
  },
  {
    "id": "0_userdata.0.test.old_value",
    "name": "Test Datapoint",
    "last_ts": null,
    "last_ts_iso": "undefined",
    "value": 15,
    "status": "undefined",
    "issue": "dead",
    "size": 2
  }
]

Feldbeschreibungen:

FeldBeschreibungZweck
idVollständiger DatenpunktpfadEindeutige Identifizierung
nameallgemeiner Name oder letzter Teil der IDBenutzerfreundlicher Name
last_tsUnix-Zeitstempel (ms) oder nullSortierung im Hintergrund
last_ts_isoISO 8601 DatumszeichenfolgeIn Tabelle anzeigen
valueAktueller DatenpunktwertLetzte Prüfung vor dem Löschen
statusactive ,dead ,stale ,undefined ,orphanedKlassifizierung (Englisch)
status_deaktiv ,inaktiv ,veraltet ,undefiniert ,verwaistKlassifizierung (Deutsch)
issuedead ,stale ,orphaned_alias , odernullFilterkriterium (null = OK)
issue_deinaktiv ,veraltet ,verwaistes Alias , odernullFilterkriterium (Deutsch)
sizeJSON.stringify(val).lengthFindet "Lagerfresser"

Anwendungsbeispiele

Grundlegende Einrichtung

  1. Installieren und konfigurieren Sie den Adapter
  2. Fügen Sie mithilfe der Objektauswahl einen zu scannenden Pfad hinzu (z. B.0_userdata.0 oder geben Sie es manuell ein
  3. Geben Sie ihm einen Namen (z. B. „Benutzerdaten“).
  4. Konfiguration speichern
  5. Der Adapter führt sofort einen ersten Scan durch.
  6. Ergebnisse anzeigen intidy.0.userdata.result

Multi-Instance Scan Paths

Um alle Instanzen eines Adapters zu scannen, entfernen Sie die Instanznummer aus dem Pfad, nachdem Sie Folgendes ausgewählt haben:

  • alias.0 → Nur die erste Aliasinstanz scannen
  • alias → scanalias.0 ,alias.1 und alle anderen Aliasinstanzen

Das Pfadfeld bleibt auch nach Verwendung der Objektauswahl vollständig bearbeitbar.

Ausnahmen

  1. Öffnen Sie die Registerkarte „Ausnahmen“ in der Adapterkonfiguration.
  2. Fügen Sie Datenpunkte hinzu, die ignoriert werden sollen (z. B. selten aktualisierte Konfigurationswerte).
  3. Wählen Sie einen einzelnen Zustand für einen Datenpunkt, einen Ordner, um einen ganzen Unterbaum auszuschließen, oder geben Sie ein Platzhaltermuster ein (z. B.0_userdata.0.rollo.trigger* )
  4. Konfiguration speichern – ausgeschlossene Datenpunkte werden nicht mehr in den Scanergebnissen oder Zählungen angezeigt.

VIS-Integration

Nutzen Sie das JSON-Ergebnis mit einem Tabellen-Widget, um Ihre Datenpunkte anzuzeigen und zu sortieren:

  1. Erstellen Sie ein Tabellen-Widget in VIS (z. B. inventwo Table Widget).
  2. Binde es antidy.0.userdata.result
  3. Spalten konfigurieren:
    • Für deutsche Tabellen:id ,name ,last_ts_iso ,status_de ,issue_de
    • Für englische Tabellen:id ,name ,last_ts_iso ,status ,issue
  4. Sortieren nachlast_ts (älteste zuerst), um die „totsten“ Datenpunkte zu finden
  5. Filtern nachissue != null nur problematische Datenpunkte anzeigen

Vollständiger Scan

  1. Aktivieren Sie in den allgemeinen Einstellungen die Option „Alle Objekte scannen (vollständig)“.
  2. Konfiguration speichern – der Adapter führt einen ersten vollständigen Scan durch
  3. Ergebnisse anzeigen intidy.0.complete.result
  4. Verwendentidy.0.complete.trigger für manuelle Neuscans jederzeit

Nutzen Sie den vollständigen Scan, um einen Überblick über alle Zustände Ihrer Instanz zu erhalten. Für eine gezielte Bereinigung eignen sich pfadbasierte Scans (z. B.0_userdata.0 ,alias.0 ) sind in der Regel praktischer.

Automatische Wartung

  1. Aktivieren Sie die Option „Automatische Scans“ in den Einstellungen.
  2. Stellen Sie das Intervall auf 24 Stunden ein (einmal täglich).
  3. MonitordeadCount UndstaleCount Statistiken
  4. Überprüfen Sie die Ergebnisse wöchentlich, um Sanierungskandidaten zu identifizieren.

Unterstützung

Wenn Ihnen unsere Arbeit gefällt und Sie uns unterstützen möchten, freuen wir uns über jede Spende. (Dieser Link führt zu unserem PayPal-Konto und steht in keiner Verbindung zu ioBroker.)

Spenden

Changelog

0.3.3 (2026-06-18)

  • (skvarel) Fixed complete scan failing with "Invalid string length" on large instances
  • (skvarel) Modified complete scan to load states in bulk instead of one-by-one

0.3.2 (2026-06-18)

  • (skvarel) Removed accidentally committed local dev-server data directory from repository (fixes #14)

0.3.1 (2026-06-16)

  • (skvarel) Added admin UI help text explaining "Check alias targets" on Scan Paths tab (boxed info panel)
  • (skvarel) Fixed alias target check for read/write split aliases (common.alias.id with read and write)

0.3.0 (2026-06-13)

  • (skvarel) Added wildcard patterns for exception list (* matches any suffix, ? matches one character)

0.2.4 (2026-06-11)

  • (skvarel) Fixed admin UI translations for scan path tooltips and help texts
  • (skvarel) Fixed runtime validation for scan interval and stale/dead thresholds
  • (skvarel) Modified scan result timestamps to use ISO 8601 format

License

MIT License

Copyright (c) 2026 skvarel skvarel@inventwo.com

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.