init commit
This commit is contained in:
185
ОТЧЕТ_ПО_API.md
Normal file
185
ОТЧЕТ_ПО_API.md
Normal file
@@ -0,0 +1,185 @@
|
||||
# Отчет по доступным 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 (особенно хранилища и общих папок)
|
||||
|
||||
Дополнительно рекомендуется реализовать функции автоматического мониторинга и уведомления о важных событиях, таких как высокая температура, заканчивающееся место на дисках или необходимость обновления системы.
|
||||
Reference in New Issue
Block a user