Initial commit: Security Mesh Node

This commit is contained in:
UA1ZBE
2026-07-22 07:56:45 +03:00
commit 965c3e9e30
19 changed files with 1565 additions and 0 deletions

121
USER_MANUAL.md Normal file
View File

@@ -0,0 +1,121 @@
# Security Mesh Node — Инструкция пользователя
## Обзор
Security Node — LoRa mesh-устройство, которое следит за датчиками (геркон, PIR движение, температура) и управляет 2 реле. Работает по радиоканалу через MeshCore — без интернета, без Bluetooth, без проводов.
Команды и оповещения передаются как текстовые сообщения по mesh-сети.
---
## Быстрый старт
1. Подайте питание (USB или батарея).
2. Подождите ~10 секунд — устройство отправит `poweron`.
3. Отправляйте команды с любого другого узла mesh.
Все команды **не чувствительны к регистру**, лишние пробелы в конце игнорируются.
**Префикс не обязателен** — работают и `"status"`, и `"Security: status"`.
---
## Команды
| Команда | Что делает | Пример ответа |
|---------|-----------|---------------|
| `help` | Список всех команд | `help:ohrana on,ohrana off,...` |
| `ohrana on` | **Включить охрану** — датчики активны, реле 1 замкнуто | `ohrana on ok` |
| `ohrana off` | **Выключить охрану** — датчики не активны, реле 1 разомкнуто | `ohrana off ok` |
| `relay1 on` | Включить реле 1 (независимо от охраны) | `relay1 on ok` |
| `relay1 off` | Выключить реле 1 | `relay1 off ok` |
| `relay2 on` | Включить реле 2 | `relay2 on ok` |
| `relay2 off` | Выключить реле 2 | `relay2 off ok` |
| `status` | Показать состояние устройства | `status:armed temp:+23.5C hall:ok motion:trig` |
| `ver` | Версия прошивки (дата сборки) | `build:Jul 21 2026 15:30:00` |
| `scan` | Измерить уровень шума в эфире | `noise:-112dBm` |
| `security_conf <имя>` | Сменить канал (пароль из `<имя>`) | `channel:mysecret` |
---
## Поля статуса
Ответ: `status:armed/off temp:+XX.XC/N/A hall:trig/ok motion:trig/ok`
| Поле | Значение |
|------|----------|
| `status:armed` | Охрана включена (датчики активны) |
| `status:off` | Охрана выключена |
| `temp:+23.5C` | Температура с датчика DS18B20 |
| `temp:N/A` | Датчик температуры не подключён |
| `hall:ok` | Геркон замкнут (норма) |
| `hall:trig` | Геркон разомкнулся (дверь/окно открыли) |
| `motion:ok` | Движения нет |
| `motion:trig` | Движение обнаружено |
---
## Оповещения
Когда охрана **включена** (`ohrana on`), устройство автоматически отправляет:
| Оповещение | Что значит |
|------------|-----------|
| `alert:hall` | Геркон разомкнулся — дверь/окно открыли |
| `alert:motion` | PIR датчик сработал — движение |
Одно и то же оповещение не повторится раньше чем через **10 минут** (защита от дребезга).
Оповещение сбрасывается автоматически, когда датчик возвращается в нормальное состояние.
---
## Сообщение при запуске
Через ~10 секунд после подачи питания устройство отправляет:
`poweron Jul 21 2026 15:30:00`
Это подтверждает, что устройство включено и работает на текущем канале.
---
## Светодиод (LED на плате)
| Режим | Что значит |
|-------|-----------|
| Не горит | Охрана выключена, нет активности |
| Медленно мигает (1 сек) | **Охрана включена** |
| 3 быстрых вспышки | Получена команда (любая) |
| Часто мигает (100 мс) | **Ошибка радио** — аппаратная проблема |
---
## Реле
- **Реле 1** — управляется `ohrana on/off` и `relay1 on/off`.
Охрана включена (`ohrana on`): **замкнуто** (NC разомкнуты, NO замкнуты).
Охрана выключена (`ohrana off`): **разомкнуто**.
- **Реле 2** — независимое, только `relay2 on/off`.
Состояние сохраняется при перезагрузке.
---
## Смена канала (`security_conf`)
По умолчанию канал формируется из пароля `"1234"`.
Чтобы сменить:
```
security_conf мойпароль
```
Ответ: `channel:мойпароль`
**Важно:** Все устройства должны быть на одном канале. После смены канала связь будет только с теми узлами, у которых такой же пароль.
---
## Советы
- Если команда не получила ответа: проверьте канал, питание, дальность связи. LED должен мигнуть 3 раза при получении команды — если не мигнул, сообщение не дошло.
- Все ответы тоже передаются по mesh — они появятся в ленте сообщений вашего приложения.
- `scan` выполняется около 1 секунды (20 замеров RSSI).