|
|
@@ -1,4 +1,4 @@
|
|
|
|
# SE Local Trenddata
|
|
|
|
# SE Local Trenddata
|
|
|
|
|
|
|
|
|
|
|
|
SE Local Trenddata ist eine webbasierte Trend-, Dashboard- und Quellenverwaltung fuer lokale Anlagen- und WAGO-Daten. Das Projekt besteht aus einem React-Frontend, einer Node.js/Express-API, MariaDB, Redis und einem Collector-Service fuer Protokollquellen wie Modbus TCP, OPC UA, BACnet IP und KNX IP.
|
|
|
|
SE Local Trenddata ist eine webbasierte Trend-, Dashboard- und Quellenverwaltung fuer lokale Anlagen- und WAGO-Daten. Das Projekt besteht aus einem React-Frontend, einer Node.js/Express-API, MariaDB, Redis und einem Collector-Service fuer Protokollquellen wie Modbus TCP, OPC UA, BACnet IP und KNX IP.
|
|
|
|
|
|
|
|
|
|
|
@@ -168,8 +168,29 @@ docker ps -a
|
|
|
|
|
|
|
|
|
|
|
|
### 3. Aufrufen
|
|
|
|
### 3. Aufrufen
|
|
|
|
Nun stehen dir mehrere Tools zur Verfügung:
|
|
|
|
Nun stehen dir mehrere Tools zur Verfügung:
|
|
|
|
|
|
|
|
<<<<<<< HEAD
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Frontend | `http://localhost:5173`
|
|
|
|
|
|
|
|
--> Das ist die normale Weboberfläche zum anschauen, editieren und anpassen von Trends.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
API Healthcheck | `http://localhost:18080/api/health`
|
|
|
|
|
|
|
|
--> hier kannst du schauen ob die API läuft
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Collector Healthcheck | `http://localhost:18110/health`
|
|
|
|
|
|
|
|
--> hier kannst du schauen ob der Collector läuft, was nur wichtig ist, wenn du Datenpunkte per OPC,KNX, Modbus oder Bacnet angebunden hast.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dockhand | `http://localhost:3000`
|
|
|
|
|
|
|
|
--> Dockhand ist Container verwaltungstool, dass es dir ermöglicht, auch grafisch den Zustand deiner Container und deines Stacks zu sehen.
|
|
|
|
|
|
|
|
Der Vorteil hier, im Gegensatz zur normalen Docker Desktopoberfläche: Du kannst es auf jedem beliebigen anderen Rechner, der auf dein Netzwerk zugriff hat, öffnen.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cAdvisor | `http://localhost:9090`
|
|
|
|
|
|
|
|
--> Cadvisor stellt alle Containerdaten für Monitoring und Analyticprogramme bereit.
|
|
|
|
|
|
|
|
So kann bei einer größeren Anlage, das Dockersystem mitr Prometheus oder ähnlichem überwacht werden.
|
|
|
|
|
|
|
|
Cadvisor stellt di Daten per html bereit, kannst du dir gern anschauen, ist aber ziemlich unübersichtlich.
|
|
|
|
|
|
|
|
=======
|
|
|
|
| Frontend | `http://localhost:5173` |
|
|
|
|
| Frontend | `http://localhost:5173` |
|
|
|
|
--> Das ist die normale Weboberfläche zum anschauen, editieren und anpassen von Trends.
|
|
|
|
--> Das ist die normale Weboberfläche zum anschauen, editieren und anpassen von Trends.
|
|
|
|
|
|
|
|
>>>>>>> c06fe1fd4df46b203002412d6d8d0362c979166c
|
|
|
|
|
|
|
|
|
|
|
|
| API Healthcheck | `http://localhost:18080/api/health` |
|
|
|
|
| API Healthcheck | `http://localhost:18080/api/health` |
|
|
|
|
--> hier kannst du schauen ob die API läuft
|
|
|
|
--> hier kannst du schauen ob die API läuft
|
|
|
@@ -189,50 +210,11 @@ Nun stehen dir mehrere Tools zur Verfügung:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
```text
|
|
|
|
Username: admin
|
|
|
|
Username: admin
|
|
|
|
Passwort: ChangeMe123!
|
|
|
|
Passwort: SE3112
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Das Passwort sollte nach dem ersten Login geaendert werden.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Lokale Entwicklung
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Frontend lokal starten
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
|
|
cd C:\Projects\SeLTD\web
|
|
|
|
|
|
|
|
npm install
|
|
|
|
|
|
|
|
npm run dev
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Das Frontend laeuft dann auf:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
http://localhost:5173
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### API lokal starten
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
|
|
cd C:\Projects\SeLTD\api
|
|
|
|
|
|
|
|
npm install
|
|
|
|
|
|
|
|
npm run dev
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Die API liest ihre Konfiguration aus `.env`. Wenn du die API lokal ohne Docker laufen laesst, muss `DB_HOST` auf den erreichbaren MariaDB-Host zeigen.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Collector lokal starten
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
|
|
cd C:\Projects\SeLTD\collector
|
|
|
|
|
|
|
|
npm install
|
|
|
|
|
|
|
|
npm start
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Der Collector braucht Zugriff auf MariaDB und schreibt seine lokale Konfiguration in `collector/data/sources.json`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Konfiguration
|
|
|
|
## Konfiguration
|
|
|
|
|
|
|
|
|
|
|
@@ -247,25 +229,12 @@ Die wichtigsten Variablen liegen in `.env`.
|
|
|
|
| `ADMIN_NAME` | `System Admin` | Anzeigename des Admins |
|
|
|
|
| `ADMIN_NAME` | `System Admin` | Anzeigename des Admins |
|
|
|
|
| `MARIADB_ROOT_PASSWORD` | `SE3112` | MariaDB-Root-Passwort |
|
|
|
|
| `MARIADB_ROOT_PASSWORD` | `SE3112` | MariaDB-Root-Passwort |
|
|
|
|
| `DB_PASSWORD_FALLBACK` | `root` | Fallback fuer alte Entwicklungsvolumes |
|
|
|
|
| `DB_PASSWORD_FALLBACK` | `root` | Fallback fuer alte Entwicklungsvolumes |
|
|
|
|
| `CORS_ORIGIN` | `http://localhost:5173` | Erlaubter Browser-Ursprung fuer API-Aufrufe |
|
|
|
|
| `CORS_ORIGIN` | `*` | Erlaubter Browser-Ursprung fuer API-Aufrufe |
|
|
|
|
| `VITE_API_PORT` | `18080` | API-Port, den das Frontend im Browser nutzt |
|
|
|
|
| `VITE_API_PORT` | `18080` | API-Port, den das Frontend im Browser nutzt |
|
|
|
|
| `POLL_TICK_MS` | `1000` | Collector-Tick fuer Polling-Pruefung |
|
|
|
|
| `POLL_TICK_MS` | `1000` | Collector-Tick fuer Polling-Pruefung |
|
|
|
|
|
|
|
|
|
|
|
|
### CORS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wenn das Frontend lokal auf `http://localhost:5173` laeuft, muss in der API stehen:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```env
|
|
|
|
|
|
|
|
CORS_ORIGIN=http://localhost:5173
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bei mehreren erlaubten Origins kann eine kommaseparierte Liste genutzt werden:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```env
|
|
|
|
|
|
|
|
CORS_ORIGIN=http://localhost:5173,https://trend.example.local
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Login, Benutzer und Rollen
|
|
|
|
## Login, Benutzer und Rollen
|
|
|
|
|
|
|
|
|
|
|
@@ -495,32 +464,7 @@ Redis sollte deshalb ebenfalls gebackupt werden, nicht nur MariaDB.
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## WAGO- oder SD-Karten-Betrieb
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fuer Systeme, bei denen persistente Daten auf SD-Karte liegen sollen, gibt es ein Override:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
|
|
docker compose -f docker-compose.yml -f docker-compose.wago.yml up -d --build
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dabei werden grosse Daten nach `/media/sd/seltd/...` gelegt:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
/media/sd/seltd/mariadb
|
|
|
|
|
|
|
|
/media/sd/seltd/redis
|
|
|
|
|
|
|
|
/media/sd/seltd/collector
|
|
|
|
|
|
|
|
/media/sd/seltd/dockhand
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vorher sicherstellen:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
|
|
mkdir -p /media/sd/seltd/mariadb /media/sd/seltd/redis /media/sd/seltd/collector /media/sd/seltd/dockhand
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Backup und Restore
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### MariaDB Backup
|
|
|
|
### MariaDB Backup
|
|
|
|
|
|
|
|
|
|
|
@@ -550,22 +494,6 @@ docker run --rm -v seltd_collector_data:/data -v ${PWD}:/backup alpine tar czf /
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Deployment-Hinweise
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Nach Code-Aenderungen
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wenn Frontend oder API geaendert wurden:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
|
|
docker compose build --no-cache web api collector
|
|
|
|
|
|
|
|
docker compose up -d
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wenn nur `.env` geaendert wurde:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
|
|
docker compose up -d
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Browsercache
|
|
|
|
### Browsercache
|
|
|
|
|
|
|
|
|
|
|
@@ -575,7 +503,6 @@ Bei alten JavaScript-Fehlern nach einem Fix:
|
|
|
|
Strg + F5
|
|
|
|
Strg + F5
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
oder Vite/Docker neu bauen.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Nginx Proxy Manager
|
|
|
|
### Nginx Proxy Manager
|
|
|
|
|
|
|
|
|
|
|
@@ -614,7 +541,7 @@ curl http://localhost:18080/api/health
|
|
|
|
Wenn Frontend lokal auf `localhost:5173` laeuft:
|
|
|
|
Wenn Frontend lokal auf `localhost:5173` laeuft:
|
|
|
|
|
|
|
|
|
|
|
|
```env
|
|
|
|
```env
|
|
|
|
CORS_ORIGIN=http://localhost:5173
|
|
|
|
CORS_ORIGIN=*
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Danach API neu starten:
|
|
|
|
Danach API neu starten:
|
|
|
@@ -635,45 +562,6 @@ docker compose up -d
|
|
|
|
|
|
|
|
|
|
|
|
Danach im Browser `Strg + F5`.
|
|
|
|
Danach im Browser `Strg + F5`.
|
|
|
|
|
|
|
|
|
|
|
|
### Fehler: `ReferenceError: editingCollectorPointId is not defined`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
In `web/src/App.jsx` muss folgender State vorhanden sein:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```jsx
|
|
|
|
|
|
|
|
const [editingCollectorPointId, setEditingCollectorPointId] = useState("");
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wenn die Zeile vorhanden ist, der Fehler aber weiterhin erscheint, laeuft noch altes Build-/Container-Material.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Fehler: `SyntaxError: missing ) after argument list` in `isp.js`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bei SQL-Template-Strings muessen Backticks im String escaped werden:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
|
|
|
missing.push(`ADD COLUMN \`${columnName}\` TEXT NULL`);
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Fehler: `Rollup failed to resolve import "jspdf"`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Abhaengigkeiten im Frontend installieren:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
|
|
cd web
|
|
|
|
|
|
|
|
npm install jspdf xlsx recharts
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bei Docker danach neu bauen.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Source-Map-Warnungen im Browser
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Warnungen wie diese sind in der Regel nicht kritisch:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
Source map error: JSON.parse: unexpected character...
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sie kommen oft aus Devtools/React-Devtools oder externen Source-Maps und koennen ignoriert werden, solange keine roten Laufzeitfehler auftreten.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### MariaDB Login oder DB-Verbindung fehlgeschlagen
|
|
|
|
### MariaDB Login oder DB-Verbindung fehlgeschlagen
|
|
|
|
|
|
|
|
|
|
|
|
Logs ansehen:
|
|
|
|
Logs ansehen:
|
|
|
@@ -766,7 +654,6 @@ Vor produktiver Nutzung:
|
|
|
|
- [ ] `JWT_SECRET` auf langen zufaelligen Wert setzen
|
|
|
|
- [ ] `JWT_SECRET` auf langen zufaelligen Wert setzen
|
|
|
|
- [ ] Admin-Passwort aendern
|
|
|
|
- [ ] Admin-Passwort aendern
|
|
|
|
- [ ] MariaDB-Root-Passwort aendern
|
|
|
|
- [ ] MariaDB-Root-Passwort aendern
|
|
|
|
- [ ] `CORS_ORIGIN` nicht auf `*` lassen, sondern feste Domain setzen
|
|
|
|
|
|
|
|
- [ ] MariaDB-Port `3306` nicht ungeschuetzt ins Internet veroeffentlichen
|
|
|
|
- [ ] MariaDB-Port `3306` nicht ungeschuetzt ins Internet veroeffentlichen
|
|
|
|
- [ ] Redis-Port `6379` nicht ungeschuetzt ins Internet veroeffentlichen
|
|
|
|
- [ ] Redis-Port `6379` nicht ungeschuetzt ins Internet veroeffentlichen
|
|
|
|
- [ ] Dockhand absichern oder nur intern bereitstellen
|
|
|
|
- [ ] Dockhand absichern oder nur intern bereitstellen
|
|
|
@@ -784,31 +671,3 @@ Vor produktiver Nutzung:
|
|
|
|
- Fuer vollstaendige Protokollintegration muessen je nach Feldbus noch Details wie Adressierung, Datentyp, Byteorder und Authentifizierung sauber projektspezifisch gepflegt werden.
|
|
|
|
- Fuer vollstaendige Protokollintegration muessen je nach Feldbus noch Details wie Adressierung, Datentyp, Byteorder und Authentifizierung sauber projektspezifisch gepflegt werden.
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Kurzfassung fuer Betrieb
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
|
|
cd C:\Projects\SeLTD
|
|
|
|
|
|
|
|
copy .env.example .env
|
|
|
|
|
|
|
|
notepad .env
|
|
|
|
|
|
|
|
docker compose up -d --build
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dann aufrufen:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
http://localhost:5173
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Login:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
admin / ChangeMe123!
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bei Code-Aenderungen:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
|
|
docker compose build --no-cache web api collector
|
|
|
|
|
|
|
|
docker compose up -d
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|