214 lines
4.7 KiB
Markdown
214 lines
4.7 KiB
Markdown
# 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
|