Epson-USB-TSE im Windows-Netzwerk
Schritt für Schritt: lokalen Epson-Listener prüfen, TCP 8009 ausschließlich für den Kassenclient weiterleiten, TSE-Lesezugriff testen und Änderungen kontrolliert zurückbauen.
Kurzüberblick: Diese Anleitung zeigt einen kontrollierten Windows-Workaround, mit dem ein Kassenclient eine an einem TSE-Server angeschlossene Epson-USB-TSE über ePOS-Device XML erreicht. Voraussetzung ist ein lokal funktionierender Epson-TSE-Treiber mit einem ausschließlich an
127.0.0.1:8009gebundenenePOSDevice-Prozess.

Ziel und Geltungsbereich
Eine Windows-TCP-Weiterleitung verbindet die LAN-Adresse des TSE-Servers mit dem lokalen Epson-Listener. Die Windows-Firewall erlaubt TCP 8009 ausschließlich für den festgelegten Kassenclient. Der StorageHandler-Port 23500 bleibt unverändert und wird nicht zusätzlich im Netzwerk freigegeben.
Wichtige Abgrenzung: Der Ablauf wurde in einem konkreten Ausgangsfall erfolgreich getestet. Er ist keine bestätigte Epson-Freigabe für beliebige Treiberversionen oder einen vollständigen Mehrkassenbetrieb. Ein erfolgreicher Status-Lesezugriff ersetzt nicht die betriebliche Abnahme mit einem regulären Kassenbeleg.
Alle Servernamen, DNS-Namen und LAN-Adressen auf dieser Seite sind Beispiele. Sie müssen vor der Verwendung durch Werte der eigenen Umgebung ersetzt werden. Der Beispielname tse-server.example.test funktioniert ohne eigene DNS-Konfiguration nicht.
1. Eigene Werte festlegen
SERVER bezeichnet den Windows-PC mit USB-TSE, CLIENT die zugreifende Kasse.
| Einstellung | Beispiel / Bedeutung |
|---|---|
| TSE-Server / Computername | TSE-SERVER |
| DNS-Name für die Kasse | tse-server.example.test |
| Stabile Server-IPv4 | 192.168.10.10 |
| Stabile Client-IPv4 | 192.168.10.20 |
| ePOS-Device XML | TCP 8009 |
| Lokales Weiterleitungsziel | 127.0.0.1:8009 |
| TSE-Gerätekennung | local_TSE |
| StorageHandler | 23500; keine zusätzliche LAN-Freigabe |
Server- und Client-IP per DHCP-Reservierung oder vorhandener statischer Konfiguration stabil halten. Ein DNS-Name ersetzt dies nicht: Die Portweiterleitung bindet eine IP, die Firewallregel erlaubt eine Quell-IP. Epson-TSE-Treiber installieren, USB-TSE am Server einstecken und zuerst den lokalen Zugriff mit der Epson-Software prüfen.
Werteblock für die folgenden PowerShell-Schritte
# BEISPIELE: vor der Ausfuehrung an die Umgebung anpassen.
$tseServerName = 'TSE-SERVER'
$tseServerDns = 'tse-server.example.test'
$tseServerIp = '192.168.10.10'
$tseClientIp = '192.168.10.20'
$tseRuleName = 'Epson-TSE-TCP8009-' + $tseClientIp
Den angepassten Werteblock in jeder neuen PowerShell-Sitzung zuerst ausführen. Auf dem Server muss PowerShell für Einrichtung und Rückbau als Administrator geöffnet werden.
2. Lokalen Epson-Listener prüfen
Die folgenden Befehle lesen ausschließlich den vorhandenen Zustand:
hostname
Get-NetTCPConnection -State Listen -LocalPort 8009 |
Format-Table LocalAddress,LocalPort,OwningProcess
Get-Service iphlpsvc | Select-Object Name,Status,StartType
netsh interface portproxy show all

