Начиная с версии 4.6 | 5.312 добавлена возможность централизованного управления данными весового контроля через REST API.
Контроль веса на каждой кассе может работать автономно. Обмен данными позволяет существенно ускорить автоматическое обучение и синхронизировать ручные изменения для отдельных товаров на всех кассах.
За обмен отвечает модуль контроля веса WeightControl. В нем реализован и клиент, и сервер обмена данными, которые могут быть включены одновременно. Любая касса может выступать в качестве как клиента, так и сервера для других клиентов. Также может быть использован SCO сервер, установленный в docker-контейнер, который аналогично может выполнять функции обмена.
Процесс и виды обмена
При старте кассы и в процессе работы обмен выполняется в фоновом режиме.
Обмен инициируется со стороны клиента с заданным в настройках периодом. В процессе обмена клиент передает серверу и запрашивает от него все измененные данные, начиная со времени предыдущего обмена.
На кассе можно инициировать полный обмен вручную по кнопке "Начать обмен" (команда WEIGHTCONTROL_CLIENTEXCHANGE) в меню "Статус обмена данными для обучения" (WEIGHTCONTROL_EXCHANGESTATUS).
Для выполнения инкрементального обмена по кнопке "Начать обмен" необходимо задать настройку в конфигурационном файле /opt/sst-sco/conf/weightcontrol.ini:
[WeightControl.ExchangeStatusForm.exchangeButton] full = false
Данные, связанные с контролем веса и обменом, хранятся в базе данных /opt/sst-sco/data/weightcontrol/weightcontrol.sqlite. Логи работы клиента и сервера можно посмотреть в директории /opt/sst-sco/logs/ в файлах weightcontrolclient.log и weightcontrolserver.log. По умолчанию для обмена используется TCP порт 3201. Подробнее о настройке логирования можно прочитать в разделе "Логирование работы программы".
Реализовать обмен между клиентом и сервером можно несколькими способами:
- Отдельный сервер для нескольких магазинов: один SCO сервер, к которому будут подключаться все кассы со всех магазинов торговой сети.
- Один главный сервер и несколько промежуточных: отдельный сервер можно установить на магазин, несколько магазинов, на регион и т. д. При этом период обмена между кассами и промежуточным сервером можно сделать чаще, а между промежуточными и главным реже. Количество промежуточных серверов между кассой и главным сервером не ограничено.
- Одна из касс выполняет роль сервера: можно использовать одну из касс, если нет возможности выделить отдельный сервер. Недостаток данного способа в том, что обмен не будет работать, пока эта касса будет выключена.
Для клиента нельзя указать в роли сервера ту же кассу. В такой ситуации клиент не будет запущен и для него в будет установлен статус "Неверно настроен".
Настройка
Данные настройки используются как на кассах, так и на SCO сервере.
Наименование | Возможные значения | Описание |
|---|---|---|
Файл /opt/sst-sco/conf/weightcontrol.ini, секция [WeightControl], настройки модуля контроля веса | ||
| enable |
| Включить модуль контроля веса |
| listenAddress | <хост>:<порт> по умолчанию не задано | Прослушиваемый адрес. Если установлен, текущая касса или сервер становится сервером обмена данными. К нему подключаются другие клиенты (кассы, промежуточные сервера). Как правило, устанавливается в 0.0.0.0:3201. 0.0.0.0 означает что подключение к серверу возможно через все сетевые интерфейсы. |
| serverAddress | <хост>:<порт> по умолчанию не задано | Адрес сервера. К нему подключается текущая касса или сервер для обмена данными |
| exchangeInterval | целое число по умолчанию 30 | Период обмена данными между клиентом и сервером в минутах. Указывается для клиента |
Пример настройки на кассе
Для подключения кассы к серверу необходимо указать адрес сервера.
[WeightControl] enable = true serverAddress = <ip-адрес сервера>:3201
Если касса выступает в роли сервера, тогда надо указать listenAddress.
[WeightControl] enable = true listenAddress = 0.0.0.0:3201
Настройка сервера обработки HTTP-запросов
В кассовом ПО Artix реализована возможность централизованного управления данными весового контроля через REST API. Функционал позволяет получать информацию о текущих эталонах и устанавливать новые значения диапазонов веса для товаров. Данная настройка используется как на кассах, так и на SCO сервере.
Наименование | Возможные значения | Описание | Примечания |
|---|---|---|---|
Файл /opt/sst-sco/conf/weightcontrol.ini, секция [WeightControl], настройки модуля контроля веса | |||
| apiAddress | <хост>:<порт> по умолчанию не задано | Адрес сервера для обработки http-запросов. Если адрес не указан, то сервер не будет запущен. |
|
Логи работы сервера обработки HTTP-запросов пишутся:
- на кассе – в каталог
/opt/sst-sco/logs/в файлweightcontrolapi.log. Подробнее о настройке логирования можно прочитать в разделе "Логирование работы программы". - на SCO сервере – в каталог
/opt/sst-sco/weightcontrol-server/logs/в файлweightcontrolapi.log. Настройки логирования работы сервера задаются в файле/opt/sst-sco/weightcontrol-server/conf/server.iniв секции [Logger.WeightControlApi].
Сервер контрольных весов
Сервер контрольных весов может быть установлен на отдельный сервер в docker-контейнер.
Архив с сервером необходимо запросить у тех. поддержки.
Установка
Если на хостовой машине не установлен docker, его необходимо установить:
Если на машине установлен
containerd.io, то установкаdocker.ioне требуется. Необходимо перейти к выполнению скрипта установки сервера контрольных весов.sudo apt update sudo apt install docker.io
Выполнить скрипт установки сервера контрольных весов:
sudo ./docker/weightcontrol/install.sh
При выполнении будет выведен лицензионный ключ, для которого необходимо получить файл лицензии. Файл лицензии надо скопировать в каталог
/opt/sst-sco/weightcontrol-server/licenseна хосте, затем перезапустить контейнер:sudo docker restart sst-sco-server-weightcontrol
Проверить статус лицензии можно при помощи скрипта из архива:
sudo ./docker/weightcontrol/license.sh
Обновление с версии 1.13 и выше
Надо выполнить скрипт:
sudo ./docker/weightcontrol/install.sh
При обновлении автоматически создается бэкап и сохраняется в /opt/sst-sco/backup на хостовой машине.
Обновление с версии 1.12 и ниже
Если данные не были примонтированы на хосте, то надо сделать бэкап данных в каталоге /opt/sst-sco/data внутри контейнера.
Скопировать данные старого контейнера из /opt/sst-sco/data в каталог /opt/sst-sco/weightcontrol-server/data на хосте.
Затем остановить и удалить старый контейнер.
sudo docker stop sst-sco-server sudo docker rm sst-sco-server
Далее установить новую версию, как описано выше в пункте "Установка".
Работа с контейнером
# Остановка контейнера sudo docker stop sst-sco-server-weightcontrol # Старт остановленного контейнера sudo docker start sst-sco-server-weightcontrol # Перезапуск контейнера sudo docker restart sst-sco-server-weightcontrol # Запуск mc в контейнере sudo docker exec -it sst-sco-server-weightcontrol mc # Удаление остановленного контейнера sudo docker rm sst-sco-server-weightcontrol
Изменение настроек
Настройки находятся на хостовой машине в каталоге /opt/sst-sco/weightcontrol-server/conf.
После изменения настроек необходимо перезапустить контейнер:
sudo docker restart sst-sco-server-weightcontrol
Логирование
Логи пишутся в каталог /opt/sst-sco/weightcontrol-server/logs на хосте.
API сервера контрольных весов
Получение эталонных значений веса товаров
Для получения всех записей с эталонами веса из БД weightcontrol.sqlite необходимо отправить запрос типа GET на URL:
http://<хост>:<порт>/api/v1/weights?barcode=<штрих-код товара>&limit=<количество записей>&offset=<смещение от начала списка>
Параметры запроса:
| Наименование | Тип данных | Описание | Примечания |
|---|---|---|---|
| barcode | строковый | Штрих-код товара | Необязательный параметр. Если параметр не задан, то возвращается весь массив эталонов |
| limit | целочисленный | Количество записей на страницу | Необязательный параметр. По умолчанию 100 |
| offset | целочисленный | Смещение от начала списка | Необязательный параметр. По умолчанию 0 |
{
"data": [
{
"barcode": "1034",
"datetime": 1786094417645,
"uuid": "kEW8G8IZT2acC7DrDeI0PA",
"weight": 800,
"weightTo": 900
}
],
"errorCode": 0,
"errorMessage": "OK"
}
В результате будет получен список всех записей с эталонами веса.
Добавление эталонного веса товаров
Для добавления или обновления эталонов веса товаров в БД weightcontrol.sqlite необходимо отправить запрос типа PUT на URL:
http://<хост>:<порт>/api/v1/weights
Тело запроса:
| Наименование | Тип данных | Описание | Примечания |
|---|---|---|---|
| barcode | строковый | Штрих-код товара | Обязательное поле. Значение |
| weight | целочисленный | Нижняя граница диапазона эталона. Значение должно быть больше 0 и не превышать значение weightTo | Обязательное поле |
| weightTo | целочисленный | Верхняя граница диапазона эталона. Значение должно быть больше или равно значению weight | Обязательное поле |
[
{
"barcode": "4603",
"weight": 400,
"weightTo": 450
},
{
"barcode": "4604",
"weight": 600,
"weightTo": 650
},
{
"barcode": "4605",
"weight": 800,
"weightTo": 850
}
]
{
"errorCode": 0,
"errorMessage": "OK"
}
{
"errorCode": 1,
"errorMessage": "Не все поля заданы"
}