Для чего нужен этот адаптер?
Адаптер Tidy помогает находить неиспользуемые объекты и состояния для очистки вашей системы. После многих лет использования ioBroker в вашей системе могут накапливаться «мертвые» точки данных из-за удаленных скриптов, удаленных адаптеров или заброшенных конфигураций. Этот адаптер помогает идентифицировать и очищать такие точки данных, чтобы поддерживать чистоту и производительность вашей системы.
Функции
- 📊 Сканирование по пути : настройте несколько путей для сканирования с помощью средства выбора объектов (например,
0_userdata.0,alias.0) - 🚫 Исключения : Исключить из результатов сканирования намеренно статичные точки данных, целые папки или шаблоны с подстановочными знаками.
- 🔍 Интеллектуальное обнаружение : выявляет различные типы проблемных точек данных:
- «Неактивный» : Никогда не обновлялся или очень старый (настраиваемый порог, по умолчанию: 365 дней)
- Устаревшая информация : данные давно не обновлялись (настраиваемый порог, по умолчанию: 90 дней)
- Осиротевшие псевдонимы : псевдонимы, указывающие на несуществующие целевые точки данных.
- Неопределено : Точки данных, в которые не было произведено ни одной записи с момента запуска системы.
- ⚙️ Гибкая конфигурация :
- Настраиваемые пороговые значения возраста для обнаружения «просроченных» и «мертвых» данных.
- Дополнительно можно настроить автоматическое сканирование с заданными интервалами (ежечасно).
- Включение/отключение отдельных путей сканирования
- Дополнительно: полное сканирование всего дерева объектов.
- 🌐 Полное сканирование : сканирование всех состояний в системе (не ограничиваясь настроенными путями) через отдельный канал результатов.
- 🎯 Ручные триггеры : для каждого настроенного пути предусмотрена кнопка запуска сканирования по запросу.
- 📋 Вывод в формате JSON-таблицы : Результаты предоставляются в виде массивов JSON, идеально подходящих для табличных виджетов в VIS.
- 📈 Статистика : Автоматические счетчики общего количества, неактивных, устаревших и потерянных данных.
Конфигурация
Общие настройки
- Включить автоматическое сканирование : При включении все настроенные пути сканируются автоматически.
- Сканировать все объекты (полностью) : При включении этой функции адаптер сканирует все дерево объектов и сохраняет результаты в отдельном файле.
completeканал (см. ниже) - Интервал сканирования : Как часто должно выполняться автоматическое сканирование (в часах, минимум 1)
- Количество дней до «устаревших» данных : точки данных, не обновлявшиеся в течение указанного количества дней, помечаются как устаревшие (предупреждение).
- Количество дней до «неактивности» : точки данных, не обновлявшиеся в течение указанного количества дней, помечаются как неактивные (критические).
Пути сканирования
Настройте один или несколько путей для мониторинга:
- Включено : Включить/отключить этот путь сканирования
- Путь сканирования : выберите папку из дерева объектов или введите путь вручную (например,
0_userdata.0,alias.0,javascript.0Поле остается редактируемым после выбора. - Для сканирования всех экземпляров адаптера : удалите номер экземпляра, чтобы просканировать каждый экземпляр — например
aliasвместоalias.0матчиalias.0,alias.1, и так далее - Имя : Удобное для восприятия имя для этого пути (используется для именования состояний результата).
- Проверка псевдонимов целей : Для
alias.*Проверьте пути, существуют ли целевые точки данных (обнаружение «фантомов»).
Исключения
Исключите из результатов сканирования или статистики точки данных, которые не должны отображаться:
- Объект : Выберите отдельное состояние или папку/канал, чтобы исключить целое поддерево. Поддерживаются подстановочные знаки:
*соответствует любому суффиксу,?соответствует одному символу (например)0_userdata.0.rollo.trigger*) - Комментарий : Необязательное примечание (например, почему этот показатель исключен).
Используйте это для параметров конфигурации, которые редко меняются (например, сохраненная радиостанция для скрипта оповещения), чтобы они не помечались как устаревшие или неактуальные.
Исключения касаются сканирования по траектории и полного сканирования. Каждый канал сканирования обеспечиваетexceptionCount — количество точек данных, исключенных во время последнего сканирования (0, если ни одной).
Точки данных
Для каждого заданного пути (например, "userdata") адаптер создает:
tidy.0.userdata.trigger(кнопка): Нажмите, чтобы запустить сканирование вручную.tidy.0.userdata.result(json): Полные результаты сканирования в виде таблицы JSON.tidy.0.userdata.lastScan(отметка времени): Когда было выполнено последнее сканированиеtidy.0.userdata.count(число): Общее количество найденных точек данныхtidy.0.userdata.deadCount(число): Количество неработающих точек данныхtidy.0.userdata.staleCount(число): Количество устаревших данныхtidy.0.userdata.orphanedCount(число): Количество бесхозных псевдонимовtidy.0.userdata.exceptionCount(число): Количество точек данных, исключенных из списка исключений
Если в общих настройках включена опция «Сканировать все объекты (полностью)» , адаптер дополнительно создает:
tidy.0.complete.trigger(кнопка): Нажмите, чтобы запустить полное сканирование вручную.tidy.0.complete.result(json): Результаты сканирования всех состояний в системеtidy.0.complete.lastScan(отметка времени): Когда было выполнено последнее полное сканированиеtidy.0.complete.count(число): Общее количество найденных точек данныхtidy.0.complete.deadCount(число): Количество неработающих точек данныхtidy.0.complete.staleCount(число): Количество устаревших данныхtidy.0.complete.orphanedCount(число): Количество бесхозных псевдонимовtidy.0.complete.exceptionCount(число): Количество точек данных, исключенных из списка исключений
Полное сканирование использует ту же структуру результатов в формате JSON, что и сканирование по путям. При включении этой опции автоматическое сканирование включает в себя полное сканирование.
Структура результата JSON
Онresult Объект state содержит JSON-массив со следующими полями для каждой точки данных:
[
{
"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
}
]
Описание полей:
| Поле | Описание | Цель |
|---|---|---|
id | Полный путь к точке данных | Уникальный идентификатор |
name | common.name или последняя часть ID | Удобное для пользователя название |
last_ts | Unix-метка времени (мс) или null | Сортировка в фоновом режиме. |
last_ts_iso | строка даты ISO 8601 | Отобразить в таблице |
value | Текущее значение точки данных | Последняя проверка перед удалением |
status | active ,dead ,stale ,undefined ,orphaned | Классификация (английский) |
status_de | aktiv ,inaktiv ,veraltet ,undefiniert ,verwaist | Классификация (на немецком языке) |
issue | dead ,stale ,orphaned_alias , илиnull | Критерий фильтрации (null = OK) |
issue_de | inaktiv ,veraltet ,verwaistes Alias , илиnull | Критерий фильтрации (на немецком языке) |
size | JSON.stringify(val).length | Обнаружил "пожирателей складских запасов" |
Примеры использования
Базовая настройка
- Установите и настройте адаптер.
- Добавьте путь для сканирования, используя средство выбора объектов (например,
0_userdata.0или введите это вручную - Дайте ему имя (например, "userdata")
- Сохранение конфигурации
- Адаптер немедленно выполнит первоначальное сканирование.
- Просмотреть результаты в
tidy.0.userdata.result
Пути сканирования нескольких экземпляров
Чтобы просканировать все экземпляры адаптера, удалите номер экземпляра из пути после выбора:
alias.0→ сканировать только первый экземпляр псевдонимаalias→ сканированиеalias.0,alias.1и любые другие экземпляры псевдонимов.
Поле "Путь" остается полностью редактируемым после использования средства выбора объекта.
Исключения
- Откройте вкладку «Исключения» в настройках адаптера.
- Добавьте точки данных, которые следует игнорировать (например, редко обновляемые значения конфигурации).
- Выберите одно состояние для одной точки данных, папку для исключения целого поддерева или введите шаблон с подстановочным знаком (например,
0_userdata.0.rollo.trigger*) - Сохранение конфигурации — исключенные точки данных больше не будут отображаться в результатах сканирования или подсчетах.
Интеграция VIS
Используйте результат в формате JSON с табличным виджетом для отображения и сортировки ваших данных:
- Создайте табличный виджет в VIS (например, inventtwo Table Widget).
- Привяжите его к
tidy.0.userdata.result - Настройка столбцов:
- Для немецких столов:
id,name,last_ts_iso,status_de,issue_de - Для английских столов:
id,name,last_ts_iso,status,issue
- Для немецких столов:
- Сортировать по
last_ts(начиная с самых старых данных), чтобы найти самые "устаревшие" точки данных. - Фильтр по
issue != nullотображать только проблемные точки данных
Полное сканирование
- Включите опцию «Сканировать все объекты (полностью)» в общих настройках.
- Сохранение конфигурации — адаптер выполнит первоначальное полное сканирование.
- Просмотреть результаты в
tidy.0.complete.result - Использовать
tidy.0.complete.triggerдля повторного сканирования вручную в любое время
Используйте полное сканирование, чтобы получить обзор всех состояний вашего экземпляра. Для целенаправленной очистки используйте сканирование по путям (например,0_userdata.0 ,alias.0 ) обычно более практичны.
Автоматическое обслуживание
- Включите функцию "автоматическое сканирование" в настройках.
- Установите интервал в 24 часа (один раз в день).
- Монитор
deadCountиstaleCountстатистика - Еженедельно анализируйте результаты, чтобы определить кандидатов на очистку.
Поддерживать
Если вам нравится наша работа и вы хотели бы нас поддержать, мы будем благодарны за любое пожертвование. (Эта ссылка ведет на наш счет PayPal и не связана с ioBroker.)
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.