| Befund | Nächster Schritt |
|---|---|
Nur 127.0.0.1:8009 | Prozess prüfen; diese Anleitung ist für diesen Zustand vorgesehen. |
| Kein Listener auf 8009 | Epson-Treiber und Startzustand zuerst prüfen. |
LAN-IP:8009 oder 0.0.0.0:8009 | Besitzer und vorhandene Konfiguration prüfen. |
| Portweiterleitung bereits vorhanden | Ziel kontrollieren; eine abweichende Regel nicht überschreiben. |
Get-NetTCPConnection -State Listen -LocalPort 8009 |
Where-Object { $_.LocalAddress -eq '127.0.0.1' } |
ForEach-Object { Get-Process -Id $_.OwningProcess }
Erwarteter Prozessname: ePOSDevice. Seine Prozess-ID ändert sich. Die Epson-Datei C:\ProgramData\EPSON\TSE\TSEDrvConf wird für die Netzwerkweiterleitung nicht verändert.
3. Weiterleitung und Firewall einrichten
Nur nach bestätigtem lokalen Epson-Listener fortfahren. Bestehende Regeln müssen vor einer Änderung auf Zweck, Ziel und Reichweite geprüft werden.
3.1 Bestehende Regeln kontrollieren
netsh interface portproxy show all
Get-NetFirewallRule -Name $tseRuleName `
-ErrorAction SilentlyContinue
Get-NetFirewallRule `
-DisplayName ("Epson TSE - Kasse " + $tseClientIp) `
-ErrorAction SilentlyContinue
Passende Regeln weiterverwenden. Das bereitgestellte Skript 02-einrichten.ps1 bricht bei erkannten Konflikten ab und unterstützt -WhatIf.
3.2 Lokalen Epson-Port über die Server-IP erreichbar machen
Start-Service iphlpsvc
netsh interface portproxy add v4tov4 `
"listenaddress=$tseServerIp" listenport=8009 `
connectaddress=127.0.0.1 connectport=8009 protocol=tcp
3.3 TCP 8009 für genau einen Kassenclient freigeben
New-NetFirewallRule -Name $tseRuleName `
-DisplayName ("Epson TSE - Kasse " + $tseClientIp) `
-Direction Inbound -Action Allow -Protocol TCP `
-LocalPort 8009 -RemoteAddress $tseClientIp -Profile Any
netsh interface portproxy show all
Erwartetes Ziel: Server-LAN-IP:8009 führt auf 127.0.0.1:8009. Keine Routerfreigabe ins Internet anlegen. Der Dienst iphlpsvc wird gestartet; sein Starttyp wird nicht geändert. Den automatischen Wiederanlauf gemeinsam mit dem Epson-Treiber nach einem geplanten Neustart prüfen.
4. Netzwerk und TSE vom Kassenclient testen
Test-NetConnection -ComputerName $tseServerDns -Port 8009

