W dowolnym edytorze tekstowym (np. notatnik pod Windows lub gedit/kate pod Linux) otwórz plik config.json znajdujący się w głównym katalogu PosnetServer’a.

W polu connection.type ustaw typ połączenia jako jeden z 3 możliwych:
- rs232
- eth
- tunnel
Połączenie rs232
Wybieramy wówczas kiedy drukarka połączona jest kablem szeregowym RS232 lub kablem USB. W polu connection.rs232.params należy podać parametry połączenia wg szablonu:
- nazwa portu COM,
- prędkość transmisji,
- bity danych,
- kontrola parzystości,
- bit stopu,
- kontrola przepływu
Dla typowej drukarki Posnet Thermal XL działającej pod Windows może to być np: ‘COM6,9600,8,N,1,H‘ , a dla Posnet Trio działającej pod Unix/Linux ‘/dev/ttyACM0,115200,8,N,1,N‘. Wartości takie jak prędkość transmisji, kontrole parzystości itd. ustawiamy na drukarce fiskalnej (❷ Konfiguracja » ❷Konfiguracja połączeń » ❺ Porty komunikacyjne » ❶ USB / ❸ COM), a następnie te same wartości należy wprowadzić w pliku konfiguracyjnym config.json, aby PosnetServer wiedział jak komunikować się z drukarką. Należy pamiętać że drukarką można łączyć się na jeden ze sposobów: sieć Ethernet/WiFi lub USB lub RS232. Domyślny sposób komunikacji z drukarką wybieramy w ustawieniach drukarki (❷ Konfiguracja » ❷Konfiguracja połączeń » ❶ Usługi PC » ❶ Interfejs PC)
UWAGA. Aby PosnetServer działający pod Unix/Linux mógł komunikować się z drukarką po USB lub RS232, musi być uruchomiony jako root (sudo ./serverstart.sh)
Pod RaspberryPI lub Linux najczęściej drukarka widoczna jest pod numerem portu /dev/ttyACM0, natomiast pod MacOS może to być przykładowo /dev/cu.usbmodem5075E0091. Pod MacOS zamiast /dev/tty, należy użyć /dev/cu. Urządzenia /dev/tty.* są używane do połączeń przychodzących (modem style), natomiast /dev/cu.* są używane do połączeń wychodzących.
W celu weryfikacji/znalezienia właściwego numeru portu można użyć poleceń (lsusb, dmesg lub udevadm). Przykładowe użycie i output:
|
1 2 3 4 5 6 7 8 |
root@17c0371:/home/user# lsusb Bus 001 Device 004: ID xxxx:0201 Boca Systems, Inc. Bus 001 Device 005: ID xxxx:10b0 Posnet Polska S.A. Bus 001 Device 007: ID xxxx:0054 INGENICO Bus 001 Device 006: ID xxxx:7800 Standard Microsystems Corp. Bus 001 Device 003: ID xxxx:2514 Standard Microsystems Corp. USB 2.0 Hub Bus 001 Device 002: ID xxxx:2514 Standard Microsystems Corp. USB 2.0 Hub Bus 001 Device 001: ID xxxx:0002 Linux Foundation 2.0 root hub |
|
1 2 3 4 |
root@17c0371:/home/user# dmesg | grep tty [ 0.697853] 3f201000.serial: ttyAMA0 at MMIO 0x3f201000 (irq = 87, base_baud = 0) is a PL011 rev2 [ 12.317546] cdc_acm 1-1.1.3:1.0: ttyACM0: USB ACM device [ 12.325143] cdc_acm 1-1.1.2:2.0: ttyACM1: USB ACM device |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
root@17c0371:/home/user# udevadm info --query=property --name=/dev/ttyACM0 DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.0/tty/ttyACM0 DEVNAME=/dev/ttyACM0 MAJOR=166 MINOR=0 SUBSYSTEM=tty USEC_INITIALIZED=XXXXXXXXXX ID_VENDOR=Posnet ID_VENDOR_ENC=Posnet ID_VENDOR_ID=1424 ID_MODEL=Posnet ID_MODEL_ENC=Posnet ID_MODEL_ID=10b0 ID_REVISION=0200 ID_SERIAL=Posnet_Posnet_XXXXXXXX ID_SERIAL_SHORT=XXXXXXXX ID_TYPE=generic ID_BUS=usb ID_USB_INTERFACES=:020201:0a0000: ID_USB_INTERFACE_NUM=00 ID_USB_DRIVER=cdc_acm ID_USB_CLASS_FROM_DATABASE=Communications ID_VENDOR_FROM_DATABASE=Posnet Polska S.A. ID_PATH=platform-3f980000.usb-usb-0:1.1.3:1.0 ID_PATH_TAG=platform-3f980000_usb-usb-0_1_1_3_1_0 DEVLINKS=/dev/serial/by-id/usb-Posnet_Posnet_407BE767-if00 /dev/serial/by-path/platform-3f980000.usb-usb-0:1.1.3:1.0 TAGS=:systemd: root@17c0371:/app# |
Przykładowy kod w Python, który może okazać się przydatny do odnalezienia właściwego portu.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
def usb_devices(): devices = [] # 1. Urządzenia USB (vendor/product) lsusb = subprocess.getoutput("lsusb") # 2. Porty szeregowe (to nas najbardziej interesuje) tty_ports = sorted([ p for p in os.listdir("/dev") if re.match(r"(ttyUSB|ttyACM|ttyS)\d+", p) ]) for port in tty_ports: path = f"/dev/{port}" # próbujemy wyciągnąć opis z udev info = subprocess.getoutput( f"udevadm info -q property -n {path}" ) name = None vendor = None model = None for line in info.splitlines(): if line.startswith("ID_MODEL="): model = line.split("=", 1)[1] elif line.startswith("ID_VENDOR="): vendor = line.split("=", 1)[1] elif line.startswith("ID_MODEL_FROM_DATABASE="): name = line.split("=", 1)[1] devices.append({ "port": path, "vendor": vendor, "model": model, "name": name or model or "Unknown USB device" }) return devices |
Połączenie ETH
Jeśli drukarka wyposażona jest w kartę sieciową, możemy skonfigurować połączenie przez sieć Ethernet. Wówczas w polu connection.eth.ip należy podać adres IP drukarki, a w polu connection.eth.port port.
Połączenie tunelowane
Jeśli mamy jedną drukarkę fiskalną, ale kilka stanowisk sprzedaży możemy skonfigurować PosnetServer w taki sposób aby przekazywał request do innej instancji, a ta następnie do drukarki. Konfiguracja tego typu może być używana w przypadku jeśli nie chcemy wystawiać adresu IP oraz portu drukarki fiskalnej w sieci lub zwyczajnie posiadamy drukarkę z portem szeregowym, bez karty sieciowej. Przykładową konfigurację tunelowania prezentuje diagram poniżej w którym tylko do stanowiska drugiego podłączona jest drukarka. Pozostałe stanowiska łączą się z drukarką przez PosnetServer uruchomiony na stanowisku drugim.

Testowanie połączenia
Aby przetestować połączenie z drukarką, należy otworzyć w przeglądarce WWW link:
http://localhost:3050/status . W przypadku poprawnej konfiguracji należy oczekiwać odpowiedzi podobnej do poniższej:

