Scanner Epson ET-4856 — Intégration Home Assistant & Paperless-ngx
Scanner Epson ET-4856 — Intégration Home Assistant & Paperless-ngx
Mise en place : 22 mars 2026
Dernière mise à jour : 29 juillet 2026 (v4 — recto-verso, exécution détachée, bouton RAZ)
1. Vue d'ensemble
L'imprimante Epson ET-4856 (identifiée comme ET-4850 Series) est pilotée en local via le protocole eSCL (AirScan/AirPrint) en HTTPS, sans aucune dépendance au logiciel Epson. Un script bash exécuté depuis le container Home Assistant déclenche les scans et dépose les fichiers directement dans le répertoire consume de Paperless-ngx pour ingestion automatique (OCR + indexation).
Architecture
Bouton Dashboard HA (NSPanel)
→ script.scanner_epson[_recto|_verso|_reset]
→ shell_command.epson_scan[_recto|_verso]
→ epson_scan_launcher.sh (détache le processus en arrière-plan)
→ epson_scan.sh (scan eSCL, traitement PDF, notification API HA)
→ POST eSCL /ScanJobs (HTTPS:443) sur l'imprimante
→ GET /NextDocument → PDF (tout le lot ADF en un seul fichier)
→ GET /NextDocument (404) + DELETE → fermeture propre du job
→ /media/scans/ (= consume Paperless)
→ Paperless ingère → OCR → indexation → archivage
Composants
| Composant | Rôle | Emplacement |
|---|---|---|
| Epson ET-4856 | Scanner (eSCL via HTTPS) | 192.168.10.25:443 |
| Home Assistant | Orchestration, dashboard, déclenchement | Container Docker sur Unraid |
| Paperless-ngx | Ingestion, OCR, indexation | Container Docker sur Unraid |
| epson_scan.sh | Script principal de scan eSCL (v4) | /config/scripts/epson_scan.sh |
| epson_scan_launcher.sh | Wrapper de mise en arrière-plan | /config/scripts/epson_scan_launcher.sh |
| epson_scan_reset.sh | Réinitialisation (bourrage / blocage) | /config/scripts/epson_scan_reset.sh |
2. Protocole eSCL — Détails techniques
Découverte
Le scanner n'expose pas eSCL en HTTP (port 80). Il faut utiliser HTTPS sur le port 443 avec l'option -k de curl (certificat auto-signé SEIKO EPSON CORP.).
# Statut du scanner
curl -s -k https://192.168.10.25/eSCL/ScannerStatus
# Capabilities complètes
curl -s -k https://192.168.10.25/eSCL/ScannerCapabilities
Côté interface web de l'imprimante, il n'y a aucune mention explicite d'eSCL : c'est le réglage AirPrint qui l'active (eSCL est le volet « scan » d'AirPrint). Le paramètre « Protocole Top Priority » (IPP / port9100) ne concerne que l'impression.
Capabilities
| Paramètre | Vitre (Platen) | Chargeur (ADF) |
|---|---|---|
| Résolutions | 100, 200, 300, 600, 1200 DPI | 100, 200, 300, 600 DPI |
| Modes couleur | RGB24, Grayscale8, BlackAndWhite1 | RGB24, Grayscale8, BlackAndWhite1 |
| Formats sortie | PDF, JPEG | PDF, JPEG |
| Duplex matériel | N/A | Non supporté (AdfSimplexInputCaps uniquement) |
| Capacité | 1 page | 50 feuilles max |
| Dimensions max | 2550 x 3510 (≈A4) | 2550 x 4200 |
⚠️ Comportement clé de l'ET-4856 : un seul PDF par lot ADF
Contrairement à ce qu'on pourrait attendre, l'ET-4856 ne renvoie pas une page par appel à NextDocument. Un unique appel scanne tout le chargeur ADF et renvoie un PDF multi-pages complet. Toute logique de boucle « page par page » est donc inutile pour ce modèle — et c'était la cause d'un bug d'ordre des pages en recto-verso.
Séquence HTTP d'un scan
POST /eSCL/ScanJobsavec XML de paramètres → Réponse 201 + headerLocation= URL du jobGET {Location}/NextDocument→ Télécharge le PDF (tout le lot)GET {Location}/NextDocument(2e appel) → Renvoie 404, signale la fin au scannerDELETE {Location}→ Libère le job, le scanner repasse enIdle
Sans les étapes 3 et 4, le scanner reste bloqué sur « Numérisation » à l'écran LCD.
Exemple de XML ScanSettings
<?xml version="1.0" encoding="UTF-8"?>
<scan:ScanSettings xmlns:pwg="http://www.pwg.org/schemas/2010/12/sm"
xmlns:scan="http://schemas.hp.com/imaging/escl/2011/05/03">
<pwg:Version>2.0</pwg:Version>
<pwg:ScanRegions>
<pwg:ScanRegion>
<pwg:Width>2550</pwg:Width>
<pwg:Height>3510</pwg:Height>
<pwg:ContentRegionUnits>escl:ThreeHundredthsOfInches</pwg:ContentRegionUnits>
<pwg:XOffset>0</pwg:XOffset>
<pwg:YOffset>0</pwg:YOffset>
</pwg:ScanRegion>
</pwg:ScanRegions>
<pwg:InputSource>Platen</pwg:InputSource>
<scan:ColorMode>RGB24</scan:ColorMode>
<scan:XResolution>300</scan:XResolution>
<scan:YResolution>300</scan:YResolution>
<pwg:DocumentFormat>application/pdf</pwg:DocumentFormat>
<scan:Intent>Document</scan:Intent>
</scan:ScanSettings>
3. Contraintes de l'environnement HA (importantes)
3.1 — Container Alpine / BusyBox
Le container HA tourne sous Alpine Linux avec BusyBox. Les scripts évitent donc :
grep -P(Perl regex, non supporté) → remplacé parsed -n 's/.../p'stat→ remplacé parwc -c- heredoc
cat << EOFpour le XML → chaîne dans une variable
3.2 — Timeout de 60 s des shell_command
Home Assistant tue tout shell_command après 60 secondes, sans possibilité de configurer ce délai. Un scan ADF de 5 feuilles recto-verso dépasse largement ce seuil : le processus était tué avant d'avoir pu fermer le job eSCL → imprimante bloquée sur « Numérisation », et aucune notification côté HA.
3.3 — Mode restreint des shell_command avec templates
Quand un shell_command contient des templates Jinja2 ({{ states(...) }}), HA l'exécute dans un environnement restreint où les opérateurs shell >, >>, |, ~ et & ne sont PAS interprétés — ils sont pris littéralement. Écrire nohup ... & directement dans le shell_command ne fonctionne donc pas.
Solution retenue : un script launcher intermédiaire. Le shell_command appelle simplement bash launcher.sh args (aucun opérateur), et c'est le launcher — exécuté dans un vrai bash sans restriction — qui fait le nohup ... &.
3.4 — Persistance de poppler-utils
pdfunite et pdfseparate (package poppler-utils) sont nécessaires pour le traitement PDF. Or apk add ne survit pas au redémarrage du container, et l'automation d'installation au démarrage s'est révélée non fiable (timing réseau, timeout de 60 s sur un téléchargement de ~200 Mo).
Solution retenue : copier les binaires et leurs librairies dans /config/poppler-persist/ (volume monté depuis Unraid, donc permanent), et pointer dessus via PATH / LD_LIBRARY_PATH en tête de epson_scan.sh.
# Copie initiale (à refaire uniquement si /config est réinitialisé)
docker exec homeassistant sh -c '
mkdir -p /config/poppler-persist
for pkg in poppler-utils poppler cairo pixman nss nspr libxrender openjpeg libheif-openjpeg; do
apk info -L $pkg 2>/dev/null | while read f; do
if [ -f "/$f" ]; then
mkdir -p "/config/poppler-persist/$(dirname $f)"
cp -n "/$f" "/config/poppler-persist/$f" 2>/dev/null
fi
done
done
find /config/poppler-persist -name "pdfunite" -o -name "pdfseparate"
'
4. Configuration du container Home Assistant
Volume monté
Le répertoire consume de Paperless est monté dans le container HA :
-v '/mnt/user/Sauvegarde_Jean-Michel/Documents_Importants/consume/':'/media/scans':'rw'
Jeton d'accès API Home Assistant
Comme le script tourne détaché, il notifie lui-même HA via l'API REST locale. Un jeton d'accès longue durée (créé depuis le profil utilisateur HA) est stocké dans /config/.ha_token :
echo "LE_JETON" > /mnt/user/appdata/homeassistant/.ha_token
chmod 600 /mnt/user/appdata/homeassistant/.ha_token
# Vérification
docker exec homeassistant bash -c '
TOKEN=$(cat /config/.ha_token)
curl -s -o /dev/null -w "HTTP %{http_code}\n" \
-H "Authorization: Bearer ${TOKEN}" http://localhost:8123/api/
'
# → doit renvoyer HTTP 200
Le script appelle ensuite input_boolean/turn_on|turn_off et persistent_notification/create pour tenir HA informé en fin de traitement, quelle que soit la durée du scan.
5. Les trois scripts
5.1 — epson_scan_launcher.sh
Wrapper minimal qui détache le scan du timeout HA. C'est lui qui est appelé par les shell_command.
#!/bin/bash
nohup bash /config/scripts/epson_scan.sh "$@" > /tmp/last_scan.log 2>&1 &
disown
exit 0
5.2 — epson_scan.sh (v4)
Paramètres positionnels :
| Position | Paramètre | Valeurs | Défaut |
|---|---|---|---|
| $1 | Résolution | 100, 200, 300, 600 | 300 |
| $2 | Source | Platen, Feeder | Platen |
| $3 | Mode couleur | RGB24, Grayscale8, BlackAndWhite1 | RGB24 |
| $4 | Format | pdf, jpeg | |
| $5 | Intent | Document, Photo, TextAndGraphic | Document |
| $6 | Mode | simplex, recto, verso | simplex |
| $7 | Nom document | Texte libre (optionnel) | scan_[date] |
Comportement selon le mode :
- simplex + Platen : scanne 1 page depuis la vitre → PDF dans
/media/scans/ - simplex + Feeder : scanne tout le chargeur → PDF multi-pages
- recto : scanne tout le chargeur, garde le PDF en attente dans
/media/scans/.duplex_pending/, activeinput_boolean.scan_attente_verso - verso : scanne tout le chargeur (pile retournée), éclate les deux PDF avec
pdfseparate, intercale, fusionne avecpdfunite→ un seul PDF final
Codes de sortie :
- Succès :
OK:/chemin/fichier.pdf:taille:N pages(exit 0) - Succès recto :
RECTO_OK:N:Retournez la pile...(exit 0) - Erreur :
ERREUR: description(exit 1)
5.3 — epson_scan_reset.sh
Filet de sécurité, appelé par le bouton RAZ. Il enchaîne :
pkill -f epson_scan.sh— tue un scan encore en cours en arrière-plan- Parcourt tous les
JobUriduScannerStatuset les ferme (GET NextDocument+DELETE) - Supprime le lot recto-verso en attente (
.duplex_pending) - Nettoie les fichiers temporaires (
/tmp/scan_adf_*,/tmp/scan_headers_*) - Remet
scan_en_coursetscan_attente_versoàoffvia l'API HA - Relit l'état final et envoie une notification récapitulative
Sortie type : RESET_OK:jobs_fermes=2:lot_duplex_nettoye=1:etat_scanner=Idle:etat_adf=ScannerAdfEmpty
6. Logique du recto-verso manuel
L'ADF ne gère pas le duplex matériel. Le recto-verso se fait donc en deux passages, avec retournement manuel de toute la pile.
Principe
Passage 1 (rectos) : l'ADF scanne les pages 1, 3, 5, 7...
[L'utilisateur retourne TOUTE la pile d'un bloc]
Passage 2 (versos) : l'ADF tire d'abord le verso de la DERNIÈRE feuille
→ pages scannées dans l'ordre 8, 6, 4, 2
Fusion : rectos en positions impaires (1,3,5,7)
versos INVERSÉS en positions paires (2,4,6,8)
→ PDF final dans l'ordre 1,2,3,4,5,6,7,8 ✓
Implémentation (méthode robuste)
La manipulation de tableaux en shell BusyBox s'étant révélée peu fiable (premier essai : ordre 1-3-4-2 au lieu de 1-2-3-4), l'intercalage se fait par renommage positionnel puis tri alphabétique :
pdfseparate recto_batch.pdf → r-001.pdf, r-002.pdf...pdfseparate verso_batch.pdf → v-001.pdf, v-002.pdf...- Chaque recto i (ordre normal,
sort) est copié enpage_$((i*2+1)).pdf - Chaque verso j (ordre inversé,
sort -r) est copié enpage_$((j*2+2)).pdf pdfunite $(ls page_*.pdf | sort)→ PDF final dans le bon ordre
7. Configuration Home Assistant
configuration.yaml
Input selects
input_select:
scan_source:
name: Source de scan
options: ["Vitre", "Chargeur (ADF)"]
initial: "Vitre"
icon: mdi:scanner
scan_resolution:
name: Résolution
options: ["100", "200", "300", "600"]
initial: "300"
icon: mdi:resize
scan_color:
name: Mode couleur
options: ["Couleur", "Niveaux de gris", "Noir et blanc"]
initial: "Couleur"
icon: mdi:palette
scan_format:
name: Format de sortie
options: ["PDF", "JPEG"]
initial: "PDF"
icon: mdi:file-document
Input booleans
input_boolean:
scan_en_cours:
name: Scan en cours
icon: mdi:progress-clock
scan_attente_verso:
name: En attente versos
icon: mdi:rotate-3d-variant
Shell commands
⚠️ Aucun opérateur shell (>, &, |) dans ces lignes — voir §3.3. Elles appellent toutes le launcher.
shell_command:
epson_scan: "bash /config/scripts/epson_scan_launcher.sh {{ states('input_select.scan_resolution') }} {{ 'Feeder' if states('input_select.scan_source') == 'Chargeur (ADF)' else 'Platen' }} {{ {'Couleur':'RGB24','Niveaux de gris':'Grayscale8','Noir et blanc':'BlackAndWhite1'}[states('input_select.scan_color')] }} {{ states('input_select.scan_format') | lower }} Document simplex"
epson_scan_recto: "bash /config/scripts/epson_scan_launcher.sh {{ states('input_select.scan_resolution') }} Feeder {{ {'Couleur':'RGB24','Niveaux de gris':'Grayscale8','Noir et blanc':'BlackAndWhite1'}[states('input_select.scan_color')] }} {{ states('input_select.scan_format') | lower }} Document recto"
epson_scan_verso: "bash /config/scripts/epson_scan_launcher.sh {{ states('input_select.scan_resolution') }} Feeder {{ {'Couleur':'RGB24','Niveaux de gris':'Grayscale8','Noir et blanc':'BlackAndWhite1'}[states('input_select.scan_color')] }} {{ states('input_select.scan_format') | lower }} Document verso"
epson_scan_reset: "bash /config/scripts/epson_scan_reset.sh"
Command line sensors (statut)
On utilise command_line plutôt que rest : le client HTTP Python de HA gère mal le certificat auto-signé de l'imprimante, même avec verify_ssl: false.
command_line:
- sensor:
name: "Epson Scanner Status"
unique_id: epson_et4856_scanner_status
icon: mdi:scanner
command: "curl -s -k https://192.168.10.25/eSCL/ScannerStatus 2>/dev/null"
scan_interval: 30
value_template: >
{% set matches = value | regex_findall('<pwg:State>(.*?)</pwg:State>') %}
{% if matches %}
{% set map = {'Idle':'Prêt','Processing':'En cours','Testing':'Test','Stopped':'Arrêté'} %}
{{ map.get(matches[0], matches[0]) }}
{% else %}
Indisponible
{% endif %}
- sensor:
name: "Epson ADF Status"
unique_id: epson_et4856_adf_status
icon: mdi:tray-full
command: "curl -s -k https://192.168.10.25/eSCL/ScannerStatus 2>/dev/null"
scan_interval: 30
value_template: >
{% set matches = value | regex_findall('<scan:AdfState>(.*?)</scan:AdfState>') %}
{% if matches %}
{% set map = {'ScannerAdfEmpty':'Vide','ScannerAdfLoaded':'Papier chargé','ScannerAdfJam':'Bourrage'} %}
{{ map.get(matches[0], matches[0]) }}
{% else %}
Indisponible
{% endif %}
scripts.yaml
Les scripts HA sont volontairement minimalistes : ils allument juste l'indicateur et lancent la commande. C'est epson_scan.sh qui, une fois réellement terminé, éteint les booléens et envoie la notification via l'API.
scanner_epson:
alias: "Scanner un document"
icon: mdi:scanner
mode: single
sequence:
- action: input_boolean.turn_on
target:
entity_id: input_boolean.scan_en_cours
- action: shell_command.epson_scan
scanner_epson_recto:
alias: "Scanner rectos (duplex)"
icon: mdi:file-document-multiple
mode: single
sequence:
- action: input_boolean.turn_on
target:
entity_id: input_boolean.scan_en_cours
- action: shell_command.epson_scan_recto
scanner_epson_verso:
alias: "Scanner versos (duplex)"
icon: mdi:file-document-check
mode: single
sequence:
- action: input_boolean.turn_on
target:
entity_id: input_boolean.scan_en_cours
- action: shell_command.epson_scan_verso
scanner_epson_reset:
alias: "Réinitialiser scanner"
icon: mdi:restart-alert
mode: single
sequence:
- action: shell_command.epson_scan_reset
8. Dashboard (onglet Scan)
Situé dans le dashboard lovelace.dashboard_roborock, onglet path: scan. Utilise les cards Mushroom et state-switch (HACS) pour rester cohérent avec le reste du dashboard. Layout compact vertical car affiché sur un NSPanel.
Composition
- Ligne 1 : statut Scanner + statut Chargeur ADF (couleurs conditionnelles)
- Ligne 2 : selects Source + Résolution
- Ligne 3 : selects Couleur + Format
- Ligne 4 : les 3 boutons d'action côte à côte
Boutons
| Bouton | États | Action |
|---|---|---|
| Scanner | Vert « Scanner » → Orange « Scan... » | script.scanner_epson — respecte le select Source |
| Recto-Verso | Bleu « Recto-Verso » → Orange « Verso / Retournez » | scanner_epson_recto puis scanner_epson_verso — force toujours l'ADF |
| RAZ | Rouge, fixe | script.scanner_epson_reset |
Le bouton Recto-Verso bascule automatiquement d'un état à l'autre selon input_boolean.scan_attente_verso, guidant l'utilisateur dans le workflow en 2 étapes.
Entités utilisées
| Entité | Rôle |
|---|---|
| sensor.epson_scanner_status | État du scanner (Prêt / En cours) |
| sensor.epson_adf_status | État du chargeur (Vide / Papier chargé / Bourrage) |
| input_select.scan_source | Vitre / Chargeur ADF (bouton Scanner uniquement) |
| input_select.scan_resolution | Résolution DPI |
| input_select.scan_color | Couleur / gris / N&B |
| input_select.scan_format | PDF / JPEG |
| input_boolean.scan_en_cours | Indicateur scan en cours |
| input_boolean.scan_attente_verso | Bascule l'état du bouton Recto-Verso |
| script.scanner_epson[_recto|_verso|_reset] | Scripts déclenchés par les boutons |
9. Dépannage
Le scanner reste bloqué sur « Numérisation » (écran LCD)
Le job eSCL n'a pas été fermé (scan interrompu, bourrage, processus tué). Appuyer sur le bouton RAZ du dashboard, ou en CLI :
docker exec homeassistant bash /config/scripts/epson_scan_reset.sh
Le scanner répond HTTP 503
Un job précédent est encore actif. Vérifier l'état, puis lancer le RAZ :
docker exec homeassistant curl -s -k https://192.168.10.25/eSCL/ScannerStatus | sed 's/>\n
Rien n'arrive dans Paperless
Diagnostic en 4 étapes :
# 1. Le scanner répond-il ?
docker exec homeassistant curl -s -k https://192.168.10.25/eSCL/ScannerStatus | head -c 300
# 2. pdfunite est-il accessible ?
docker exec homeassistant ls -la /config/poppler-persist/usr/bin/pdfunite
# 3. Le processus tourne-t-il encore ?
docker exec homeassistant ps aux | grep epson_scan
# 4. Que dit le journal du dernier scan ?
docker exec homeassistant cat /tmp/last_scan.log
# 5. Un lot recto-verso resté en attente ?
docker exec homeassistant ls -la /media/scans/.duplex_pending/
« Timed out running command ... after: 60s » dans les logs HA
Le shell_command n'appelle pas le launcher mais directement epson_scan.sh. Vérifier :
docker exec homeassistant grep -A 4 "^shell_command:" /config/configuration.yaml
Chaque ligne epson_scan* doit appeler epson_scan_launcher.sh, sans nohup, sans >, sans & (voir §3.3).
« pdfunite: command not found » / fusion PDF échouée
Vérifier que la copie persistante existe et que le script pointe dessus :
docker exec homeassistant ls -la /config/poppler-persist/usr/bin/
docker exec homeassistant head -12 /config/scripts/epson_scan.sh # doit contenir les 2 export PATH/LD_LIBRARY_PATH
Si /config/poppler-persist/ est vide, refaire la copie initiale (voir §3.4).
Ordre des pages incorrect en recto-verso
Vérifier que le script est bien en v4 et utilise pdfseparate :
docker exec homeassistant head -3 /config/scripts/epson_scan.sh # doit indiquer v4
docker exec homeassistant grep -c "pdfseparate" /config/scripts/epson_scan.sh
« grep: unrecognized option: P »
Script obsolète utilisant grep -P, incompatible BusyBox. Redéployer la version v4.
Doublons dans scripts.yaml
Un cat >> lancé deux fois crée des clés dupliquées. HA les signale en warning :
docker exec homeassistant grep -c "^scanner_epson" /config/scripts.yaml
docker exec homeassistant grep -i "duplicate key" /config/home-assistant.log | tail -5
Éditions de configuration : privilégier sed depuis l'hôte
Deux pièges rencontrés à répétition :
docker exec homeassistant python3 << 'EOF'ne transmet pas le heredoc (il manque l'option-i) → la commande semble réussir mais ne fait riendocker exec ... cat >> /config/fichierécrit sur l'hôte, pas dans le container (la redirection est évaluée par le shell local)
→ Éditer directement les fichiers sous /mnt/user/appdata/homeassistant/ avec sed -i, puis vérifier avec docker exec homeassistant grep ....
10. Fichiers — Récapitulatif
| Fichier (Unraid) | Fichier (container HA) | Rôle |
|---|---|---|
| .../homeassistant/scripts/epson_scan.sh | /config/scripts/epson_scan.sh | Script principal de scan (v4) |
| .../homeassistant/scripts/epson_scan_launcher.sh | /config/scripts/epson_scan_launcher.sh | Wrapper arrière-plan |
| .../homeassistant/scripts/epson_scan_reset.sh | /config/scripts/epson_scan_reset.sh | Réinitialisation / RAZ |
| .../homeassistant/.ha_token | /config/.ha_token | Jeton API HA (chmod 600) |
| .../homeassistant/poppler-persist/ | /config/poppler-persist/ | pdfunite / pdfseparate persistants |
| .../homeassistant/configuration.yaml | /config/configuration.yaml | input_select, input_boolean, shell_command, sensors |
| .../homeassistant/scripts.yaml | /config/scripts.yaml | Scripts HA scanner_epson* |
| .../homeassistant/.storage/lovelace.dashboard_roborock | — | Dashboard (onglet Scan) |
| /mnt/user/Sauvegarde.../consume/ | /media/scans/ | Sortie des scans = consume Paperless |
| — | /media/scans/.duplex_pending/ | Lot recto-verso en attente (temporaire) |
| — | /tmp/last_scan.log | Journal du dernier scan lancé |
11. Historique des problèmes résolus
| Symptôme | Cause | Correctif |
|---|---|---|
Aucune réponse sur http://IP/eSCL/... |
eSCL exposé en HTTPS uniquement | Utiliser https:// + curl -k |
Boucle infinie / grep: unrecognized option: P |
BusyBox ne supporte pas grep -P |
Remplacé par sed -n 's/.../p' |
| HTTP 503 au lancement | Jobs fantômes d'un scan précédent | Fermeture propre + bouton RAZ |
| Imprimante bloquée sur « Numérisation » | Job jamais fermé après téléchargement | Ajout GET NextDocument (404) + DELETE |
| Ordre des pages 1-3-4-2 en recto-verso | Concaténation au lieu d'intercalage, versos non inversés | pdfseparate + renommage positionnel + sort -r |
RECTO_OK:1 pour 2 feuilles |
L'ET-4856 renvoie tout le lot ADF en un seul PDF | Suppression de la boucle page-par-page, comptage via pdfinfo |
| Sensor scanner « unavailable » | rest sensor + certificat auto-signé |
Bascule sur command_line sensor avec curl |
| Fusion échouée après redémarrage HA | apk add non persistant |
Copie dans /config/poppler-persist/ + PATH |
| Blocage systématique sur gros lots (5 feuilles+) | Timeout 60 s des shell_command HA | Exécution détachée via launcher + notification API |
nohup ... & sans effet dans shell_command |
Mode restreint avec templates : > et & non interprétés |
Backgrounding déporté dans epson_scan_launcher.sh |
12. Améliorations possibles
- Trigger Telegram : déclencher un scan via commande bot
- Bouton Zigbee physique : scanner en un appui depuis l'imprimante
- Nommage depuis le dashboard : le script accepte déjà un 7e paramètre (nom du document), mais l'ajout d'un champ
input_textéditable dans une vuesectionsn'a pas abouti (entité créée en YAML =editable: false; créée via l'UI = card invisible) - Niveaux d'encre : intégration HACS
ha-epson-workforce— testerhttp://192.168.10.25/PRESENTATION/HTML/TOP/PRTINFO.HTML - Barre de progression : exploiter
ImagesCompletedduScannerStatuspour un sensor de progression pendant le scan - Détection de bourrage : automation sur
sensor.epson_adf_status= « Bourrage » → notification + proposition de RAZ
No comments to display
No comments to display