Перейти до змісту

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

Налаштування зберігаються у файлі abhard.yaml. Створена самою службою конфігурація не містить жодного пристрою, а whitelist у ній розширено на підмережу /24 тієї мережевої карти, яку вдалося визначити.

Приклад із усіма підтримуваними пристроями встановлюється разом із програмою — /usr/share/doc/abhard/examples/abhard.yaml.example у Linux, C:\Program Files\Abacus\Tools\examples\abhard.yaml.example у Windows.


Блок main

Ключ Типово Опис
port 4601 Порт, на якому служба приймає запити
whitelist 127.0.0.1 Дозволені адреси через крапку з комою. Приймає одиночні адреси (127.0.0.1), діапазони (172.27.0.2-10) і підмережі (192.168.50.0/24)
logfile abhard.log Ім'я файлу журналу
event_socket true Увімкнути канал подій
event_socket_host визначається автоматично Адреса, яку служба повідомляє касам як точку підключення до каналу подій
event_socket_port 4651 Порт каналу подій
event_socket_ping_idle 4 Через скільки секунд тиші надіслати касі перевірочний пакет

Канал подій

Канал подій — постійне TCP-з'єднання, яким служба сама передає касі сканування штрихкодів та іншу службову інформацію. Програма, що підключилася останньою, отримує інформацію про відскановані коди. Підключення відбувається в момент запуску та в момент активації кожної програми з комплекту "Рахівниця" (Каса, Склад, Сервіс, Барком). Відключення - лише в момент завершення програми. Тобто якщо ви просто згорнули програму або відкрили іншу програму що не входить до "Рахівниці" (браузер, текстовий редактор, тощо) програма продовжує отримувати відскановані коди. Дуже зручно коли потрібно працювати одночасно і в Касі чи Складі і прайсом постачальника.

Якщо активна програма не відповіла на перевірочний пакет за дві секунди, вона вважається зниклою і від'єднується. Якщо при цьому була запущена інша програма, вона не активується.

Це зроблено саме таким чином для того, щоб зависла Каса не блокувала канал зв'язку і при тому щоб коди не почали раптом передаватись у запущений і давно забутий Склад.

Служба слухає на всіх мережевих картах, але касі повідомляє саме event_socket_host. Автоматичне визначення бере першу адресу з 192.168.*, далі будь-яку немісцеву, і аж потім 127.0.0.1. На машині з кількома мережевими картами воно може вибрати не ту: тоді каси отримають непридатну адресу і не під'єднаються — вкажіть потрібну явно.


Пристрої

devices — послідовність, кожен запис якої описує один пристрій.

Ключ Обов'язково Опис
name Так Ім'я пристрою; під ним пристрій видно касі й у журналі. Запис без імені пропускається
type Так scaner, printer, scales, prro
subtype Так Див. нижче; для scales не потрібен

Решта ключів залежить від пари type/subtype. Допустимі пари: scaner/serial, scaner/hid, scaner/devfile, printer/escpos, printer/dummy, scales, prro/eusign, а також будь-який тип із subtype: redirect. Невідома пара пропускається із попередженням у журналі — служба стартує, а пристрою в ній просто немає.

Тип сканера пишеться scaner, з однією n. scanner — невідомий тип.

Спільні параметри RS-232

Застосовуються до scaner/serial і до scales.

Ключ Типово Опис
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

scaner/serial

Сканер штрихкодів на послідовному порту. Інших параметрів, крім RS-232, не має. Поки файл пристрою відсутній, сканер показує стан «Not found» і служба щосекунди пробує підключитися знову — від'єднаний і повернутий у розетку сканер запрацює сам.

scaner/hid — лише Linux

Сканер USB, підключений напряму через libusb.

Ключ Типово Опис
vendor_id Код виробника, шістнадцятковий, без префікса 0x: 0536
product_id Код моделі, там само: 01b3

Обидва коди показує lsusb.

scaner/devfile — лише Linux

Сканер USB, підключений через файл пристрою.

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

printer/escpos

Чековий принтер ESC/POS.

Ключ Типово Опис
device Файл пристрою: /dev/usb/lp0, COM2
width 40 Символів у рядку; за цим значенням переносяться довгі рядки й малюються лінії-роздільники
codepage (немає) Номер кодової сторінки принтера. Якщо не задано, принтер лишається зі своїм поточним налаштуванням
softrender false true — QR-код малює служба і надсилає його як зображення; потрібно для принтерів, які не мають власної команди QR
feed_lines 3 Скільки рядків протягнути перед відрізанням чека

printer/dummy

Замість друку зберігає чеки текстовими файлами. Потрібен для перевірки налаштувань каси там, де принтера ще немає.

Ключ Типово Опис
target_dir (немає) Куди складати файли. Якщо не задано, чек виводиться в журнал
width 40 Символів у рядку

scales

Ваги на послідовному порту. subtype для них не потрібен.

