7.0 KiB
openclaw-mailbox-cal
OpenClaw Skill-Repository — mailbox.org Kalender und Aufgaben auf dem Raspberry Pi
Telegram-Bot-Befehle für Kalendertermine (khal), Tasks (todoman) und automatischen CalDAV-Sync (vdirsyncer).
Schnellstart
# 1. .env befüllen
cp assets/.env.example .env && nano .env
# 2. Installation
chmod +x scripts/install.sh && bash scripts/install.sh
# 3. Selbsttest
bash scripts/test_setup.sh
Projektstruktur
openclaw-mailbox-cal/
├── SKILL.md ← OpenClaw Skill-Definition
├── README.md ← Diese Datei
├── assets/
│ └── .env.example ← Umgebungsvariablen-Vorlage
├── config/
│ ├── vdirsyncer.conf ← vdirsyncer CalDAV-Konfiguration
│ ├── khal.conf ← khal Kalender-Konfiguration
│ └── todoman.conf ← todoman Aufgaben-Konfiguration
├── scripts/
│ ├── install.sh ← Installations-Script (Raspi)
│ ├── test_setup.sh ← Selbsttest aller Komponenten
│ └── openclaw_skill.py ← OpenClaw/Telegram Bot Handler
└── systemd/
├── vdirsyncer-sync.service ← systemd Service Unit
├── vdirsyncer-sync.timer ← systemd Timer (alle 15 Min.)
└── vdirsyncer-sync.env ← Umgebungsvariablen für systemd
Setup-Schritte (detailliert)
Schritt 1 — Voraussetzungen
- Raspberry Pi mit Raspberry Pi OS Bookworm (64-bit empfohlen) oder Ubuntu 22.04+ ARM
- mailbox.org-Konto
- App-Passwort in mailbox.org anlegen:
Einstellungen → Sicherheit → App-Passwörter → Neu erstellen - OpenClaw installiert: openclaw.dev
- Telegram Bot-Token via @BotFather
Schritt 2 — .env konfigurieren
cp assets/.env.example .env
nano .env
Mindestens diese Werte setzen:
MAILBOX_USER=vorname.nachname@mailbox.org
MAILBOX_PASS=app-passwort-xyz
Schritt 3 — install.sh ausführen
chmod +x scripts/install.sh
bash scripts/install.sh
Das Script installiert automatisch:
vdirsyncer— CalDAV-Sync-Toolkhal— CLI-Kalendertodoman— CLI-Aufgabenverwaltungpass— GNU Password Storepython3-keyring— Python-Keyring-Integrationgettext-base— envsubst für Konfigurationen
Anschließend:
- Alle Konfigurationsdateien werden deployed
- systemd User-Timer wird aktiviert
- Initialer Sync wird durchgeführt
Schritt 4 — OpenClaw Skill registrieren
OpenClaw erkennt Skills automatisch wenn sie in einem der Skill-Verzeichnisse liegen.
Kein manueller Eintrag in openclaw.json nötig — das install.sh legt bereits einen Symlink an.
# Manuell (falls install.sh den Symlink nicht angelegt hat):
mkdir -p ~/.openclaw/skills
ln -s ~/mailbox-cal ~/.openclaw/skills/mailbox-cal
Optional — Zugangsdaten direkt in ~/.openclaw/openclaw.json hinterlegen
(Alternative zur .env-Datei). Immer zuerst Backup anlegen:
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak
Den bestehenden "skills"-Block in openclaw.json um "entries" ergänzen
(der Block sieht danach so aus):
{
"skills": {
"install": {
"nodeManager": "npm"
},
"entries": {
"mailbox-cal": {
"enabled": true,
"env": {
"MAILBOX_USER": "dein.name@mailbox.org",
"MAILBOX_PASS": "app-passwort-xyz"
}
}
}
}
}
Nach jeder Änderung an openclaw.json validieren und Gateway neu starten:
openclaw doctor --fix
openclaw gateway restart
Schritt 5 — Telegram testen
Sende an deinen Bot:
/termine
/aufgaben
/sync
/status
Test-Befehle
Vollständiger Selbsttest
bash scripts/test_setup.sh
vdirsyncer
# Verbindung testen und Sammlungen entdecken
vdirsyncer discover calendars
vdirsyncer discover tasks
# Synchronisation manuell starten
vdirsyncer sync
# Nur Kalender synchronisieren
vdirsyncer sync calendars
# Verbose-Ausgabe
vdirsyncer -v DEBUG sync
khal
# Termine heute
khal list
# Termine nächste 7 Tage
khal list today 7d
# Agenda-Ansicht
khal agenda
# Interaktiver Kalender
ikhal
# Ereignis hinzufügen (interaktiv)
khal new
# Ereignis direkt anlegen
khal new 2025-06-15 14:00 15:00 "Arzttermin" --calendar mailbox_kalender
# Cache neu aufbauen
khal rebuild-cache
# Konfiguration anzeigen
khal printformats
todoman
# Alle offenen Aufgaben
todo list
# Alle Aufgaben inkl. erledigt
todo list --all
# Neue Aufgabe
todo new "Bericht schreiben"
# Aufgabe mit Fälligkeitsdatum
todo new --due 2025-06-30 "Bericht abgeben"
# Aufgabe mit Priorität (1=hoch, 9=niedrig)
todo new --priority 1 "Dringend: Server patchen"
# Aufgabe als erledigt markieren (ID aus 'todo list')
todo done 1
# Aufgabe löschen
todo delete 2
# Aufgaben-Listen anzeigen
todo lists
systemd
# Timer-Status
systemctl --user status vdirsyncer-sync.timer
# Service manuell starten (einmaliger Sync)
systemctl --user start vdirsyncer-sync.service
# Alle User-Timer anzeigen
systemctl --user list-timers
# Live-Log verfolgen
journalctl --user -u vdirsyncer-sync.service -f
# Log der letzten 50 Zeilen
journalctl --user -u vdirsyncer-sync.service -n 50
# Timer deaktivieren
systemctl --user disable --now vdirsyncer-sync.timer
Python-Skill direkt testen
python3 scripts/openclaw_skill.py
mailbox.org CalDAV-Endpunkte
| Zweck | URL |
|---|---|
| CalDAV-Basis | https://dav.mailbox.org/caldav/<USER>/ |
| Kalender-Sammlung | https://dav.mailbox.org/caldav/<USER>/Kalender/ |
| Aufgaben-Sammlung | https://dav.mailbox.org/caldav/<USER>/Aufgaben/ |
| CardDAV (Kontakte) | https://dav.mailbox.org/carddav/<USER>/ |
Entdeckung aller Sammlungen:
curl -u "USER:PASS" -X PROPFIND https://dav.mailbox.org/caldav/ \
-H "Depth: 1" -H "Content-Type: application/xml"
Sicherheit
| Maßnahme | Status |
|---|---|
| App-Passwort statt Hauptpasswort | ✅ Empfohlen |
| vdirsyncer-Config: chmod 600 | ✅ Automatisch via install.sh |
| .env nicht in Git | ✅ In .gitignore eingetragen |
| HTTPS für CalDAV | ✅ dav.mailbox.org erzwingt TLS |
| pass(1)-Integration | Optional via pass + python3-keyring |
Fehlerbehebung
vdirsyncer: [Errno 111] Connection refused
→ Netzwerkverbindung prüfen: ping dav.mailbox.org
vdirsyncer: Conflict!
→ Beide Seiten wurden geändert. Konflikt manuell lösen oder conflict_resolution = "b wins" in vdirsyncer.conf setzen.
khal: No calendars configured
→ khal rebuild-cache ausführen; Pfad in ~/.config/khal/config prüfen.
todoman: Error: No lists found
→ path-Eintrag in ~/.config/todoman/config.cfg prüfen; Verzeichnis ~/.local/share/vdirsyncer/tasks/ muss existieren und .ics-Dateien enthalten.
systemd-Timer läuft nach Reboot nicht
→ sudo loginctl enable-linger $USER ausführen (User-Session ohne Login).
Lizenz
MIT — Freie Nutzung, Veränderung und Weitergabe.