# Karch Service · Geräteverwaltung — Anleitung

Interne App zum Ein- und Auschecken von Geräten (Ausgabe / Rückgabe), mit
Geräteübersicht, Mängelmeldungen, QR-Etiketten und mehrsprachiger Oberfläche
(Deutsch · Englisch · Rumänisch · Polnisch).

Die App läuft als eigenständiger **Node-Dienst** und speichert den Datenstand
zentral auf dem Server (`data/db.json`). Dadurch sehen **alle Geräte
denselben Stand** – Handy im Feld und PC im Büro sind synchron.

---

## 1. Verzeichnis

```
karch-geraetemanager/
├── public/            → Frontend (index.html, alles enthalten, keine externen Downloads nötig)
├── data/              → Datenstand (db.json) – wird zur Laufzeit beschrieben
├── server.js          → Node-Server ohne externe Abhängigkeiten
├── install.sh         → Einrichtung als systemd-Dienst
├── karch-geraetemanager.service
└── ANLEITUNG.md       → diese Datei
```

## 2. Hochladen (WinSCP)

1. Den kompletten Ordner `karch-geraetemanager` nach `/var/www/html/` hochladen.
   Zielpfad danach: `/var/www/html/karch-geraetemanager/`
2. Voraussetzung: **Node.js** ist auf dem Server installiert
   (prüfen mit `node -v`; falls nicht: `apt install nodejs`).

## 3. Installieren (einmalig, als root)

Auf dem Server im App-Verzeichnis:

```bash
cd /var/www/html/karch-geraetemanager
sudo bash install.sh
```

Das Skript richtet den systemd-Dienst `karch-geraetemanager` ein, aktiviert den
Autostart und startet die App. Standard-Port ist **3006** (anpassbar, siehe unten).

Aufruf danach:  `http://<server>:3006/`

### Anderen Port verwenden

```bash
PORT=3010 sudo bash install.sh
```

## 4. Hinter Apache/Nginx betreiben (optional, empfohlen)

Damit die App unter einer sauberen Adresse läuft (z. B.
`https://dev2.karch-service.de/geraetemanager/`), einen Reverse-Proxy auf den
Node-Port setzen.

**Nginx** (Ausschnitt):

```nginx
location /geraetemanager/ {
    proxy_pass         http://127.0.0.1:3006/;
    proxy_set_header   Host $host;
    proxy_set_header   X-Real-IP $remote_addr;
}
```

**Apache** (mod_proxy):

```apache
ProxyPass        /geraetemanager/ http://127.0.0.1:3006/
ProxyPassReverse /geraetemanager/ http://127.0.0.1:3006/
```

> Wichtig: **Kamera-Scanner und Sprachbefehle** brauchen eine sichere
> Verbindung (**https**) oder `localhost`. Über einen https-Reverse-Proxy
> funktioniert beides. Die manuelle Geräteauswahl geht immer, auch ohne https.

## 5. Betrieb

| Aufgabe        | Befehl                                    |
|----------------|-------------------------------------------|
| Status         | `systemctl status karch-geraetemanager`   |
| Logs live      | `journalctl -u karch-geraetemanager -f`   |
| Neustart       | `systemctl restart karch-geraetemanager`  |
| Stoppen        | `systemctl stop karch-geraetemanager`     |

## 6. Daten & Backup

- Der gesamte Datenstand liegt in **`data/db.json`**.
- Sichern = diese Datei kopieren. Zurücksetzen = Datei löschen und Dienst neu
  starten (dann wird der Auslieferungsstand mit 12 Geräten neu erzeugt) — oder
  in der App unter **Verwaltung → Demodaten zurücksetzen**.
- Ein Update spielt man ein, indem man `public/` und `server.js` ersetzt und den
  Dienst neu startet. **`data/db.json` dabei nicht überschreiben**, sonst gehen
  die echten Daten verloren.

## 7. Verwaltung (PIN)

Der Reiter **⚙ Verwaltung** ist mit einer PIN geschützt (Standard **1234**).
Dort lassen sich Geräte und Mitarbeiter pflegen, die Werkstatt-E-Mail und die
PIN ändern sowie QR-Etiketten drucken. Die PIN wird im zentralen Datenstand
gespeichert und gilt damit für alle Geräte — **bitte nach dem ersten Start
ändern**.

## 8. QR-Etiketten

- Einzeln: **Geräte → Gerät antippen → QR-Etikett herunterladen**
- Alle auf einmal: **Geräte → Alle QR-Etiketten drucken** (Druckbogen)
- Der QR-Code enthält den Geräte-Code (z. B. `KARCH-RM-01`) und wird vom
  Scanner in Ausgabe/Rückgabe erkannt.

## 9. Offline-/Lokal-Modus

Ist der Server nicht erreichbar (oder wird nur `public/index.html` ohne Node
geöffnet), schaltet die App automatisch in den **lokalen Modus** und speichert
im Browser des jeweiligen Geräts. Die Fußzeile zeigt den aktuellen Modus an
(„Server verbunden" bzw. „Lokaler Modus"). Sobald der Server wieder läuft, wird
wieder zentral gespeichert.

---

*Karch Service Oerlenbach — interne Anwendung.*
