Welle 3 · Lucys Freiheiten je Aktionsart, Rückfragen mit „ja 7“, Lucy untersucht rote Hinweise, Wochenbericht
- services/lucy_autonomie.py: Stufe je Aktionsart (nur lesen, erst fragen, selbst handeln), Start „mehr Freiheit“;
Meldung danach (POST /api/lucy/gehandelt)
- services/rueckfragen.py: nummerierte Rückfragen, nur Knöpfe der Oberfläche (ERLAUBT), „ja“ führt genau die
gespeicherte Aktion aus, 24 h gültig, hinfällig wenn der Hinweis weg ist, Nachprüfung danach
- notify.sh -k: Antworttasten (Antworttastatur über den Direktweg, ohne Eingriff in Hermes)
- services/ermittlung.py: Wächter meldet rote Hinweise an Lucy; Knopf wird Rückfrage, Lucy sieht über den
api_server nach und schickt Ursache und Weg als eine Nachricht
- services/wochenbericht.py + mc2-wochenbericht.timer (So 07:30): feste Sätze, Absatz vom Modell, offene
App-Updates als Rückfragen
- MCP: Werkzeuge fragen die Freiheiten (auf_bitte), neu: freiheiten, rueckfragen, rueckfrage_beantworten,
sicherheitsupdates_einspielen, snapshot_zurueckspielen, snapshots, geraet_logs, dienst_logs
- Ausführer-Aktion journal (nur lesend), POST /api/homelab/ziele/{id}/sicherheitsupdates
- Läufe des Homelabs mit flock (Oberfläche und Steward schreiben beide)
- Skill homelab-orchestrator, SOUL-Abschnitt als Kopie in deploy/nur-box
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
dd23f3fb4c
commit
12cefb427a
+45
-16
@@ -8,6 +8,7 @@
|
||||
# Nutzung: notify.sh "Nachricht" (oder via stdin: echo msg | notify.sh)
|
||||
# notify.sh -s "[Update]" "Text" (Betreffzeile voranstellen)
|
||||
# notify.sh -d -s "[Update]" "…" (dringend: geht auch nachts sofort raus)
|
||||
# notify.sh -k "ja 7|nein 7" -s "[Rückfrage]" "…" (Antworttasten, seit 25.09.2026)
|
||||
#
|
||||
# Nachtruhe (User-Entscheid 24.09.2026): Zwischen 00:00 und 06:59 wird alles, was nicht dringend
|
||||
# ist, in der Nacht-Warteschlange gesammelt und um 07:00 von morgenmeldung.sh als EINE Meldung
|
||||
@@ -19,7 +20,7 @@
|
||||
# MC_NOTIFY_STRICT=1: Exit 1, wenn Telegram scheitert (für morgenmeldung.sh, damit nichts verloren geht).
|
||||
# Test-Schalter: MC_NOTIFY_STUNDE (Stunde vortäuschen), MC_NIGHT_QUEUE, MC_NOTIFY_HERMES (hermes-Befehl),
|
||||
# MC_TELEGRAM_ENV (Datei mit TELEGRAM_BOT_TOKEN/TELEGRAM_HOME_CHANNEL), MC_TELEGRAM_API (Bot-API-Adresse),
|
||||
# MC_NOTIFY_OHNE_WALL=1 (kein wall im letzten Ausweg).
|
||||
# MC_NOTIFY_OHNE_WALL=1 (kein wall im letzten Ausweg), MC_NOTIFY_PYTHON (Python für die Antworttasten).
|
||||
set -uo pipefail
|
||||
|
||||
LOG="${MC_NOTIFY_LOG:-$HOME/mc2-notify.log}"
|
||||
@@ -29,12 +30,14 @@ TG_ENV="${MC_TELEGRAM_ENV:-$HOME/.hermes/.env}"
|
||||
TG_API="${MC_TELEGRAM_API:-https://api.telegram.org}"
|
||||
SUBJECT=""
|
||||
DRINGEND=0
|
||||
KNOEPFE=""
|
||||
|
||||
while getopts ":s:d" opt; do
|
||||
while getopts ":s:dk:" opt; do
|
||||
case "$opt" in
|
||||
s) SUBJECT="$OPTARG" ;;
|
||||
d) DRINGEND=1 ;;
|
||||
*) echo "usage: notify.sh [-d] [-s subject] <nachricht>" >&2; exit 2 ;;
|
||||
k) KNOEPFE="$OPTARG" ;;
|
||||
*) echo "usage: notify.sh [-d] [-k 'ja 7|nein 7'] [-s subject] <nachricht>" >&2; exit 2 ;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND - 1))
|
||||
@@ -96,6 +99,10 @@ lucy_kopf() {
|
||||
*deploy*) echo "Commander, Bericht vom Deploy." ;;
|
||||
*erinnerung*) echo "Commander, eine Erinnerung." ;;
|
||||
*radar*) echo "Commander, Bericht vom Modell-Radar." ;;
|
||||
*rückfrage*) echo "Commander, eine Rückfrage." ;;
|
||||
*"lucy selbst"*) echo "Commander, das habe ich selbst erledigt." ;;
|
||||
*"lucy ermittelt"*) echo "Commander, ich habe nachgesehen." ;;
|
||||
*wochenbericht*) echo "Commander, dein Wochenbericht." ;;
|
||||
"") echo "Commander, kurz gesagt:" ;;
|
||||
*) echo "Commander, $(printf '%s' "$SUBJECT" | tr -d '[]')." ;;
|
||||
esac
|
||||
@@ -112,6 +119,9 @@ lucy_marke() {
|
||||
*box-problem*) echo "Box, Störung" ;;
|
||||
*"box wieder ok"*) echo "Box, Entwarnung" ;;
|
||||
*box-update*) echo "Box, Wartung" ;;
|
||||
*rückfrage*) echo "Rückfrage" ;;
|
||||
*"lucy selbst"*) echo "Selbst erledigt" ;;
|
||||
*"lucy ermittelt"*) echo "Nachgesehen" ;;
|
||||
*) printf '%s' "$SUBJECT" | tr -d '[]' ;;
|
||||
esac
|
||||
}
|
||||
@@ -129,17 +139,6 @@ if [ "$DRINGEND" != "1" ] && [ "$((10#$HOUR))" -lt 7 ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Primärweg: Telegram via hermes send (Login-Shell-PATH, falls aus Timer/cron aufgerufen). Die Kopfzeile ist Lucys.
|
||||
if [ -n "$KOPF" ]; then
|
||||
SEND_OUT="$(bash -lc '"$1" send --to telegram --subject "$2" -- "$3"' _ "$HERMES_BIN" "$KOPF" "$MSG" 2>&1)"
|
||||
else
|
||||
SEND_OUT="$(bash -lc '"$1" send --to telegram -- "$2"' _ "$HERMES_BIN" "$MSG" 2>&1)"
|
||||
fi
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "$TS OK telegram: $MSG" >> "$LOG"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Zweitweg: direkt an die Bot-API. Das Token geht über --config auf stdin an curl, damit es nicht
|
||||
# in der Prozessliste steht.
|
||||
env_wert() {
|
||||
@@ -173,7 +172,8 @@ $MSG"
|
||||
printf 'url = "%s/bot%s/sendMessage"\n' "$TG_API" "$token" \
|
||||
| curl -sf -m 15 -o /dev/null --config - \
|
||||
--data-urlencode "chat_id=$chat" --data-urlencode "text=$text" \
|
||||
${thread:+--data-urlencode "message_thread_id=$thread"}
|
||||
${thread:+--data-urlencode "message_thread_id=$thread"} \
|
||||
${MARKUP:+--data-urlencode "reply_markup=$MARKUP"}
|
||||
rc=$?
|
||||
case "$rc" in
|
||||
0) return 0 ;;
|
||||
@@ -184,7 +184,36 @@ $MSG"
|
||||
esac
|
||||
return 1
|
||||
}
|
||||
if telegram_direkt; then
|
||||
# Antworttasten (-k "ja 7|nein 7", Rückfragen seit 25.09.2026): eine Tastatur unter dem Eingabefeld. Ein Tipp schickt
|
||||
# nur diesen Text — Lucy liest ihn wie jede Nachricht, an Hermes ändert das nichts. Zwei je Reihe, nach dem ersten Tipp
|
||||
# klappt sie weg. hermes send kann keine Tastatur mitschicken, deshalb geht eine Nachricht mit Tasten zuerst direkt.
|
||||
MARKUP=""
|
||||
if [ -n "$KNOEPFE" ]; then
|
||||
MARKUP="$("${MC_NOTIFY_PYTHON:-python3}" - "$KNOEPFE" 2>/dev/null <<'PY'
|
||||
import json, sys
|
||||
k = [x.strip() for x in sys.argv[1].split("|") if x.strip()][:8]
|
||||
print(json.dumps({"keyboard": [[{"text": t} for t in k[i:i + 2]] for i in range(0, len(k), 2)],
|
||||
"one_time_keyboard": True, "resize_keyboard": True}, ensure_ascii=False))
|
||||
PY
|
||||
)"
|
||||
fi
|
||||
if [ -n "$MARKUP" ] && telegram_direkt; then
|
||||
echo "$TS OK telegram direkt: $MSG" >> "$LOG"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Primärweg: Telegram via hermes send (Login-Shell-PATH, falls aus Timer/cron aufgerufen). Die Kopfzeile ist Lucys.
|
||||
if [ -n "$KOPF" ]; then
|
||||
SEND_OUT="$(bash -lc '"$1" send --to telegram --subject "$2" -- "$3"' _ "$HERMES_BIN" "$KOPF" "$MSG" 2>&1)"
|
||||
else
|
||||
SEND_OUT="$(bash -lc '"$1" send --to telegram -- "$2"' _ "$HERMES_BIN" "$MSG" 2>&1)"
|
||||
fi
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "$TS OK telegram: $MSG" >> "$LOG"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -z "$MARKUP" ] && telegram_direkt; then
|
||||
# „OK telegram direkt“: services/update_verlauf.py erkennt beide Wege.
|
||||
echo "$TS OK telegram direkt: $MSG" >> "$LOG"
|
||||
exit 0
|
||||
|
||||
Reference in New Issue
Block a user