Довідник конфігурації 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 — будь-який діючий токен служби.
По запису на кожен пристрій: ім'я, тип, стан і остання помилка. Пристрій, якого
немає у відповіді, не створився — шукайте попередження в журналі. Перелік усіх
доступних запитів віддає /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, або дію, недоступну для ролі цього токена.