Изменения

Перейти к навигации Перейти к поиску

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

21 685 байт добавлено, 21:54, 29 марта 2023
Запросы к весовому комплексу
=Дата изменения документации=
0611.0611.2019 2022 года.
=Общие сведения о протоколе=
{{Внимание|запрещается одновременно обновлять базу товаров в параллельных сессиях.}}
Допускается параллельное выполнение таких операций как копирование файлов или копирование считывание файлов.
==Запросы к весовому комплексу==
Запрос обязательно должен содержать следующие поля:
<code>'''{{ProtocolCommand|id'''</code> }} - идентификатор запроса. Можно использовать для проверки, что ответ идет на ту команду, на которую посылался запрос.<code>'''{{ProtocolCommand|command'''</code> }} - выполняемый запрос или команда.объект <code>'''Объект {{ProtocolCommand|data'''</code> }} - в данном объекте передаются дополнительные данные, необходимые для выполнения запроса или команды. Так же в этом поле содержится информация о ПО которое сформировало запрос. {{Внимание|Максимальный размер пакета принимаемый весами 1024000 байт! Рекомендуется использовать пакеты не более 16348 байт.}}
==Ответы от весового комплекса==
Ответ обязательно содержать следующие поля:
<code>'''{{ProtocolCommand|id'''</code> }} - идентификатор запроса.<code>'''{{ProtocolCommand|response'''</code> }} - текстовое описание ответа весов (результат выполнения команды или запроса).<code>'''{{ProtocolCommand|response-code'''</code> }} - цифровое код ответа весов (результат выполнения команды или запроса). объект <code>'''Объект {{ProtocolCommand|data'''</code> }} - в данном объекте передаются дополнительные данные, являющиеся результатом выполнения команды. Так же в этом поле содержится информация о ПО весов.
==Объект "''data''"==
В объекте <code>'''{{ProtocolCommand|data'''</code> }} передаются дополнительные данные, необходимые для выполнения или являющиеся результатом выполнения команд.Постоянно в объекте дата присутствуют поля <code>'''{{ProtocolCommand|application'''</code> <code>'''}} {{ProtocolCommand|version'''</code> <code>'''}} {{ProtocolCommand|compile-date'''</code>}}, в которых содержится информация о ПО, которое их сформировало. Данная информация используется в информационных целях. Так же в случае возникновения ошибки присутствует поле <code>'''{{ProtocolCommand|response-ext'''</code>}}, в котором содержится расширенное описание ошибки.
В некоторых командах, пересылающих большие объемы данных, данные предварительно могут быть запакованы архиватором GZip (см. описание команд).
Данная возможность отключается через настройки весового комплекса или в флагом <code>'''{{ProtocolCommand|use-compress'''</code> }} объекте <code>'''{{ProtocolCommand|data'''</code>}}.
Кодировка русских символов: UTF-8
==Получение и установка даты и времени на весах==
При запросе в объекте <code>'''{{ProtocolCommand|data'''</code> }} возвращаются дата/время с весов.
При установке в объекте <code>'''{{ProtocolCommand|data'''</code> }} передаются дата/время с весов.
==Начало и окончание загрузки товаров и групп==
Команда <code>'''{{ProtocolCommand|BeginUpdate'''</code> }} подается перед загрузкой товаров и/или групп внутренний буфер приема данных в этот момент очищается и весы готовы к приему данных, если команда подается повторно - данные, уже приняты на тот момент удаляются.
Команда <code>'''{{ProtocolCommand|EndUpdate'''</code> }} подается после передачи всех данных. После передачи этой команды данные анализируются, сохраняются во внутреннюю базу весов и происходит обновление информации на экране.
Изначально включается режим обновления/добавления товаров и групп. Если после команды <code>'''{{ProtocolCommand|BeginUpdate'''</code> }} передать команду <code>'''{{ProtocolCommand|ClearGoodsAndGropus'''</code>}}, то включается режим замены базы данных (перед обработкой загруженных данных база данных в весах очищается).
Данная команда позволяет получить текущее состояние весов: заблокированы или нет, текущий вес, состояние ошибки и др. информацию о весах.
При запросе в объекте <code>'''{{ProtocolCommand|data'''</code> }} данные статуса весов.
<code>'''{{ProtocolCommand|error-state'''</code> }} - флаг наличия ошибки на весах; {{ProtocolCommand|error}} - код ошибки; {{ProtocolCommand|error-text}} - текстовое описание ошибки; {{ProtocolCommand|lock-state}} - флаг ручной блокировки весов; {{ProtocolCommand|packing-mode}} - флаг включения режима фасовки; {{ProtocolCommand|user-inactive-time}} - время с последней активности весов (нажатия на тач-экран); {{ProtocolCommand|licensed}} - флаг состояния лицензии; {{ProtocolCommand|database-type}} - тип внутренней базы данных (0 - xml, 1 - sqlite); {{ProtocolCommand|weight}} - текущий вес; {{ProtocolCommand|weight-tare}} - текущая тара; {{ProtocolCommand|weight-stability}} - флаг стабильности веса; {{ProtocolCommand|scale-model}} - модель весов; {{ProtocolCommand|scale-version}} - версия весового модуля; {{ProtocolCommand|scale-serial-number}} - заводской номер; {{ProtocolCommand|operation-system}} - тип операционной системы;
<code>'''error'''</code> {{ProtocolCommand|hostname}} - код ошибкиимя хоста весов;
<code>'''error{{ProtocolCommand|user-text'''</code> name}} - текстовое описание ошибкиимя пользователя, под которым запущено ПО весов;
<code>'''lock{{ProtocolCommand|current-state'''</code> time- флаг ручной блокировки весовdate}} - текущее время и дата;
<code>'''packing{{ProtocolCommand|disks}} -mode'''</code> - флаг включения режима фасовкиперечень дисков (актуально для Windows версии);
<code>'''user{{ProtocolCommand|free-inactivesystem-time'''</code> disk}} - время с последней активности весов (нажатия свободного места на тач-экран)системном диске;
<code>'''licensed'''</code> {{ProtocolCommand|free- флаг состояния лицензииwork-disk}} - свободного места на рабочем диске;
<code>'''database{{ProtocolCommand|free-type'''</code> memory}} - тип внутренней базы данных (0 - xml, 1 - sqlite)свободно оперативной памяти;
<code>'''weight'''</code> {{ProtocolCommand|screen- текущий весresolution}} - разрешение экрана;
<code>'''weight{{ProtocolCommand|system-tare'''</code> up- текущая тараtime}} - время со старта системы;
<code>'''weight-stability'''</code> - флаг стабильности веса;
<code>'''scale-model'''</code> - модель весов;
<code>'''scale"goods-version'''</code> count""groups- версия весового модуля;count""labels-count"
<"error-code>'''scale""error-serial-number'''</code> state""error- заводской номер;text"
<code>'''operation"lock-system'''</code> state""packing- тип операционной системы;mode""user-inactive-time""image-recognition-active""image-recognition-camera-error""price-checker-active""voice-control-active"
<code>'''hostname'''</code> - имя хоста весов;"licensed"
<code>'''user"current-name'''</code> - имя пользователя, под которым запущено ПО весов;algoritm"
<code>'''current"weight""weight-timestability""weight-date'''</code> - текущее время и дата;tare"
<code>'''disks'''</code> "scale- перечень дисков (актуально для Windows версии);model""scale-version""scale-serial-number""scale-serial-number-ext"
<code>'''free"operation-system""cpu-disk'''</code> model""cpu- свободного места на системном диске;serial-number""cpu-temperature""hostname""user-name"
<code>'''free"current-worktime-disk'''</code> date""hardware- свободного места на рабочем диске;rtc-state""version-build"
<code>'''free"screen-memory'''</code> - свободно оперативной памяти;resolution"
<code>'''screen"last-resolution'''</code> import- разрешение экрана;datetime""last-import-status"
<code>'''system"eth-upip-time'''</code> address""eth- время со старта системы;mac""wifi-ip-address""wifi-mac"
==Запуск ротации логов программы и архивов, создаваемых программой==
{ "id" : 1, "command" : "RotateLog", "data" : { "application" : "R1ScaleTester", "version" : "0.0.0.1", "compile-date" : "09-08-2017" } }
</source>
==Получение текущего протокола работы весов==
Данная команда позволяет получить текущий файл протокола работы весов.
Данные могут быть предварительно запакованы архиватором GZip (отключается в настройках весов). Так же флаг использования компрессии можно предать в объекте <code>'''{{ProtocolCommand|"data": "use-compress"'''</code> }} : 1 или 0. Далее данные кодируются в BASE-64. В объекте <code>'''{{ProtocolCommand|data'''</code> }} возвращаются данные лог файла <code>'''{{ProtocolCommand|log-file-data'''</code> }} и размер файла <code>'''{{ProtocolCommand|log-file-size'''</code>}}.
"response-code" : 0
"data" : { "log-file-size" : "120000", "log-file-data" : "данные-лог-файла" }
</source>
 
