Skip to content

Довідник конфігурації Abhard

abhard — демон керування обладнанням (порт за замовчуванням 4601). Конфігурація зчитується з файлу abhard.ini та файлу аутентифікації tokens.json, що знаходяться за платформно-специфічними шляхами пошуку.

Розташування файлу конфігурації

Файли шукаються в наступному порядку, використовується перший знайдений:

Linux: $XDG_CONFIG_HOME/abacus/ · /opt/abacus/etc/ · /etc/abacus/ · директорія виконуваного файлу Windows: %LOCALAPPDATA%\Abacus\ · %APPDATA%\Abacus\ · %ProgramData%\Abacus\ · директорія виконуваного файлу

Якщо файл не знайдено, стандартний конфіг буде створений у першій доступній для запису директорії.


Секція [main]

Ключ Типово Опис
port 4601 HTTP-порт прослуховування
logfile abhard.log Шлях до файлу журналу (абсолютний або відносно виконуваного файлу)
whitelist 127.0.0.1 Дозволені IP-адреси через крапку з комою; підтримуються діапазони (192.168.1.1-10) і CIDR (192.168.0.0/24)
event_socket true Увімкнути сервер сокетів подій
event_socket_host авто Адреса прив'язки; автоматично визначається як перша адреса 192.168.x.x, потім будь-яка не-петльова IP, інакше 127.0.0.1
event_socket_port 4651 Порт сервера сокетів подій
event_socket_ping_idle 4 Інтервал keepalive-пінгу (секунди) у відсутність подій

Секції пристроїв ([device_*])

Кожна секція [device_*] визначає один апаратний пристрій. Ім'я секції може бути довільним, але має починатися з device. Загальні поля для всіх пристроїв:

Ключ Обов'язково Опис
name Ні Назва пристрою; за замовчуванням — ім'я секції
type Так Тип пристрою: scanner, printer, scales, prro
subtype Так* Дивіться таблиці нижче (* не використовується для scales)

type = scanner

subtype = serial

Сканер штрихкодів через RS-232/UART.

Ключ Типово Опис
device Послідовний порт (наприклад /dev/ttyS0, COM1)
baudrate 9600 Швидкість передачі
bits 8 Біти даних
parity N N · E · O · S · M
stopbits 1 Стоп-біти
softflow false Програмне керування потоком XON/XOFF
hardflow false Апаратне керування потоком RTS/CTS

Захардкоджено: пауза завершення штрихкоду 75 мс; затримка циклу 20 мс.

subtype = hid (тільки Linux)

USB HID-сканер через libusb.

Ключ Типово Опис
vendor_id Ідентифікатор виробника USB у шістнадцятковому форматі (наприклад 0x0456)
product_id Ідентифікатор пристрою USB у шістнадцятковому форматі (наприклад 0x0100)

Захардкоджено: таймаут читання USB 500 мс; роздільник між скануваннями 1 с.

subtype = devfile (тільки Linux)

USB HID-сканер через файл пристрою /dev/hidraw*.

Ключ Типово Опис
device Шлях до файлу пристрою (наприклад /dev/hidraw0)

Захардкоджено: пауза завершення штрихкоду 50 мс; таймаут select() 200 мс.

subtype = redirect

Проксіює запити сканування до іншого екземпляра abhard по HTTP.

Ключ Типово Опис
redirect_url Повна URL-адреса ендпоінту віддаленого сканера
redirect_name Необов'язкова відображувана назва для проксі-цілі

type = printer

subtype = escpos

Чековий принтер ESC/POS через файл пристрою.

Ключ Типово Опис
device Файл пристрою (наприклад /dev/usb/lp0, /dev/ttyS1)
width 40 Ширина паперу в символах
codepage (немає) Індекс кодової сторінки ESC/POS (ESC t n); пропустіть, щоб не ініціалізувати
softrender false true = програмна генерація QR-коду; false = апаратна команда ESC/POS
feed_lines 3 Кількість рядків протяжки після кінця документа

subtype = dummy

Записує завдання друку у файли замість апаратного пристрою (для тестування).

Ключ Типово Опис
target_dir (stdout) Директорія для вихідних файлів; якщо порожньо — виводить у журнал
width 40 Ширина рядка в символах

type = scales

Ваги з RS-232, зважування одного значення; subtype ігнорується.

