No description
Find a file
leanderkretschmer b62c90a44f added clear history
2026-01-16 10:41:33 +01:00
static added clear history 2026-01-16 10:41:33 +01:00
.dockerignore init 2026-01-16 09:48:27 +01:00
.gitignore init 2026-01-16 09:48:27 +01:00
app.py added clear history 2026-01-16 10:41:33 +01:00
docker-compose.yml updated proxy 2026-01-16 09:56:17 +01:00
Dockerfile init 2026-01-16 09:48:27 +01:00
nginx.conf init 2026-01-16 09:48:27 +01:00
README.md updated proxy 2026-01-16 09:56:17 +01:00
requirements.txt init 2026-01-16 09:48:27 +01:00

ESP Temperature Monitor API

Eine vollständige Web-Anwendung zur Überwachung von Temperaturwerten von ESP-Geräten.

Features

  • REST API zum Senden von Temperaturwerten mit API-Key Authentifizierung
  • Live-Dashboard mit Echtzeit-Updates (ohne Seiten-Reload)
  • Interaktiver Graph mit verschiedenen Zeiträumen (1 Min, 5 Min, 1 Std, Alltime)
  • Einstellungen-Seite zur Konfiguration von Bluetooth MAC-Adresse und maximaler Temperatur
  • Settings API für ESP-Geräte zum Abrufen der Konfiguration (ohne API-Key)
  • PostgreSQL Datenbank zur Speicherung aller Messwerte und Einstellungen
  • Docker Compose Setup für einfache Deployment

API-Dokumentation

POST /api/temp

Sendet einen neuen Temperaturwert an die API.

Headers:

X-API-Key: your-secret-api-key

oder

Authorization: Bearer your-secret-api-key

JSON-Struktur:

{
  "temperature": 23.5,
  "timestamp": "2024-01-15T10:30:00",
  "time_since_last": 2.5,
  "device_id": "ESP32-001"
}

Felder:

  • temperature (erforderlich): Temperaturwert als Float
  • timestamp (optional): ISO 8601 Zeitstempel, Standard: aktuelle Zeit
  • time_since_last (optional): Zeit seit letzter Ausführung in Sekunden
  • device_id (optional): Identifikation des Geräts

GET /api/temp

Ruft Temperaturwerte ab.

Query-Parameter:

  • minutes: Filter für letzte X Minuten
  • hours: Filter für letzte X Stunden

Beispiele:

  • /api/temp?minutes=5 - Letzte 5 Minuten
  • /api/temp?hours=1 - Letzte Stunde
  • /api/temp - Alle Werte

GET /api/temp/latest

Ruft den neuesten Temperaturwert ab.

GET /api/settings

Ruft die aktuellen Einstellungen ab. Kein API-Key erforderlich - öffentlich zugänglich für ESP-Geräte.

Response:

{
  "id": 1,
  "bluetooth_mac": "AA:BB:CC:DD:EE:FF",
  "max_temperature": 30.0,
  "updated_at": "2024-01-15T10:30:00"
}

Felder:

  • bluetooth_mac (optional): Bluetooth MAC-Adresse im Format XX:XX:XX:XX:XX:XX
  • max_temperature (optional): Maximale Temperatur in °C (0-200)
  • updated_at: Zeitstempel der letzten Aktualisierung

PUT /api/settings

Aktualisiert die Einstellungen. API-Key erforderlich (nur über Web-UI).

Headers:

X-API-Key: your-secret-api-key

JSON-Struktur:

{
  "bluetooth_mac": "AA:BB:CC:DD:EE:FF",
  "max_temperature": 30.0
}

Felder:

  • bluetooth_mac (optional): Bluetooth MAC-Adresse im Format XX:XX:XX:XX:XX:XX
  • max_temperature (optional): Maximale Temperatur in °C (0-200), null zum Löschen

Beispiel-Request:

curl -X PUT http://localhost:8910/api/settings \
  -H "Content-Type: application/json" \
  -H "X-API-Key: esp-temp-2024-Kx9mP2vQ7rT5wY8zN3bF6hJ1cL4dM0sA" \
  -d '{
    "bluetooth_mac": "AA:BB:CC:DD:EE:FF",
    "max_temperature": 30.0
  }'

Installation & Start

  1. Environment-Variablen setzen:
cp .env.example .env
# Bearbeite .env und setze einen sicheren API_KEY
  1. Docker Compose starten:
docker-compose up -d
  1. Services sind verfügbar:

Docker Services

  • backend: Flask API mit statischem File-Serving (Port 8910 extern, 5000 intern)
  • db: PostgreSQL Datenbank (Port 5432 intern)

Entwicklung

Lokale Entwicklung ohne Docker:

# Python Virtual Environment erstellen
python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# Dependencies installieren
pip install -r requirements.txt

# Environment-Variablen setzen
export API_KEY=esp-temp-2024-Kx9mP2vQ7rT5wY8zN3bF6hJ1cL4dM0sA
export DATABASE_URL=postgresql://postgres:postgres@localhost:5432/temp_db

# Datenbank initialisieren
python3 -c "from app import app, db; app.app_context().push(); db.create_all()"

# Server starten
python app.py

Datenbank

Die Datenbank wird automatisch beim ersten Start erstellt. Tabellen:

  • temperature_readings: Speichert alle Temperaturmessungen
  • settings: Speichert die Systemeinstellungen (Bluetooth MAC, max. Temperatur)

Sicherheit

  • Wichtig: Ändere den API-Key in der .env Datei!
  • Für Produktion: HTTPS aktivieren (SSL-Zertifikat in nginx konfigurieren)
  • Firewall-Regeln für Datenbank-Port setzen

Lizenz

MIT