Импорт данных по протоколу 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 Настройки весов
- 5 Перечень ошибок
Дата изменения документации
06.06.2019 года.
Общие сведения о протоколе
Протокол основан на запросах/ответах передаваемых в формате JSON [1].
Для коммуникации между весовым комплексом и управляющим компьютером используется протокол TCP/IP.
На весовом комплексе запущена серверная часть, прослушивающая порт 27706. Данный порт можно поменять через настройки весового комплекса.
Весы допускают множественные одновременные подсоединение к прослушиваемому порту.
! | запрещается одновременно обновлять базу товаров в параллельных сессиях. |
Допускается параллельное выполнение таких операций как копирование файлов или копирование файлов.
Алгоритм взаимодействия
- При подсоединении к весам, они выдают пакет соединения.
- В ответ на этот пакет в течении 30 секунд необходимо передать пакет установки связи. В случае истечения таймаута весы закрывают соединение.
- В дальнейшей работе весам необходимо раз в 30 секунд передавать любую команду (например: тест связи).
- Если этого не происходит весы разрываются соединение (данная возможность отключается через настройки весов).
- На каждый запрос или команду весовой комплекс выдает подтверждающий пакет, либо пакет с запрошенными данными.
Запросы к весовому комплексу
Запрос обязательно должен содержать следующие поля:
id
- идентификатор запроса. Можно использовать для проверки, что ответ идет на ту команду, на которую посылался запрос.
command
- выполняемый запрос или команда.
Объект data
- в данном объекте передаются дополнительные данные, необходимые для выполнения запроса или команды. Так же в этом поле содержится информация о ПО которое сформировало запрос.
Ответы от весового комплекса
Ответ обязательно содержать следующие поля:
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...
обрабатываются в последнюю очередь. Т.е. сначала производится очистка базы данных, далее производится добавление товаров/групп и потом удаление товаров/групп.
- Поля данных товара:
goods-no
- номер товара. Номер должен быть уникален. Поиск товара при добавлении/обновлении ведется по этому полю.
goods-add-code
- дополнительный номер товар. Может использоваться при формировании штрих-кода товара.
goods-display-number
- дополнительный номер товара. Данный номер можно вывести на кнопку товара. По данному номеру возможно сортировать товары внутри группы.
goods-name
- название товара для печати на этикетке.
goods-full-name
- название товара для вывода на экранную кнопку товара. Если данное поле не задано, значение берется из поля goods-name
.
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 |
Изменение пользовательских ШК описано в соответствующем разделе руководства.
Добавление или связывание шаблонов этикеток
Данная команда служат для передачи на весы шаблонов этикеток и установки связи между именами файлов шаблонов этикеток и номерами этикеток, которые используются в параметрах товаров.
При установке связи между именем файла шаблона этикетки, необходимо предварительно загрузить файл на весы в каталог ./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
Настройки весов
Данная команда служат для получения или изменения настроек на весах.
В поле settings-name
передается название параметра настроек, а поле settings-valuе
само значение.
При получении и передаче настроек необходимо передавать MD5 сумму соответствующего пароля в поле password
и значение "crypted-password": true
.
Если пароль передается в открытом виде (что не рекомендуется) то нужно передать значение "crypted-password": false
.
Команда для получения настроек с весов 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,
}
}
Команда для изменения настроек на весах SetSettings
:
{
"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
},
}}
Перечень ошибок
При возникновении ошибок в ответе содержится текстовый ответ и код, сообщающие о возникшей ошибке.
Так же в объект 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)."
}