#!/usr/bin/env bash # Meldeweg der Box (Autonomie E1): eine Nachricht an den User schicken. # Primär: hermes send → Telegram (nutzt Gateway-Credentials, kein LLM nötig). # Fallback: Logfile + wall (falls Telegram/hermes nicht erreichbar). # # Nutzung: notify.sh "Nachricht" (oder via stdin: echo msg | notify.sh) # notify.sh -s "[Update]" "Text" (Betreffzeile voranstellen) # Exit 0 = zugestellt (Telegram ODER Fallback-Log geschrieben). set -uo pipefail LOG="${MC_NOTIFY_LOG:-$HOME/mc2-notify.log}" SUBJECT="" while getopts ":s:" opt; do case "$opt" in s) SUBJECT="$OPTARG" ;; *) echo "usage: notify.sh [-s subject] " >&2; exit 2 ;; esac done shift $((OPTIND - 1)) MSG="${1:-}" [ -z "$MSG" ] && [ ! -t 0 ] && MSG="$(cat)" if [ -z "$MSG" ]; then echo "usage: notify.sh [-s subject] " >&2 exit 2 fi TS="$(date '+%Y-%m-%d %H:%M:%S')" # Lucy-Briefkasten (Proaktivität A3): Meldung zusätzlich an MC2 spiegeln — die Desktop-Lucy # spricht sie dann von sich aus. Best-effort (darf den Telegram-Weg nie aufhalten). # MC_NOTIFY_NO_ANNOUNCE=1 unterdrückt das (der Health-Wächter legt seine Einträge selbst ab). if [ "${MC_NOTIFY_NO_ANNOUNCE:-0}" != "1" ]; then curl -sf -m 3 -X POST "${MC_ANNOUNCE_URL:-http://127.0.0.1:9001/api/voice/announce}" \ -H 'Content-Type: application/json' \ --data "$(python3 - "$SUBJECT" "$MSG" <<'PY' import json, sys print(json.dumps({"text": sys.argv[2], "subject": sys.argv[1], "source": "notify"})) PY )" >/dev/null 2>&1 || true fi # Nachtweiche: Zwischen 00:00 und 06:59 Uhr (inklusive) fangen wir Telegram-Nachrichten ab # und sammeln sie für den Morgen-Digest, ES SEI DENN es ist ein Alarm. HOUR="$(date +%H)" if [ "$HOUR" -ge 0 ] && [ "$HOUR" -lt 7 ]; then case "${SUBJECT,,}" in *alarm*|*notfall*) ;; # Alarme gehen immer sofort durch *) # Sammeln für Morgen-Digest NIGHT_QUEUE="$HOME/.hermes/night-queue.txt" echo "- ${SUBJECT:+$SUBJECT: }$MSG" >> "$NIGHT_QUEUE" echo "$TS QUEUED für Morgen-Digest: $MSG" >> "$LOG" exit 0 ;; esac fi # Primärweg: Telegram via hermes send (Login-Shell-PATH, falls aus Timer/cron aufgerufen). if [ -n "$SUBJECT" ]; then SEND_OUT="$(bash -lc 'hermes send --to telegram --subject "$1" -- "$2"' _ "$SUBJECT" "$MSG" 2>&1)" else SEND_OUT="$(bash -lc 'hermes send --to telegram -- "$1"' _ "$MSG" 2>&1)" fi if [ $? -eq 0 ]; then echo "$TS OK telegram: $MSG" >> "$LOG" exit 0 fi # Fallback: Logfile + wall — Meldung darf nie verloren gehen. echo "$TS FALLBACK (telegram fehlgeschlagen: $SEND_OUT): $MSG" >> "$LOG" printf '%s\n' "MC2-Meldung: ${SUBJECT:+$SUBJECT }$MSG" | wall 2>/dev/null || true echo "WARN: Telegram fehlgeschlagen, in $LOG protokolliert" >&2 exit 0