- Rust 65.5%
- JavaScript 27.6%
- Shell 4.3%
- Dockerfile 0.9%
- Awk 0.7%
- Other 1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .cargo | ||
| .forgejo/workflows | ||
| .githooks | ||
| dashboards | ||
| docs | ||
| examples | ||
| scripts | ||
| src | ||
| tests | ||
| .dockerignore | ||
| .gitignore | ||
| .updatarr.yaml | ||
| AGENTS.md | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CLAUDE.md | ||
| cliff.toml | ||
| deny.toml | ||
| Dockerfile | ||
| GEMINI.md | ||
| Justfile | ||
| LICENSE | ||
| README.md | ||
| rust-toolchain.toml | ||
| RUST_REBUILD.md | ||
pypypew
Native Rust-Laufzeit für modulare Hausautomationen. Präsenz, Licht, Benachrichtigungen, HA-Entities und Dashboard bleiben in dieser App; Chassis und UI kommen aus veröffentlichtem wuast-common/wuast-ui in Kellnr. Jede Aktion startet unabhängig, auch beim selben Handler oder Gerät. Verbindlicher Parallelitätsvertrag.
src/domain/mod.rs registriert kompilierte Shared-Services und Automationen. Codeänderungen werden mit Releases gebaut. SIGHUP lädt Appinstanzen neu und beendet vorher vollständig deren Tasks, Subscriptions und native Dateischreiber. Architektur, API, Zustände und Rückweg, Migrationsinventar.
Entwicklung
just setup
HOME_ASSISTANT_WEBSOCKET_URL=ws://localhost:8123/api/websocket HOME_ASSISTANT_TOKEN=... just run
just gate
just push
Rust/Toolpins kommen aus dem Template. just gate prüft Format, striktes Clippy, vollständige native/Node-Verhaltenstests, Advisories/Bans und ungenutzte Dependencies. Tests verwenden lokale Fixtures. Reine Dokumentationscommits folgen der Ausnahme in AGENTS.md. Compiler- und Docker-Builds verwenden den gemeinsamen S3-/Docker-Cache. Erfolgreiches just push entfernt nur lokales target/.
Neue Automationen bekommen ein eigenes Modul in src/domain/ und einen AppDefinition-Eintrag in domain/mod.rs. Ihr Setup erhält AppContext; Tasks, Subscriptions und Cleanup gehören in dessen Scope. Shared-Services stehen vor ihren Verbrauchern. Feste Auslöser starten unabhängige endliche Aktionen und warten nicht auf frühere Aufrufe; App-API und Verhaltenstests zeigen die bestehenden Abläufe. Codeänderungen werden im nächsten Release kompiliert, SIGHUP ersetzt laufende Instanzen vollständig.
Betrieb
HA-URL und Token sind erforderlich. Listenadresse ist lokal 127.0.0.1:8099; das Containerimage setzt 0.0.0.0:8099. RUNTIME_LISTEN_HOST/RUNTIME_LISTEN_PORT haben Vorrang vor HOST/PORT. STATE_PATH ist lokal local, im Container /data. DESIRED_ENTITIES_PATH enthält optionale Bridge-Definitionen; fehlende Datei bedeutet leer. MQTT ist mit MQTT_HOST aktiv, MQTT_REQUIRED=true macht die Verbindung bereitstellungsrelevant. Gotify und Forgejo werden nur mit ihren bisherigen URL-/Tokenvariablen aktiviert.
Weitere Konfiguration: MQTT_PORT (1883), MQTT_USERNAME/MQTT_PASSWORD, MQTT_CLIENT_ID (wuast-automation-runtime), MQTT_AVAILABILITY_TOPIC (wuast/runtime/availability), EVENT_JOURNAL_MAX_EVENTS (2000), AUTOMATION_MAILBOX_SIZE (256; Observerpuffer, kein Aktionslimit). RUNTIME_ROOT bestimmt den bisherigen Defaultpfad der entities.json; eigene Python-Appverzeichnisse werden durch kompilierte Module ersetzt. GOTIFY_URL/GOTIFY_TOKEN und FORGEJO_URL/FORGEJO_TOKEN aktivieren jeweils optionale Provider. LOG_LEVEL/LOG_FORMAT und SHUTDOWN_TIMEOUT_SECS (10; nur Prozessbeendigung) folgen Common.
NOTIFY_SOCKET, WATCHDOG_USEC und optional WATCHDOG_PID erhalten native systemd-Integration. Keepalives nutzen die von systemd empfohlene halbe Watchdogzeit, auch unter einer Sekunde, ausschließlich für den angeforderten Prozess. Ohne Watchdog bleibt nur die bestehende zehnsekündige Prozessmetrik-Abtastung. Offizieller Vertrag.
GET /healthz prüft Liveness; /readyz und /ready prüfen HA-RUNNING, erforderliches MQTT, Bridge-Abgleich und Appzustände. /api/status zeigt Version, Revision und stabile Laufzeitsession. /metrics behält bestehende Grafana-Selektoren; Dashboard. UI: / und /timeline, Trace-, Filter-, Zoom- und Live-/Pause-Aktionen. Fehlende Historie bleibt unbekannt; Sollzustand bestätigt keinen Gerätezustand.
Lesende native Diagnose: just events [query] [--limit N], just trace ID, just watch [query], just state; alternativ /app/pypypew-diagnostics [--url URL] ... im Image.
Das Releaseziel bleibt harbor.wuastbude.de/pypypew/pypypew. Forgejo baut den nativen Scratch-Container mit UID/GID 65532, CA-Roots, Europe/Berlin und Mimalloc. Vor Tag-Promotion stehen Quality, isolierte Runtime-Abnahme und die unsignierte digestgebundene Harbor-SBOM. Version/Revision kommen aus Buildargumenten. Releasehistorie bleibt erhalten. Produktionsänderungen erfolgen ausschließlich im primären kube-GitOps-Repository.