Difference between revisions of "Edge Management"

From RifidiWiki

Jump to: navigation, search
(Encode Operations Response)
(Global Settings via Edge_Server_Configuration)
Line 721: Line 721:
 
-Dorg.rifidi.llrp.encode.accesspwdlockprivilege=Read_Write    - If Set Performs a Access Password Lock Operation (values can be Read_Write (which Locks), Perma_Lock, Unlock)  default if not set is Read_Write
 
-Dorg.rifidi.llrp.encode.accesspwdlockprivilege=Read_Write    - If Set Performs a Access Password Lock Operation (values can be Read_Write (which Locks), Perma_Lock, Unlock)  default if not set is Read_Write
 
-Dorg.rifidi.llrp.encode.epclockprivilege=Read_Write    - If Set Performs a EPC Lock Operation (values can be Read_Write (which Locks), Perma_Lock, Unlock)  -  default if not set is Read_Write
 
-Dorg.rifidi.llrp.encode.epclockprivilege=Read_Write    - If Set Performs a EPC Lock Operation (values can be Read_Write (which Locks), Perma_Lock, Unlock)  -  default if not set is Read_Write
 +
-Dorg.rifidi.llrp.encode.mqttbroker  --  mqtt broker url (if set, received response of encode operation is posted to this queue in asynchronous mode). mqttqos and mqttclientid must be set too in order to post to queue
 +
-Dorg.rifidi.llrp.encode.mqttqos  -- Quality of service level for mqtt, example: 2
 +
-Dorg.rifidi.llrp.encode.mqttclientid  -- Client id to publish messages on queue
  
  

Revision as of 19:02, 25 October 2014

Introduction

Prior to Rifidi 3.1 (coming Fall 2014) Edge Management is available through RMI (currently used by Rifidi Workbench if looking for code examples). Starting in 3.1 Edge Management is now accessible though Restful Services (leveraging Restlet plugin. Restlet allows all Rifidi Edge Management operations available through workbench to be accessible via Restful Services.

The types of operations available through Restful Services include:

  • All "session" commands (for stopping and starting reader/sensor sessions)
  • ExecuteCommand and deleteCommand (for commands supported by a sensor such as a tag read)
  • Readers (for getting a list of readers/sensors available on Edge Server instance)
  • Commands (for issuing command line operations such as saving the Edge Server Configuration currently in memory)
  • Get and Set Properties (for setting and getting sensor properties such as Setting the LLRP Reader Configuration dynamically)
  • Create Reader (for creating a new reader connection)
  • Managing Rifidi Applications (for stopping/starting, listing and deploying Rifidi Apps)

Additional features can be found on Restlet User Guide

Configuration

In rifidiserver.ini - A full list of Rifidi Edge configuartion parameters can be found Edge_Server_Configuration

  • Port can be set

-Dorg.rifidi.restlet.port=8111

  • Restlet starts by default this can be changed

-Dorg.rifidi.restlet.enabled=true


Source for Restful Rifidi Management Commands - https://transcends.svn.cloudforge.com/rifidi/rifidi/trunk/org.rifidi.edge/src/org/rifidi/edge/rest/

Commands

Command Code Snippet - start session - example how to use Rifidi API in a Java App

All Rifidi Management API Command Logic here - https://transcends.svn.cloudforge.com/rifidi/rifidi/trunk/org.rifidi.edge/src/org/rifidi/edge/rest/SensorManagerServiceRestletImpl.java

try {
sensorManagerService.startSession((String) request
	.getAttributes().get("readerID"), (String) request
		.getAttributes().get("sessionID"));
	response.setEntity(self.generateReturnString(self
		.generateSuccessMessage()), MediaType.TEXT_XML);
} catch (Exception e) {
	response.setEntity(e.getMessage(), MediaType.TEXT_PLAIN);
	}

Command Basic Flow Example

  1. Create a Reader - http://localhost:8111/createreader/LLRP/IpAddress=127.0.0.1;Port=5084
  2. Create a Session (on a reader/sensor) - http://localhost:8111/createsession/LLRP_1
  3. Create a Command (on a reader/sensor)) -/createcommand/{commandType}/{properties} Note: some readers do not require create/executing a command as there is only one command required hence part of the create session/start session logic (Thinkify, CSL and Generic adapter (for handhelds/async calls) are some examples of this)
  4. Set Command Properties - http://localhost:8111/setproperties/LLRP_Configure_1/Duration=2130
  5. Execute Command (on a given reader/sensor and session) - http://localhost:8111/executecommand/LLRP_1/1/LLRP_Configure_1/-1
  6. Start Session (to begin processing reads using associate command/reader/sensor configuration) - http://localhost:8111/startsession/LLRP_1/1
  7. Save Configuartion (optional is u would to save/persist config in case of a server restart) - http://localhost:8111/save

