134 lines
3.5 KiB
Markdown
134 lines
3.5 KiB
Markdown
# FEDEO Geräte-Agent
|
|
|
|
Der FEDEO Geräte-Agent läuft lokal auf macOS, Linux oder Raspberry Pi OS. Er holt instanzweite Scan-Aufträge von FEDEO ab, führt sie auf einem lokal angeschlossenen Scanner aus und lädt das Ergebnis wieder in FEDEO hoch.
|
|
|
|
Der Agent ist nicht an einen Mandanten gebunden. Jeder Auftrag enthält seinen Tenant selbst.
|
|
|
|
## Voraussetzungen
|
|
|
|
### macOS
|
|
|
|
```bash
|
|
brew install node sane-backends
|
|
scanimage -L
|
|
```
|
|
|
|
Drucken nutzt später das macOS-Drucksystem/CUPS:
|
|
|
|
```bash
|
|
lpstat -p
|
|
```
|
|
|
|
### Linux und Raspberry Pi OS
|
|
|
|
```bash
|
|
sudo apt update
|
|
sudo apt install -y nodejs npm sane-utils cups
|
|
scanimage -L
|
|
lpstat -p
|
|
```
|
|
|
|
## Konfiguration
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
nano .env
|
|
```
|
|
|
|
Wichtige Werte:
|
|
|
|
```env
|
|
FEDEO_URL=https://deine-fedeo-instanz
|
|
FEDEO_AGENT_TOKEN=fedeo_agent_...
|
|
FEDEO_SCANNER_NAME=
|
|
FEDEO_POLL_SECONDS=5
|
|
```
|
|
|
|
Wenn `FEDEO_SCANNER_NAME` leer bleibt, verwendet `scanimage` den Standard-Scanner.
|
|
|
|
## Entwicklung
|
|
|
|
```bash
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
## OpenCV-Nachbearbeitung
|
|
|
|
Für automatischen Zuschnitt, leichte Entzerrung, Rotation und Kontrastkorrektur kann die OpenCV-Pipeline aktiviert werden.
|
|
|
|
```bash
|
|
npm run setup:opencv
|
|
```
|
|
|
|
Konfiguration:
|
|
|
|
```env
|
|
FEDEO_SCAN_POSTPROCESS=true
|
|
FEDEO_SCAN_POSTPROCESS_PROFILE=receipt
|
|
FEDEO_SCAN_POSTPROCESS_PYTHON=/pfad/zum/agent/.venv-opencv/bin/python
|
|
FEDEO_SCAN_POSTPROCESS_STRICT=false
|
|
```
|
|
|
|
Wenn `FEDEO_SCAN_POSTPROCESS_PYTHON` leer bleibt, verwendet der Agent automatisch `.venv-opencv/bin/python`, sofern diese Umgebung existiert. Falls OpenCV nicht installiert ist und `FEDEO_SCAN_POSTPROCESS_STRICT=false` gesetzt ist, lädt der Agent den Rohscan hoch, statt den Auftrag komplett fehlschlagen zu lassen.
|
|
|
|
Profile:
|
|
|
|
- `receipt`: Bons und schmale Belege werden bevorzugt hochkant zugeschnitten und kontrastiert.
|
|
- `document`: allgemeine Dokumente mit Farberhalt und moderater Verbesserung.
|
|
- `raw`: Zuschnitt/Entzerrung ohne starke Kontrastkorrektur.
|
|
|
|
## Container-Betrieb
|
|
|
|
Auf Linux und Raspberry Pi OS kann der Agent komplett im Container laufen. Dadurch bleiben Node.js, Python, OpenCV und SANE im Image. Auf dem Host werden dann nur Docker und Zugriff auf den USB-Scanner benötigt.
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
nano .env
|
|
docker compose -f docker-compose.example.yml up --build
|
|
```
|
|
|
|
Wenn FEDEO lokal auf dem Docker-Host läuft, verwende im Container nicht `localhost`, sondern:
|
|
|
|
```env
|
|
FEDEO_URL=http://host.docker.internal:3100
|
|
```
|
|
|
|
Scanner im Container prüfen:
|
|
|
|
```bash
|
|
docker compose -f docker-compose.example.yml run --rm fedeo-device-agent scanimage -L
|
|
```
|
|
|
|
Wenn der Scanner nicht sichtbar ist, hilft je nach Gerät/Host manchmal `privileged: true` im Compose-Beispiel. Auf macOS ist Docker dafür nur eingeschränkt geeignet, weil Docker Desktop USB-Scanner normalerweise nicht direkt an Linux-Container durchreichen kann. Für macOS bleibt deshalb der native Agent oder später eine signierte App der bessere Weg.
|
|
|
|
## Build
|
|
|
|
```bash
|
|
npm run build
|
|
npm start
|
|
```
|
|
|
|
## FEDEO-Endpunkte
|
|
|
|
Der Agent nutzt:
|
|
|
|
- `POST /instance-agent/heartbeat`
|
|
- `GET /instance-agent/scan-jobs/next`
|
|
- `POST /instance-agent/scan-jobs/:id/status`
|
|
- `POST /instance-agent/scan-jobs/:id/upload`
|
|
|
|
## macOS Autostart
|
|
|
|
Die Vorlage liegt unter `system/macos/com.fedeo.device-agent.plist`. Nach Anpassung der Pfade kann sie als LaunchAgent installiert werden:
|
|
|
|
```bash
|
|
mkdir -p ~/Library/LaunchAgents
|
|
cp system/macos/com.fedeo.device-agent.plist ~/Library/LaunchAgents/
|
|
launchctl load ~/Library/LaunchAgents/com.fedeo.device-agent.plist
|
|
```
|
|
|
|
## Linux Autostart
|
|
|
|
Die Vorlage liegt unter `system/linux/fedeo-device-agent.service`.
|