Начиная с версии 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. Подробнее о настройке логирования можно прочитать в разделе "Логирование работы программы".

Реализовать обмен между клиентом и сервером можно несколькими способами:

  1. Отдельный сервер для нескольких магазинов: один SCO сервер, к которому будут подключаться все кассы со всех магазинов торговой сети.
  2. Один главный сервер и несколько промежуточных: отдельный сервер можно установить на магазин, несколько магазинов, на регион и т. д. При этом период обмена между кассами и промежуточным сервером можно сделать чаще, а между промежуточными и главным реже. Количество промежуточных серверов между кассой и главным сервером не ограничено.
  3. Одна из касс выполняет роль сервера: можно использовать одну из касс, если нет возможности выделить отдельный сервер. Недостаток данного способа в том, что обмен не будет работать, пока эта касса будет выключена.

Для клиента нельзя указать в роли сервера ту же кассу. В такой ситуации клиент не будет запущен и для него в будет установлен статус "Неверно настроен".

Настройка

Данные настройки используются как на кассах, так и на SCO сервере.

Наименование

Возможные значения

Описание

Файл /opt/sst-sco/conf/weightcontrol.ini, секция [WeightControl], настройки модуля контроля веса
enable
  • true
  • false (по умолчанию)

Включить модуль контроля веса

listenAddress<хост>:<порт>
по умолчанию не задано
Прослушиваемый адрес. Если установлен, текущая касса или сервер становится сервером обмена данными. К нему подключаются другие клиенты (кассы, промежуточные сервера).
Как правило, устанавливается в 0.0.0.0:3201. 0.0.0.0 означает что подключение к серверу возможно через все сетевые интерфейсы.
serverAddress<хост>:<порт>
по умолчанию не задано
Адрес сервера. К нему подключается текущая касса или сервер для обмена данными
exchangeIntervalцелое число
по умолчанию 30
Период обмена данными между клиентом и сервером в минутах. Указывается для клиента

Пример настройки на кассе

Для подключения кассы к серверу необходимо указать адрес сервера.

/opt/sst-sco/conf/weightcontrol.ini
[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-запросов. Если адрес не указан, то сервер не будет запущен.

  • Если касса выступает в роли сервера, то необходимо указать параметр listenAddress. Порты параметров listenAddress и apiAddress должны отличаться
  • Если установлен SCO сервер, то по умолчанию сервер обработки http-запросов доступен по адресу 0.0.0.0:3204. Подключение к серверу возможно через все сетевые интерфейсы

Логи работы сервера обработки 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-контейнер.

Архив с сервером необходимо запросить у тех. поддержки.

Установка

  1. Если на хостовой машине не установлен docker, его необходимо установить:

    Если на машине установлен containerd.io, то установка docker.io не требуется. Необходимо перейти к выполнению скрипта установки сервера контрольных весов.

    sudo apt update
    sudo apt install docker.io
  2. Выполнить скрипт установки сервера контрольных весов:

    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строковыйШтрих-код товара

Обязательное поле. Значение 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": "Не все поля заданы"
}
  • No labels