Импорт данных по протоколу R1Sensor

Материал из Википедия ЭТИМа (ETIM Wikipedia)
Перейти к навигации Перейти к поиску

Содержание


Дата изменения документации

11.11.2022 года.

Общие сведения о протоколе

Протокол основан на запросах/ответах передаваемых в формате JSON [1].

On-line парсер формата JSON.

Для коммуникации между весовым комплексом и управляющим компьютером используется протокол 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-picture-bytes и group-picture-bytes являются устаревшими и не рекомендованы к использованию. Используете параметры передающие имена файлов-картинок и загружайте файлы картинок отдельно. Это позволяет более экономично использовать дисковое пространство и использовать будущие расширения протокола весов.


В версиях ПО старше 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)." 
  }
  1. Описание стандарта JSON можно найти на сайте.