deploy examples

This commit is contained in:
awe
2026-10-22 12:57:33 +03:00
parent 09a2aa7932
commit 5826c4ff67
10 changed files with 357 additions and 13 deletions
@@ -179,6 +179,18 @@ Payload `CONTROL` (LE): `seq:u32`, `t_ms:u32`, `flags:u8`, `ch[16]:u16` = 41 б
неаутентичные и принимает только с ожидаемого адреса (`--peer`). Рекомендуемый
способ наружу — WireGuard-туннель, внутри которого идёт простой UDP. «Голый»
неаутентифицированный UDP допустим только в доверенной локальной сети.
- **Обратный heartbeat.** RX шлёт на адрес источника последнего CONTROL
маленький служебный пакет (~5 раз/с): magic `CB 01`, флаг собственного
failsafe, последний принятый seq; при включённом ключе — тоже под HMAC. TX
принимает их на тот же сокет (сквозь NAT проходит, т.к. он сам инициировал
поток) и показывает в логе, **отвечает ли приёмник** и не ушёл ли тот в
failsafe. Это чисто служебный PC-трафик, STM в нём не участвует, поэтому он не
в зеркале протокола, а в самом `bridge.py`. На выдачу SBUS и на основной поток
управления heartbeat не влияет.
- **Индикация для оператора.** Если запустить tx в терминале, он показывает одну
живую строку, обновляемую на месте: зелёное `● СВЯЗЬ ЕСТЬ`, жёлтое
`● СВЯЗЬ ЕСТЬ (приёмник в failsafe)` или красное `● СВЯЗИ НЕТ`. Под systemd
(вывод не в терминал) вместо строки идут события в журнал по смене состояния.
## FAILSAFE
@@ -206,3 +218,24 @@ Payload `CONTROL` (LE): `seq:u32`, `t_ms:u32`, `flags:u8`, `ch[16]:u16` = 41 б
Локальная проверка без сети: оба экземпляра на одной машине с `--peer 127.0.0.1`
и двумя STM по USB; SBUS с RX снять `tools/decode.py` и сверить с осями стика TX.
Параметры можно задавать через env (`CART_BRIDGE_ROLE/PEER/BIND/DEVICE/KEY/
LOG_LEVEL`), CLI их переопределяет.
## Автозапуск: systemd-службы
Для постоянной работы мост ставится службами: `cart-bridge-tx` (отправитель) и
`cart-bridge-rx` (приёмник), по одной роли на машину. Юниты, примеры конфигов и
установщик — в каталоге `deploy/`:
```sh
cd deploy
sudo ./install-bridge.sh tx # на машине у пульта
sudo ./install-bridge.sh rx # на машине у тележки
```
Установщик подставляет реальные пути (python из `.venv`, `bridge.py`, рабочий
каталог) и пользователя, кладёт конфиги в `/etc/cart-bridge/{tx,rx}.env`. Там
задаются `CART_BRIDGE_PEER`/`BIND` и общий `CART_BRIDGE_KEY` (должен совпадать на
обеих сторонах). Логи и индикация «отвечает ли приёмник» — `journalctl -u
cart-bridge-tx -f`. Подробности — `deploy/README.md`.