# Серійний релеювальник 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‑трафік у серійному каналі.