Command Example

Note: localhost can be substituted with IP address/Host name of Rifidi Edge Server. Port can be changed in Rifidi configuration

apps command example

  • apps - returns a list of available applications

Request (via HTTP Post/Get) "apps" command like this:

http://localhost:8111/apps

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <apps>
      <app>
         <id>AppService:ReadZones</id>
         <number>0</number>
         <status>STARTED</status>
      </app>
      <app>
         <id>AppService:SensorStatus</id>
         <number>1</number>
         <status>STARTED</status>
      </app>
      <app>
         <id>RifidiManagement:RifidiManagementApp</id>
         <number>2</number>
         <status>STARTED</status>
      </app>
      <app>
         <id>AppService:UniqueTagInterval</id>
         <number>3</number>
         <status>STARTED</status>
      </app>
      <app>
         <id>AppService:StableSet</id>
         <number>4</number>
         <status>STARTED</status>
      </app>
      <app>
         <id>AppService:LimitStableSet</id>
         <number>5</number>
         <status>STARTED</status>
      </app>
      <app>
         <id>AppService:UniqueTagBatchInterval</id>
         <number>6</number>
         <status>STARTED</status>
      </app>
      <app>
         <id>AppService:RSSI</id>
         <number>7</number>
         <status>STARTED</status>
      </app>
      <app>
         <id>Diagnostic:GPIO</id>
         <number>8</number>
         <status>STOPPED</status>
      </app>
      <app>
         <id>Diagnostic:Serial</id>
         <number>9</number>
         <status>STOPPED</status>
      </app>
      <app>
         <id>Diagnostic:Tags</id>
         <number>10</number>
         <status>STARTED</status>
      </app>
      <app>
         <id>Diagnostic:TagGenerator</id>
         <number>11</number>
         <status>STARTED</status>
      </app>
      <app>
         <id>Monitoring:ReadZones</id>
         <number>12</number>
         <status>STARTED</status>
      </app>
      <app>
         <id>Monitoring:Tags</id>
         <number>13</number>
         <status>STARTED</status>
      </app>
      <app>
         <id>Monitoring:SensorStatus</id>
         <number>14</number>
         <status>STARTED</status>
      </app>
   </apps>
</response>

stopapp command example

  • stopapp/{appID} - stops a Rifidi Application

Request (via HTTP Post/Get) "stopapp" command like this:

http://localhost:8111/stopapp/2

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Success</message>
</response>

startapp command example

  • startapp/{appID} - starts a Rifidi Application

Request (via HTTP Post/Get) "startapp" command like this:

http://localhost:8111/startapp/2

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Success</message>
</response>

commandtypes command example

  • commandtypes - returns a list of available command types

Request (via HTTP Post/Get) "commandtypes" command like this:

http://localhost:8111/commandtypes

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <commands>
      <command>
         <factoryID>ThingMagic-Poll</factoryID>
         <description>Poll the ThingMagic reader for its tags. For monitoring of the read zone, submit this command for recurring execution.</description>
      </command>
      <command>
         <factoryID>LLRP-ADD_ROSPEC-File</factoryID>
         <description>Configure the LLRP reader via an XML file.  Any changes made to the reader are determined by the contents of the file.  To generate xml code for the commands you want to submit, check out LLRP Commander here: http://www.fosstrak.org/llrp/index.html</description>
      </command>
      <command>
         <factoryID>Awid3014-Push-Stop</factoryID>
         <description>Command the Awid reader to stop sending back tags. To use, submit this command for a one-time execution.</description>
      </command>
      <command>
         <factoryID>Awid2010-Poll</factoryID>
         <description>Configure the Awid reader to send back tags using the Gen 2 Portal ID command. To monitor a read zone, submit this command for a one-time execution.</description>
      </command>
      <command>
         <factoryID>Alien-Poll</factoryID>
         <description>Poll the Alien reader for its tag list. For monitoring of the read zone, submit this command for recurring execution.</description>
      </command>
      <command>
         <factoryID>LLRP-Configure</factoryID>
         <description>Configure the LLRP reader to collect tags.  By default, this command will cause the LLRP reader to push back tag reads automatically.  If you would rather use the Poll mode, you will need to use the LLRP Poll command. To use the LLRP Configure command, submit it for a one-time execution</description>
      </command>
      <command>
         <factoryID>Alien-Push-Start</factoryID>
         <description>Configure the Alien reader to send back tags using the autonomous mode. To monitor a read zone, configure an Alien autonomous reader to listen.  Then submit this command for a one-time execution.</description>
      </command>
      <command>
         <factoryID>Thingmagic6-Push</factoryID>
         <description>Sets the Thingmagic to push tags back to the edge server</description>
      </command>
      <command>
         <factoryID>Awid3014-Poll</factoryID>
         <description>Configure the Awid reader to send back tags using the Gen 2 Portal ID command. To monitor a read zone, submit this command for a one-time execution.</description>
      </command>
      <command>
         <factoryID>Awid-Mask-Poll</factoryID>
         <description>Configure the Awid reader to send back tags using the Gen 2 Portal ID With Mask command. To monitor a read zone and read a specific memory bank, submit this command for a one-time execution.</description>
      </command>
      <command>
         <factoryID>Awid-Read-Block-Data</factoryID>
         <description>Configure the Awid reader to send back memory bank tags using the Read Block Data commmand. To monitor a read zone and read a specific memory bank, submit this command for a one-time execution.</description>
      </command>
      <command>
         <factoryID>LLRP-Poll</factoryID>
         <description>Poll the LLRP reader for its tags. For monitoring of the read zone, first use the LLRP Configure command to configure the LLRP reader for Poll Mode. Then submit this command for recurring execution.</description>
      </command>
      <command>
         <factoryID>LLRP-Push-Stop</factoryID>
         <description>Command the LLRP reader to stop sending back tags.  To use, supply the RO Spec that is currently executing on the reader, and submit this command for a one-time execution.</description>
      </command>
      <command>
         <factoryID>Alien-Push-Stop</factoryID>
         <description>Command the Alien reader to stop sending back tags in autonomous mode.  To use, submit this command for a one-time execution.</description>
      </command>
      <command>
         <factoryID>Awid2010-Push-Stop</factoryID>
         <description>Command the Awid reader to stop sending back tags. To use, submit this command for a one-time execution.</description>
      </command>
   </commands>
</response>

readertypes command example

  • readertypes - returns a list of available reader/sensor types (such as LLRP, Alien, BarCode etc..)

Request (via HTTP Post/Get) "readertypes" command like this:

http://localhost:8111/readertypes

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <sensors>
      <sensor>
         <factoryID>Generic</factoryID>
         <description>A generic Rifidi Adapter.</description>
      </sensor>
      <sensor>
         <factoryID>Opticon</factoryID>
         <description>The Rifidi Adapter for the Opticon Barcode Sensor</description>
      </sensor>
      <sensor>
         <factoryID>Alien-Autonomous</factoryID>
         <description>The Rifidi Alien autonomous adapter is an endpoint to passively receive tag reads from an Alien reader operating in autonomous mode. You cannot send any commands on the alien autonomous session</description>
      </sensor>
      <sensor>
         <factoryID>Awid2010</factoryID>
         <description>The Rifidi Awid adapater supports the Awid TCP/IP protocol on the 2010 and 3014</description>
      </sensor>
      <sensor>
         <factoryID>Thingmagic6</factoryID>
         <description>Sensor plugin for Thingmagic 6 readers</description>
      </sensor>
      <sensor>
         <factoryID>LLRP</factoryID>
         <description>The Rifidi LLRP adapter supports any reader that exposes a Low Level Reader Protocol (LLRP) interface. LLRP is a standard from EPCglobal.</description>
      </sensor>
      <sensor>
         <factoryID>Awid3014</factoryID>
         <description>The Rifidi Awid adapater supports the Awid TCP/IP protocol on the 2010 and 3014</description>
      </sensor>
      <sensor>
         <factoryID>Alien</factoryID>
         <description>The Rifidi Alien adapter supports the Alien ALR protocol on the 9900, 9800, 8800 readers.</description>
      </sensor>
      <sensor>
         <factoryID>Thinkify50</factoryID>
         <description>Sensor plugin for Thinkify TR50 readers</description>
      </sensor>
      <sensor>
         <factoryID>ThingMagic</factoryID>
         <description>The Rifidi ThingMagic adapater supports the ThingMagic RQL protocol on the Mercury 4 and Mercury 5 readers</description>
      </sensor>
   </sensors>
</response>

createreader command example

Note: The command is atomic so either all the parameters/properties in request are valid hence the reader/sensor adapter instance is created or the call fails therefore the reader/adapter instance is not created

  • createreader/{readerType}/{properties} -creates a reader/sensor configuration

Request (via HTTP Post/Get) "createreader" command like this (splitting all property key/value pairs by a semicolon):

Response success:

http://localhost:8111/createreader/LLRP/IpAddress=127.0.0.1;Port=5084

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Success</message>
</response>

Response fail (if there is at least one non valid property, the reader is not created):

http://localhost:8111/createreader/LLRP/IpAddress=127.0.0.2;Port=5084;fakeProp=1234;anotherProp=ABC

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Fail</message>
   <description>Not valid properties: fakeProp=1234|anotherProp=ABC</description>
</response>

readers command example

Request (via HTTP Post/Get) "readers" command like this:

  • readers - returns a list of readers/senors managed by the Edge Server

http://localhost:8111/readers

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <sensors>
      <sensor>
         <serviceID>Alien_1</serviceID>
         <factoryID>Alien</factoryID>
      </sensor>
      <sensor>
         <serviceID>Alien_2</serviceID>
         <factoryID>Alien</factoryID>
      </sensor>
   </sensors>
</response>


getproperties command example (to get reader properties)

  • getproperties/{readerID} - returns the reader/sensor properties

Request (via HTTP Post/Get) "getproperties" command like this, to get a reader properties:

http://localhost:8111/getproperties/LLRP_1


Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <attributes>
      <entry>
         <key>ReconnectionInterval</key>
         <value>500</value>
      </entry>
      <entry>
         <key>Port</key>
         <value>5084</value>
      </entry>
      <entry>
         <key>IpAddress</key>
         <value>192.168.1.48</value>
      </entry>
      <entry>
         <key>MaxNumConnectionAttempts</key>
         <value>10</value>
      </entry>
      <entry>
         <key>DisplayName</key>
         <value>null</value>
      </entry>
      <entry>
         <key>ReaderConfigPath</key>
         <value>config/SET_READER_CONFIG.llrp</value>
      </entry>
   </attributes>
</response>

getproperties command example (to get command properties)

  • getproperties/{commandID} - returns the command properties

Request (via HTTP Post/Get) "getproperties" command like this:

http://localhost:8111/getproperties/LLRP_Configure_1


Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <attributes>
      <entry>
         <key>ROSpecID</key>
         <value>1</value>
      </entry>
      <entry>
         <key>AntennaIDs</key>
         <value>0</value>
      </entry>
      <entry>
         <key>Duration</key>
         <value>1000</value>
      </entry>
      <entry>
         <key>TriggerType</key>
         <value>PUSH</value>
      </entry>
   </attributes>
</response>

setproperties command example (to set reader properties)

  • setproperties/{readerID}/{properties}" - sets the reader/sensor properties

Request (via HTTP Post/Get) setproperties" like this (splitting all property key/value pairs by a semicolon):


Response success:

http://localhost:8111/setproperties/Alien_1/MaxNumConnectionAttempts=11;DisplayName=Alien_Name

<response><message>Success</message></response>


Response fail (valid properties are set, ignoring not valid ones):

http://localhost:8111/setproperties/LLRP_1/IpAddress=127.0.0.15;Port=4567;att1=aa;att2=bbb;attt3=YY

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Success</message>
   <state>Warning</state>
   <description>Not valid properties: att1=aa|att2=bbb|attt3=YY</description>
</response>

setproperties command example (to set command properties)

  • setproperties/{commandID}/{properties}" - sets the command properties

Request (via HTTP Post/Get) setproperties" like this (splitting all property key/value pairs by a semicolon):


Response success

http://localhost:8111/setproperties/LLRP_Configure_1/Duration=2130


<response><message>Success</message></response>


Response fail (valid properties are set, ignoring not valid ones):

http://localhost:8111/setproperties/LLRP_Configure_1/Duration=7500;cc=4;other=67

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Success</message>
   <state>Warning</state>
   <description>Not valid properties: cc=4|other=67</description>
</response>

