diff --git a/dmrsrv/__main__.py b/dmrsrv/__main__.py index e9100b1..74df845 100644 --- a/dmrsrv/__main__.py +++ b/dmrsrv/__main__.py @@ -10,6 +10,7 @@ import asyncio import contextlib import signal import sys +import time from . import config as cfgmod from . import log as logmod @@ -47,6 +48,11 @@ def _wire_state(master: HomebrewMaster, state: State) -> None: sp.colorcode = cfgp.get("colorcode", "") sp.rx_freq = cfgp.get("rx_freq", "") sp.tx_freq = cfgp.get("tx_freq", "") + # Мастер считает время по monotonic, панель — по time.time(). + # Без пересчёта панель показывала «простой» равным времени в сети, + # то есть живой хотспот выглядел мёртвым. + if p.last_seen: + sp.last_seen = time.time() - max(0.0, master._now() - p.last_seen) for pid in list(state.peers): if pid not in master.peers: gone = state.peer_del(pid) diff --git a/dmrsrv/router.py b/dmrsrv/router.py index 3a0e4e7..eb43950 100644 --- a/dmrsrv/router.py +++ b/dmrsrv/router.py @@ -75,6 +75,11 @@ class Router: # ── собственно маршрут ────────────────────────────────────────────────── def route(self, peer_id: int, dmr, connected: list[int]) -> list[int]: + # счётчик принятых кадров для панели: иначе там вечный ноль + if self.state is not None: + sp = self.state.peer_get(peer_id) + if sp is not None: + sp.rx_packets += 1 # запоминаем, через какой хотспот слышали передающего if dmr.src: self.set_radio_loc(dmr.src, peer_id)