Ключ Типово Опис
device /dev/ttyS0 Послідовний порт
model VTA16 VTA16 або DigiDS
timeout 5000 Максимальний час очікування відповіді ваг (мс)
baudrate 9600 Швидкість передачі
bits 8 Біти даних
parity N N · E · O · S · M
stopbits 1 Стоп-біти
softflow false XON/XOFF
hardflow false RTS/CTS

Захардкоджено: повтор із наростанням — початок 100 мс, приріст 200 мс за спробу, максимум 1000 мс.


type = prro / subtype = eusign

Програмний реєстратор розрахункових операцій (ПРРО) через бібліотеку EUSignCP.

Ключ Типово Опис
key_path Шлях до файлу приватного ключа (.dat); відносні шляхи — відносно директорії виконуваного файлу
key_password Пароль до приватного ключа
certs_path (за замовчуванням бібліотеки) Директорія з сертифікатами та CRL
lib_path /opt/abacus/lib/ (Linux) Директорія бібліотеки EUSignCP
proxy_address (немає) Хост HTTP-проксі
proxy_port 0 Порт HTTP-проксі
proxy_user (немає) Логін для проксі
proxy_pass (немає) Пароль для проксі
timeout_ms 30000 Таймаут HTTP-запиту (мс)
http_retries 2 Кількість повторів при помилці HTTP
http_retry_delay_ms 1000 Затримка між повторами (мс)

Аутентифікація — tokens.json

Шляхи пошуку (той самий порядок, що й для конфіг-файлу): Linux: /opt/abacus/etc/tokens.json · $XDG_CONFIG_HOME/abacus/ · директорія виконуваного файлу Windows: %LOCALAPPDATA%\Abacus\ · %APPDATA%\Abacus\ · %ProgramData%\Abacus\ · директорія виконуваного файлу

{
  "tokens": {
    "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": {
      "role": "administrator",
      "description": "Адміністраторський токен",
      "created": "2026-01-01T00:00:00",
      "expires": 0
    },
    "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY": {
      "role": "worker",
      "description": "Каса №1",
      "created": "2026-01-01T00:00:00",
      "expires": "2027-01-01T00:00:00"
    }
  }
}
Роль Права доступу
administrator Повний доступ, включно з керуванням токенами
worker Стандартні операції; не може видавати Z-звіти та керувати токенами
probationer Обмежений доступ; не може надсилати фіскальні документи Z-звіту

expires: рядок дати/часу ISO 8601 або 0 / відсутнє поле — токен безстроковий. Прострочені токени відхиляються та видаляються автоматично.


Повний приклад abhard.ini

[main]
port = 4601
logfile = /var/log/abacus/abhard.log
whitelist = 127.0.0.1;192.168.0.0/24
event_socket = true
event_socket_host = 192.168.1.10
event_socket_port = 4651
event_socket_ping_idle = 4

[device_scanner_serial]
name = BarcodeScanner
type = scanner
subtype = serial
device = /dev/ttyS0
baudrate = 9600
bits = 8
parity = N
stopbits = 1
softflow = false
hardflow = false

[device_scanner_hid]
name = USBScanner
type = scanner
subtype = hid
vendor_id = 0x0456
product_id = 0x0100

[device_scanner_hidraw]
name = HidrawScanner
type = scanner
subtype = devfile
device = /dev/hidraw0

[device_scanner_remote]
name = RemoteScanner
type = scanner
subtype = redirect
redirect_url = http://192.168.1.20:4601/api/scaner/BarcodeScanner
redirect_name = Branch2Scanner

[device_printer]
name = ReceiptPrinter
type = printer
subtype = escpos
device = /dev/usb/lp0
width = 42
codepage = 0
softrender = false
feed_lines = 3

[device_printer_test]
name = TestPrinter
type = printer
subtype = dummy
target_dir = /tmp/print_jobs
width = 42

[device_scales]
name = Scales
type = scales
model = DigiDS
device = /dev/ttyS1
timeout = 5000
baudrate = 9600
bits = 8
parity = N
stopbits = 1

[device_prro]
name = FiscalRegister
type = prro
subtype = eusign
key_path = /opt/abacus/etc/keys/Key-6.dat
certs_path = /opt/abacus/etc/cert/
key_password = SecretPassphrase
proxy_address = proxy.company.com
proxy_port = 8080
http_retries = 2
http_retry_delay_ms = 1000
timeout_ms = 45000