commands command example

  • commands - returns a list of available commands

Request (via HTTP Post/Get) "commands" command like this:

http://localhost:8111/commands

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <commands>
      <command>
         <commandID>LLRP_Configure_1</commandID>
         <factoryID>LLRP-Configure</factoryID>
      </command>
   </commands>
</response>

createcommand example

Note: The command is atomic so either all the parameters/properties in request are valid hence the command instance is created or the call fails therefore the rcommand instance is not created

  • createcomamnd/{commandType}/{properties} - creates a command to be executed on a reader session

Request (via HTTP Post/Get) "createcommand" command like this (splitting all property key/value pairs by a semicolon):

Response succees:

http://localhost:8111/createcommand/LLRP-Configure/Duration=5000

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Success</message>
</response>

Response error (if there is at least one non valid property, the command is not created):

http://localhost:8111/createcommand/LLRP-Configure/Duration=4000;propX=123;prop2=AB

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Fail</message>
   <description>Not valid properties: propX=123|prop2=AB</description>
</response>

createsession command example

  • createsession/{readerID} - creates a session (with corresponding reader/sensor configuration) and returns status code (such as successful)

Request (via HTTP Post/Get) "createsession" command like this:

http://localhost:8111/createsession/LLRP_1

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Success</message>
</response>

startsession command example

  • startsession/{readerID}/{sessionID} - starts a session for a given reader/sensor and returns status code (such as successful)

Request (via HTTP Post/Get) "startsession" command like this:

http://localhost:8111/startsession/LLRP_1/1

Response: Success

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Success</message>
</response>

Response: Fail

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Error</message>
   <state>CONNECTING</state>
   <description>Unable to start session, current state is CONNECTING  - See Rifidi Edge Sever Log for details</description>
</response>

readerstatus command example

  • readerstatus/{readerID} - retuns teh status of a given reader/sensor

Request (via HTTP Post/Get) "readerstatus" command like this:

http://localhost:8111/readerstatus/LLRP_1

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <sensor>
      <serviceID>LLRP_1</serviceID>
      <factoryID>LLRP</factoryID>
   </sensor>
   <sessions>
      <session>
         <ID>1</ID>
         <status>PROCESSING</status>
      </session>
   </sessions>
</response>

stopsession command example

  • stopsession/{readerID}/{sessionID} - stops a session for a given reader/sensor and returns status code (such as successful)

Request (via HTTP Post/Get) "stopsession" command like this:

http://localhost:8111/stopsession/LLRP_1/1

Response success:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Success</message>
</response>

Response fail:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Error</message>
   <state>CREATED</state>
   <description>Unable to stop session, current state is CREATED  - See Rifidi Edge Sever Log for details</description>
</response>

executecommand command example

  • executecommand/{readerID}/{sessionID}/{commandID}/{repeatInterval} - Executes a command for a given session

Request (via HTTP Post/Get) "executecommand" command like this:

http://localhost:8111/executecommand/LLRP_1/1/LLRP_Configure_1/-1

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Success</message>
</response>

deletesession command example

  • deletesession/{readerID}/{sessionID} - deletes a session and returns status code (such as successful)

Request (via HTTP Post/Get) "deletesession" command like this:

http://localhost:8111/deletesession/LLRP_1/1

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Success</message>
</response>


