User 25.09.: „Hermes' Persona ist Lucy – das muss sich in all ihren Meldungen widerspiegeln“; das angehängte „(Diese Meldung kam auch an Lucy.)“ tat so, als wäre sie jemand anderes als der Absender. - notify.sh: Kopfzeile aus dem Betreff in Lucys Ton (SOUL.md: „Commander“, knapp, sachlich), bei Dringendem „Commander, das ist dringend.“; keine zweite Anrede, wenn der Text schon mit ihr beginnt. Morgenmeldung mit kurzen Marken statt Betreffen in Klammern; die des Homelabs sagt, woher sie kommt. - Wächter: Zusatz „kam auch an Lucy“ entfernt (der Briefkasten bekommt die Meldung weiter). - Melde-Log und Auswertungen unverändert. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
63 lines
2.8 KiB
Bash
63 lines
2.8 KiB
Bash
#!/usr/bin/env bash
|
|
# Morgenmeldung (07:00, mc2-morgenmeldung.timer): schickt die nachts gesammelten Meldungen als
|
|
# EINE Telegram-Nachricht. notify.sh parkt zwischen 00:00 und 06:59 alles Nicht-Dringende in der
|
|
# Nacht-Warteschlange; ohne diesen Lauf käme es nie an (so geschehen vom 21.08. bis 24.09.2026).
|
|
#
|
|
# Scheitert Telegram dreimal, bleibt der Stapel liegen und kommt mit der nächsten Morgenmeldung —
|
|
# verloren geht nichts. Leere Warteschlange = keine Nachricht.
|
|
set -uo pipefail
|
|
|
|
QUEUE="${MC_NIGHT_QUEUE:-$HOME/.hermes/night-queue.txt}"
|
|
ARBEIT="$QUEUE.senden"
|
|
SRC_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
MAX_ZEICHEN="${MC_MORGENMELDUNG_MAX:-3500}" # Telegram erlaubt 4096 Zeichen je Nachricht
|
|
VERSUCHE="${MC_MORGENMELDUNG_VERSUCHE:-3}"
|
|
PAUSE="${MC_MORGENMELDUNG_PAUSE:-60}"
|
|
# Der Homelab-Teil schickt seine eigene Morgenmeldung (mc2-homelab-morgenmeldung.service).
|
|
BETREFF="${MC_MORGENMELDUNG_BETREFF:-[Morgenmeldung]}"
|
|
|
|
# Melde-Log begrenzen (wuchs seit Juli ungebremst): über 3 MB bleiben die letzten 2 MB.
|
|
# services/update_verlauf.py liest ohnehin nur das Ende, das reicht für Monate Update-Verlauf.
|
|
LOG="${MC_NOTIFY_LOG:-$HOME/mc2-notify.log}"
|
|
if [ -f "$LOG" ] && [ "$(stat -c %s "$LOG" 2>/dev/null || echo 0)" -gt 3000000 ]; then
|
|
tail -c 2000000 "$LOG" > "$LOG.kurz" && mv "$LOG.kurz" "$LOG"
|
|
fi
|
|
|
|
[ -s "$QUEUE" ] || [ -s "$ARBEIT" ] || exit 0
|
|
|
|
# Warteschlange übernehmen. mv ist atomar: Was notify.sh währenddessen anhängt, landet entweder
|
|
# noch im übernommenen Stapel oder in einer frischen Warteschlange. Ein Stapel, der beim letzten
|
|
# Mal nicht rausging, steht vorne.
|
|
if [ -s "$QUEUE" ]; then
|
|
mv "$QUEUE" "$QUEUE.uebernahme" && cat "$QUEUE.uebernahme" >> "$ARBEIT" && rm -f "$QUEUE.uebernahme"
|
|
fi
|
|
|
|
ANZAHL="$(grep -c '^- ' "$ARBEIT" || true)"
|
|
[ "$ANZAHL" = "1" ] && WORT="Meldung" || WORT="Meldungen"
|
|
TEXT="$(head -c "$MAX_ZEICHEN" "$ARBEIT")"
|
|
if [ "$(wc -c < "$ARBEIT")" -gt "$MAX_ZEICHEN" ]; then
|
|
TEXT="$TEXT
|
|
… gekürzt. Den vollen Stapel hat die Box unter ~/.hermes/night-queue.txt.zuletzt-gesendet."
|
|
fi
|
|
# Lucys Ton (SOUL.md): kurz, sachlich. Kommen zwei Morgenmeldungen (KI-Box und Homelab), sagt die zweite, woher.
|
|
case "$BETREFF" in
|
|
*Homelab*) NACHRICHT="Guten Morgen, Commander. Aus dem Homelab kamen heute Nacht $ANZAHL $WORT:" ;;
|
|
*) NACHRICHT="Guten Morgen, Commander. Heute Nacht gab es $ANZAHL $WORT:" ;;
|
|
esac
|
|
NACHRICHT="$NACHRICHT
|
|
$TEXT"
|
|
|
|
for ((i = 1; i <= VERSUCHE; i++)); do
|
|
# Als 07:00 senden (außerhalb der Nachtruhe); NO_ANNOUNCE, weil jede Meldung schon einzeln im
|
|
# Briefkasten liegt.
|
|
if MC_NOTIFY_STRICT=1 MC_NOTIFY_NO_ANNOUNCE=1 MC_NOTIFY_STUNDE=07 \
|
|
bash "$SRC_DIR/notify.sh" -s "$BETREFF" "$NACHRICHT"; then
|
|
mv -f "$ARBEIT" "$QUEUE.zuletzt-gesendet"
|
|
exit 0
|
|
fi
|
|
[ "$i" -lt "$VERSUCHE" ] && sleep "$PAUSE"
|
|
done
|
|
|
|
echo "Morgenmeldung: Telegram nicht erreichbar, $ANZAHL $WORT bleiben für den nächsten Lauf liegen." >&2
|
|
exit 1
|