59 lines
2.5 KiB
Markdown
59 lines
2.5 KiB
Markdown
# Серійний релеювальник Heartbeat
|
||
|
||
Цей репозиторій містить невеликий Python‑скрипт, який слухає серійний порт,
|
||
шукає JSON‑heartbeat повідомлення та відповідає `{"hb": 2}` на `{"hb": 1}`.
|
||
Його можна запускати як звичайну програму або як сервіс systemd із підтримкою
|
||
watchdog.
|
||
|
||
## Вимоги
|
||
|
||
- Python 3.10+
|
||
- `pyserial`
|
||
- `sdnotify` (необов’язково, але потрібен для інтеграції з systemd)
|
||
|
||
Встановіть залежності в оточення:
|
||
|
||
```bash
|
||
python3 -m venv .venv
|
||
. .venv/bin/activate
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
## Ручний запуск
|
||
|
||
```bash
|
||
python3 serial_heartbeat.py --port /dev/ttyUSB0 --baudrate 115200 --log-level DEBUG
|
||
```
|
||
|
||
Аргументи:
|
||
|
||
- `--port` (обов’язково): шлях до серійного пристрою (наприклад, `/dev/ttyUSB0`).
|
||
- `--baudrate`: за замовчуванням 9600.
|
||
- `--log-level`: будь-який рівень `logging`, типово `INFO`.
|
||
|
||
## Сервіс systemd
|
||
|
||
1. Скопіюйте `serial-heartbeat.service` в `/etc/systemd/system/serial-heartbeat.service`.
|
||
2. Відкоригуйте шляхи, швидкість та пристрій за потреби.
|
||
3. Перезавантажте systemd і увімкніть сервіс:
|
||
|
||
```bash
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable --now serial-heartbeat
|
||
```
|
||
|
||
Сервіс використовує `Type=notify`, тож systemd очікує сигнал готовності і
|
||
контролює watchdog з таймаутом 20 секунд.
|
||
|
||
## Heartbeat behaviour
|
||
|
||
- На `{"hb": 1}` або `{"cmd": "status"}` в?дпов?дає `{"hb": 2, "VPN": <0|1>, "APP": <0|1>}`.
|
||
- `VPN` = 1, якщо ?нтерфейс `tun0` ?снує ? (`operstate` = `up` / `carrier` = `1` / `unknown`, але ?нтерфейс присутн?), ?накше 0.
|
||
- `APP` = 1, якщо `systemctl is-active --quiet watcher_application.service` повертає усп?х, ?накше 0.
|
||
- Увесь вх?дний JSON журналюється на р?вн? INFO для видимост?.
|
||
|
||
## Розробка
|
||
|
||
- `python3 -m py_compile serial_heartbeat.py` — швидка перевірка синтаксису.
|
||
- Увімкніть рівень журналювання DEBUG, щоб переглядати JSON‑трафік у серійному каналі.
|