# Synology Power Control Bot

Telegram-бот для удаленного управления питанием сетевого хранилища Synology NAS (DS223j и другие модели).

## Возможности

### Управление питанием
- ✅ Включение питания через Wake-on-LAN
- ✅ Выключение питания через API DSM
- ✅ Перезагрузка системы с отслеживанием статуса

### Мониторинг системы
- ✅ Проверка онлайн статуса NAS
- ✅ Информация о системе (модель, версия DSM, время работы)
- ✅ Мониторинг загрузки CPU и памяти
- ✅ Данные о температуре и сетевой активности
- ✅ Статус хранилища и дисков
- ✅ Информация о безопасности системы
- ✅ Список активных процессов
- ✅ Мониторинг сетевых подключений

### Управление данными
- ✅ Просмотр списка общих папок
- ✅ Информация о томах и дисках
- ✅ Статистика использования дисков
- ✅ Просмотр файлов и папок
- ✅ Поиск файлов
- ✅ Мониторинг квот пользователей

### Безопасность
- ✅ Ограничение доступа по ID пользователей Telegram
- ✅ Безопасное хранение учетных данных

### Дополнительные функции
- ✅ Мониторинг обновлений DSM и пакетов
- ✅ Управление расписанием питания
- ✅ Проверка статуса резервного копирования

## Требования

- Python 3.8+
- Synology NAS с включенным WoL
- Учетная запись администратора DSM
- Telegram Bot API Token
- Доступ к порту API Synology DSM (обычно 5000 или 5001)

## Установка и настройка

### Метод 1: Локальный запуск

1. Клонируйте репозиторий:
   ```bash
   git clone https://github.com/yourusername/synology_power_control_bot.git
   cd synology_power_control_bot
   ```

2. Установите зависимости:
   ```bash
   pip install -r requirements.txt
   ```

3. Настройте параметры в файле `.env`:
   ```
   # Telegram Bot Configuration
   TELEGRAM_TOKEN=your_telegram_bot_token
   ADMIN_USER_IDS=123456789,987654321

   # Synology NAS Configuration
   SYNOLOGY_HOST=192.168.1.100
   SYNOLOGY_PORT=5000
   SYNOLOGY_USERNAME=admin
   SYNOLOGY_PASSWORD=your_password
   SYNOLOGY_SECURE=False
   SYNOLOGY_TIMEOUT=10

   # Wake-on-LAN Configuration
   SYNOLOGY_MAC=00:11:22:33:44:55
   WOL_PORT=9
   ```

4. Запустите бота:
   ```bash
   python run.py
   ```

### Метод 2: Docker

1. Убедитесь, что Docker и Docker Compose установлены в вашей системе.

2. Клонируйте репозиторий:
   ```bash
   git clone https://github.com/yourusername/synology_power_control_bot.git
   cd synology_power_control_bot
   ```

3. Создайте файл `.env` на основе `.env-example` и заполните необходимыми значениями.

4. Запустите скрипт развертывания:
   ```bash
   # Linux/macOS
   chmod +x deploy.sh
   ./deploy.sh
   
   # Windows
   deploy.cmd
   ```

   Или запустите вручную:
   ```bash
   docker-compose up -d --build
   ```

5. Проверьте статус:
   ```bash
   docker-compose ps
   ```

6. Просмотр логов:
   ```bash
   docker-compose logs -f
   ```

Дополнительная информация о Docker-развертывании доступна в файле [README_DOCKER.md](README_DOCKER.md).

## Подготовка Synology NAS

1. Включите Wake-on-LAN в настройках DSM:
   - Панель управления > Сеть > Общие > Wake-on-LAN

2. Убедитесь, что API DSM включено:
   - Панель управления > Службы терминала и SNMP > Включить DSM API

3. Узнайте MAC-адрес вашего NAS:
   - Панель управления > Сеть > Сетевой интерфейс

## Команды бота

### Основные команды
- `/start` - Начало работы с ботом
- `/status` - Проверка текущего статуса NAS
- `/power` - Управление питанием NAS (включение, выключение, перезагрузка)
- `/help` - Вывод справочной информации

### Информационные команды
- `/system` - Подробная информация о системе
- `/storage` - Информация о хранилище и дисках
- `/shares` - Список общих папок
- `/load` - Текущая нагрузка на систему
- `/security` - Статус безопасности системы
- `/temperature` - Температура устройства
- `/processes` - Список активных процессов
- `/network` - Сетевая информация

### Расширенные команды
- `/schedule` - Расписание питания
- `/browse` - Просмотр файлов
- `/search <запрос>` - Поиск файлов
- `/updates` - Проверка обновлений
- `/backup` - Статус резервного копирования
- `/quota` - Квоты пользователей

### Быстрые команды
- `/quickreboot` - Быстрая перезагрузка
- `/wakeup` - Пробуждение NAS (WOL)

## Структура проекта

```
synology_power_control_bot/
├── logs/               # Директория для логов
├── src/                # Исходный код
│   ├── api/            # Модули для работы с API
│   │   └── synology.py # API для работы с Synology NAS
│   ├── config/         # Модули конфигурации
│   │   └── config.py   # Основная конфигурация
│   ├── handlers/       # Обработчики команд бота
│   │   └── command_handlers.py
│   ├── utils/          # Вспомогательные утилиты
│   │   └── logger.py   # Настройка логирования
│   └── bot.py          # Основной файл запуска бота
├── .env                # Файл с переменными окружения
├── .env-example        # Пример файла переменных окружения
├── .gitignore          # Файл игнорирования Git
├── .dockerignore       # Файлы, игнорируемые при сборке Docker-образа
├── Dockerfile          # Инструкции для сборки Docker-образа
├── docker-compose.yml  # Конфигурация Docker Compose
├── deploy.sh           # Скрипт развёртывания для Linux
├── deploy.cmd          # Скрипт развёртывания для Windows
├── entrypoint.sh       # Скрипт для запуска в Docker
├── README.md           # Основная документация
├── README_DOCKER.md    # Документация по Docker-развёртыванию
└── requirements.txt    # Зависимости проекта
```

## Безопасность

Бот имеет систему авторизации на основе ID пользователей Telegram. Убедитесь, что указали правильные ID в переменной `ADMIN_USER_IDS` в файле `.env`.

## Устранение неисправностей

### Проблемы с подключением к Synology NAS

1. Убедитесь, что NAS доступен по сети (можно проверить с помощью команды `ping`).
2. Проверьте правильность логина и пароля в `.env`.
3. Убедитесь, что DSM API включено в настройках NAS.

### Проблемы с Docker

1. Проверьте статус контейнера: `docker-compose ps`
2. Просмотрите логи: `docker-compose logs -f`
3. Перезапустите контейнер: `docker-compose restart`
4. Проверьте состояние здоровья: `docker inspect --format="{{json .State.Health}}" synology-power-control-bot`
5. Проверьте, что все переменные окружения корректно переданы в контейнер.

### Обновление в Docker

Для обновления бота в Docker:

1. Остановите контейнеры:
   ```bash
   docker-compose down
   ```

2. Загрузите обновления (если используете Git):
   ```bash
   git pull
   ```

3. Запустите контейнеры заново:
   ```bash
   docker-compose up -d --build
   ```

## Лицензия

MIT
