9.8 KiB
Отчет по доступным API и возможностям управления Synology NAS
1. Доступные API Synology NAS
На вашем Synology NAS (модель DS223j с DSM 7.2.2) обнаружено 572 различных API. Ниже перечислены ключевые категории API, которые можно использовать для расширения функциональности бота:
1.1. API для управления питанием
- SYNO.Core.Hardware.PowerRecovery (v1) - основной API для управления питанием
- SYNO.Core.Hardware.PowerSchedule (v1) - API для настройки расписания включения/выключения
- SYNO.Core.Hardware.NeedReboot (v1) - API для перезагрузки системы
1.2. API для системной информации
- SYNO.DSM.Info (v2) - основной API для получения общей информации о системе
- SYNO.Core.System (v1) - API для получения расширенной системной информации
- SYNO.Core.System.Status (v1) - API для получения статуса системы
- SYNO.Core.System.Utilization (v1) - API для получения сведений о загрузке системы
1.3. API для хранилища и файлов
- SYNO.Storage.CGI.Storage - информация о хранилище и дисках
- SYNO.FileStation.List - получение списка файлов и папок
1.4. API для мониторинга
- SYNO.Core.System.Process - информация о запущенных процессах
- SYNO.Core.System.SystemHealth - состояние здоровья системы
2. Расширенные команды управления NAS
Бот уже поддерживает следующие базовые команды:
/start- Начало работы с ботом/status- Проверка текущего статуса NAS/power- Управление питанием NAS/help- Вывод справки
Также реализованы расширенные команды:
/system- Подробная информация о системе/storage- Информация о хранилище и дисках/shares- Список общих папок/load- Текущая нагрузка на систему/security- Статус безопасности системы/checkapi- Проверка доступных API Synology
2.1. Рекомендуемые дополнительные команды
На основе анализа доступных API предлагаю добавить следующие команды:
2.1.1. Управление питанием и расписанием
/schedule- Управление расписанием включения/выключения NAS/wakeup- Немедленное включение NAS через Wake-on-LAN/quickreboot- Быстрая перезагрузка без запроса подтверждения
2.1.2. Мониторинг системы
/processes- Просмотр активных процессов и их загрузки/network- Детальная информация о сетевых подключениях/temperature- Мониторинг температуры системы и дисков/updates- Проверка доступных обновлений для DSM
2.1.3. Управление файлами
/browse [путь]- Просмотр файлов в указанной директории/search [шаблон]- Поиск файлов по шаблону/quota- Просмотр информации о квотах пользователей
2.1.4. Резервное копирование
/backup- Управление задачами резервного копирования/backupstatus- Проверка статуса резервного копирования
3. Возможности использования API
3.1. Оптимизация текущего кода
- Обнаружено, что для успешного взаимодействия с API необходимы специальные HTTP-заголовки, имитирующие браузер
- API версии 3 показывает лучшую стабильность для базовых операций, чем версия 6
- Для аутентификации рекомендуется использовать куки и форматы, совместимые с веб-интерфейсом
3.2. Рекомендуемые настройки API
- SYNOLOGY_POWER_API = SYNO.Core.Hardware.PowerRecovery
- SYNOLOGY_INFO_API = SYNO.DSM.Info
- SYNOLOGY_API_VERSION = 2 (вместо текущего значения 6)
3.3. Новые функциональные возможности
3.3.1. Мониторинг производительности
def get_performance_stats():
"""Получение детальной статистики производительности"""
result = api._make_api_request("SYNO.Core.System.Utilization", "get", version=1)
return result
3.3.2. Управление сервисами
def manage_services(service_name, action="status"):
"""Управление системными сервисами (start/stop/restart/status)"""
result = api._make_api_request("SYNO.Core.Service", action, version=1,
params={"service": service_name})
return result
3.3.3. Просмотр журналов
def get_system_logs(limit=20):
"""Получение системных журналов"""
result = api._make_api_request("SYNO.Core.SyslogClient.Log", "list", version=1,
params={"limit": limit})
return result
3.3.4. Настройка расписания питания
def set_power_schedule(days, time, action="boot"):
"""Настройка расписания питания (boot/shutdown)"""
result = api._make_api_request("SYNO.Core.Hardware.PowerSchedule", "set", version=1,
params={"day": days, "time": time, "action": action})
return result
4. Решение текущих проблем API
4.1. Проблема с получением информации о хранилище
Текущий код использует заглушку для get_storage_status(). Рекомендуемая реализация:
def get_storage_status(self) -> Dict[str, Any]:
"""Получение информации о хранилище"""
# Попробуем получить информацию о дисках
disk_result = self._make_api_request("SYNO.Storage.CGI.Storage", "load_info", version=1)
if not disk_result:
# Пробуем альтернативный API
disk_result = self._make_api_request("SYNO.Core.Storage", "info", version=1)
# Собираем результат
volumes = disk_result.get("volumes", [])
disks = disk_result.get("disks", [])
total_size = sum(vol.get("size", {}).get("total", 0) for vol in volumes)
total_used = sum(vol.get("size", {}).get("used", 0) for vol in volumes)
return {
"volumes": volumes,
"disks": disks,
"total_size": total_size,
"total_used": total_used
}
4.2. Проблема с получением списка общих папок
def get_shared_folders(self) -> List[Dict[str, Any]]:
"""Получение списка общих папок"""
result = self._make_api_request("SYNO.FileStation.List", "list_share", version=2)
if not result:
return []
return result.get("shares", [])
4.3. Проблема с получением информации о нагрузке
def get_system_load(self) -> Dict[str, Any]:
"""Получение информации о нагрузке системы"""
result = self._make_api_request("SYNO.Core.System.Utilization", "get", version=1)
if not result:
return {}
return {
"cpu_load": result.get("cpu", {}).get("user", 0) + result.get("cpu", {}).get("system", 0),
"memory": result.get("memory", {}),
"network": result.get("network", {})
}
5. Заключение
Synology NAS предоставляет обширный набор API, которые можно использовать для создания полноценного Telegram-бота для управления и мониторинга. Основные рекомендации:
- Обновить версию API до более стабильной (v2-3 вместо v6)
- Добавить специальные HTTP-заголовки для имитации веб-браузера
- Использовать куки для сохранения сессии
- Реализовать новые функции управления на основе доступных API
- Добавить обработку ошибок для нестабильных API (особенно хранилища и общих папок)
Дополнительно рекомендуется реализовать функции автоматического мониторинга и уведомления о важных событиях, таких как высокая температура, заканчивающееся место на дисках или необходимость обновления системы.