# Tabellen Webserver Ein einfacher Rust-Webserver, der eine editierbare 3x3-Tabelle bereitstellt und in einer JSON-Konfigurationsdatei persistiert. ## Projektstruktur ``` table-server/ ├── src/ │ └── main.rs ├── templates/ │ ├── index.html │ └── settings.html ├── static/ │ ├── style.css │ ├── script.js │ └── settings.js ├── Cargo.toml ├── Dockerfile ├── .gitignore └── README.md ``` ## Funktionen - **3 separate Tabellen** für verschiedene Sensor-Gruppen - **Navigation** mit aktivem Status-Indikator - **Header mit Logo** für professionelles Erscheinungsbild - **Zeilen hinzufügen/löschen** dynamisch zur Laufzeit - **Einstellungsseite** für MQTT und InfluxDB Konfiguration - Editierbare Textfelder (Bezeichnung, Adresse, Type, Faktor) - Toggle-Schalter für Boolean-Werte (MQTT, InfluxDB) - **Zentrale JSON-Persistierung** für alle Tabellen und Einstellungen - REST-API für Daten-Management - Docker-Unterstützung - Responsive Design ## Lokale Entwicklung ### Voraussetzungen - Rust (Version 1.75 oder höher) - Cargo ### Installation und Start ```bash # Projekt erstellen cargo new table-server cd table-server # Dependencies installieren und starten cargo run ``` Der Server läuft dann auf `http://localhost:8080` ## Docker ### Container bauen ```bash docker build -t table-server . ``` ### Container starten ```bash docker run -p 8080:8080 -v $(pwd)/data:/app/data table-server ``` Mit Volume-Mount bleibt die Konfigurationsdatei auch nach Container-Neustarts erhalten. ### Docker Compose (optional) Erstelle eine `docker-compose.yml`: ```yaml version: '3.8' services: table-server: build: . ports: - "8080:8080" volumes: - ./data:/app/data restart: unless-stopped ``` Starten mit: ```bash docker-compose up -d ``` ## Verwendung 1. Öffne `http://localhost:8080` im Browser 2. Navigiere zwischen den Tabellen über das Menü: - **Tabelle 1, 2, 3**: Verschiedene Sensor-Gruppen - **⚙️ Einstellungen**: MQTT und InfluxDB Konfiguration 3. In den Tabellen: - **➕ Zeile hinzufügen**: Neue Sensor-Einträge erstellen - **🗑️ Löschen**: Einzelne Zeilen entfernen - **Felder bearbeiten**: - Bezeichnung: Name des Sensors - Adresse: IP-Adresse oder Identifier - Type: Sensor-Typ (z.B. Temperatur, Luftfeuchtigkeit) - Faktor: Numerischer Korrekturfaktor - MQTT: Toggle-Schalter für MQTT-Aktivierung - InfluxDB: Toggle-Schalter für InfluxDB-Aktivierung 4. **💾 Speichern**: Änderungen persistieren 5. Alle Daten werden zentral in `table_config.json` gespeichert ## API Endpoints - `GET /` - Zeigt Tabelle 1 - `GET /table/table2` - Zeigt Tabelle 2 - `GET /table/table3` - Zeigt Tabelle 3 - `GET /settings` - Zeigt Einstellungsseite - `POST /api/save` - Speichert eine Tabelle - `POST /api/save-settings` - Speichert die Einstellungen - `GET /static/*` - Statische Dateien (CSS, JS) ### Beispiel API-Request (Tabelle speichern) ```bash curl -X POST http://localhost:8080/api/save \ -H "Content-Type: application/json" \ -d '{ "table_id": "table1", "rows": [ { "bezeichnung": "Sensor 1", "adresse": "192.168.1.100", "type": "Temperatur", "faktor": "1.0", "mqtt": true, "influxdb": false } ] }' ``` ### Beispiel API-Request (Einstellungen speichern) ```bash curl -X POST http://localhost:8080/api/save-settings \ -H "Content-Type: application/json" \ -d '{ "mqtt_broker": "localhost", "mqtt_port": "1883", "influxdb_url": "http://localhost:8086", "influxdb_token": "your-token-here" }' ``` ## Konfigurationsdatei Die komplette Anwendungskonfiguration wird in `table_config.json` gespeichert: ```json { "table1": [ { "bezeichnung": "Temp Sensor 1", "adresse": "192.168.1.100", "type": "Temperatur", "faktor": "1.0", "mqtt": true, "influxdb": false }, { "bezeichnung": "Temp Sensor 2", "adresse": "192.168.1.101", "type": "Temperatur", "faktor": "1.0", "mqtt": false, "influxdb": true } ], "table2": [ { "bezeichnung": "Humidity Sensor 1", "adresse": "192.168.1.200", "type": "Luftfeuchtigkeit", "faktor": "0.5", "mqtt": true, "influxdb": true } ], "table3": [ { "bezeichnung": "Pressure Sensor 1", "adresse": "192.168.1.300", "type": "Druck", "faktor": "2.0", "mqtt": true, "influxdb": false } ], "settings": { "mqtt_broker": "localhost", "mqtt_port": "1883", "influxdb_url": "http://localhost:8086", "influxdb_token": "" } } ``` ## Lizenz MIT