4.1 Epson-Demo im BIN-Ordner starten
EpsonTseDemo 2.4.1 entpacken. Im Explorer den Ordner mit EpsonTseDemo.exe öffnen, in der Adresszeile powershell eingeben und Enter drücken. Danach den eigenen Werteblock laden und den Lesetest starten:
.\EpsonTseDemo.exe -m2 "-i$tseServerIp" `
-tlocal_TSE -w5 -y1 -z1
-m2 wählt ePOS-Device XML; -tlocal_TSE umgeht die automatische Geräteliste. Im Menü 1 (Get TSE Info) wählen, bei raw JSON bei Bedarf n, anschließend mit 99 beenden. Für diesen Lesetest keine Einrichtung, Rücksetzung oder Transaktion auslösen.
4.2 Ergebnis und Kasseneinstellungen prüfen
Erwartet werden open_device = OK, GetStorageInfo = EXECUTION_OK und close_device = OK. In der Kassensoftware die passende Epson-/ePOS-Device-XML-Schnittstelle, den eigenen Server-DNS-Namen, Port 8009 und local_TSE eintragen. Die Feldnamen hängen von der Kassensoftware ab.
TCP True allein bestätigt keine funktionsfähige TSE. Bestehende TSE-Zuordnung und Client-Registrierung beibehalten; keine bereits eingerichtete TSE erneut initialisieren. Den regulären Kassenablauf separat testen.
5. Fehler gezielt eingrenzen
| Symptom | Prüfung / Maßnahme |
|---|---|
| DNS/Ping OK, TCP False | Listener, Portweiterleitung und tatsächliche Client-Quell-IP mit der Firewallregel vergleichen. |
| Nur lokaler Listener vorhanden | Die LAN-Weiterleitung muss auf die aktuelle Server-IP zeigen. |
| TCP True, TSE-Abfrage scheitert | TSE lokal mit Epson-Software prüfen; direkt local_TSE verwenden; Fehlertext sichern. |
| Demo findet ihre EXE nicht | Im BIN-Ordner .\EpsonTseDemo.exe verwenden. |
| Geräteliste leer / Timeout 10060 | In Demo 2.4.1 die direkte Kennung -tlocal_TSE verwenden. Die Listenabfrage nutzt HTTP-Port 80. |
| Nach Neustart keine Verbindung | Epson-Prozess, iphlpsvc, IP-Adressen und Listener erneut prüfen. |
Firewallregel gezielt kontrollieren
Get-NetFirewallRule `
-DisplayName ("Epson TSE - Kasse " + $tseClientIp) |
Get-NetFirewallAddressFilter
Get-NetFirewallRule `
-DisplayName ("Epson TSE - Kasse " + $tseClientIp) |
Get-NetFirewallPortFilter
Für einen DNS-Test das gesamte DNS-Argument in Anführungszeichen setzen. Der IPv4-Aufruf ist der dokumentierte Diagnoseweg; der korrigierte DNS-Demo-Aufruf wurde im Ausgangsfall nicht erneut getestet.
.\EpsonTseDemo.exe -m2 "-i$tseServerDns" `
-tlocal_TSE -w5 -y1 -z1
Für die direkte TSE-Kennung ist keine zusätzliche Port-80-Freigabe erforderlich. Die Firewall zur Fehlersuche nicht pauschal deaktivieren.
6. Betrieb prüfen und Änderungen gezielt entfernen
| Zeitpunkt | Handlung |
|---|---|
| Vor Arbeitsbeginn | TSE-Server und Epson-Software starten lassen; Verbindung in der Kasse prüfen. |
| Nach Wartungsneustart | TCP-Test vom Client und TSE-Lesetest erneut ausführen. |
| Vor Abschaltung | Zugreifende Kassen ihre Vorgänge beenden lassen. |
| Weitere Kasse | Gezielte Client-Freigabe und passende TSE-Registrierung in der Kassensoftware vorsehen. |
| Neue IP-Adresse | Server-Portweiterleitung bzw. Client-Firewallregel kontrolliert anpassen. |
Vor der Freigabe für den laufenden Betrieb automatischen Start, Energiesparverhalten, stabilen DNS-/IP-Bezug und einen regulären Kassenbeleg prüfen. Parallele Zugriffe sind mit der eingesetzten Kassensoftware gesondert zu testen.
Gezielter Rückbau auf dem Server
Nur wenn keine Kasse die Netzwerk-TSE mehr benötigt: eigene Werte laden, die konkrete Weiterleitung sowie den tatsächlichen internen Firewall-Regelnamen prüfen. Niemals sämtliche Firewall- oder Portproxy-Regeln global löschen.
netsh interface portproxy show all
Get-NetFirewallRule -Name $tseRuleName
# Nur die zuvor gepruefte, eigene Konfiguration entfernen:
netsh interface portproxy delete v4tov4 `
"listenaddress=$tseServerIp" listenport=8009
Remove-NetFirewallRule -Name $tseRuleName
netsh interface portproxy show all
Epson-Treiber, USB-TSE und TSEDrvConf bleiben bestehen. iphlpsvc nicht pauschal deaktivieren; andere Windows-Funktionen können ihn verwenden.
7. Geprüfte PowerShell-Hilfen
Alle Skripte verlangen die relevanten Umgebungswerte ausdrücklich. Einrichtung und Rückbau sollten zuerst mit -WhatIf geprüft werden. Die Skripte verändern keine PowerShell-Ausführungsrichtlinie; Epson-Software ist nicht enthalten.
| Datei | Zweck | Download |
|---|---|---|
01-pruefen.ps1 | Lesende Diagnose auf Server oder Client | Herunterladen |
02-einrichten.ps1 | Einrichtung mit Vorprüfungen und -WhatIf | Herunterladen |
03-tse-test.ps1 | Start der lokalen Epson-Demo mit direkter TSE-Kennung | Herunterladen |
04-rueckbau.ps1 | Gezielter Rückbau mit Vorprüfungen und -WhatIf | Herunterladen |
.\01-Pruefen.ps1 -Role Client -ServerDns $tseServerDns
.\01-Pruefen.ps1 -Role Server -ClientIPv4 $tseClientIp
$tseArgs = @{
ExpectedComputerName = $tseServerName
ServerIPv4 = $tseServerIp
ClientIPv4 = $tseClientIp
}
.\02-Einrichten.ps1 @tseArgs -WhatIf
.\04-Rueckbau.ps1 @tseArgs `
-FirewallRuleName $tseRuleName -WhatIf