Często drukarka fiskalna nie jest bezpośrednio podłączona do maszyny na której instalujemy PosnetServer. Również gdy uruchamiamy PosnetServer jako Docker, porty szeregowe mogą nie być odpowiednio zmapowane lub wręcz mogą nie być dostępne.
Uwaga! feature dostępny od wersji 3.3
Jest wiele rozwiązań tego typu problemów, w tym artykule opiszemy jeden z nich, który osobiście przetestowaliśmy i możemy zagwarantować że działa w 100% 🙂
Na maszynie do której podłączona jest drukarka uruchamiamy polecenie:
1 |
socat -vvvv tcp-l:54321,reuseaddr,fork file:/dev/ttyS1,nonblock,raw,echo=0,waitlock=/var/run/tty |
Tym poleceniem na porcie 54321 wystawiamy /dev/ttyS1. Następnie na kliencie (dockerze, Rasbperry PI lub dowolnej innej maszynie) tworzymy wirtualne urządzenie i łączymy je z naszym serwerem (w poniższym przykładzie IP serwera to 192.168.0.74):
1 |
while true; do socat -vvvv pty,link=/home/ubuntu/dev/vmodem0,raw,echo=0,waitslave tcp:192.168.0.74:54321; done |
Aby przetestować połączenie, na maszynie klienta, uruchamiamy:
1 |
sudo socat -,icanon=0,echo=0,min=0,isig,icrnl=0 /home/ubuntu/dev/vmodem0 |
Naciskając dowolne klawisze w konsoli na maszynie klienta, powinniśmy zobaczyć przesłane znaki na serwerze:
Od teraz na maszynie klienta możemy używać /home/ubuntu/dev/vmodem0. W pliku config.json, podajemy /home/ubuntu/dev/vmodem0 oraz zapalamy flagę disable_ioctl, gdyż jest to “wirtualny” port a nie fizyczny.
1 2 3 4 |
"rs232": { "disable_ioctl": true, "params": "/home/ubuntu/dev/vmodem0,9600,8,N,1,N" } |
Połączenie z drukarką można przetestować za pomocą skryptu ./serialporttest.sh. Skrypt odczytuje aktualną datę z drukarki: