pi_wake_agent.py: Add run_once and run_wake with non-blocking h5i bus

This commit is contained in:
Codex
2026-07-08 13:28:05 +02:00
parent 0a586da6af
commit 2faa179957

View File

@@ -204,6 +204,49 @@ def zellij_write_enter(session: str) -> bool:
pid_file.write_text(str(os.getpid())) pid_file.write_text(str(os.getpid()))
def run_wake(sessions: List[str], message: str, logger: logging.Logger) -> None:
sessions_str = ",".join(sessions)
logger.info(f"Waking {sessions_str} with message: {message}")
for session in sessions:
zellij_write_chars(session, f"[{AGENT_NICK} via zellij] {message} Run: h5i-bus msg inbox")
for _ in range(5):
zellij_write_enter(session)
time.sleep(1)
# Fire-and-forget h5i bus message (non-blocking)
def _send_bus():
try:
subprocess.run(
["h5i", "msg", "send", "Fable", f"{message} (timer wakeup)"],
cwd=H5I_BUS_ROOT,
env={**os.environ, "H5I_AGENT": H5I_AGENT},
capture_output=True,
timeout=5
)
except Exception:
pass # Silently ignore - fire and forget
threading.Thread(target=_send_bus, daemon=True).start()
logger.info(f"Wake sent to {sessions_str}")
def run_once(sessions: List[str], interval: str, message: str, logger: logging.Logger) -> None:
interval_seconds = parse_interval(interval)
logger.info(f"One-shot timer set for {interval} ({interval_to_human(interval)})")
def _wake():
time.sleep(interval_seconds)
run_wake(sessions, message, logger)
thread = threading.Thread(target=_wake, daemon=True)
thread.start()
logger.info(f"Background timer started (thread: {thread.ident})")
pid_file = Path(f"/tmp/pi_wake_agent_{sessions[0]}.pid")
pid_file.write_text(str(os.getpid()))
return 0
def run_daemon(sessions: List[str], interval: str, message: str, logger: logging.Logger) -> None: def run_daemon(sessions: List[str], interval: str, message: str, logger: logging.Logger) -> None:
interval_seconds = parse_interval(interval) interval_seconds = parse_interval(interval)
logger.info("=== DAEMON START ===") logger.info("=== DAEMON START ===")