| src | ||
| static | ||
| templates | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| Dockerfile | ||
| LICENSE | ||
| README.md | ||
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
# 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
docker build -t table-server .
Container starten
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:
version: '3.8'
services:
table-server:
build: .
ports:
- "8080:8080"
volumes:
- ./data:/app/data
restart: unless-stopped
Starten mit:
docker-compose up -d
Verwendung
- Öffne
http://localhost:8080im Browser - Navigiere zwischen den Tabellen über das Menü:
- Tabelle 1, 2, 3: Verschiedene Sensor-Gruppen
- ⚙️ Einstellungen: MQTT und InfluxDB Konfiguration
- 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
- 💾 Speichern: Änderungen persistieren
- Alle Daten werden zentral in
table_config.jsongespeichert
API Endpoints
GET /- Zeigt Tabelle 1GET /table/table2- Zeigt Tabelle 2GET /table/table3- Zeigt Tabelle 3GET /settings- Zeigt EinstellungsseitePOST /api/save- Speichert eine TabellePOST /api/save-settings- Speichert die EinstellungenGET /static/*- Statische Dateien (CSS, JS)
Beispiel API-Request (Tabelle speichern)
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)
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:
{
"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