save command example

  • save - Saves the current state of the Edge Server configuration (such as created readers/sensors, modified properties etc..

Request (via HTTP Post/Get) "save" command like this:

http://localhost:8111/save

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Success</message>
</response>

LLRP Encode command example

LLRP Encode Command can be used for teh following operations:

  • C1G2BlockWrite - Used for Writing Tag Data (if not Locked) - (EPC, Kill Password, Access Password)
  • C1G2Lock - Used for Locking/Unlocking (if not permanent Lock) - (EPC, Kill Password, Access Password)
  • C1G2Kill - Used to Kill a Tag (requires Kill Password to be set)

What are EPC, Kill Password, Access Password:

  • EPC is the GEN2 EPC ID for a Tag
  • Kill Password is used to set the password necessary to kill/destrok a tag for future use (by default there is no password (value(0))
  • Access Password is used to perform tag writes such as EPC, Kill Password, Access Password (by default there is no password (value(0))

Properties

Global Settings via Edge_Server_Configuration

Note: These can be set globally with the Rifidi Edge Configuration Edge_Server_Configuration

-Dorg.rifidi.llrp.encode.targetepc=000000000000000000000000 -   (Hex Value) Sets the EPC Tag Data to perform operation on (Must be even block of 4 charaters and size depends on Tag - typical is 24 characters) - default if not set is 000000000000000000000000
-Dorg.rifidi.llrp.encode.tagmask=000000000000000000000000 -  (Hex Value) Sets the Tag Mask to perform operation on (0 is wildcard match, F is Exact Match) (Must be even block of 4 characters and size depends on Tag - typical is 24 characters) - default if not set is 000000000000000000000000
-Dorg.rifidi.llrp.encode.timeout=0 - Sets the duration of time to attempt operation (O is infinite until operation occurs, set in milliseconds)
-Dorg.rifidi.llrp.encode.accesspwd=0 - Access Password (Hex Value) (8 Characters or value of 0) - default if not set is 0
-Dorg.rifidi.llrp.encode.oldaccesspwd=0 - Old Access Password (Hex Value) (8 Characters or value of 0) - default if not set is 0 Note: used when setting new access password 
-Dorg.rifidi.llrp.encode.killpwd=0 - Kill Password (Hex Value) (8 Characters or value of 0)  - default if not set is 0
-Dorg.rifidi.llrp.encode.killpwdlockprivilege=Read_Write     - If Set Performs a Kill Password Lock Operation (values can be Read_Write (which Locks), Perma_Lock, Unlock) - default if not set is Read_Write
-Dorg.rifidi.llrp.encode.accesspwdlockprivilege=Read_Write     - If Set Performs a Access Password Lock Operation (values can be Read_Write (which Locks), Perma_Lock, Unlock)  default if not set is Read_Write
-Dorg.rifidi.llrp.encode.epclockprivilege=Read_Write     - If Set Performs a EPC Lock Operation (values can be Read_Write (which Locks), Perma_Lock, Unlock)  -  default if not set is Read_Write
-Dorg.rifidi.llrp.encode.mqttbroker  --   mqtt broker url (if set, received response of encode operation is posted to this queue in asynchronous mode). mqttqos and mqttclientid must be set too in order to post to queue
-Dorg.rifidi.llrp.encode.mqttqos  -- Quality of service level for mqtt, example: 2
-Dorg.rifidi.llrp.encode.mqttclientid  -- Client id to publish messages on queue


Command

  • llrpencode/{readerID}/{sessionID}/{tag}/- Encodes/Writes EPC to a tag via LLRP

Performs all Encoding operations for a New RFID Tag

1 - LLRPEPCWrite
2 - LLRPKillPasswordWrite
3 - LLRPAccessPasswordWrite
4 - LLRPEPCLock
5 - LLRPKillPasswordLock
6 - LLRPAccessPasswordLock
  • llrpencode/{readerID}/{sessionID}/{tag}/operation Properties -

Enables one to call a single Encoding operation

Response: Success

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Success</message>
</response>

Response: Fail

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <message>Fail</message>
   <Description> LLRP Message Returned goes here such as Tag mask and Tag data not matching</Description>
</response>

Encode Operations Response

All LLRP Encode Operations Performed are returned Asynchronously to an MQTT Topic

  • Topic naming convention: {readerID}/encode

Success Message


<encodeMessage>
<status>Success</Status>
</encodeMessage>

Fail Message


<encodeMessage>
<status>Fail</status>
<operationList>
     <operation>LLRPEPCWrite:Sucess</operation>
     <operation>LLRPKillPasswordWrite:Sucess</operation>
     <operation>LLRPAccessPasswordWrite:Sucess</operation>
     <operation>LLRPEPCLock:No_Response_From_Tag</operation>
     <operation>LLRPKillPaswordLock: Success</operation>
     <operation>LLRPAccessPaswordLock: Success</operation>
</operationList>
</encodeMessage>

Full List of Return Failure Codes:


Insufficient_Power 
           
No_Response_From_Tag 
           
Nonspecific_Reader_Error 
           
Nonspecific_Tag_Error 
 
Tag_Memory_Locked_Error 
           
Tag_Memory_Overrun_Error 


LLRP Dynamically Configuration command example

  • llrpmessage/{readerID}/{sessionID}/{llrpmessage} - Dynamically (one shot) configures a LLRP reader with an LLRP message (LLRP XML Config)

Ping - Used by failover feauture

  • ping - Returns a date/timestamp
Personal tools