📊 Анализаторы Конфигурации Home Assistant¶
Набор инструментов для глубокого анализа и оптимизации конфигурации Home Assistant.
🎯 Возможности¶
🕸️ Граф зависимостей (dependency.py
)¶
Анализирует связи между сущностями в вашей конфигурации.
Что делает:
- 🔍 Находит все сущности и их использование
- 🔗 Строит граф зависимостей
- 🗑️ Обнаруживает неиспользуемые сущности (orphaned)
- ⚠️ Детектирует циклические зависимости
- 💥 Оценивает impact удаления сущности
Использование:
# Через меню
./ha → 12) 🕸️ Граф зависимостей
# Напрямую
python3 scripts/analyzers/dependency.py config
Пример вывода:
📊 Статистика:
Всего сущностей: 245
Автоматизаций: 42
Скриптов: 18
🔴 Неиспользуемые сущности (15):
• sensor.unused_temperature
• binary_sensor.old_motion
...
🔝 Топ-10 самых используемых:
12x • sensor.outdoor_temperature
8x • person.home
7x • sun.sun
📈 Анализ сложности (complexity.py
)¶
Оценивает maintainability конфигурации и находит проблемные места.
Метрики:
- 🔢 Cyclomatic complexity автоматизаций
- 📏 Длина шаблонов
- 🌲 Глубина вложенности условий
- 📊 Количество действий/триггеров
- 🔁 Использование choose/repeat
Использование:
# Через меню
./ha → 13) 📈 Анализ сложности
# Напрямую
python3 scripts/analyzers/complexity.py config
Пример вывода:
📊 Метрики:
Автоматизаций: 42
Средняя сложность: 12.3
Высокая сложность: 5
🔴 КРИТИЧЕСКИЕ проблемы (2):
automation.complex_heating (complexity: 45)
- Глубокая вложенность условий (7)
- Длинный шаблон (350 символов)
- Много действий (12)
💡 Рекомендации:
• Разбить сложные автоматизации на подскрипты
• Переместить сложные шаблоны в template sensors
• Использовать scripts для повторяющихся действий
🔄 Сравнение изменений (diff.py
)¶
Анализирует что изменилось между версиями конфигурации.
Что показывает:
- ✅ Добавленные сущности
- 🔴 Удаленные сущности (с оценкой риска!)
- 🔄 Измененные автоматизации
- ⚠️ Impact analysis
- 🎯 Уровень риска изменений
Использование:
# Через меню (сравнивает HEAD~1 с HEAD)
./ha → 14) 🔄 Сравнить изменения
# Напрямую (указать коммиты)
python3 scripts/analyzers/diff.py config abc123 xyz789
Пример вывода:
📊 Всего изменений: 12
🎯 Уровень риска: HIGH (score: 35)
✅ Добавлено автоматизаций: 3
🔴 Удалено сенсоров: 2
• sensor.old_temperature
• sensor.unused_motion
⚠️ ПРЕДУПРЕЖДЕНИЯ:
⚠️ Удалено 2 сенсоров - может сломать автоматизации!
⚠️ Большое количество изменений (12)
💡 РЕКОМЕНДАЦИИ:
• Создать бэкап перед развертыванием
• Протестировать изменения на dev-окружении
• Проверить зависимости удаленных сущностей
🚀 Быстрый старт¶
Через интерактивное меню¶
Самый простой способ:
Выберите нужный анализатор:
- 12 - Граф зависимостей
- 13 - Анализ сложности
- 14 - Сравнить изменения
Прямой запуск¶
# Граф зависимостей
python3 scripts/analyzers/dependency.py config
# Анализ сложности
python3 scripts/analyzers/complexity.py config
# Сравнение версий
python3 scripts/analyzers/diff.py config HEAD~1 HEAD
📚 Детальное руководство¶
Граф зависимостей¶
Анализ конкретной сущности¶
from scripts.analyzers.dependency import DependencyAnalyzer
analyzer = DependencyAnalyzer('config/')
analyzer.analyze()
# Impact analysis для сенсора
impact = analyzer.analyze_impact('sensor.living_room_temp')
print(f"Severity: {impact['severity']}")
print(f"Used in {impact['direct_usage']} places")
Генерация Mermaid диаграммы¶
# Граф для конкретной сущности
mermaid = analyzer.generate_mermaid_graph('sensor.temperature', depth=2)
print(mermaid)
# Топ-10 самых используемых
mermaid = analyzer.generate_mermaid_graph()
print(mermaid)
Анализ сложности¶
Пороговые значения¶
- 0-10: ✅ Низкая сложность - хорошо поддерживается
- 10-20: 🟡 Средняя сложность - приемлемо
- 20-30: 🟠 Высокая сложность - рассмотреть рефакторинг
- 30+: 🔴 Критическая сложность - требуется упрощение
Что влияет на сложность¶
- Количество триггеров (>3) - каждый +2
- Глубина вложенности условий (>3) - каждый уровень +5
- Количество действий (>5) - каждое +2
- Длинные шаблоны (>200 символов) - +5
- Множественные условия в шаблонах (>2) - каждое +2
- Использование choose - каждое +5
- Большой объем кода (>100 строк) - +1 за каждые 10 строк
Сравнение изменений¶
Оценка риска¶
Система автоматически оценивает риск изменений:
- Удаление сенсоров: +10 за каждый (высокий риск!)
- Удаление автоматизаций: +5 за каждую
- Большое количество изменений (>20): +10
Уровни риска:
- low (0-5): ✅ Безопасно
- medium (5-20): 🟡 Требует внимания
- high (20-50): 🟠 Рекомендуется бэкап
- critical (50+): 🔴 Обязателен бэкап и тестирование
🔧 Интеграция в workflow¶
Pre-deploy проверка¶
Добавьте в scripts/deploy.sh
:
# Анализ сложности перед деплоем
python3 scripts/analyzers/complexity.py config
# Проверка изменений
python3 scripts/analyzers/diff.py config HEAD~1 HEAD
read -p "Продолжить развертывание? (y/n) " -n 1 -r
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
Git pre-commit hook¶
# .git/hooks/pre-commit
#!/bin/bash
# Анализ изменений
python3 scripts/analyzers/diff.py config HEAD HEAD 2>&1 | grep -q "CRITICAL"
if [ $? -eq 0 ]; then
echo "🔴 Критические изменения обнаружены!"
echo "Рекомендуется review перед коммитом"
exit 1
fi
🎯 Best Practices¶
1. Регулярный анализ¶
Запускайте анализаторы:
- ✅ Перед каждым деплоем
- ✅ После добавления новых автоматизаций
- ✅ Еженедельно для мониторинга
2. Целевые метрики¶
Стремитесь к:
- 📊 Средняя сложность < 15
- 🔝 Нет автоматизаций с complexity > 30
- 🗑️ Нет orphaned entities
- ⚠️ Нет циклических зависимостей
3. Рефакторинг¶
Если complexity > 20:
- Разбить на подскрипты
- Вынести шаблоны в sensors
- Упростить условия
- Использовать helpers (input_*)
4. Документация¶
Комментируйте сложные автоматизации:
# Сложная логика отопления с погодной компенсацией
# Complexity: 25 (рефакторинг в TODO)
automation:
- alias: "Advanced Heating Control"
description: |
Управление отоплением с учетом:
- Прогноза погоды
- Времени прихода домой
- Текущей температуры
...
🐛 Troubleshooting¶
Проблема: "File not found"¶
# Убедитесь что config/ смонтирован
./ha → 2) Смонтировать конфиги
# Или укажите полный путь
python3 scripts/analyzers/dependency.py /mnt/hassio
Проблема: "YAML parse error"¶
Проблема: "Git not found" (для diff)¶
Анализатор diff.py
требует git репозиторий:
📝 TODO / Roadmap¶
Планируемые функции:
- [ ] 🤖 AI-powered рекомендации по оптимизации
- [ ] 📊 Экспорт метрик в Grafana
- [ ] 🧪 Автоматическое тестирование автоматизаций
- [ ] 🔍 Детекция code smells
- [ ] 📈 Исторические тренды сложности
- [ ] 🔗 Integration с Home Assistant API
- [ ] 📚 Генератор документации из кода
🤝 Contributing¶
Нашли баг? Есть идея для улучшения?
- Fork репозитория
- Создайте feature branch
- Commit изменений
- Push в branch
- Создайте Pull Request
📄 Лицензия¶
MIT License - используйте свободно!
🙏 Благодарности¶
Спасибо community Home Assistant за вдохновение и идеи!
Полная документация: https://gfermoto.github.io/HASSio_Cursor