Files
nas_control_bot/ОТЧЕТ_ПО_API.md
2025-08-30 10:33:46 +09:00

186 lines
9.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Отчет по доступным 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. Мониторинг производительности
```python
def get_performance_stats():
"""Получение детальной статистики производительности"""
result = api._make_api_request("SYNO.Core.System.Utilization", "get", version=1)
return result
```
#### 3.3.2. Управление сервисами
```python
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. Просмотр журналов
```python
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. Настройка расписания питания
```python
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()`. Рекомендуемая реализация:
```python
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. Проблема с получением списка общих папок
```python
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. Проблема с получением информации о нагрузке
```python
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-бота для управления и мониторинга. Основные рекомендации:
1. Обновить версию API до более стабильной (v2-3 вместо v6)
2. Добавить специальные HTTP-заголовки для имитации веб-браузера
3. Использовать куки для сохранения сессии
4. Реализовать новые функции управления на основе доступных API
5. Добавить обработку ошибок для нестабильных API (особенно хранилища и общих папок)
Дополнительно рекомендуется реализовать функции автоматического мониторинга и уведомления о важных событиях, таких как высокая температура, заканчивающееся место на дисках или необходимость обновления системы.