CitBin – Einsteiger-Dokumentation
Willkommen beim CitBin-Projekt! Diese Dokumentation richtet sich an alle, die grundlegende Programmierkenntnisse haben, aber noch keine Erfahrung mit den eingesetzten Frameworks und Programmiersprachen besitzen. Hier findest du alles, was du brauchst, um das Projekt zu verstehen, aufzusetzen und mitzuarbeiten.
Du kannst dir auch die README.md Dateien in den einzelnen Unterordnern durchlesen.
Inhaltsverzeichnis
- Was ist CitBin?
- Technologien im Überblick
- Wie die Komponenten zusammenarbeiten
- Voraussetzungen installieren
- Projekt herunterladen
- Backend starten (Python / FastAPI)
- Frontend starten (TypeScript / Next.js)
- Simulator starten
- Projektstruktur verstehen
- Wichtige Konzepte erklärt
- Häufige Entwicklungsaufgaben
- Tests ausführen
- Fehlersuche (Troubleshooting)
- Weiterführende Ressourcen
Was ist CitBin?
CitBin ist ein intelligentes Mülltonnen-Überwachungssystem, das von der Klasse TG12/3 an der Hohentwiel Gewerbeschule Singen entwickelt wurde.
Das Problem
Mülltonnen werden oft geleert, obwohl sie noch nicht voll sind – oder umgekehrt: Sie laufen über, weil niemand rechtzeitig Bescheid weiß. Das verschwendet Zeit, Geld und Kraftstoff.
Die Lösung
Kleine Sensoren werden in Mülltonnen eingebaut. Diese Sensoren messen mit Ultraschall, wie voll die Tonne ist – ähnlich wie ein Einparksensor am Auto. Die Daten werden drahtlos übertragen. Das CitBin-System empfängt diese Daten, speichert sie in einer Datenbank und zeigt sie auf einer interaktiven Karte im Browser an.
Das Ergebnis
Auf einem Dashboard sieht man auf einer Karte alle Mülltonnen mit ihrem aktuellen Füllstand, Batteriestatus und Standort. Die live-Anwendung ist erreichbar unter: https://citbin.sybit.education
Technologien im Überblick
- Python: Für den Simulator und die API
- FastAPI: Python-Framework für das Backend
- TypeScript: Für die Webanwendung
- Next.js: Frontend-Framework
- React: Benutzeroberfläche in Komponenten
- Docker: Für die Containerisierung
- MQTT: Für die Kommunikation zwischen den Komponenten
- PostgreSQL: Für die Datenbank
- SQLModel: Für Datenbankmodelle
- Alembic: Für Datenbankmigrationen
Wie die Komponenten zusammenarbeiten
Sensor in der Mülltonne
↓
Basisstation
↓
Backend (FastAPI)
↓
PostgreSQL
↓
Frontend (Next.js)
↓
Browser / Dashboard- Der Sensor in der Mülltonne misst den Füllstand.
- Die Daten werden über das Netzwerk an das Backend gesendet.
- Das Backend verarbeitet und speichert die Daten in PostgreSQL.
- Das Frontend fragt das Backend regelmäßig nach neuen Daten.
- Der Benutzer sieht den aktuellen Füllstand im Browser.
Voraussetzungen installieren
Windows
winget install -e --id Git.Git
winget install -e --id Python.Python.3
winget install -e --id OpenJS.NodeJS
winget install -e --id GitHub.cliLinux (Debian / Ubuntu)
sudo apt update
sudo apt install git python3 uv python3-venv nodejs npm -yLinux (Fedora)
sudo dnf install git python3 uv nodejs npm -yLinux (Arch)
sudo pacman -S git python uv nodejs npmInstallation prüfen
git --version
python --version
node --version
npm --versionProjekt herunterladen
git clone https://github.com/hgs-itg27/citbin.git
cd citbinBackend starten (Python / FastAPI)
Schritt 1: In den Backend-Ordner wechseln
cd apps/apiSchritt 2: Virtuelle Umgebung erstellen
uv venvAktivieren:
# Windows:
venv\Scripts\activate
# Linux / macOS:
source venv/bin/activateSchritt 3: Abhängigkeiten installieren
uv syncSchritt 4: Umgebungsvariablen konfigurieren
copy .env.example .env
# oder
cp .env.example .envSchritt 5: Datenbank starten
cd ../../infrastructure
./update-development.sh
# oder unter Windows:
./update-development.bat
cd ../apps/apiSchritt 6: Backend starten
python app.pyDas Backend läuft auf http://localhost:8000
Nützliche URLs:
- API-Dokumentation: http://localhost:8000/api/docs
- Health-Check: http://localhost:8000/api/health
Frontend starten (TypeScript / Next.js)
Schritt 1: In den Frontend-Ordner wechseln
cd apps/webSchritt 2: Abhängigkeiten installieren
npm installSchritt 3: Entwicklungsserver starten
npm run devDas Frontend ist erreichbar unter http://localhost:3000
Simulator starten
Der Simulator ist derzeit nicht auf einem aktuellen Stand weil wir echte Daten emfangen.
cd apps/simulator
uv sync
python app.pySimulator konfigurieren
| Variable | Beschreibung | Standardwert |
|---|---|---|
DEVICE_NAME | Name des simulierten Geräts | Simulator-001 |
DEVICE_EUI | Eindeutige Geräte-ID | zufällig generiert |
SLEEP_TIME | Wartezeit zwischen Nachrichten (in Sekunden) | 5 |
BACKEND_API_URL | URL des Backends | http://localhost:8000 |
Beispiel:
SLEEP_TIME=10 DEVICE_NAME=MeinSensor python app.pyProjektstruktur verstehen
citbin/
├── apps/
│ ├── api/
│ ├── web/
│ └── simulator/
├── infrastructure/
├── docs/
└── README.mdBackend im Detail (apps/api/)
api/
├── app.py
├── dependencies.py
├── models/
├── routers/
├── modules/
├── migrations/
├── tests/
└── pyproject.tomlFrontend im Detail (apps/web/)
web/
├── app/
└── components/Wichtige Konzepte erklärt
REST API
Eine REST API ist eine Schnittstelle, über die Programme über HTTP miteinander kommunizieren.
JSON
JSON ist ein einfaches Textformat zum Austausch von Daten.
Datenbankmodelle (SQLModel)
Python-Klassen beschreiben die Tabellen in der Datenbank.
React-Komponenten
Die Benutzeroberfläche besteht aus wiederverwendbaren Komponenten.
Umgebungsvariablen (.env)
Konfigurationswerte wie Passwörter werden außerhalb des Quellcodes gespeichert.
Datenbankmigrationen (Alembic)
Änderungen am Datenbankschema werden versioniert verwaltet.
Häufige Entwicklungsaufgaben
Eine neue API-Route hinzufügen
@router.get("/meine-route")
def meine_funktion():
return {"nachricht": "Hallo Welt!"}Eine neue Frontend-Seite hinzufügen
export default function MeineSeite() {
return <h1>Hallo von meiner neuen Seite!</h1>;
}Datenbankmodell ändern
beschreibung: str | None = NoneÄnderungen mit Git speichern
git status
git add apps/api/routers/meine_datei.py
git commit -m "Neue Route für XY hinzugefügt"
git pushTests ausführen
cd apps/api
pytest -v tests/
pytest --cov=app tests/
pytest --cov=app tests/ --cov-report htmlFehlersuche (Troubleshooting)
pythonnicht gefunden:python3verwenden- Backend startet nicht: Docker,
.envund Datenbank prüfen - Frontend zeigt keine Daten: Backend und
.env.localprüfen npm installschlägt fehl: Cache leeren odernode_moduleslöschen- Virtuelle Umgebung vergessen:
(venv)prüfen - Port bereits belegt: mit
lsofodernetstatprüfen
Weiterführende Ressourcen
- Python
- FastAPI
- SQLModel
- Next.js
- React
- TypeScript
- PostgreSQL
- Docker
- Git
- Alembic
Letzte Aktualisierung: Juli 2026