Импорт данных по протоколу R1Sensor
Содержание
- 1 Дата изменения документации
- 2 Общие сведения о протоколе
- 3 Примеры запросов/команд
- 4 Запросы/команды
- 4.1 Установка связи
- 4.2 Проверка связи
- 4.3 Получение и установка даты и времени на весах
- 4.4 Начало и окончание загрузки товаров и групп
- 4.5 Получение статуса весов
- 4.6 Запуск ротации логов программы и архивов, создаваемых программой
- 4.7 Получение текущего протокола работы весов
- 4.8 Вывод сообщения на экран весов
- 4.9 Блокировка и разблокировка работы весов
- 4.10 Обнуление веса и тарирование весов
- 4.11 Перезагрузка и выключение весов
- 4.12 Перезапуск и завершение работы ПО весов
- 4.13 Получение списка файлов в каталоге
- 4.14 Добавление, удаление и получение файлов и каталогов на/с весов
- 4.15 Выполнение команды весами
- 4.16 Очистка базы товаров и групп
- 4.17 Добавление товаров, обновление или удаление товаров и групп товаров
- 4.18 Добавление или связывание шаблонов этикеток
- 4.19 Изменение номера и названия магазина
- 4.20 Настройки весов
- 4.21 Перезапуск системы распознавания товаров
- 5 Перечень ошибок
Дата изменения документации
11.11.2022 года.
Общие сведения о протоколе
Протокол основан на запросах/ответах передаваемых в формате JSON [1].
Для коммуникации между весовым комплексом и управляющим компьютером используется протокол TCP/IP.
На весовом комплексе запущена серверная часть, прослушивающая порт 27706. Данный порт можно поменять через настройки весового комплекса.
Весы допускают множественные одновременные подсоединение к прослушиваемому порту.
! | запрещается одновременно обновлять базу товаров в параллельных сессиях. |
Допускается параллельное выполнение таких операций как копирование или считывание файлов.
Алгоритм взаимодействия
- При подсоединении к весам, они выдают пакет соединения.
- В ответ на этот пакет в течении 30 секунд необходимо передать пакет установки связи. В случае истечения таймаута весы закрывают соединение.
- В дальнейшей работе весам необходимо раз в 30 секунд передавать любую команду (например: тест связи).
- Если этого не происходит весы разрываются соединение (данная возможность отключается через настройки весов).
- На каждый запрос или команду весовой комплекс выдает подтверждающий пакет, либо пакет с запрошенными данными.
Запросы к весовому комплексу
Запрос обязательно должен содержать следующие поля:
id
- идентификатор запроса. Можно использовать для проверки, что ответ идет на ту команду, на которую посылался запрос.
command
- выполняемый запрос или команда.
Объект data
- в данном объекте передаются дополнительные данные, необходимые для выполнения запроса или команды. Так же в этом поле содержится информация о ПО которое сформировало запрос.
! | Максимальный размер пакета принимаемый весами 1024000 байт! Рекомендуется использовать пакеты не более 16348 байт. |
Ответы от весового комплекса
Ответ обязательно содержать следующие поля:
id
- идентификатор запроса.
response
- текстовое описание ответа весов (результат выполнения команды или запроса).
response-code
- цифровое код ответа весов (результат выполнения команды или запроса).
Объект data
- в данном объекте передаются дополнительные данные, являющиеся результатом выполнения команды. Так же в этом поле содержится информация о ПО весов.
Объект "data"
В объекте data
передаются дополнительные данные, необходимые для выполнения или являющиеся результатом выполнения команд.
Постоянно в объекте дата присутствуют поля application
version
compile-date
, в которых содержится информация о ПО, которое их сформировало. Данная информация используется в информационных целях.
Так же в случае возникновения ошибки присутствует поле response-ext
, в котором содержится расширенное описание ошибки.
Порядок следования полей и объектов в пакетах JSON не важен.
Все двоичные данные пересылаются в кодировке BASE64.
В некоторых командах, пересылающих большие объемы данных, данные предварительно могут быть запакованы архиватором GZip (см. описание команд).
Данная возможность отключается через настройки весового комплекса или в флагом use-compress
объекте data
.
Кодировка русских символов: UTF-8
Примеры запросов/команд
Пример запроса (команда установки связи):
{
"id" : 1,
"command" : "Link",
"data" : {
"application" : "R1 protocol tester",
"version" : "1.0.0.0",
"compile-date" : "26-08-2015"
}
}
Пример ответа (команда выполнена):
{
"id" : 1,
"response" : "Ok",
"response-code" : 0,
"data" : {
"application" : "R1 Self Service Soft.",
"version" : "1.0.2.11",
"compile-date" : "09-08-2017",
"response-ext" : "Extended error description"
}
}
Пакет соединения с сервером:
Сервер выдает при подсоединении к нему клиента.
В ответ на этот пакет в течении 30 секунд необходимо передать пакет установки связи.
В случае истечения таймаута весы закрывают соединение.
Пример:
{
"id" : 1,
"response" : "ConnectOk",
"response-code" : 0,
"data" : {
"application" : "R1 Self Service Soft.",
"version" : "1.0.0.0",
"compile-date" : "01-01-2015"
}
}
Запросы/команды
Установка связи
Передается от клиента серверу после соединения с последним.
Первая команда, необходимая для дальнейшей работы.
Запрос:
"command" : "Link"
Ответ:
"response" : "Ok"
"response-code" : 0
Пример:
{ "id" : 1, "command" : "Link", "data" : { "application" : "R1ScaleTester", "version" : "0.0.0.1", "compile-date" : "09-08-2017" } }
{ "id" : 1, "response" : "Ok", "response-code" : 0, "data" : { "application" : "R1 Self Service Soft.", "version" : "1.0.2.11", "compile-date" : "09-08-2017" } }
Проверка связи
Эта команда ничего не выполняет.
Используется либо для проверки связи, либо для поддержания связи - не реже чем раз в 30 секунд.
Запрос:
"command" : "TestLink"
Ответ:
"response" : "Ok"
"response-code" : 0
Пример:
{ "id" : 1, "command" : "TestLink", "data" : { "application" : "R1ScaleTester", "version" : "0.0.0.1", "compile-date" : "09-08-2017" } }
{ "id" : 1, "response" : "Ok", "response-code" : 0, "data" : { "application" : "R1 Self Service Soft.", "version" : "1.0.2.11", "compile-date" : "09-08-2017" } }
Получение и установка даты и времени на весах
При запросе в объекте data
возвращаются дата/время с весов.
При установке в объекте data
передаются дата/время с весов.
Запрос:
"command" : "GetDateTime"
"command" : "SetDateTime"
Ответ:
"response" : "Ok"
"response-code" : 0
"data" : { "date" : "21-08-2015", "time" : "12:00:00" }
Пример:
{ "id" : 1, "command" : "GetDateTime", "data" : { "application" : "R1ScaleTester", "version" : "0.0.0.1", "compile-date" : "09-08-2017" } }
{ "id" : 1, "response" : "Ok", "response-code" : 0, "data" : { "date" : "21-08-2015", "time" : "12:00:00", "application" : "R1ScaleTester", "version" : "0.0.0.1", "compile-date" : "09-08-2017" } }
{ "id" : 1, "command" : "SetDateTime", "data" : { "date" : "21-08-2015", "time" : "12:00:00", "application" : "R1ScaleTester", "version" : "0.0.0.1", "compile-date" : "09-08-2017" } }
{ "id" : 1, "response" : "Ok", "response-code" : 0, "data" : { "application" : "R1 Self Service Soft.", "version" : "1.0.2.11", "compile-date" : "09-08-2017" } }
Начало и окончание загрузки товаров и групп
Команда BeginUpdate
подается перед загрузкой товаров и/или групп внутренний буфер приема данных в этот момент очищается и весы готовы к приему данных, если команда подается повторно - данные, уже приняты на тот момент удаляются.
Команда EndUpdate
подается после передачи всех данных. После передачи этой команды данные анализируются, сохраняются во внутреннюю базу весов и происходит обновление информации на экране.
Изначально включается режим обновления/добавления товаров и групп. Если после команды BeginUpdate
передать команду ClearGoodsAndGropus
, то включается режим замены базы данных (перед обработкой загруженных данных база данных в весах очищается).
Запрос:
"command" : "BeginUpdate"
"command" : "EndUpdate"
Ответ:
"response" : "Ok"
"response-code" : 0
Пример:
{ "id" : 1, "command" : "BeginUpdate", "data" : { "application" : "R1ScaleTester", "version" : "0.0.0.1", "compile-date" : "09-08-2017" } }
{ "id" : 1, "response" : "Ok", "response-code" : 0, "data" : { "application" : "R1ScaleTester", "version" : "0.0.0.1", "compile-date" : "09-08-2017" } }
{ "id" : 1, "command" : "EndUpdate", "data" : { "application" : "R1ScaleTester", "version" : "0.0.0.1", "compile-date" : "09-08-2017" } }
{ "id" : 1, "response" : "Ok", "response-code" : 0, "data" : { "application" : "R1 Self Service Soft.", "version" : "1.0.2.11", "compile-date" : "09-08-2017" } }
Получение статуса весов
Данная команда позволяет получить текущее состояние весов: заблокированы или нет, текущий вес, состояние ошибки и др. информацию о весах.
При запросе в объекте data
данные статуса весов.
Запрос:
"command" : "GetState",
Ответ:
"response" : "Ok"
"response-code" : 0
Пример:
{ "id" : 1, "command" : "GetState", "data" : { "application" : "R1ScaleTester", "version" : "0.0.0.1", "compile-date" : "09-08-2017" } }
error-state
- флаг наличия ошибки на весах;
error
- код ошибки;
error-text
- текстовое описание ошибки;
lock-state
- флаг ручной блокировки весов;
packing-mode
- флаг включения режима фасовки;
user-inactive-time
- время с последней активности весов (нажатия на тач-экран);
licensed
- флаг состояния лицензии;
database-type
- тип внутренней базы данных (0 - xml, 1 - sqlite);
weight
- текущий вес;
weight-tare
- текущая тара;
weight-stability
- флаг стабильности веса;
scale-model
- модель весов;
scale-version
- версия весового модуля;
scale-serial-number
- заводской номер;
operation-system
- тип операционной системы;
hostname
- имя хоста весов;
user-name
- имя пользователя, под которым запущено ПО весов;
current-time-date
- текущее время и дата;
disks
- перечень дисков (актуально для Windows версии);
free-system-disk
- свободного места на системном диске;
free-work-disk
- свободного места на рабочем диске;
free-memory
- свободно оперативной памяти;
screen-resolution
- разрешение экрана;
system-up-time
- время со старта системы;
"goods-count" "groups-count" "labels-count"
"error-code" "error-state" "error-text"
"lock-state" "packing-mode" "user-inactive-time" "image-recognition-active" "image-recognition-camera-error" "price-checker-active" "voice-control-active"
"licensed"
"current-algoritm"
"weight" "weight-stability" "weight-tare"
"scale-model" "scale-version" "scale-serial-number" "scale-serial-number-ext"
"operation-system" "cpu-model" "cpu-serial-number" "cpu-temperature" "hostname" "user-name"
"current-time-date" "hardware-rtc-state" "version-build"
"screen-resolution"
"last-import-datetime" "last-import-status"
"eth-ip-address" "eth-mac" "wifi-ip-address" "wifi-mac"
Запуск ротации логов программы и архивов, создаваемых программой
Данная команда позволяет получить в ручную запустить процесс ротации лог-файлов программы и архивов (базы данных, обработанных и ошибочных файлов импорта).
Запрос:
"command" : "RotateLog",
Ответ:
"response" : "Ok"
"response-code" : 0
Пример:
{ "id" : 1, "command" : "RotateLog", "data" : { "application" : "R1ScaleTester", "version" : "0.0.0.1", "compile-date" : "09-08-2017" } }
Получение текущего протокола работы весов
Данная команда позволяет получить текущий файл протокола работы весов.
Данные могут быть предварительно запакованы архиватором GZip (отключается в настройках весов). Так же флаг использования компрессии можно предать в объекте "data": "use-compress"
: 1 или 0. Далее данные кодируются в BASE-64. В объекте data
возвращаются данные лог файла log-file-data
и размер файла log-file-size
.
Запрос:
"command" : "GetLog"
Ответ:
"response" : "Ok"
"response-code" : 0
"data" : { "log-file-size" : "120000", "log-file-data" : "данные-лог-файла" }
Вывод сообщения на экран весов
Данная команда позволяет выводить на экран текстовые сообщения. Возможно сопровождать вывод сообщения звуковым сигналом.
В объекте data
передается сообщение и другие параметры.
message
- текст сообщения;
message-for-led
- текст сообщения для светодиодного индикатора (если он установлен);
beep
- разрешить звуковой сигнал;
time
- длительность вывода сообщения в мс.
Запрос:
"command" : "DisplayMessage"
"data" : { "message" : "Текс сообщения", "beep" : "true", "time" : "1000" }
Ответ:
"response" : "Ok"
"response-code" : 0
Блокировка и разблокировка работы весов
Данная команда позволяет выполнить удаленную блокировку LockScale
и разблокировку UnlockScale
работы весов, например в случае поломок принтера.
В объекте data
передается пароль password
на проводимую операцию (изменяется в настройках весов).
Запрос:
"command" : "LockScale"
"command" : "UnlockScale"
"data" : { "password" : "239" }
Ответ:
"response" : "Ok"
"response-code" : 0
Обнуление веса и тарирование весов
Данная команда позволяет удаленно выполнить обнуление веса ZeroWeight
или произвести тарирование TareWeight
весов.
В объекте data
передается пароль password
на проводимую операцию (изменяется в настройках весов).
Запрос:
"command" : "ZeroWeight"
"command" : "TareWeight"
"data" : { "password" : "239" }
Ответ:
"response" : "Ok"
"response-code" : 0
Перезагрузка и выключение весов
Данная команда позволяет удаленно выполнить перезагрузку RebootScale
или произвести выключение PowerOffScale
весов.
В объекте data
передается пароль password
проводимую операцию (изменяется в настройках весов).
Стандартный пароль для перезагрузки и выключения: 255
Запрос:
"command" : "RebootScale",
"command" : "PowerOffScale",
"data" : { "password" : "255" }
Ответ:
"response" : "Ok"
"response-code" : 0
Перезапуск и завершение работы ПО весов
Данная команда позволяет удаленно выполнить перезагрузку RestartApp
или завершить работу ShutdownApp
основного ПО весов.
В объекте data
передается пароль password
проводимую операцию (изменяется в настройках весов).
Стандартный пароль для перезагрузки и выключения: 255
Запрос:
"command" : "RestartApp",
"command" : "ShutdownApp",
"data" : { "password" : "255" }
Ответ:
"response" : "Ok"
"response-code" : 0
Получение списка файлов в каталоге
Данная команда позволяет получить список файлов или каталогов в указанном каталоге. Начальным путем для поиска файлов является каталог программы.
Для получения информации необходимо передать каталог search-dir
, маску файлов files-mask
и флаг поиска файлов или каталогов search-files
.
В ответ информация приходит виде списка в поле files-list
.
Запрос:
"command" : "GetFileList",
"data" : {
"search-dir" : "./Data/Images/",
"files-mask" : "*.png",
"search-files" : true
}
Ответ:
"response" : "Ok",
"response-code" : 0,
"data" : {
"search-dir" : "./Data/",
"files-list" : ["goods.no.picture.png", "r1s.select.goods.action.png"]
}
Добавление, удаление и получение файлов и каталогов на/с весов
Данные команды позволяют получать файлы с весов, удалять файлы на весах и передавать файлы на весы. Начальным точкой для поиска файлов является каталог программы.
Для работы с файлами, находящимся в подкаталогах, необходимо в имя файла включить путь до необходимого файла.
Вне каталога программы можно получить доступ только к каталогу /opt/Exchange
, в котором содержится протокол работы, данные для импорта, отчеты и т.д.
Команды:
Запрос:
"command" : "AddFile"
"command" : "GetFile"
"command" : "GetFileInfo"
"command" : "RemoveFile"
"command" : "AddDir"
"command" : "RemoveDir"
"command" : "PartDataReceived"
"command" : "PartDataSended"
Поля используемые при работе с файлами:
file-name
- имя файла
file-size
- размер файла
file-data
- данные файла. Кодируются в BASE-64.
file-md5
- контрольная сумма файла. Рассчитывается до кодировки данных в BASE-64.
use-compress
- использование компрессии данных в GZip.
"MultiPart"
- блочный режим передачи данных. Использование нескольких пакетов при приеме/передаче файлов.
"part-data-no"
- номер текущего пакета при блочном приеме/передаче файлов. Отсчет с 0.
"total-parts"
- общее количество пакетов при блочном приеме/передаче файлов.
Например: для получения файла-картинки имя файла должно быть таким "file-name" : "./Data/Images/goods.no.picture.png"
.
В объекте data
передается имя необходимого файла file-name
, а возвращается информация о файле: file-name
file-size
- размер файла в байтах, file-data
- данные файла файла или части файла, file-md5
- контрольная сумма блока данных в поле file-data
до кодирования в BASE-64 рассчитанная по алгоритму MD5.
В объекте data
передается имя необходимого каталога dir-name
.
При добавлении файла в объекте data
в поле file-data
передаются данные файла, а в поле file-md5
- контрольная сумма файла рассчитанная по алгоритму MD5 до кодирования в BASE-64. При передаче файла частями file-md5
передается только в последнем пакете и содержит контрольную сумма всего файла.
Данные могут быть предварительно запакованы архиватором GZip (отключается в настройках весов). Так же флаг использования компрессии можно предать в объекте "data": "use-compress"
: 1 или 0 или true/false. При использовании блочной передачи файлов архиватором пакуется каждая часть отдельно. После паковки блока, данные кодируются в BASE-64.
Пример передачи файла:
-->
"command" : "AddFile",
"data" : {
"file-name" : "./Data/Images/goods.no.picture.png",
"file-data" : "данные-файла",
"file-md5" : "9caa7d76e8e08b56256594f39c13e7d8"
}
<--
"response" : "Ok",
"response-code" : 0
При передаче/запросе больших файлов можно использовать передачу файлов частями (получение файлов более 16384 байт с весов всегда выполняется по частям). При передаче по частям необходимо в первом пакете использовать команду AddFile
и в объект данных data
добавить поля "total-parts" : xxx
и "part-data-no" : 0
.
В поле total-parts
вместо xxx нужно передать общее количество частей файла.
В поле part-data-no
передается номер текущего пакет. Начиная с 0.
Остальные части файла передаются с помощью команд PartDataSended
, а принимаются с помощью команд PartDataReceived
.
Поле "MultiPart" : 1
используется в ответе на команду передачи по частям.
Т.е. последовательность следующая:
-->
Первая часть
"command" : "AddFile",
"data" : {
"file-name" : "./Data/Images/goods.no.picture.png",
"file-data" : "данные-файла",
"part-data-no" : 0,
"total-parts" : 5
}
<--
"response" : "Ok",
"response-code" : 0,
"data" : {
"part-data-no" : 0,
"total-parts" : 5
}
...
-->
Последующие части
"command" : "PartDataSended",
"data" : {
"file-name" : "./Data/Images/goods.no.picture.png",
"file-data" : "данные-файла",
"part-data-no" : 3,
"total-parts" : 5,
"use-compress" : 1
}
<--
"response" : "MultiPart",
"response-code" : 1,
"data" : {
"part-data-no" : 3,
"total-parts" : 5
}
...
-->
Последняя часть
"command" : "PartDataSended",
"data" : {
"file-name" : "./Data/Images/goods.no.picture.png",
"file-data" : "данные-файла",
"part-data-no" : 4,
"total-parts" : 5,
"use-compress" : 1,
"file-md5" : "9caa7d76e8e08b56256594f39c13e7d8"
}
<--
"response" : "MultiPart",
"response-code" : 1,
"data" : {
"part-data-no" : 4,
"total-parts" : 5
}
Выполнение команды весами
Данная команда позволяет выполнить команды на весах.
! | Данная команда пока не реализована |
Запрос:
"command" : "ExecuteCommand"
Ответ:
"response" : "Ok"
"response-code" : 0
Очистка базы товаров и групп
Данная команда позволяет полностью очистить базу товаров и групп перед загрузкой новых товаров и групп.
Если данная команда передается после команды BeginUpdate
, то включается режим очистки данных при передаче товаров.
Если данная команда не передается, то включается режим обновления/добавления товаров.
Очистка данных производится только если добавляется хотя бы один товар.
Если данная команда передается отдельно от других команд, производится полная очистка базы товаров (удаляются все товары и группы).
Запрос:
"command" : "ClearGoodsAndGroups"
Ответ:
"response" : "Ok"
"response-code" : 0
Добавление товаров, обновление или удаление товаров и групп товаров
Данные команды служат для изменение базы товаров в весах.
Перед использование данных команд, необходимо передать на весы команду BeginUpdate
, а по окончании работы с товарами передается команда EndUpdate
. При необходимости очистки базы товаров на весах, между передачами команд BeginUpdate/EndUpdate
, так же необходимо передать команду ClearGoodsAndGroups
.
При использовании команд обновления (UpdateGoods
и UpdateGroups
), если товара или группы нет в базе весов - товар или группа создаются и сообщение об ошибке не передается.
Разница между командами UpdateХХХ
и AddXXX
заключается в минимальном наборе параметров, которые необходимо передаются на весы, что бы не возникло ошибки при приеме команды. Так для для команды AddGoods
необходимо передать: номер товара, название товар, группу-владелец и цену. Для команды UpdateGoods
: только номер товара.
Если при использовании команд удаления (RemoveGoods
и RemoveGroups
) товар или группа не найден - передается ошибка товар не найден.
В объекте data
передаются все необходимые параметры товара или группы.
Команды Remove...
обрабатываются в последнюю очередь. Т.е. сначала производится очистка базы данных, далее производится добавление товаров/групп и потом удаление товаров/групп.
В версиях ПО старше 1.0.2.22 сборка 4168 добавлена возможность групповой передачи товаров. Для этого список товаров загружается в поле goods-list
.
- Поля данных товара:
goods-no
- номер товара. Номер должен быть уникален. Поиск товара при добавлении/обновлении ведется по этому полю.
goods-add-code
- дополнительный номер товар. Может использоваться при формировании штрих-кода товара.
goods-display-number
- дополнительный номер товара. Данный номер можно вывести на кнопку товара. По данному номеру возможно сортировать товары внутри группы.
goods-name
- название товара для печати на этикетке.
goods-name-2
- второе название товара для печати на этикетке.
goods-full-name
- название товара для вывода на экранную кнопку товара. Если данное поле не задано, значение берется из поля goods-name
.
goods-full-name-2
- второе название товара для вывода на экранную кнопку товара. Если данное поле не задано, значение берется из поля goods-name-2
.
goods-price
- цена товара. Можно передавать как строку: "123.55", можно как число: 123.55
goods-dep
- отдел товара. Используется как префикс при формировании штрих-кода товара, если так задано в структуре штрих-кода.
goods-barcode
- штрих-код товара (для режима прайс-чекера) или описание структуры штрих-кода, если номер структуры равен 200. Для версии 1.0.2.21 и старше.
goods-barcode-type
- номер структуры штрих-кода товара.
goods-barcode-struct
- номер структуры штрих-кода товара для версии 1.0.2.21 и старше.
goods-action
- признак акционности (скидка) товара (используется для вывода на кнопке товара специальной картинки).
goods-is-popular
- признак популярности товара (используется для вывода этих товаров в отдельное поле на форме выбора товаров).
goods-ice-percent
- процент ледяной глазури в весе товара. В формате от 0.0 до 99.99.
goods-label
- номер шаблона этикетки.
goods-label2
- номер 2-го шаблона этикетки.
goods-discount-label
- номер шаблона этикетки для печати скидочных товаров.
goods-discount-price
- цена со скидкой.
goods-discount-percent
- процент скидки.
goods-discount-type
- тип скидки (0 - нет скидки).
goods-limit-quantity
- ограничение количества для вывода на этикетку при использовании скидок.
goods-owner-group
- группа-владелец товара.
goods-picture-bytes
- картинка товара (массив байт). Устаревший параметр. Не рекомендуется использовать данный параметр, используете goods-picture-filename
.
goods-picture-filename
- имя файла картинки товара.
goods-second-picture-filename
- имя файла дополнительной картинки товара. Обычно используется для вывода на экран выводимый после печати этикетки.
goods-packing-date
- дата/время паковки (формат: dd-MM-yyyy hh:mm).
goods-produced-date
- дата/время производства (формат: dd-MM-yyyy hh:mm).
goods-valid-date
- дата/время окончания срока годности (формат: dd-MM-yyyy hh:mm).
goods-sale-before-date
- дата/время окончания продажи товара (формат: dd-MM-yyyy hh:mm). Для версии 1.0.2.21 и старше.
goods-shelf-life
- срок годности в днях. Если число отрицательно: в часах.
goods-weight-unit
- весовая единица товара.
goods-tare
- вес тары товара.
goods-message-x
- текстовые сообщения для печати на этикетке, где х номер строки текстового сообщения. Расширенные сообщения (номера с 6 и выше) введены начиная с сборки 4121.
// "goods-message-1" - текстовое сообщение // "goods-message-2" - ингредиенты // "goods-message-3" - страна происхождения // "goods-message-4" - реклама // "goods-message-5" - данные для второго ШК // "goods-message-6" - пищевая ценность / энергетическая ценность // "goods-message-7" - условия хранения // "goods-message-8" - изготовлено // "goods-message-9" - срок годности // "goods-message-10" - изготовитель // "goods-message-11" - картинка для этикетки
- Для успешного добавления товара необходимо передать как минимум следующие поля:
goods-no
, goods-name
, goods-price
,
- Формат дат: dd.MM.yyyy hh:mm
- В поле
goods-picture-filename
иgoods-second-picture-filename
передается имя файла картинки для товара или группы. Указанный файл должен присутствовать в каталоге./Data/Images/
. Можно располагать файлы в подкаталогах.
- Данные могут быть предварительно запакованы архиватором GZip (отключается в настройках весов). Так же флаг использования компрессии можно предать в объекте
data: use-compress
: 1 или 0.
- Далее данные кодируются в BASE-64.
- Срок годности товара имеет следующие значение:
0 - срок годности не задан
-х - срок годности указан часах
х - срок годности указан в днях
- Поля
goods-message-x
служат для передачи дополнительной текстовой информации, печатаемой на этикетке.
- Перечень соответствия сообщений и элементов шаблона этикетки:
goods-message-1
- текстовое сообщение
goods-message-2
- ингредиенты
goods-message-3
- страна происхождения
goods-message-4
- реклама
- Поля данных группы:
group-no
- номер группы.
group-name
- название группы.
group-picture-filename
- имя файла картинки группы.
group-second-picture-filename
- имя файла второй картинки группы. Используется для вывода на экраны товаров.
group-picture-bytes
- картинка товара (массив байт). Устаревший параметр. Не рекомендуется использовать данный параметр, используете group-picture-filename
.
group-owner-group
- номер группы-владельца.
- Для успешного добавления группы необходимо передать как минимум следующие поля:
group-no
, group-name
Запрос:
"command" : "AddGoods"
"command" : "UpdateGoods"
"command" : "RemoveGoods"
"command" : "AddGroups"
"command" : "UpdateGroups"
"command" : "RemoveGroups"
Ответ:
"response" : "Ok"
"response-code" : 0
Весовые типы товаров (Weight Unit)
Код | Тип | Название |
---|---|---|
0 | 50g | 50 грамм |
1 | G | грамм |
2 | 10g | 10 грамм |
3 | 100g | 100 грамм |
4 | Kg | килограмм |
5 | Oz | унция |
6 | Pb | фунт |
7 | 500g | 500 грамм |
8 | 600g | 600 грамм |
9 | PSCg | 50 грамм |
10 | PSCKg | штучный грамм |
11 | PSCOz | штучный килограмм |
12 | PSCg | штучная унция |
13 | PSCLb | штучный фунт |
Типы штрихкодов товаров (Barcode Type)
Сокращения используемые в таблице:
D - отдел
L - № товара
I - код магазина
P - цена
Q - вес
CRC - контрольная сумма
Код | Тип | Содержание | Примечание |
---|---|---|---|
0 | EAN13 | DD(2) IIIIIIIIII(10) CRC(1) | |
1 | EAN13 | DD(2) IIIIII(6) PPPP(4) CRC(1) | |
2 | EAN13 | DD(2) IIIII(5) PPPPP(5) CRC(1) | |
3 | EAN13 | DD(2) IIII(4) PPPPPP(6) CRC(1) | |
4 | EAN13 | DD(2) III(3) PPPPPPP(7) CRC(1) | |
5 | EAN13 | DD(2) IIIIII(6) Q.QQQ(4) CRC(1) | |
6 | EAN13 | DD(2) IIIIII(6) QQ.QQ(4) CRC(1) | |
7 | EAN13 | DD(2) IIIII(5) QQ.QQQ(5) CRC(1) | |
8 | EAN13 | DD(2) IIIII(5) QQQQ.Q(5) CRC(1) | |
9 | EAN13 | DD(2) IIIII(5) QQQQQ(5) CRC(1) | |
10 | EAN13 | 20(2) IIIIIIIIII(10) CRC(1) | |
11 | EAN13 | 21(2) IIIIII(6) PPPP(4) CRC(1) | |
12 | EAN13 | 22(2) IIIII(5) PPPPP(5) CRC(1) | |
13 | EAN13 | 23(2) IIII(4) PPPPPP(6) CRC(1) | |
14 | EAN13 | 24(2) III(3) PPPPPPP(7) CRC(1) | |
15 | EAN13 | 25(2) IIIIII(6) Q.QQQ(4) CRC(1) | |
16 | EAN13 | 26(2) IIIIII(6) QQ.QQ(4) CRC(1) | |
17 | EAN13 | 27(2) IIIII(5) QQ.QQQ(5) CRC(1) | |
18 | EAN13 | 28(2) IIIII(5) QQQQ.Q(5) CRC(1) | |
19 | EAN13 | EAN13, 29(2) IIIII(5) QQQQQ(5) CRC(1) | |
20 | - | Не печатать штрихкод | |
21 | EAN13 | D(1) IIIIIII(7) PPPP(4) CRC(1) | |
22 | EAN13 | D(1) IIIIII(6) PPPPP(5) CRC(1) | |
23 | EAN13 | D(1) IIIII(5) PPPPPP(6) CRC(1) | |
24 | EAN13 | D(1) IIII(4) PPPPPPP(7) CRC(1) | |
25 | EAN13 | D(1) IIIIIII(7) Q.QQQ(4) CRC(1) | |
26 | EAN13 | D(1) IIIIIII(7) QQ.QQ(4) CRC(1) | |
27 | EAN13 | D(1) IIIIII(6) QQ.QQQ(5) CRC(1) | |
28 | EAN13 | D(1) IIIIII(6) QQQQ.Q(5) CRC(1) | |
29 | EAN13 | D(1) IIIIII(6) QQQQQ(5) CRC(1) | |
30 | EAN13+5 | D(1) IIIIII(6) PPPPP(5) QQ.QQQ(5) CRC(1) | Не поддерживание (введен для совместимости) |
31 | EAN13+5 | D(1) IIIIII(6) PPPPP(5) QQQQ.Q(5) CRC(1) | Не поддерживание (введен для совместимости) |
32 | EAN13+5 | D(1) IIIIII(6) PPPPP(5) QQQQQ(5) CRC(1) | Не поддерживание (введен для совместимости) |
33 | EAN13+5 | D(1) IIIIII(6) PPPPP(5) QQ.QQQ(5) CRC(1) | Не поддерживание (введен для совместимости) |
34 | EAN13+5 | D(1) IIIIII(6) PPPPP(5) QQQQ.Q(5) CRC(1) | Не поддерживание (введен для совместимости) |
35 | EAN13+5 | D(1) IIIIII(6) PPPPP(5) QQQQQ(5) CRC(1) | Не поддерживание (введен для совместимости) |
36 | EAN18 | D(1) LLLLLL(6) IIII(4) RR(2) QQ.QQQ(5) | Не поддерживание (введен для совместимости) |
37 | EAN18 | D(1) LLLLLL(6) IIII(4) RR(2) QQQQ.Q(5) | Не поддерживание (введен для совместимости) |
38 | EAN18 | D(1) LLLLLL(6) IIII(4) RR(2) QQQQQ(5) | Не поддерживание (введен для совместимости) |
50 | EAN8 | IIIIIII(7) CRC(1) | Не поддерживание (введен для совместимости) |
51 | EAN8 | D(1) IIIIII(6) CRC(1) | Не поддерживание (введен для совместимости) |
52 | EAN8 | DD(2) IIIII(5) CRC(1) | Не поддерживание (введен для совместимости) |
99...119 | EAN13 | Пользовательские штрихкоды | Тип ШК задается в структуре пользовательского кода начиная с версии 1.0.2.21 |
200 | Пользовательский штрихкод, индивидуальный для каждого товара | Тип ШК задается в данных каждого товара индивидуально с версии 1.0.2.23 |
Изменение пользовательских ШК описано в соответствующем разделе руководства.
Добавление или связывание шаблонов этикеток
Данная команда служат для передачи на весы шаблонов этикеток и установки связи между именами файлов шаблонов этикеток и номерами этикеток, которые используются в параметрах товаров.
При установке связи между именем файла шаблона этикетки, необходимо предварительно загрузить файл на весы в каталог ./Data/Labels
.
Если файл отсутствует - связь не будет установлена.
В случае передачи данных шаблона в команде имя файла генерируется автоматически.
Перед использование данной команды, необходимо передать на весы команду BeginUpdate
, а по окончании работы с товарами передается команда EndUpdate
. Можно использовать эти команду в едином цикле с обновление информации о товарах.
Данные шаблонов, если передаются прямо в команде, могут быть предварительно запакованы архиватором GZip (отключается в настройках весов).
Так же флаг использования компрессии можно предать в объекте "data": "use-compress"
: 1 или 0.
Далее данные кодируются в BASE-64.
Запрос:
"command" : "AddLabel"
Ответ:
"response" : "Ok"
"response-code" : 0
Поля данных этикетки:
label-no
- номер шаблона этикетки.
label-filename-format
- имя файла c форматом шаблона этикетки. Файл должен находится в каталоге ./Data/Labels
.
label-filename-map
- имя файла с задним фоном шаблона этикетки. Файл должен находится в каталоге ./Data/Labels
.
label-format-bytes
- данные формата шаблона этикетки (массив байт).
label-map-bytes
- данные заднего фона шаблона этикетки (массив байт).
label-filename
- номер группы-владельца. Только для использования с весами LS215.
label-bytes
- данные шаблона этикетки (массив байт). Только для использования с весами LS215.
use-compress
- флаг использования компрессии данных
Изменение номера и названия магазина
Данная команда служат для передачи на весы данных о номере и названии магазина.
Возможна передача до 4-х строк названия магазина.
Перед использование данной команды, необходимо передать на весы команду BeginUpdate
, а по окончании работы передается команда EndUpdate
. Можно использовать эти команду в едином цикле с обновление информации о товарах.
Запрос:
"command" : "AddStoreParams"
Ответ:
"response" : "Ok"
"response-code" : 0
Поля данных этикетки:
store-no
- номер магазина.
store-name-1
- название магазина строка 1
store-name-2
- название магазина строка 2
store-name-3
- название магазина строка 3
store-name-4
- название магазина строка 4
Настройки весов
Данные команды служат для получения списка настроек весов, а так же получения или изменения самих значений настроек на весах.
При передаче данных команд необходимо передавать пароль для изменения настроек (этот пароль используется так же для входа в режим настроек на весах).
При передаче пароля рекомендуется передавать MD5 сумму пароля в поле password
и значение "crypted-password": true
.
Если пароль передается в открытом виде, что не рекомендуется по соображениям безопасности, то нужно передать значение "crypted-password": false
.
Получение списка настроек
Команда для получения настроек с весов GetSettingsList
:
{
"id": 4,
"command": "GetSettingsList",
"data": {
"application": "PyR1SensorDriver",
"version": "0.0.1.0",
"version-build": "1",
"compile-date": "26.07.2022",
"password": "11b9842e0a271ff252c1903e7132cd68",
"crypted-password": true,
}
}
Ответ:
{
"id": 4,
"response": "Ok",
"response-code": 0
"data": {
"application": "R1 Sensor.",
"compile-date": "26-07-2022",
"version": "1.0.2.22",
"version-build": 4153,
"settings-read-list": [{"settings-name": "enDebug", "settings-type": 1, "settings-type-name": "bool", "settings-value": true}, {"settings-name": "enLog", "settings-type": 1, "settings-type-name": "bool", "settings-value": true}],
"settings-write-list": [{"settings-name": "enDebug", "settings-type": 1, "settings-type-name": "bool", "settings-value": true}, {"settings-name": "enLog", "settings-type": 1, "settings-type-name": "bool", "settings-value": true}]
}
}
Возвращаемые значения:
settings-read-list
- Список настроек доступных для чтения.settings-write-list
- Список настроек доступных для изменения.
В списках возвращается перечень настроек со следующими параметрами:
settings-name
- название настройки. Используется для чтения и изменения.settings-type
- числовое представление типа значения настройки.settings-type-name
- название типа значения настройки.settings-value
- текущее значение настройки.
Получение значения настроек
В поле settings-name
передается название необходимого параметра настроек, а поле settings-valuе
само значение.
Команда для получения значений настроек с весов GetSettings
:
{
"id": 4,
"command": "GetSettings",
"data": {
"application": "PyR1SensorDriver",
"version": "0.0.1.0",
"version-build": "1",
"compile-date": "26.07.2022",
"password": "11b9842e0a271ff252c1903e7132cd68",
"crypted-password": true,
"settings-name": "enImageRecognition"
}
}
Ответ:
{
"id": 4,
"response": "Ok",
"response-code": 0
"data": {
"application": "R1 Sensor.",
"compile-date": "26-07-2022",
"version": "1.0.2.22",
"version-build": 4153
"settings-name": "enImageRecognition",
"settings-value": false,
}
}
Для получения нескольких настроек одновременно можно при передаче использовать список c названиями настроек.
Для этого необходимо записать имена настроек в список items-list
.
Значения так же возвращаются в списке items-list
.
{
"id": 18,
"command": "GetSettings",
"data": {
"application": "PyR1SensorDriver",
"version": "0.0.1.0",
"version-build": "1",
"compile-date": "26.07.2022",
"password": "11b9842e0a271ff252c1903e7132cd68",
"crypted-password": true,
"items-list": [{"settings-name": "enImageRecognition"}, {"settings-name": "enDebug"}]
}
}
Ответ:
{
"id": 18,
"response": "Ok",
"response-code": 0
"data": {
"application": "R1 Sensor.",
"compile-date": "26-07-2022",
"version": "1.0.2.22",
"version-build": 4153,
"items-list": [{"settings-name": "enImageRecognition", "settings-value": "true"}, {"settings-name": "enDebug", "settings-value": "true"}]
},
}
Изменение значения настроек
Команда для изменения настроек на весах: SetSettings
При изменении настроек используется тоже имя настройки, что и при получении значения настройки.
В поле settings-name
передается название необходимого параметра настроек, а поле settings-valuе
само значение.
{
"id": 18,
"command": "SetSettings",
"data": {
"application": "PyR1SensorDriver",
"version": "0.0.1.0",
"version-build": "1",
"compile-date": "26.07.2022",
"password": "11b9842e0a271ff252c1903e7132cd68",
"crypted-password": true,
"settings-name": "enImageRecognition",
"settings-value": "true"
}
}
Ответ:
{
"id": 18,
"response": "Ok",
"response-code": 0
"data": {
"application": "R1 Sensor.",
"compile-date": "26-07-2022",
"version": "1.0.2.22",
"version-build": 4153
},
}
Для изменения нескольких настроек одновременно можно при передаче использовать список.
Для этого необходимо записать настройки в список items-list
{
"id": 18,
"command": "SetSettings",
"data": {
"application": "PyR1SensorDriver",
"version": "0.0.1.0",
"version-build": "1",
"compile-date": "26.07.2022",
"password": "11b9842e0a271ff252c1903e7132cd68",
"crypted-password": true,
"items-list": [{"settings-name": "enImageRecognition", "settings-value": "true"}, {"settings-name": "enDebug", "settings-value": "true"}]
}
}
В ответе на данную команду присутствует список со статусами изменения каждой из переданных настроек:
{
"id": 18,
"response": "Ok",
"response-code": 0
"data": {
"application": "R1 Sensor.",
"compile-date": "26-07-2022",
"version": "1.0.2.22",
"version-build": 4153
"items-list": [{"enImageRecognition": True}, {"enDebug": True}]
}
}
Перезапуск системы распознавания товаров
Данная команда служат для перезапуска системы распознавания товаров после изменения настроек системы.
При передаче данной команды необходимо передавать пароль для изменения настроек (этот пароль используется так же для входа в режим настроек на весах).
При передаче пароля рекомендуется передавать MD5 сумму пароля в поле password
и значение "crypted-password": true
.
Если пароль передается в открытом виде, что не рекомендуется по соображениям безопасности, то нужно передать значение "crypted-password": false
.
{
"id": 6,
"command": "RestartImageRecognitionSystem",
"data": {
"application": "PyR1SensorDriver",
"version": "0.0.1.0",
"version-build": "1",
"compile-date": "26.07.2022",
"password": "11b9842e0a271ff252c1903e7132cd68",
"crypted-password": true
}
}
Ответ:
{
"id": 6,
"response": "Ok",
"response-code": 0
"data": {
"application": "R1 Sensor.",
"compile-date": "26-07-2022",
"version": "1.0.2.22",
"version-build": 4153
},
}
Перечень ошибок
При возникновении ошибок в ответе содержится текстовый ответ и код, сообщающие о возникшей ошибке.
Так же в объект data
добавляется поле с расширенным описание ошибки response-ext
.
При работе с весами возможны следующие ошибки:
Ошибок нет, команда выполнена успешно:
"response" : "Ok"
"response-code" : 0
"data"
Истек таймаут соединения при установке связи или во время работы:
"response" : "Abort"
"response-code" : -1
Ошибка данных команды или некорректные данные:
В поле "response-ext" возвращается расширенное описание ошибки.
"response" : "Error"
"response-code" : -2
"data" :
{
"response-ext" : "Unknown command"
}
Ошибка выполнения команды (например: при установке даты/времени):
В поле "response-ext" возвращается расширенное описание ошибки.
"response" : "ExecError"
"response-code" : -3
"data" :
{
"response-ext" : "Error sync date/time (-1)."
}