add snr command, update docs
This commit is contained in:
@@ -116,6 +116,7 @@ All commands are processed in `onGroupDataRecv()`:
|
|||||||
| `status` | report state | `status:armed/off temp:±X.XC hall:trig/ok motion:trig/ok bat:X.XXV/USB` |
|
| `status` | report state | `status:armed/off temp:±X.XC hall:trig/ok motion:trig/ok bat:X.XXV/USB` |
|
||||||
| `ver` | build date | `build:Mon DD YYYY HH:MM:SS` |
|
| `ver` | build date | `build:Mon DD YYYY HH:MM:SS` |
|
||||||
| `scan` | noise floor | `noise:-XXXdBm` |
|
| `scan` | noise floor | `noise:-XXXdBm` |
|
||||||
|
| `snr` | RSSI и SNR последнего пакета | `rssi:-78dBm snr:+6.5dB` |
|
||||||
| `uptime` | device uptime | `uptime:1d 3h 15m` |
|
| `uptime` | device uptime | `uptime:1d 3h 15m` |
|
||||||
| `kontrol <min>` | auto-status every N min | `kontrol 60 min ok` |
|
| `kontrol <min>` | auto-status every N min | `kontrol 60 min ok` |
|
||||||
| `kontrol off` | disable auto-status | `kontrol off` |
|
| `kontrol off` | disable auto-status | `kontrol off` |
|
||||||
@@ -131,6 +132,8 @@ Alerts (`alert:hall`, `alert:motion`) and startup (`poweron`) are sent immediate
|
|||||||
|
|
||||||
### Special Commands
|
### Special Commands
|
||||||
|
|
||||||
|
- **`snr`** — returns `rssi:-78dBm snr:+6.5dB` based on the last received packet. Uses `radio_driver.getLastRSSI()` and `pkt->getSNR()`. Stored in `last_rssi` / `last_snr` fields, updated on every `onGroupDataRecv`.
|
||||||
|
|
||||||
- **`reboot`** — sends `rebooting` immediately (not deferred), blinks LED 5 times, then `NVIC_SystemReset()`.
|
- **`reboot`** — sends `rebooting` immediately (not deferred), blinks LED 5 times, then `NVIC_SystemReset()`.
|
||||||
- **`uptime`** — calculates uptime from `g_boot_time` (set at boot). Format: `uptime:1d 3h 15m` (days/hours/minutes).
|
- **`uptime`** — calculates uptime from `g_boot_time` (set at boot). Format: `uptime:1d 3h 15m` (days/hours/minutes).
|
||||||
- **`kontrol <min>`** — sets `g_auto_status_interval = min * 60000`. In `loop()`, when `millis() - g_last_auto_status >= interval`, sends status. Range: 1–1440 minutes.
|
- **`kontrol <min>`** — sets `g_auto_status_interval = min * 60000`. In `loop()`, when `millis() - g_last_auto_status >= interval`, sends status. Range: 1–1440 minutes.
|
||||||
@@ -198,7 +201,7 @@ pio run -e promicro_security -t upload
|
|||||||
pio device monitor -b 115200
|
pio device monitor -b 115200
|
||||||
```
|
```
|
||||||
|
|
||||||
Current resource usage: RAM 8%, Flash 36.5%.
|
Current resource usage: RAM 8.1%, Flash 36.8%.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ Security Node — LoRa mesh-устройство, которое следит з
|
|||||||
| `status` | Показать состояние устройства | `status:armed temp:+23.5C hall:ok motion:trig bat:4.12V` |
|
| `status` | Показать состояние устройства | `status:armed temp:+23.5C hall:ok motion:trig bat:4.12V` |
|
||||||
| `ver` | Версия прошивки (дата сборки) | `build:Jul 21 2026 15:30:00` |
|
| `ver` | Версия прошивки (дата сборки) | `build:Jul 21 2026 15:30:00` |
|
||||||
| `scan` | Измерить уровень шума в эфире | `noise:-112dBm` |
|
| `scan` | Измерить уровень шума в эфире | `noise:-112dBm` |
|
||||||
|
| `snr` | RSSI и SNR последнего принятого пакета | `rssi:-78dBm snr:+6.5dB` |
|
||||||
| `uptime` | Время работы устройства | `uptime:1d 3h 15m` |
|
| `uptime` | Время работы устройства | `uptime:1d 3h 15m` |
|
||||||
| `kontrol <мин>` | Автоотправка статуса каждые N мин | `kontrol 60 min ok` |
|
| `kontrol <мин>` | Автоотправка статуса каждые N мин | `kontrol 60 min ok` |
|
||||||
| `kontrol off` | Отключить автоотправку статуса | `kontrol off` |
|
| `kontrol off` | Отключить автоотправку статуса | `kontrol off` |
|
||||||
@@ -112,6 +113,10 @@ Security Node — LoRa mesh-устройство, которое следит з
|
|||||||
`kontrol 60` — устройство будет само отправлять `status` каждые 60 минут.
|
`kontrol 60` — устройство будет само отправлять `status` каждые 60 минут.
|
||||||
`kontrol off` — отключить. Интервал от 1 до 1440 минут (1 минута — 24 часа).
|
`kontrol off` — отключить. Интервал от 1 до 1440 минут (1 минута — 24 часа).
|
||||||
|
|
||||||
|
## Качество сигнала (`snr`)
|
||||||
|
|
||||||
|
`snr` — показывает RSSI (уровень сигнала в dBm) и SNR (соотношение сигнал/шум в dB) последнего принятого пакета. Полезно для оценки качества связи и при настройке антенны. Чем ближе RSSI к 0 и чем выше SNR — тем лучше.
|
||||||
|
|
||||||
## Синхронизация времени (`time`)
|
## Синхронизация времени (`time`)
|
||||||
|
|
||||||
`time` — показать текущее время устройства.
|
`time` — показать текущее время устройства.
|
||||||
@@ -127,20 +132,6 @@ Security Node — LoRa mesh-устройство, которое следит з
|
|||||||
`uptime` — показывает, сколько времени устройство работает без перезагрузки.
|
`uptime` — показывает, сколько времени устройство работает без перезагрузки.
|
||||||
Пример: `uptime:1d 3h 15m` (1 день, 3 часа, 15 минут).
|
Пример: `uptime:1d 3h 15m` (1 день, 3 часа, 15 минут).
|
||||||
|
|
||||||
## Смена канала (`canal`)
|
|
||||||
|
|
||||||
По умолчанию канал формируется из пароля `"1234"`.
|
|
||||||
Чтобы сменить:
|
|
||||||
|
|
||||||
```
|
|
||||||
canal домашний 5674
|
|
||||||
```
|
|
||||||
|
|
||||||
Ответ: `canal домашний 5674 ok`
|
|
||||||
Через ~5 секунд устройство перезагрузится и начнёт работать на новом канале.
|
|
||||||
|
|
||||||
**Важно:** Все устройства должны быть на одном канале. После смены канала связь будет только с теми узлами, у которых такой же пароль. Канал сохраняется в энергонезависимой памяти и не сбрасывается после перезагрузки. Чтобы вернуть канал по умолчанию — используйте `canal default 1234`.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Задержка ответа
|
## Задержка ответа
|
||||||
|
|||||||
11
src/main.cpp
11
src/main.cpp
@@ -110,6 +110,9 @@ public:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float last_rssi = -127.0f;
|
||||||
|
float last_snr = 0.0f;
|
||||||
|
|
||||||
char pending_response[256];
|
char pending_response[256];
|
||||||
unsigned long pending_at = 0;
|
unsigned long pending_at = 0;
|
||||||
bool pending = false;
|
bool pending = false;
|
||||||
@@ -145,6 +148,9 @@ public:
|
|||||||
if (type != PAYLOAD_TYPE_GRP_TXT) return;
|
if (type != PAYLOAD_TYPE_GRP_TXT) return;
|
||||||
if (len < 5 || data[4] != 0) return;
|
if (len < 5 || data[4] != 0) return;
|
||||||
|
|
||||||
|
last_rssi = radio_driver.getLastRSSI();
|
||||||
|
last_snr = pkt->getSNR();
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++) { digitalWrite(PIN_LED_STATUS, HIGH); delay(50); digitalWrite(PIN_LED_STATUS, LOW); delay(50); }
|
for (int i = 0; i < 3; i++) { digitalWrite(PIN_LED_STATUS, HIGH); delay(50); digitalWrite(PIN_LED_STATUS, LOW); delay(50); }
|
||||||
|
|
||||||
int tlen = len - 5;
|
int tlen = len - 5;
|
||||||
@@ -162,7 +168,7 @@ public:
|
|||||||
while (*cmd == ' ') cmd++;
|
while (*cmd == ' ') cmd++;
|
||||||
|
|
||||||
if (strcmp(cmd, "help") == 0) {
|
if (strcmp(cmd, "help") == 0) {
|
||||||
defer_response("help:ohrana on,ohrana off,relay1 on,relay1 off,relay2 on,relay2 off,relay,status,ver,scan,uptime,kontrol,time,reboot");
|
defer_response("help:ohrana on,ohrana off,relay1 on,relay1 off,relay2 on,relay2 off,relay,status,ver,scan,snr,uptime,kontrol,time,reboot");
|
||||||
} else if (strcmp(cmd, "ohrana on") == 0) {
|
} else if (strcmp(cmd, "ohrana on") == 0) {
|
||||||
g_armed = true; digitalWrite(PIN_RELAY_1, LOW); saveSecurityConfig(); defer_response("ohrana on ok");
|
g_armed = true; digitalWrite(PIN_RELAY_1, LOW); saveSecurityConfig(); defer_response("ohrana on ok");
|
||||||
} else if (strcmp(cmd, "ohrana off") == 0) {
|
} else if (strcmp(cmd, "ohrana off") == 0) {
|
||||||
@@ -256,6 +262,9 @@ public:
|
|||||||
char r[64]; snprintf(r, sizeof(r), "time set %02d.%02d.%04d %02d.%02d", d, m, y, h, mi);
|
char r[64]; snprintf(r, sizeof(r), "time set %02d.%02d.%04d %02d.%02d", d, m, y, h, mi);
|
||||||
defer_response(r);
|
defer_response(r);
|
||||||
} else defer_response("time s DD.MM.YYYY HH.MM");
|
} else defer_response("time s DD.MM.YYYY HH.MM");
|
||||||
|
} else if (strcmp(cmd, "snr") == 0) {
|
||||||
|
char r[48]; snprintf(r, sizeof(r), "rssi:%.0fdBm snr:%.1fdB", last_rssi, last_snr);
|
||||||
|
defer_response(r);
|
||||||
} else if (strcmp(cmd, "reboot") == 0) {
|
} else if (strcmp(cmd, "reboot") == 0) {
|
||||||
send_text("rebooting");
|
send_text("rebooting");
|
||||||
delay(100);
|
delay(100);
|
||||||
|
|||||||
Reference in New Issue
Block a user