fixed default network

This commit is contained in:
2026-06-29 15:06:48 +03:00
parent 980608a279
commit e9e2cbbfec
18 changed files with 1227 additions and 138 deletions
+281
View File
@@ -0,0 +1,281 @@
# Настройка ButtonTask на готовом устройстве
Инструкция для панели, которая **уже установлена и запущена**. Процесс установки и деплоя здесь не описан.
## Исходное состояние
| Параметр | Значение по умолчанию |
|----------|------------------------|
| IP устройства | `192.168.1.60` (статический, `eth0`) |
| Веб-конфигуратор | `http://192.168.1.60:8080` |
| Пароль веба и панели | `admin` |
| Кнопка на экране | «Вызов клининга» |
| URL кнопки | `http://192.168.1.55` (адрес сервиса в вашей сети) |
| Срабатывание | удержание ~800 мс |
Убедитесь, что ПК в той же подсети (`192.168.1.x`) и панель отвечает по IP.
---
## Два способа настройки
| Что настраивать | Где удобнее |
|-----------------|-------------|
| URL, тексты, иконки, цвет, удержание/клик | Панель **или** веб |
| **Правила JSON** (расширенная проверка ответа), polling | Только **веб** |
| Внешний вид (фон, сетка, обводка), сеть, журнал, OTA | Только **веб** |
| Включить/выключить расширенную проверку (без правил) | Панель (переключатель) + веб (правила) |
Изменения из веба и с панели пишутся в один файл `/opt/buttontask/config/config.json` и подхватываются приложением автоматически.
---
## Веб-конфигуратор
### Вход
1. Откройте в браузере: **http://192.168.1.60:8080**
2. Пароль: **admin** (сменить — вкладка «Безопасность»).
### Вкладка «Кнопки»
Список кнопок. Для каждой: **✎ Редактировать**, **✕ Удалить**. Кнопка **+ Добавить** — новая кнопка.
Порядок в списке меняется перетаскиванием (drag-and-drop).
#### Диалог редактирования кнопки
| Поле | Назначение |
|------|------------|
| Подпись | Текст под кнопкой на панели |
| Иконка | Файл из `/opt/buttontask/icons` (загрузка — вкладка «Внешний вид») |
| Метод | `GET` или `POST` |
| URL | Куда уходит запрос, например `http://192.168.1.55/api/call` |
| Текст успеха | Сообщение при **успехе** (не подставляйте сюда URL) |
| Текст ошибки | Сообщение при ошибке |
| Текст ожидания | Пока идёт запрос или polling (`...` по умолчанию) |
| Цвет кнопки | Цвет круга на панели |
| Срабатывание | **Удержание** (нужно держать палец) или **Клик** |
| Длительность удержания | 200–3000 мс |
После **Сохранить** страница перезагрузится; на панели изменения видны сразу.
---
## Простая кнопка (только HTTP)
Если галочка **«Расширенная проверка ответа (JSON)»** **выключена**:
- успех = HTTP-код **меньше 400** (ответ 200, 201…);
- ошибка = код 400 и выше или сеть недоступна;
- тело ответа **не разбирается**.
Подходит, когда сервер просто отвечает `200 OK` без важного JSON.
**Пример — дефолтная «Вызов клининга»:**
- URL: `http://192.168.1.55`
- Текст успеха: `Вызов отправлен`
- Текст ошибки: `Ошибка`
- Расширенная проверка: выкл.
---
## Расширенная проверка JSON
Включите **«Расширенная проверка ответа (JSON)»**, если сервер возвращает JSON и результат нужно понимать по полям в теле, а не только по коду HTTP.
### Как это работает на панели
1. Нажатие → белая обводка / свечение (**ожидание**).
2. По правилам:
- **Принято** → зелёная обводка;
- **Ошибка** → красная;
- **Ожидание** → жёлтое пульсирующее свечение, повтор запросов (polling).
3. Через несколько секунд подпись и обводка гаснут (по умолчанию ~5 с).
Пока кнопка занята (статус не «готов»), повторное нажатие блокируется.
### Блок настроек в вебе
| Параметр | Описание |
|----------|----------|
| Требовать HTTP < 400 | При выкл. смотрят только правила JSON, даже если HTTP 500 |
| Если ни одно правило не подошло | Что делать с неизвестным ответом (обычно **Ошибка**) |
| **Правила** | Таблица: поле → значение → **результат** → сообщение |
| Polling | Интервал, макс. попыток, общий таймаут — только для результата **Ожидание** |
### Строка правила
Колонки (слева направо):
1. **Поле** — имя в JSON, точка для вложенности (`data.status`).
2. **Условие** — «равно» или «содержит».
3. **Значение** — с чем сравнивать.
4. **Результат****Принято** / **Ошибка** / **Ожидание** ← важнейшая колонка.
5. **Сообщение** — необязательно; иначе берётся текст успеха/ошибки/ожидания.
> **Частая ошибка:** для `success = error` в колонке результата оставили **Принято** — панель станет зелёной с текстом «Сбой». Для ошибки нужно **Ошибка**, для `pending` — **Ожидание**.
### Пример: ответ с полем `success`
Сервер отвечает: `{"success":"ok"}` / `"pending"` / `"error"`.
| поле | равно | результат | сообщение |
|------|-------|-----------|-----------|
| `success` | `ok` | Принято | Готово |
| `success` | `pending` | **Ожидание** | Ждём… |
| `success` | `error` | **Ошибка** | Сбой |
Polling: интервал **2000** мс, попыток **10**, таймаут **60000** мс.
### Пример: вложенный JSON
URL: `http://сервер/nested?status=ready`
Ответ: `{"data":{"status":"ready"}}`
| поле | равно | результат | сообщение |
|------|-------|-----------|-----------|
| `data.status` | `ready` | Принято | Принято |
| `data.status` | `busy` | Ожидание | Занято |
| `data.status` | `fail` | Ошибка | Отказ |
### Пример: эндпоинт `/state`
URL: `http://сервер/state?phase=error`
В **теле** JSON поле называется `success`, не `phase`:
```json
{"success":"error","ts":...}
```
Правило: поле **`success`**, значение `error`, результат **Ошибка**.
### Polling
Используйте, когда первые ответы приходят с `"success":"pending"`, а готовность — с `"success":"ok"`.
- Каждые `intervalMs` мс повторяется тот же URL.
- Останавливается при **Принято** / **Ошибка**, по лимиту попыток или таймауту.
- Перед повторным тестом на тестовом сервере сбросьте счётчик: `GET .../reset`.
---
## Настройка на самой панели
### Открыть настройки
1. Нажмите **шестерёнку** (правый нижний угол).
2. Введите пароль (**admin** по умолчанию).
### Разделы меню
| Раздел | Возможности |
|--------|-------------|
| **Кнопки** | Список, добавить, редактировать, удалить, порядок (≡ перетащить) |
| **Расположение** | Сетка / список, число колонок, отступы, подписи |
| **Фон** | Градиент, цвет, картинка |
| **Обводка** | Цвета и толщина OK/ошибка, свечение |
| **Сеть** | Просмотр интерфейсов; смена IP — удобнее в вебе |
| **Обновление** | Текущая версия ПО (OTA — в основном через веб) |
| **Сменить пароль** | Пароль для панели и веба |
### Редактор кнопки на панели
Те же поля, что в вебе: подпись, иконка, метод, URL, тексты, цвет, удержание/клик.
Переключатель **«Расширенная проверка»** только включает/выключает режим. **Правила JSON задаются в веб-конфигураторе** (подсказка на экране).
### Нажатие кнопки на панели
- **Удержание** (по умолчанию): удерживайте, пока заполнится кольцо (~800 мс), затем отпустите — уйдёт запрос.
- **Клик**: одно касание.
---
## Вкладки веба (кратко)
### Внешний вид
- **Расположение** — сетка/список, колонки, отступы.
- **Фон** — тип, цвета, анимация, фоновое изображение.
- **Обводка** — цвета OK/ERR, толщина, радиус свечения.
- **Иконки** — загрузка PNG/JPG/SVG в папку иконок.
### Сеть
Состояние `eth0`, режим DHCP/статический IP, шлюз, DNS. После **Применить** настройки сохраняются в `network.json` и применяются скриптом сети.
### Система
- Нагрузка CPU/RAM, время.
- Доступ: ping (ICMP), SSH, порт веба.
- **Журнал нажатий** — какая кнопка, URL, результат (`OK` / `ERR` / `WAIT`), время в мс.
Полезно при отладке: если везде `OK 200` без `WAIT`, проверьте колонку **результат** в правилах.
### Обновление
Загрузка пакета `.tar.gz` (бинарник + веб). Конфиг и иконки в `/opt/buttontask/config` и `icons` **не затираются**.
### Безопасность
Смена пароля веба и панели.
---
## Проверка с ПК (необязательно)
Для отладки HTTP без реального сервиса на другой машине в сети:
```bash
python3 tools/button-test-server.py --host 0.0.0.0 --port 8765
```
Примеры URL для кнопки:
| URL | Поведение |
|-----|-----------|
| `http://<IP-ПК>:8765/ok` | Простой HTTP 200 |
| `http://<IP-ПК>:8765/state?phase=error` | JSON `success: error` |
| `http://<IP-ПК>:8765/poll?pending=3` | 3× pending, затем ok |
| `http://<IP-ПК>:8765/nested?status=ready` | Вложенное поле `data.status` |
На Windows откройте порт 8765 в брандмауэре. Перед тестом poll: `http://<IP-ПК>:8765/reset`.
---
## Типичные проблемы
| Симптом | Причина | Что сделать |
|---------|---------|-------------|
| Всегда зелёный, один запрос | Правила с результатом **Принято** для всех значений | Исправить колонку «результат» |
| Сообщение = URL кнопки | URL попал в «Текст успеха» | Вписать нормальный текст |
| Polling не идёт | Для `pending` стоит результат **Принято** | Поставить **Ожидание** |
| `phase=error`, а правило не срабатывает | В JSON поле `success`, не `phase` | Правило по полю `success` |
| Веб не открывается | Неверный IP / порт / firewall | Проверить `192.168.1.60:8080`, вкладка «Сеть» |
| Настройки не видны на панели | Не сохранили в вебе | Нажать **Сохранить** в диалоге кнопки |
### Просмотр конфига на устройстве (SSH)
```bash
sudo cat /opt/buttontask/config/config.json
```
Проверка последнего нажатия:
```bash
tail -1 /opt/buttontask/run/button-log.jsonl | python3 -m json.tool
```
Ожидаемые поля при работающей расширенной проверке: `"outcome": "ok"` / `"error"` / `"pending"`, при простом HTTP — `"outcome": "http"`.
---
## Минимальный чеклист для новой кнопки
1. [ ] URL сервиса доступен с панели (`ping`, HTTP).
2. [ ] Тексты успеха/ошибки/ожидания заполнены осмысленно.
3. [ ] Если нужен JSON — включена расширенная проверка, добавлены правила с **правильным результатом**.
4. [ ] Для долгих операций — правило **Ожидание** + блок polling.
5. [ ] Проверка на панели + запись в журнале на вкладке «Система».