==Вывод сообщения на экран весов==
Данная команда позволяет выводить на экран текстовые сообщения. Возможно сопровождать вывод сообщения звуковым сигналом.
 
В объекте {{ProtocolCommand|data}} передается сообщение и другие параметры.
 
{{ProtocolCommand|message}} - текст сообщения;
{{ProtocolCommand|message-for-led}} - текст сообщения для светодиодного индикатора (если он установлен);
{{ProtocolCommand|beep}} - разрешить звуковой сигнал;
{{ProtocolCommand|time}} - длительность вывода сообщения в мс.
 
Запрос:
 
<source lang="json">
"command" : "DisplayMessage"
"data" : { "message" : "Текс сообщения", "beep" : "true", "time" : "1000" }
</source>
 
Ответ:
 
<source lang="json">
"response" : "Ok"
"response-code" : 0
</source>
==Блокировка и разблокировка работы весов==
Данная команда позволяет выполнить удаленную блокировку "{{ProtocolCommand|LockScale" }} и разблокировку "{{ProtocolCommand|UnlockScale" }} работы весов, например в случае поломок принтера.
В объекте "{{ProtocolCommand|data" }} передается пароль "{{ProtocolCommand|password" }} на проводимую операцию (изменяется в настройках весов).
==Обнуление веса и тарирование весов==
Данная команда позволяет удаленно выполнить обнуление веса <code>'''{{ProtocolCommand|ZeroWeight'''</code> }} или произвести тарирование <code>'''{{ProtocolCommand|TareWeight'''</code> }} весов.
В объекте <code>'''{{ProtocolCommand|data'''</code> }} передается пароль <code>'''{{ProtocolCommand|password'''</code> }} на проводимую операцию (изменяется в настройках весов).
</source>
==Получение информации о файле, картинке, шаблоне этикетки или других файла списка файлов в каталоге программы на весах, удаление и добавление файлов==Данная команда позволяет получить информацию о файлесписок файлов или каталогов в указанном каталоге. Начальным путем для поиска файлов является каталог программы. Для получения информации необходимо передать каталог {{ProtocolCommand|search-dir}}, маску файлов {{ProtocolCommand|files-mask}} и флаг поиска файлов или каталогов {{ProtocolCommand|search-files}}. В ответ информация приходит виде списка в поле {{ProtocolCommand|files-list}}. Запрос: <source lang="json"> "command" : "GetFileList", "data" : { "search-dir" : "./Data/Images/", "files-mask" : "*.png", "search-files" : true }</source> Ответ: <source lang="json"> "response" : "Ok", "response-code" : 0, "data" : { "search-dir" : "./Data/", "files-list" : ["goods.no.picture.png", "r1s.select.goods.action.png"] }</source> ==Добавление, удаление и получение файлов и каталогов на/с весов==
Для получение информации о файлеДанные команды позволяют получать файлы с весов, находящимся в подкаталогах, необходимо в имя файла включить путь до необходимого файлаудалять файлы на весах и передавать файлы на весы. Начальным точкой для поиска файлов является каталог программы.
Вне каталога программы можно получить доступ только к каталогу "Exchange"Для работы с файлами, находящимся в котором содержится протокол работыподкаталогах, данные для импорта, отчеты и т.днеобходимо в имя файла включить путь до необходимого файла.
Например: для получения информации о картинке имя файла должно быть таким "file-name" : ".Вне каталога программы можно получить доступ только к каталогу {{Путь к файлу|/Dataopt/Images/goods.no.pictureExchange}}, в котором содержится протокол работы, данные для импорта, отчеты и т.png"д.
В объекте "data" передается имя необходимого файла "file-name", а возвращается информация о файлеКоманды: "file-name", "file-size" - размер файла в байтах, "file-date" - дата/время последнего изменения файла, "file-md5" - контрольная сумма файла расчитанная по алгоритму MD5.
При добавлении файла в объекте "data" в поле "file-data" передаются данные файла, а в поле "file-md5" - контрольная сумма файла расчитанная по алгоритму MD5.Запрос:
Данные могут быть предварительно запакованы архиватором GZip (отключается в настройках весов). Так же флаг использования компрессии можно предать в объекте <source lang="datajson"> "command" : "AddFile" "command" : "GetFile" "command" : "GetFileInfo" "command" : "RemoveFile" "command" : "AddDir" "command": "use-compressRemoveDir" "command" : 1 или 0."PartDataReceived" "command" : "PartDataSended"</source>
Далее данные кодируются в BASE-64.Поля используемые при работе с файлами:
{{ProtocolCommand|file-name}} - имя файла
Стандартные пути к файлам:{{ProtocolCommand|file-size}} - размер файла
{{ProtocolCommand|file-data}} - данные файла./Data/Images/ Кодируются в BASE- картинки, используемые программой64.
{{ProtocolCommand|file-md5}} - контрольная сумма файла./Data/Labels/ Рассчитывается до кодировки данных в BASE- шаблоны этикеток64.
{{ProtocolCommand|use-compress}} - использование компрессии данных в GZip./Data/Media/ - звуки, используемые программой
{{ProtocolCommand|"MultiPart"}} - блочный режим передачи данных.Использование нескольких пакетов при приеме/Data/Lic/ - лицензии для программыпередаче файлов.
{{ProtocolCommand|"part-data-no"}} - номер текущего пакета при блочном приеме/передаче файлов. Отсчет с 0./Settings/ - настройки программы и экранные формы
{{ProtocolCommand|"total-parts"}} - общее количество пакетов при блочном приеме/передаче файлов../Exchange/Flags/ - флаги создаваемые программой в результате событий на весах
../Exchange/Import/ - импортируемые данные
.Например: для получения файла-картинки имя файла должно быть таким {{ProtocolCommand|"file-name" : "./ExchangeData/LogImages/ - протокол работы программыgoods.no.picture.png"}}.
../Exchange/Log/ProcessedFiles/ В объекте {{ProtocolCommand|data}} передается имя необходимого файла {{ProtocolCommand|file-name}}, а возвращается информация о файле: {{ProtocolCommand|file-name}} {{ProtocolCommand|file-size}} - размер файла в байтах, {{ProtocolCommand|file-data}} - данные файла файла или части файла, {{ProtocolCommand|file-md5}} - протоколы обработки успешно импортированных контрольная сумма блока данныхв поле {{ProtocolCommand|file-data}} до кодирования в BASE-64 рассчитанная по алгоритму MD5.
В объекте {{ProtocolCommand|data}} передается имя необходимого каталога {{ProtocolCommand|dir-name}}../Exchange/Log/BadFiles/ - протоколы обработки неуспешно импортированных данных
При добавлении файла в объекте {{ProtocolCommand|data}} в поле {{ProtocolCommand|file-data}} передаются данные файла, а в поле {{ProtocolCommand|file-md5}} - контрольная сумма файла рассчитанная по алгоритму MD5 до кодирования в BASE-64.При передаче файла частями {{ProtocolCommand|file-md5}} передается только в последнем пакете и содержит контрольную сумма всего файла./Exchange/Reports/ - отчеты, создаваемые программой
Данные могут быть предварительно запакованы архиватором GZip (отключается в настройках весов). Так же флаг использования компрессии можно предать в объекте {{ProtocolCommand|"data": "use-compress"}} : ''1'' или ''0'' или ''true''/''false''. При использовании блочной передачи файлов архиватором пакуется каждая часть отдельно. После паковки блока, данные кодируются в BASE-64.
ЗапросПример передачи файла:
<source lang="json">
"command" : "GetFileInfo" "command" : "RemoveFile"--> "command" : "AddFile",
"data" : {
"file-name" : "./Data/Images/goods.no.picture.png" , "file-data" : "данные-файла", "usefile-compressmd5" : 1"9caa7d76e8e08b56256594f39c13e7d8"
}
<--
"response" : "Ok",
"response-code" : 0
</source>
ОтветПри передаче/запросе больших файлов можно использовать передачу файлов частями (получение файлов более 16384 байт с весов всегда выполняется по частям). При передаче по частям необходимо в первом пакете использовать команду {{ProtocolCommand|AddFile}} и в объект данных {{ProtocolCommand|data}} добавить поля {{ProtocolCommand|"total-parts" : ''xxx''}} и {{ProtocolCommand|"part-data-no" : 0}}. В поле {{ProtocolCommand|total-parts}} вместо ''xxx'' нужно передать общее количество частей файла.  В поле {{ProtocolCommand|part-data-no}} передается номер текущего пакет. Начиная с '''0'''. Остальные части файла передаются с помощью команд {{ProtocolCommand|PartDataSended}}, а принимаются с помощью команд {{ProtocolCommand|PartDataReceived}}. Поле {{ProtocolCommand|"MultiPart" : 1}} используется в ответе на команду передачи по частям. Т.е. последовательность следующая:
<source lang="json">
--> Первая часть "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-sizedata" : "12332данные-файла", "part-data-no": 4, "total-parts" : 5, "use-compress" : 1, "file-md5" : "e455d2b43b6157b50e8f502ac77aad139caa7d76e8e08b56256594f39c13e7d8"
}
<--
"response" : "MultiPart",
"response-code" : 1,
"data" : {
"part-data-no" : 4,
"total-parts" : 5
}
 