Ключ Типово Опис
model VTA16 VTA16 або DigiDS
timeout 5000 Скільки мілісекунд чекати на відповідь ваг, перш ніж повернути помилку

Плюс параметри RS-232; device для ваг типово /dev/ttyS0.

prro/eusign

Програмний реєстратор розрахункових операцій. Що робить із ним каса — у розділі про ПРРО.

Ключ Типово Опис
key_path Файл особистого ключа
key_password Пароль до ключа
certs_path каталог програми Каталог із сертифікатами та списками відкликаних
lib_path /opt/abacus/lib/ Каталог бібліотеки підпису. Якщо його немає — підкаталог lib/ у каталозі програми
proxy_address (немає) Проксі-сервер, через який видно ДПС
proxy_port 0 Порт проксі
proxy_user (немає) Користувач проксі
proxy_pass (немає) Пароль проксі
timeout_ms 30000 Скільки мілісекунд чекати на відповідь ДПС
http_retries 2 Скільки разів повторити запит, який не дійшов
http_retry_delay_ms 1000 Пауза між повторами

Шлях, який не починається з кореня чи літери диска, відлічується від каталогу програми.

subtype: redirect

Пристрій, який фізично підключено до іншої каси: сканер, принтер, ваги чи ПРРО. Замість роботи з обладнанням служба повертає адресу того абхарда, і запит виконує вже він.

Ключ Типово Опис
redirect_url Базова адреса віддаленого абхарда
redirect_name Ім'я пристрою на ньому

subtype: redirect перекриває type, тому решта параметрів того типу тут не діє. Що при цьому потрібно налаштувати в лаунчері — у розділі про лаунчер.


Токени доступу

Файл токенів abhard.json не створює ні інсталятор, ні адміністратор. Служба стартує «нічийною», і перший адміністративний клієнт перебирає її на себе: активація служб у редакторі конфігурації "Складу" (або ініціалізація з лаунчера) отримує від служби адміністраторський токен, далі створює токени працівникам і записує їх у базу. Копіювати ключі руками не потрібно.

Ініціалізувати службу можна лише доки файлу токенів немає. Далі потрібен раніше виданий адміністраторський токен, а повторна ініціалізація відповідає «вже ініціалізовано».

Роль Права
administrator Усе, разом із видачею та відкликанням токенів
worker Усі операції з обладнанням; не може видавати й відкликати токени
probationer Те саме, що worker, але не може формувати Z-звіт

Токен без дати завершення дії безстроковий. Прострочений токен відхиляється й одразу зникає з файлу.


Приклад

main:
  port: 4601
  whitelist: '127.0.0.1;192.168.50.0/24;172.27.0.2-10'
  logfile: 'abhard.log'
  event_socket: true
  event_socket_host: '192.168.50.10'
  event_socket_port: 4651
  event_socket_ping_idle: 4

devices:
  - name: 'main_scaner'
    type: 'scaner'
    subtype: 'serial'
    device: '/dev/ttyS0'
    baudrate: 9600

  - name: 'usb_scaner'
    type: 'scaner'
    subtype: 'hid'
    vendor_id: '0536'
    product_id: '01b3'

  - name: 'main_printer'
    type: 'printer'
    subtype: 'escpos'
    device: '/dev/usb/lp0'
    width: 42
    feed_lines: 3

  - name: 'shared_printer'
    type: 'printer'
    subtype: 'redirect'
    redirect_url: 'http://192.168.50.4:4601'
    redirect_name: 'main_printer'

  - name: 'main_scales'
    type: 'scales'
    device: '/dev/ttyS1'
    model: 'DigiDS'
    timeout: 5000

  - name: 'main_prro'
    type: 'prro'
    subtype: 'eusign'
    key_path: 'keys/pb_0123456789.jks'
    key_password: 'Password1234'
    certs_path: 'cert/'

Перевірка

$KEY — будь-який діючий токен служби.

curl -H "X-API-KEY: $KEY" http://192.168.50.10:4601/api/status

По запису на кожен пристрій: ім'я, тип, стан і остання помилка. Пристрій, якого немає у відповіді, не створився — шукайте попередження в журналі. Перелік усіх доступних запитів віддає /api/list.

Для ПРРО є окрема перевірка зв'язку з ДПС:

# перевірити зараз (цифри у відповіді - час кожного етапу)
curl -H "X-API-KEY: $KEY" http://192.168.50.10:4601/api/prro/main_prro/selftest/run

# останні спроби надсилання документів
curl -H "X-API-KEY: $KEY" "http://192.168.50.10:4601/api/prro/main_prro/history?limit=20"

Після трьох невдалих спроб поспіль служба виконує таку перевірку сама; її результат лишається доступним за /api/prro/<ім'я>/selftest.

Відповідь 401 означає відсутній або недіючий токен, 403 — адресу, якої немає у whitelist, або дію, недоступну для ролі цього токена.