From e11cf67c55805f19aa495a676769789e4feaf4bb Mon Sep 17 00:00:00 2001 From: Cobra Date: Tue, 14 Apr 2026 23:37:06 -0400 Subject: [PATCH] Delay arrival alert 2s so mDNS hostname resolves before alert fires DHCP triggers on_arrival immediately but iPhone sends mDNS frames milliseconds later. Without the delay the alert fires with no hostname and falls back to the device label. Timer reads from known_devices at fire time so mDNS-updated hostname is used. --- net_alerter/net_alerter.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/net_alerter/net_alerter.py b/net_alerter/net_alerter.py index e22cfd1..82a923e 100644 --- a/net_alerter/net_alerter.py +++ b/net_alerter/net_alerter.py @@ -1089,10 +1089,24 @@ def on_arrival(mac: str, ip: str, hostname: str = "") -> None: 'last_seen': now } - msg = format_arrival(hostname, ip, vendor or "unknown", mac) - logging.info(msg) - send_alert(msg) - update_occupancy_state() + # Delay alert 2 seconds so mDNS can update the hostname before we send. + # The timer callback reads from known_devices at fire time to get the real name. + def _send_arrival_alert(): + with known_lock: + dev = known_devices.get(mac) + if dev is None: + return # Device departed before timer fired + resolved_hostname = dev.get('hostname', hostname) + resolved_ip = dev.get('ip', ip) + resolved_vendor = dev.get('vendor', vendor) + msg = format_arrival(resolved_hostname, resolved_ip, resolved_vendor or "unknown", mac) + logging.info(msg) + send_alert(msg) + update_occupancy_state() + + t = threading.Timer(2.0, _send_arrival_alert) + t.daemon = True + t.start() def on_departure(mac: str) -> None: