scanservjs Smart-Home-Integration, kostenlos und Open Source

Scanne aus Gladys mit scanservjs: per Knopf oder Szene, und ein Ereignis, wenn die Datei fertig ist.
scanservjs ist eine Weboberfläche, die mit SANE von jedem Gerät deines Netzwerks aus scannt. Mit dieser Integration startet Gladys einen Scan, per Knopf im Dashboard oder aus einer Szene, und meldet, wenn eine Datei fertig ist: aus Gladys oder aus der Weboberfläche von scanservjs. Wohin die Datei danach geht (ein freigegebener Ordner, Paperless-ngx…), ist Sache von scanservjs und seinen Pipelines.
Getestet mit einem echten scanservjs 3.3 (Docker-Image sbs20/scanservjs), der
den virtuellen Scanner von SANE steuert (sein Backend test): Scans vom
Flachbett und vom Dokumenteneinzug (10 Seiten), als PDF, JPEG und PNG,
abgelehnte Einstellungen, eine gelöschte Datei, mit und ohne Anmeldung. Ohne
die Hardware entwickelt (kein echter Scanner) und noch nicht mit einem echten
Gladys getestet: Rückmeldungen sind willkommen in
den Issues.
Was du brauchst
- Gladys Assistant 5.1.0 oder neuer.
- scanservjs 3.x (getestet mit 3.3.0), seine Weboberfläche vom Gladys-Rechner aus erreichbar (standardmäßig Port 8080), und ein Scanner, den es sieht.
- Wenn du in seiner
config.local.jsBenutzer angelegt hast: einen davon und sein Passwort.
Die Integration liest die Dateiliste von scanservjs standardmäßig jede Minute und seine Scanner einmal pro Stunde. Nichts verlässt dein Netzwerk.
Einrichtung
1. Die Adresse von scanservjs prüfen
Öffne scanservjs im Browser und notiere seine Adresse, zum Beispiel
http://192.168.1.2:8080. Mach einen ersten Scan aus seiner Weboberfläche:
Wenn er dort klappt, klappt er auch aus Gladys.
2. Die Integration konfigurieren
Unter Integrationen → scanservjs → Konfiguration:
- scanservjs-Adresse: die Adresse von oben. Eine reine IP-Adresse nutzt Port 8080.
- Benutzername und Passwort: nur, wenn scanservjs danach fragt.
- Voreinstellung 1, 2 und 3: was ein Knopfdruck macht. Jede Voreinstellung hat einen Namen (der Text ihres Knopfs; leer ist die Voreinstellung aus), eine Auflösung, einen Modus (Farbe, Graustufen, Schwarzweiß), ein Format (PDF, durchsuchbares PDF per OCR, JPEG, PNG) und eine Quelle: den Standard des Scanners, das Flachbett oder den Dokumenteneinzug, der alle eingelegten Blätter scannt (eine Datei). Standard: Document (300 dpi, Graustufen, PDF) und Photo (300 dpi, Farbe, JPEG). Die Integration findet die Wörter deines Scanners (ein Modus „Color“ kann „24bit Color“ heißen); ein fehlendes Schwarzweiß wird zu Graustufen.
- scanservjs-Pipeline (optional): der genaue Name einer Pipeline von scanservjs, zum Beispiel einer eigenen (siehe Paperless und freigegebene Ordner). Leer nimmt die Integration die des Formats.
- Aktualisierungsintervall: wie schnell ein Scan aus der Weboberfläche von scanservjs erkannt wird (30 Sekunden, 1 oder 5 Minuten). Ein Scan aus Gladys wird sofort erkannt.
- Löschen von Dateien erlauben: standardmäßig aus; siehe die Aktion unten.
- Sprache der Namen: die Sprache der Funktionsnamen (beim Anlegen eines Geräts festgelegt) und der Zustände.
Verbindung testen liest scanservjs und nennt seine Version, seine Scanner und seine Dateien.
3. Die Geräte anlegen
Lege im Tab Entdecken die Scanner und das Gerät scanservjs an. Nichts wird ohne dich angelegt. Das Widget und die Szenen funktionieren auch ohne sie, aber eine Szene kann nur einen angelegten Scanner wählen.
Die Geräte
Ein Gerät pro Scanner von scanservjs:
| Funktion | Wert |
|---|---|
| Zustand | Bereit, Scannt, Letzter Scan fehlgeschlagen (bis zum nächsten erfolgreichen), Nicht gefunden (scanservjs listet ihn nicht mehr) |
| Scan läuft | 1, solange ein aus Gladys gestarteter Scan läuft |
Ein Gerät scanservjs für die Dateien seines Ausgabeordners:
| Funktion | Wert |
|---|---|
| Letzter Scan | Tag und Uhrzeit der neuesten Datei |
| Letzte Datei | Dateiname |
| Seiten des letzten Scans | Im PDF (oder im ZIP der Bilder) gezählt; 0, wenn unbekannt |
| Scans heute | Seit Mitternacht erstellte Dateien |
| Dateien | Dateien im Ordner |
Die Dateien hängen nicht an den Scannern: scanservjs merkt sich nicht, welcher Scanner eine Datei erstellt hat.
Dashboard
Das Widget Scanner zeigt die Scans des Tages, die Seiten des letzten Scans, den Zustand des Scanners, die letzten fünf Dateien und einen Knopf pro Voreinstellung (Document, Photo…). Ein Druck scannt: Dateiname und Seiten erscheinen innerhalb von 20 Sekunden, oder das Widget meldet, dass der Scan weiterläuft, und aktualisiert sich an seinem Ende. Wähle in seinen Einstellungen den Scanner (leer: der erste).
Szenen
Auslöser
- Ein Scan ist fertig: eine neue Datei in scanservjs, aus Gladys oder aus seiner Weboberfläche. Filter: gestartet aus (Gladys, Weboberfläche) und Dateityp. Variablen: die Datei, ihre Seiten, ihr Typ, ihre Größe und bei einem Scan aus Gladys seine Voreinstellung, seine Pipeline und sein Scanner.
- Ein Scan schlägt fehl: ein aus Gladys gestarteter Scan schlägt fehl (Papierstau, leerer Einzug, Scanner aus, abgelehnte Einstellung). Filter: die Scanner. Variablen: der Scanner, die Voreinstellung und der Fehler von scanservjs.
Aktionen
- Scannen: scannt mit einer Voreinstellung (und einem Scanner; leer: der erste) und wartet höchstens 100 Sekunden auf die Datei. Ergebnisse: ob die Datei fertig ist, ihr Name und ihre Seiten. Ein längerer Scan läuft weiter, und Ein Scan ist fertig löst an seinem Ende aus.
- Letzte Datei löschen: löscht die neueste Datei von scanservjs, zum Beispiel einen misslungenen Scan. Aus, außer Löschen von Dateien erlauben ist an. Ergebnis: der Name der gelöschten Datei.
Szenen-Ideen
- Ein Knopf im Flur (Zigbee-Schalter) → Scannen mit der Voreinstellung Document: Brief aufs Glas, Druck, und er ist in Paperless.
- Ein Scan ist fertig → eine Nachricht „Gescannt: Datei (Seiten)“ mit den Variablen des Auslösers senden.
- Ein Scan schlägt fehl → mit dem Fehler benachrichtigen: Der Einzug war leer.
Paperless und freigegebene Ordner
Die Integration startet die Scans; scanservjs erstellt und verschickt die
Dateien. Damit sie in Paperless-ngx landen, lass den Ausgabeordner von
scanservjs (/var/lib/scanservjs/output in seinem Container) auf den
Consume-Ordner von Paperless zeigen, oder lege in seiner config.local.js eine
Pipeline an, deren afterAction die Datei dorthin verschiebt (siehe die
Dokumentation von scanservjs, „config.local.js“), und trage ihren Namen unter
scanservjs-Pipeline einer Voreinstellung ein.
Fehlerbehebung
- „scanservjs antwortet nicht“: Prüfe Adresse und Port vom Gladys-Rechner aus.
- „Benutzername oder Passwort fehlt oder von scanservjs abgelehnt“:
scanservjs hat Benutzer in seiner
config.local.js: Gib einen davon und sein Passwort ein. - „kein scanservjs unter dieser Adresse“: Die Adresse zeigt auf etwas anderes.
- „scanservjs sieht keinen Scanner“: Prüfe den Scanner in seiner Weboberfläche, dann Suchen im Tab Entdecken (die Scanner werden neu gelesen).
- „dieser Scanner hat keinen Dokumenteneinzug“: Die Voreinstellung verlangt den Einzug; wähle das Flachbett oder den Standard des Scanners.
- Ein Scan schlägt mit dem Fehler von
scanimagefehl: Derselbe Scan schlägt wohl auch aus der Weboberfläche von scanservjs fehl; seine Protokolle sagen mehr. - Für mehr Details setze die Variable
LOG_LEVELder Integration aufdebug.
Grenzen
- Eine scanservjs-Instanz pro Integration, ein Scan aus Gladys zur selben Zeit. scanservjs selbst verhindert nicht, dass ein Scan aus seiner Weboberfläche gleichzeitig mit einem aus Gladys läuft: Vermeide das.
- Ein Scan aus der Weboberfläche wird erkannt, wenn seine Datei erscheint, beim nächsten Lesen: sein Fehlschlag, seine Voreinstellung und sein Scanner sind nicht bekannt.
- Die Seiten werden in PDF-Dateien und ZIP-Archiven gezählt; eine Textdatei der OCR zählt als eine Seite.
- Ohne die Hardware entwickelt: Rückmeldungen willkommen (nur ein virtueller Scanner von SANE). Nicht mit scanservjs oder SANE verbunden. Melde ein Problem oder eine Idee in den Issues.
Konfigurationseinstellungen
Diese Einstellungen fragt scanservjs in seinem Konfigurationsbildschirm in Gladys ab.
| Einstellung | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
| Dein scanservjs | section | Nein | scanservjs, die Weboberfläche, die mit SANE scannt. Gib seine Adresse ein und, wenn seine Anmeldung aktiv ist, Benutzer und Passwort. Lege dann die Scanner im Tab „Entdecken“ an. |
| scanservjs-Adresse | string | Ja | Die Adresse der Weboberfläche, standardmäßig Port 8080. |
| Benutzername | string | Nein | Ein Benutzer aus config.local.js (users). Leer ohne Anmeldung. |
| Passwort | secret | Nein | Das Passwort dieses Benutzers. Leer ohne Anmeldung. |
| Voreinstellung 1 | section | Nein | Ein Knopf des Widgets und eine Wahl der Szenenaktion „Scannen“. Leerer Name: Die Voreinstellung ist aus. |
| Name (der Knopf) | string | Nein | |
| Auflösung | select | Nein | |
| Modus | select | Nein | |
| Format | select | Nein | |
| Quelle | select | Nein | |
| scanservjs-Pipeline (optional) | string | Nein | Der genaue Name, z. B. eine eigene Pipeline, die an Paperless sendet. Leer: die des Formats. |
| Voreinstellung 2 | section | Nein | |
| Name (der Knopf) | string | Nein | |
| Auflösung | select | Nein | |
| Modus | select | Nein | |
| Format | select | Nein | |
| Quelle | select | Nein | |
| scanservjs-Pipeline (optional) | string | Nein | Der genaue Name, z. B. eine eigene Pipeline, die an Paperless sendet. Leer: die des Formats. |
| Voreinstellung 3 | section | Nein | |
| Name (der Knopf) | string | Nein | |
| Auflösung | select | Nein | |
| Modus | select | Nein | |
| Format | select | Nein | |
| Quelle | select | Nein | |
| scanservjs-Pipeline (optional) | string | Nein | Der genaue Name, z. B. eine eigene Pipeline, die an Paperless sendet. Leer: die des Formats. |
| Optionen | section | Nein | |
| Aktualisierungsintervall | select | Nein | Wie oft die Dateien von scanservjs gelesen werden: Ein Scan aus seiner Weboberfläche wird in dieser Zeit erkannt. |
| Löschen von Dateien erlauben | boolean | Nein | Erlaubt der Szenenaktion „Letzte Datei löschen“, die neueste Datei von scanservjs zu löschen. |
| Sprache der Namen | select | Nein | Sprache der Funktionsnamen (beim Anlegen eines Geräts festgelegt), der Zustände und der Szenen-Meldungen. |
So installierst du scanservjs in Gladys
- Öffne in Gladys Integrationen: scanservjs erscheint im Katalog neben den nativen Integrationen, mit einem Community-Badge.
- Klicke auf Installieren. Gladys lädt das Docker-Image (
ghcr.io/guim31/gladys-scanservjs:1.0.0) herunter, startet es in einer vom Kern isolierten Sandbox und erzeugt die Oberfläche der Integration (Geräte, Erkennung und Konfiguration). - Öffne den Bildschirm Konfiguration der Integration, fülle die Einstellungen aus und speichere.
- Du kannst sie auch direkt über die URL ihres Repositorys installieren: https://github.com/guim31/gladys-scanservjs.
scanservjs benötigt Gladys >=5.1.0. Der Katalog in Gladys wird stündlich aktualisiert, eine neue Version ist also spätestens eine Stunde nach ihrer Veröffentlichung verfügbar.
Du nutzt Gladys noch nicht? Es ist kostenlos und Open Source: folge der Installationsanleitung, um loszulegen.
Über externe Integrationen
scanservjs ist eine externe Integration: eine Community-Integration, die als Docker-Container verpackt und auf GitHub veröffentlicht wird. Gladys installiert sie mit einem Klick und führt sie in einer vom Kern isolierten Sandbox aus. Sie wird von guim31 veröffentlicht und gepflegt, nicht vom Gladys-Kernteam.
- Alle Integrationen durchsuchen, native und aus der Community
- Deine eigene externe Integration bauen und veröffentlichen
- Quellcode auf GitHub — Quelle dieser Dokumentation