====== MuCCC API ====== Code: https://gitlab.muc.ccc.de/muCCC/api Live: https://api.muc.ccc.de ===== Motivation ===== Auf ''uberbus.club.muc.ccc.de'' befinden sich mehrere Scripts die ueber verschiedenste APIs kommunizieren die weder dokumentiert noch standardisiert. Der Monolith als Hauptkomponente ist schwer wartbar und in die Jahre gekommener Code. Es wurde immer mehr drangepflanscht und neue Ports aufgemacht ohne darueber nachzudenken. Unter anderem befinden sich im Monolith ein IRC-Bot der den Schleusenstate und das naechste Event in das IRC Channel Topic schreibt und eine Milight Ansteuerung die scheinbar nicht mehr funktioniert. Ferner befinden sich auf dem Host die Ansteuerung des Flipdotpanels fuer den Schleusenstate und ein Script das einen Anruf bei Schleusenstatewechsel triggert (derzeit ebenfalls kaputt). Diese Komponenten werden per ''/etc/rc.local'' in einem Screen gestartet. SpaceAPI und Kalenderscraper sind eigene Scripts die per Crontab JSON Files in ''/srv/www'' generieren die von einem Nginx ohne HTTPS geserved werden. ===== Features/Ideen ===== * https://api.muc.ccc.de als zentrale URL fuer alle HTTP APIs * nicht droelfzig Ports bei denen keiner durchblickt * automagisch generierte Doku per OpenAPI * https://api.muc.ccc.de/docs * https://api.muc.ccc.de/redoc * modernes Python3 mit FastAPI und async statt threading * Support fuer Push statt stures Poll bei Konsumenten: HTTP Long Polling und Websockets * Feature-Bloat vermeiden * API buendelt nur - sammelt und verteilt Informationen * alle Aktoren sind eigene Services die auf die API zugreifen * Endpoints * https://api.muc.ccc.de/spaceapi.json * https://api.muc.ccc.de/schleuse.json mit Long Polling Support * [[wss://api.muc.ccc.de/schleuse/ws]] ===== Zu implementierende APIs/Datenquellen ===== * Luftschleuse via UDP ✔ * Wiki Kalenderscraper mit ICS ✔ * Welche Sensoren gibt es im Club noch? * Home-Manager? OpenHab? * Großer roter Button (ToDO) * Temperatur/Feuchtigkeitssensoren (ToDO) * Kalender (ToDO) ===== Zu implementierende Services ===== * SpaceAPI ✔ * Schleuse IRC/Matrix Bot ✔ * Schleusenstatus Flipdotpanel ✔ * Schleusenstatuswechselcall ===== Deployment ===== * Host: ''nixbus.club.muc.ccc.de'' https://gitlab.muc.ccc.de/muCCC/nixos-deployment/-/blob/master/nixbus.nix * Auf ''uberbus.club.muc.ccc.de'' laeuft ein Caddy als Reverse Proxy unter: https://api.muc.ccc.de (nginx disabled)