</source>
==Выполнение команды весами==
Данная команда позволяет выполнить команды на весах.
Данная команда позволяет полностью очистить базу товаров и групп перед загрузкой новых товаров и групп.
Данная '''Если данная команда должна быть передана передается после команды "{{ProtocolCommand|BeginUpdate"}}, то включается режим очистки данных при передаче товаров.'''
Если данная команда не передается, то включается режим обновления/добавления товаров.
Очистка данных производится только если добавляется хотя бы один товар.
 
'''Если данная команда передается отдельно от других команд, производится полная очистка базы товаров (удаляются все товары и группы).'''
Запрос:
Перед использование данных команд, необходимо передать на весы команду '''''{{ProtocolCommand|BeginUpdate'''''}}, а по окончании работы с товарами передается команда '''''{{ProtocolCommand|EndUpdate'''''}}. При необходимости очистки базы товаров на весах, между передачами команд '''''{{ProtocolCommand|BeginUpdate/EndUpdate'''''}}, так же необходимо передать команду {{ProtocolCommand|ClearGoodsAndGroups}}. При использовании команд обновления ({{ProtocolCommand|UpdateGoods}} и {{ProtocolCommand|UpdateGroups}}), если товара или группы нет в базе весов - товар или группа создаются и сообщение об ошибке не передается.  Разница между командами {{ProtocolCommand|UpdateХХХ}} и {{ProtocolCommand|AddXXX}} заключается в минимальном наборе параметров, которые необходимо передаются на весы, что бы не возникло ошибки при приеме команды. Так для для команды {{ProtocolCommand|AddGoods}} необходимо передать: номер товара, название товар, группу-владелец и цену. Для команды {{ProtocolCommand|UpdateGoods}}: только номер товара. Если при использовании команд удаления ({{ProtocolCommand|RemoveGoods}} и {{ProtocolCommand|RemoveGroups}}) товар или группа не найден - передается ошибка '''''ClearGoodsAndGroupsтовар не найден'''''. В объекте {{ProtocolCommand|data}} передаются все необходимые параметры товара или группы.
При использовании команд обновления ('''''UpdateGoods''''' и '''''UpdateGroups''''')Команды {{ProtocolCommand|Remove...}} обрабатываются в последнюю очередь. Т.е. сначала производится очистка базы данных, если товара или группы нет в базе весов - товар или группа создаются далее производится добавление товаров/групп и сообщение об ошибке не передаетсяпотом удаление товаров/групп.
Разница между командами '''''UpdateХХХ''''' и '''''AddXXX''''' заключается в минимальном наборе параметров, которые необходимо передаются на весы, что бы не возникло ошибки при приеме команды. Так для для команды '''''AddGoods''''' необходимо передать: номер товара, название товар, группу-владелец и цену. Для команды '''''UpdateGoods''''': только номер товара.
Если при использовании команд удаления ('''''RemoveGoods''''' {{Внимание2|Параметры {{ProtocolCommand|goods-picture-bytes}} и {{ProtocolCommand|group-picture-bytes}} являются устаревшими и '''''RemoveGroups''''') товар или группа не найден рекомендованы к использованию. Используете параметры передающие имена файлов- передается ошибка '''''товар не найден'''''картинок и загружайте файлы картинок отдельно. Это позволяет более экономично использовать дисковое пространство и использовать будущие расширения протокола весов.}}
В объекте '''''data''''' передаются все необходимые параметры товара или группы.
Команды В версиях ПО старше '''''Remove1.0.2.22 сборка 4168''''' обрабатываются в последнюю очередьдобавлена возможность групповой передачи товаров. Т.е. сначала производится очистка базы дынных, далее производится добавление Для этого список товаров/групп и потом удаление товаров/группзагружается в поле {{ProtocolCommand|goods-list}}.
*Поля данных товара:
:'''''{{ProtocolCommand|goods-no''''' }} - номер товара. '''Номер должен быть уникален. ''' Поиск товара при добавлении/обновлении ведется по этому полю. {{ProtocolCommand|goods-add-code}} - дополнительный номер товар. Может использоваться при формировании штрих-кода товара. {{ProtocolCommand|goods-display-number}} - дополнительный номер товара. Данный номер можно вывести на кнопку товара. По данному номеру возможно сортировать товары внутри группы. {{ProtocolCommand|goods-name}} - название товара для печати на этикетке.
:'''''{{ProtocolCommand|goods-addname-code''''' 2}} - дополнительный номер товар. Может использоваться при формировании штрих-кода второе название товарадля печати на этикетке.
:'''''{{ProtocolCommand|goods-displayfull-number''''' name}} - дополнительный номер название товара. Данный номер можно вывести для вывода на экранную кнопку товара. По данному номеру возможно сортировать товары внутри группыЕсли данное поле не задано, значение берется из поля {{ProtocolCommand|goods-name}}.
:'''''{{ProtocolCommand|goods-full-name''''' - 2}} - второе название товара для печати вывода на этикеткеэкранную кнопку товара. Если данное поле не задано, значение берется из поля {{ProtocolCommand|goods-name-2}}.
:'''''{{ProtocolCommand|goods-full-name''''' price}} - название товара для вывода на кнопку цена товара. Если данное поле не задано, значение берется из поля Можно передавать как строку: '''''goods-name"123.55"''''', можно как число: 123.55
:'''''{{ProtocolCommand|goods-price''''' dep}} - цена отдел товара. Можно передавать Используется как строку: '''''123.55'''''префикс при формировании штрих-кода товара, можно как число: 123если так задано в структуре штрих-кода.55
:'''''{{ProtocolCommand|goods-dep''''' barcode}} - отдел штрих-код товара. Используется при формировании (для режима прайс-чекера) или описание структуры штрих-кода товара, если номер структуры равен 200. Для версии 1.0.2.21 и старше.
:'''''{{ProtocolCommand|goods-barcode-type''''' }} - тип номер структуры штрих-кода товара.
:'''''{{ProtocolCommand|goods-action''''' barcode- признак акционности struct}} - номер структуры штрих-кода товара (используется для вывода на кнопке товара специальной картинки)версии 1.0.2.21 и старше.
:'''''{{ProtocolCommand|goods-is-popular''''' action}} - признак популярности акционности (скидка) товара (используется для вывода этих товаров в отдельное поле на форме выбора товаровкнопке товара специальной картинки).
:'''''{{ProtocolCommand|goods-iceis-percent''''' popular}} - процент '''''ледяной глазури''''' признак популярности товара (используется для вывода этих товаров в весе товара. В формате от '''''0.0''''' до '''''99.99'''''отдельное поле на форме выбора товаров).
:{{ProtocolCommand|goods-ice-percent}} - процент '''''ледяной глазури'''''в весе товара. В формате от 'goods-label''''0.0''''' до '''''99.99''''' - номер шаблона этикетки.
:'''''{{ProtocolCommand|goods-label2''''' label}} - номер 2-го шаблона этикетки.
:'''''{{ProtocolCommand|goods-discountlabel2}} -label''''' номер 2- номер го шаблона этикетки для печати скидочных товаров.
:'''''{{ProtocolCommand|goods-discount-price''''' label}} - цена со скидкойномер шаблона этикетки для печати скидочных товаров.
:'''''{{ProtocolCommand|goods-discount-percent''''' price}} - процент скидкицена со скидкой.
:'''''{{ProtocolCommand|goods-discount-type''''' percent}} - тип процент скидки ('''''0''''' - нет скидки).
:{{ProtocolCommand|goods-discount-type}} - тип скидки ('''''goods-limit-quantity0''''' - ограничение количества для вывода на этикетку при использовании скидокнет скидки).
:'''''{{ProtocolCommand|goods-ownerlimit-group''''' quantity}} - группа-владелец товараограничение количества для вывода на этикетку при использовании скидок.
:'''''{{ProtocolCommand|goods-pictureowner-bytes''''' group}} - картинка группа-владелец товара (массив байт).
:'''''{{ProtocolCommand|goods-picture-filename''''' bytes}} - имя файла картинки картинка товара(массив байт). Устаревший параметр. Не рекомендуется использовать данный параметр, используете {{ProtocolCommand|goods-picture-filename}}.
:'''''{{ProtocolCommand|goods-second-picture-filename''''' }} - имя файла дополнительной картинки товара.
:'''''{{ProtocolCommand|goods-packingsecond-date''''' picture- дата/время паковки (формат: '''''ddfilename}} -MM-yyyy hh:mm''''')имя файла дополнительной картинки товара. Обычно используется для вывода на экран выводимый после печати этикетки.
:'''''{{ProtocolCommand|goods-producedpacking-date''''' }} - дата/время производства паковки (формат: '''''dd-MM-yyyy hh:mm''''').
:'''''{{ProtocolCommand|goods-validproduced-date''''' }} - дата/время окончания срока годности производства (формат: '''''dd-MM-yyyy hh:mm''''').
{{ProtocolCommand|goods-valid-date}} - дата/время окончания срока годности (формат:'''''goodsdd-shelfMM-lifeyyyy hh:mm''''' - срок годности в днях. Если число отрицательно - в часах).
{{ProtocolCommand|goods-sale-before-date}} - дата/время окончания продажи товара (формат:'''''goodsdd-weightMM-unityyyy hh:mm''''' - весовая единица товара). Для версии 1.0.2.21 и старше.
{{ProtocolCommand|goods-shelf-life}} - срок годности в днях. Если число отрицательно:'''''в часах. {{ProtocolCommand|goods-weight-unit}} - весовая единица товара. {{ProtocolCommand|goods-tare''''' }} - вес тары товара. {{ProtocolCommand|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-message-x''''' - текстовые сообщения для печати на этикетке.
*Для успешного добавления товара необходимо передать как минимум следующие поля:
:'''''{{ProtocolCommand|goods-no'''''}}, '''''{{ProtocolCommand|goods-name'''''}}, '''''{{ProtocolCommand|goods-price'''''}},
*В поле '''''{{ProtocolCommand|goods-picture-filename''''' }} и '''''{{ProtocolCommand|goods-second-picture-filename''''' }} передается имя файла картинки для товара или группы. Указанный файл должен присутсвовать присутствовать в каталоге '''''{{Путь к файлу|./Data/PicturesImages/'''''}}. Можно располагать файлы в подкаталогах.
*Данные могут быть предварительно запакованы архиватором GZip (отключается в настройках весов). Так же флаг использования компрессии можно предать в объекте '''''{{ProtocolCommand|data''''': '''''use-compress''''' }} : 1 или 0.
:Далее данные кодируются в BASE-64.
*Срок годности товара имеет следующие значение:
:'''''0''''' - срок годности не задан
:'''''-х''''' - срок годности указан часах
:'''''х''''' - срок годности указан в днях
*Поля "{{ProtocolCommand|goods-message-x" }} служат для передачи дополнительной текстовой информации, печатаемой на этикетке.
:Перечень соответствия сообщений и элементов шаблона этикетки:
:"{{ProtocolCommand|goods-message-1" }} - текстовое сообшениесообщение
:"{{ProtocolCommand|goods-message-2" }} - ингридиентыингредиенты
:"{{ProtocolCommand|goods-message-3" }} - страна происхождения
:"{{ProtocolCommand|goods-message-4" }} - реклама
*Поля данных группы:
:'''''{{ProtocolCommand|group-no''''' }} - номер группы.
:'''''{{ProtocolCommand|group-name''''' }} - название группы.
:'''''{{ProtocolCommand|group-picture-filename''''' }} - имя файла картинки группы.
:'''''{{ProtocolCommand|group-second-picture-bytes''''' filename}} - картинка товара (массив байт)имя файла второй картинки группы. Используется для вывода на экраны товаров.
:'''''{{ProtocolCommand|group-picture-bytes}} - картинка товара (массив байт). Устаревший параметр. Не рекомендуется использовать данный параметр, используете {{ProtocolCommand|group-picture-filename}}.  {{ProtocolCommand|group-owner-group''''' }} - номер группы-владельца.
*Для успешного добавления группы необходимо передать как минимум следующие поля:
:'''''{{ProtocolCommand|group-no'''''}}, '''''{{ProtocolCommand|group-name'''''}}
Сокращения используемые в таблице:
'''''D ''''' - отдел
'''''L ''''' - № товара
'''''I ''''' - код магазина
'''''P ''''' - цена
'''''Q ''''' - вес
'''''CRC ''''' - контрольная сумма
| 52 || EAN8 || DD(2) IIIII(5) CRC(1) || Не поддерживание (введен для совместимости)
|-
| '''99=...119''' || EAN13 || Пользовательские штрихкоды ||Тип ШК задается в структуре пользовательского кода начиная с версии 1.0.2.21|-| '''200''' || || Пользовательский штрихкод, индивидуальный для каждого товара || Тип ШК задается в данных каждого товара индивидуально с версии 1.0.2.23
|}
 
Изменение пользовательских ШК описано {{Описано в разделе|Настройка_пользовательского_штрихкода}}.
==Добавление или связывание шаблонов этикеток==
Данная команда служат для передачи на весы шаблонов этикеток и установки связи между именами файлов шаблонов этикеток и номерами этикеток, которые используются в параметрах товаров.
При установке связи между именем файла шаблона этикетки, необходимо предварительно загрузить файл на весы в каталог {{Путь к файлу|./Data/Labels}}.
Если файл отсутвует отсутствует - связь не будет установлена.
В случае передачи данных шаблона в команде имя файла генерируется автоматически.
Перед использование данной команды, необходимо передать на весы команду "{{ProtocolCommand|BeginUpdate"}}, а по окончании работы с товарами передается команда "{{ProtocolCommand|EndUpdate"}}. Можно использовать эти команду в едином цикле с обновление информации о товарах.
Данные шаблонов, если передаются прямо в команде, могут быть предварительно запакованы архиватором GZip (отключается в настройках весов).
Так же флаг использования компрессии можно предать в объекте {{ProtocolCommand|"data": "use-compress" }} : 1 или 0.
Далее данные кодируются в BASE-64.
Поля данных этикетки:
"{{ProtocolCommand|label-no" }} - номер шаблона этикетки.
"{{ProtocolCommand|label-filename-format" }} - имя файла c форматом шаблона этикетки. Файл должен находится в каталоге {{Путь к файлу|./Data/Labels}}.
"{{ProtocolCommand|label-filename-map" }} - имя файла с задним фоном шаблона этикетки. Файл должен находится в каталоге {{Путь к файлу|./Data/Labels}}.
"{{ProtocolCommand|label-format-bytes" }} - данные формата шаблона этикетки (массив байт).
"{{ProtocolCommand|label-map-bytes" }} - данные заднего фона шаблона этикетки (массив байт).
"{{ProtocolCommand|label-filename" }} - номер группы-владельца. Только для использования с весами LS215.
"{{ProtocolCommand|label-bytes" }} - данные шаблона этикетки (массив байт). Только для использования с весами LS215.
"{{ProtocolCommand|use-compress" }} - флаг использования компрессии данных
==Изменение номера и названия магазина==
Возможна передача до 4-х строк названия магазина.
Перед использование данной команды, необходимо передать на весы команду "{{ProtocolCommand|BeginUpdate"}}, а по окончании работы передается команда "{{ProtocolCommand|EndUpdate"}}. Можно использовать эти команду в едином цикле с обновление информации о товарах.
Поля данных этикетки:
"{{ProtocolCommand|store-no" }} - номер магазина. {{ProtocolCommand|store-name-1}} - название магазина строка 1  {{ProtocolCommand|store-name-2}} - название магазина строка 2  {{ProtocolCommand|store-name-3}} - название магазина строка 3  {{ProtocolCommand|store-name-4}} - название магазина строка 4 ==Настройки весов==Данные команды служат для получения списка настроек весов, а так же получения или изменения самих значений настроек на весах.  При передаче данных команд необходимо передавать пароль для изменения настроек (этот пароль используется так же для входа в режим настроек на весах). При передаче пароля рекомендуется передавать MD5 сумму пароля в поле {{ProtocolCommand|password}} и значение {{ProtocolCommand|"crypted-password": true}}. Если пароль передается в открытом виде, что не рекомендуется по соображениям безопасности, то нужно передать значение {{ProtocolCommand|"crypted-password": false}}.  === Получение списка настроек === Команда для получения настроек с весов {{ProtocolCommand|GetSettingsList}}: <source lang="json">{ "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, }}</source> Ответ: <source lang="json">{ "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}] }}</source> Возвращаемые значения: {{ProtocolCommand|settings-read-list}} - Список настроек доступных для чтения. {{ProtocolCommand|settings-write-list}} - Список настроек доступных для изменения. В списках возвращается перечень настроек со следующими параметрами: {{ProtocolCommand|settings-name}} - название настройки. Используется для чтения и изменения. {{ProtocolCommand|settings-type}} - числовое представление типа значения настройки. {{ProtocolCommand|settings-type-name}} - название типа значения настройки. {{ProtocolCommand|settings-value}} - текущее значение настройки.  === Получение значения настроек === В поле {{ProtocolCommand|settings-name}} передается название необходимого параметра настроек, а поле {{ProtocolCommand|settings-valuе}} само значение. Команда для получения значений настроек с весов {{ProtocolCommand|GetSettings}}: <source lang="json">{ "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" }} </source> Ответ: <source lang="json">{ "id": 4, "response": "Ok", "response-code": 0 "data": { "application": "R1 Sensor.", "compile-date": "26-07-2022", "version": "1.0.2.22", "version-build": 4153
"storesettings-name": "enImageRecognition", "settings-1 - название магазина строка 1 value": false, }}</source>
Для получения нескольких настроек одновременно можно при передаче использовать список c названиями настроек.Для этого необходимо записать имена настроек в список {{ProtocolCommand|items-list}}. Значения так же возвращаются в списке {{ProtocolCommand|items-list}}. <source lang="json"store>{ "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-2 - название магазина строка 2 name": "enDebug"}] }}</source>
"store-name-3 - название магазина строка 3 Ответ:
<source lang="storejson">{ "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-4 value": "true"}] },}</source>  === Изменение значения настроек === Команда для изменения настроек на весах: {{ProtocolCommand|SetSettings}} При изменении настроек используется тоже имя настройки, что и при получении значения настройки. В поле {{ProtocolCommand|settings- name}} передается название магазина строка 4 необходимого параметра настроек, а поле {{ProtocolCommand|settings-valuе}} само значение. <source lang="json">{ "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" }}</source>  Ответ: <source lang="json">{ "id": 18, "response": "Ok", "response-code": 0 "data": { "application": "R1 Sensor.", "compile-date": "26-07-2022", "version": "1.0.2.22", "version-build": 4153 },}</source>  Для изменения нескольких настроек одновременно можно при передаче использовать список.Для этого необходимо записать настройки в список {{ProtocolCommand|items-list}} <source lang="json">{ "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"}] }}</source> В ответе на данную команду присутствует список со статусами изменения каждой из переданных настроек: <source lang="json">{ "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}] }}</source> ==Перезапуск системы распознавания товаров== Данная команда служат для перезапуска системы распознавания товаров после изменения настроек системы.  При передаче данной команды необходимо передавать пароль для изменения настроек (этот пароль используется так же для входа в режим настроек на весах).  При передаче пароля рекомендуется передавать MD5 сумму пароля в поле {{ProtocolCommand|password}} и значение {{ProtocolCommand|"crypted-password": true}}. Если пароль передается в открытом виде, что не рекомендуется по соображениям безопасности, то нужно передать значение {{ProtocolCommand|"crypted-password": false}}.   <source lang="json">{ "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 }}</source> Ответ: <source lang="json">{ "id": 6, "response": "Ok", "response-code": 0 "data": { "application": "R1 Sensor.", "compile-date": "26-07-2022", "version": "1.0.2.22", "version-build": 4153 },}</source>
=Перечень ошибок=
При возникновении ошибок в ответе содержится текстовый ответ и код, сообщающие о возникшей ошибке.
Так же в объект "{{ProtocolCommand|data" }} добавляется поле с расширенным описание ошибки "{{ProtocolCommand|response-ext"}}.
При работе с весами возможны следующие ошибки:

Навигация