# Руководство пользователя «Система управления оборудованием “DeviceControl”»
## Содержание
1. Введение
2. Веб-интерфейс
3. Управление устройствами
4. Управление группами
5. HTTP API
6. Административная панель
7. Примеры использования
## Введение
«Система управления оборудованием “DeviceControl”» (далее Система) предоставляет два способа управления устройствами:
1. **Веб-интерфейс** — графический интерфейс для управления устройствами
2. **HTTP API** — программный интерфейс для интеграции с другими системами
## Веб-интерфейс
### Доступ к веб-интерфейсу
Веб-интерфейс доступен по адресу:
```
http://:<порт>/
```
Порт по умолчанию указан в файле `config.conf` в секции `[images]`, параметр `localPort` (по умолчанию 7890).
### Основные элементы интерфейса
- **Группы устройств** — отображаются в виде иконок на главной странице
- **Устройства** — отображаются внутри групп
- **Элементы управления** — кнопки, переключатели, слайдеры для управления устройствами
- **Индикаторы состояния** — лампочки и другие индикаторы состояния устройств
### Управление через веб-интерфейс
1. Откройте веб-интерфейс в браузере
2. Выберите группу устройств
3. Выберите устройство
4. Используйте элементы управления для выполнения команд
Внешний вид интерфейса зависит от настроенных групп и устройств
Рис. 1. Основной экран системы с одной группой устройств

Рис. 2. Группа устройств

## Управление устройствами
### Выполнение команд для одного устройства
Команды выполняются через HTTP GET запросы:
```
http://:<порт>/?action=<команда>&device=
```
**Пример:**
```
http://localhost:7890/?action=on&device=device1
```
### Параметры запроса
- `action` — название команды (обязательный параметр)
- `device` — ID устройства (обязательный параметр)
- `group` — ID группы (опциональный параметр)
- Другие параметры зависят от конкретной команды
### Доступные команды
Список доступных команд определяется в файле `commands.conf`. Типичные команды:
- `on` — включить устройство
- `off` — выключить устройство
- `status` — получить статус устройства
- `sliderget` — получить значение слайдера
- `sliderset` — установить значение слайдера
## Управление группами
### Выполнение команд для всех устройств
```
http://:<порт>/?action=<команда>&device=all
```
### Выполнение команд для нескольких устройств
```
http://:<порт>/?action=<команда>&device=[device1,device2,device3]
```
### Выполнение команд для группы
```
http://:<порт>/?action=<команда>&group=
```
### Выполнение команд для нескольких групп
```
http://:<порт>/?action=<команда>&group=[group1,group2]
```
## HTTP API
### Формат ответа
Все ответы возвращаются в формате JSON:
```json
{
"params": {
"action": "on",
"device": "device1",
"group": ""
},
"code": 0,
"value": "OK"
}
```
### Коды ответов
- `0` — успешное выполнение
- `-1` — команда не найдена
- `-2` — ошибка выполнения команды
- `-3` — плагин не загружен
- `-4` — общая ошибка
- `-100` — ошибка синтаксиса команды
- `-200` — ошибка выполнения условия
### Получение конфигурации
```
GET /?action=getsetup
```
Возвращает JSON с описанием всех групп, устройств и их элементов управления.
### Получение статуса выполнения
```
GET /?action=internalStatus
```
Возвращает информацию о текущей выполняемой команде и группе.
## Примеры использования
### Пример 1: Включение устройства
```bash
curl "http://localhost:7890/?action=on&device=device1"
```
Ответ:
```json
{
"params": {
"action": "on",
"device": "device1",
"group": ""
},
"code": 0,
"value": "OK"
}
```
### Пример 2: Получение статуса устройства
```bash
curl "http://localhost:7890/?action=status&device=device1"
```
Ответ:
```json
{
"params": {
"action": "status",
"device": "device1",
"group": ""
},
"code": 0,
"value": "ON"
}
```
### Пример 3: Включение всех устройств в группе
```bash
curl "http://localhost:7890/?action=on&group=group1"
```
Ответ:
```json
{
"params": {
"action": "on",
"device": "group1",
"group": "group1"
},
"code": "*",
"value": [
{"device": "device1", "value": "OK"},
{"device": "device2", "value": "OK"}
]
}
```
### Пример 4: Использование JavaScript
```javascript
// Включение устройства
fetch('http://localhost:7890/?action=on&device=device1')
.then(response => response.json())
.then(data => {
console.log('Результат:', data);
});
// Получение статуса
fetch('http://localhost:7890/?action=status&device=device1')
.then(response => response.json())
.then(data => {
console.log('Статус:', data.value);
});
```
### Пример 5: Условные команды
Система поддерживает условные команды:
- `if(условие, команда)` — выполнить команду, если условие истинно
- `if(условие, команда1, команда2)` — выполнить команду1, если условие истинно, иначе команду2
- `wait(условие, команда)` — ждать выполнения условия, затем выполнить команду
- `waitEx(команда, условие, команда)` — выполнить первую команду, ждать условия, затем выполнить вторую команду
- `timeout(секунды, команда)` — подождать указанное количество секунд, затем выполнить команду
**Пример:**
```
if(device1.status==1, on, off)
wait(device1.status==1, on)
timeout(5, on)
```
## Аутентификация
Если в файле `config.conf` установлен параметр `useAuth=1`, требуется HTTP Basic Authentication.
Параметры аутентификации:
- `user` — имя пользователя
- `password` — пароль
**Пример с аутентификацией:**
```bash
curl -u username:password "http://localhost:7890/?action=on&device=device1"
```
## CORS
Система поддерживает CORS (Cross-Origin Resource Sharing). Параметр `remote` в `config.conf` определяет разрешенные источники запросов.
Для разрешения всех источников установите:
```
remote=*
```
## Логирование
Все операции логируются в файл, указанный в `config.conf` (параметр `log`).
Уровни логирования:
- `0` — отключено
- `1` — информация
- `2` — ошибки
- `3` — отладка
Уровень логирования задается параметром `logLevel` в `config.conf`.
---
**Примечание**: Для получения подробной информации о настройке системы см. Инструкция по установке и запуску.