Tag addressing
There are several tag-related requests that are meant to manipulate or read back parameters of certain tags. The most basic way of addressing the tags is to use its 24-bit unique serial number, which is expressed in 6-digit hexadecimal format. Another way is to address a request using a tag group ID with the keyword “TG” followed by a semicolon (instead of the tag’s serial number) to indicate the request should be applied to all the tags belonging to a particular group. Additionally, some requests allow to use the keyword “ALL” (instead of the tag’s serial number), to indicate the request should be applied to all the tags present in the RTLS’s database.
The different options to address the tag(s) via these requests are as follows:
|
Method |
Description |
Example |
|
Single tag addressing |
The tag’s 24-bit unique serial number, in 6-digit hexadecimal format is used to address the tag. |
0x0009B7 |
|
Tag group ID |
The tag group numeric (integer) ID is used to address all the tags belonging to a given group. Preceded by the flag “TG” and a semicolon. |
TG;1 |
|
ALL |
The keyword “ALL” is used to address all the tags present in the RTLS’s database. |
ALL |
When using the requests listed above, there are some common error messages related to tag addressing. To make descriptions of the relevant requests shorter, these error messages are not repeated under each chapter. Instead, we list them here.
In case the system encounters an error related to tag addressing when processing a client request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
<error ID> can be one of the following:
|
Error ID |
Explanation |
|
ID_MISSING |
The field that should address the tag(s) is missing from the request. Note that depending on the exact request, this error might not be used, because an earlier check already returns the WRONG_NUMBER_OF_PARAMETERS error instead. |
|
ID_PARSING |
The tag addressing field looks like a tag’s serial number, but there was an error parsing this. |
|
UNKNOWN_TAG |
The tag addressing field was successfully parsed as the tag’s serial number, but there is no such tag in the RTLS’s database. |
|
GROUP_ID_MISSING |
The field that should address the tag group is missing from the request. Note that depending on the exact request, this error might not be used, because an earlier check already returns the WRONG_NUMBER_OF_PARAMETERS error instead. |
|
GROUP_ID_PARSING |
There was an error parsing the tag group ID, most likely due to a wrong format (other than integer). |
|
UNKNOWN_GROUP |
The tag group ID addressing field was successfully parsed, but there is no such tag group in the RTLS’s database. |
Please refer to the description of the relevant requests for other request-specific error messages. The table above lists only the common error messages specific to tag addressing.
Main commands
GET_TAGS
This request allows the client to ask the list of known tags. As with anchors, the tags also automatically become known to the system when they first appear online and communicate with the system. In case the client wants to remove a tag from the database, this can be done by request REMOVE_TAGS.
Client sends:
$PEKIO,GET_TAGS,<optional parameter>
<optional parameter> has the following meaning:
|
Field name |
Explanation |
Examples |
|
Tag’s Serial Number OR Tag group ID OR the keyword “ALL” |
Can be one of the following:
|
0x123464 TG;1 ALL |
Some full examples of client requests would be:
$PEKIO,GET_TAGS
$PEKIO,GET_TAGS,ALL
$PEKIO,GET_TAGS,0x001E38
$PEKIO,GET_TAGS,TG;1
If processing the request was successful, the system responds with one row per tag and terminates the list with special EOF marker:
$PEKIO,TAG,<parameter list>
$PEKIO,TAG,<parameter list>
...
$PEKIO,EOF
<parameter list> is a comma-separated list with the following fields:
|
Field name |
Explanation |
Example |
|
Tag’s Serial Number |
A 24-bit identifier that is unique among all the produced RTLS tags, in 6-digit hexadecimal format. The Serial Number does not change during the whole life cycle of the tag and can thus be used to uniquely identify it. |
0x003464 |
|
Tag’s Alias |
A human-readable alias for the tag. Empty when not set. |
Peter’s wristband |
|
Tag’s Positioning Mode |
Selects the positioning mode. Values of “2D” and “3D” are allowed. The positioning algorithm is more reliable in “2D” mode, so the user should prefer this, if possible (ie when the height of tag is fixed and known). |
2D |
|
Tag’s Fixed Height |
In case the “2D” positioning mode is used, this is the fixed Z coordinate of the tag (in meters). Can be used only in case the height of the tag is fixed and known. When “3D” positioning mode is used, this field should be ignored. |
1.82 |
|
Tag’s Update Rate High value in Hz |
Starting from RTLS Server software 2.3.0, this value is included here only for backward compatibility. When implementing new software, GET_TAG_SAMPLE_INTERVALS request should be used to query the tag’s update interval values. This new request allows support for dynamic update rate configuration, as well as status information during tag reconfiguration. This value here is the Tag’s Update Rate High value in Hz. This means the update rate in case the tag is moving. In case user has set an Update Rate High value for the tag, it is displayed here, even if the modification has not yet reached the tag itself. If there is no user-defined update rate value for the tag, the tag’s actual update rate value is displayed here instead. In case this is also not known (tag is offline or it has been online only short time), a value of “0” is displayed here. Note that the actual update rate may be different because of misconfiguration, radio overload or due to effects of a dynamic update rate. |
2.5 |
|
Tag’s Last Seen Timestamp |
Unix Timestamp when the tag was last seen online. |
1512343243 |
|
Tag’s Last Position |
Last X, Y and Z coordinates of the tag (in meters). |
0.00,-9.20,1.10 |
A full example of the system’s response would be:
$PEKIO,TAG,0x003464,John’s Tag,2D,1.12,2.5,1512343243,0.00,0.00,1.10
$PEKIO,TAG,0x003523,,2D,1.22,5,1512343244,2.31,4.02,1.19
$PEKIO,EOF
If there was an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
Possible values for the <error ID> field are defined in chapter “Tag Addressing”.
A full example of error response would be:
$PEKIO,NOT_GOOD,UNKNOWN_TAG
GET_BATTERIES
This request allows the client to ask for battery statuses of known tags. It is up to the client to decide, whether to use this command periodically to poll for these values OR use the NOTIFICATIONS request to get automatic updates. The battery reports are the same in both cases.
Client sends:
$PEKIO,GET_BATTERIES,<optional parameter>
<optional parameter> has the following meaning:
|
Field name |
Explanation |
Examples |
|
Tag’s Serial Number OR Tag group ID OR The keyword “ALL” |
Can be one of the following:
|
0x123464 TG;1 ALL |
Some full examples of client requests would be:
$PEKIO,GET_BATTERIES
$PEKIO,GET_BATTERIES,ALL
$PEKIO,GET_BATTERIES,0x001E38
$PEKIO,GET_BATTERIES,TG;1
If processing the request was successful, the system responds with one row per tag and terminates the list with special EOF marker:
$PEKIO,TAG_BATTERY,<parameter list>
$PEKIO,TAG_BATTERY,<parameter list>
...
$PEKIO,EOF
<parameter list> is a comma-separated list with the following fields:
|
Field name |
Explanation |
Example |
|
Tag’s Serial Number |
A 24-bit identifier that is unique among all the produced RTLS tags, in 6-digit hexadecimal format. The Serial Number does not change during the whole life cycle of the tag and can thus be used to uniquely identify it. |
0x003464 |
|
Tag’s Alias |
A human-readable alias for the tag. Empty when not set. |
Peter’s wristband |
|
Tag’s Battery Voltage |
Battery voltage in millivolts. |
4087 |
|
Tag’s Battery Status |
Estimated battery percentage. |
70% |
|
Measurement’s Timestamp |
Unix Timestamp when the measurement was taken. |
1212343243 |
A full example of the system’s response would be:
$PEKIO,TAG_BATTERY,0x000453,my tag,4087,70%,1212343243
$PEKIO,TAG_BATTERY,0x000492,,4012,60%,1212343243
$PEKIO,EOF
If there was an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
Possible values for the <error ID> field are defined in chapter “Tag Addressing”.
A full example of error response would be:
$PEKIO,NOT_GOOD,UNKNOWN_TAG
SET_TAG_ALIAS
This request allows the client to assign a human-readable alias for the tag. Note that it is not possible to add a new tag into the database with SET_TAG_ALIAS request, only add or modify its alias. The tag must be present in the database before using this request. Tags are added into the database automatically after they first time appear online.
Client sends:
$PEKIO,SET_TAG_ALIAS,<parameter list>
<parameter list> is a comma-separated list with the following fields:
|
Field name |
Explanation |
Example |
|
Tag’s Serial Number |
A 24-bit identifier that is unique among all the produced RTLS tags, in 6-digit hexadecimal format. The Serial Number does not change during the whole life cycle of the tag and can thus be used to uniquely identify it. |
0x003464 |
|
Tag’s New Alias |
A human-readable alias for the tag. |
Peter’s wristband |
A full example of client’s request would be:
$PEKIO,SET_TAG_ALIAS,0x003464,Peter’s wristband
If processing the request was successful, the system responds:
$PEKIO,OK
If there is no such tag in the database, the system responds:
$PEKIO,NOT_GOOD,UNKNOWN_ID
SET_TAG_PARAMS
This request allows to set the tag’s math parameters. Note that it is not possible to add a new tag into the database with SET_TAG_PARAMS request, only modify its math parameters. The tag must be present in the database before using this request. Tags are added into the database automatically after they first time appear online.
Client sends:
$PEKIO,SET_TAG_PARAMS,<parameter list>
<parameter list> is a comma-separated list with the following fields:
|
Field name |
Explanation |
Example |
|
Tag’s Serial Number OR Tag group ID OR The keyword “ALL” |
Can be one of the following:
|
0x123464 TG;1 ALL |
|
Tag’s Positioning Mode |
Selects the positioning mode. Values of “2D” and “3D” are allowed. The positioning algorithm is more reliable in “2D” mode, so the user should prefer this, if possible (ie when the height of tag is fixed and known). This field may be left empty – in this case the previously set value will stay intact. |
2D |
|
Tag’s Fixed Height |
In case the “2D” positioning mode is used, this is the fixed Z coordinate of the tag (in meters). Can be used only in case the height of the tag is fixed and known. This field may be left empty – in this case the previously set value will stay intact. When “3D” positioning mode is used, this field will be ignored by the system and may be left empty by the client. |
-1.87 |
|
Fixed Height Bias |
Can be used to set the tag’s relative height in “2D” positioning mode. This will help to support multifloor or multilevel environments. This value is added to the previous (Tag’s Fixed Height) value to get the total/absolute height of the tag. In a typical multilevel setup, the “Tag’s Fixed Height” value would be constant and equals to the height of the tag from any level/floor. The “Fixed Height Bias” is the level/floor height from the coordinate origin and should be modified during operation (depending on which floor the tag currently resides). This field may be left empty – in this case the previously set value will stay intact. Supported from RTLS Server software versions 2.7.x. |
2.2 |
Some full examples of client requests would be:
$PEKIO,SET_TAG_PARAMS,0x004343,2D,1.34,2
$PEKIO,SET_TAG_PARAMS,ALL,2D,1.34
$PEKIO,SET_TAG_PARAMS,ALL,,,1.55
$PEKIO,SET_TAG_PARAMS,TG;5,3D
If processing the request was successful, the system responds:
$PEKIO,OK
If the system encountered an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
<error ID> can be one of the following:
|
Error ID |
Explanation |
|
NO_PARAMS |
All the fields are empty, nothing to set. |
|
WRONG_D |
The “2D/3D” mode selector was not “2D” or “3D”. |
|
HEIGHT_VALUE |
The Fixed Height value could not be properly parsed. |
|
BIAS_VALUE |
The Fixed Height Bias value could not be properly parsed. |
|
<tag addressing errors> |
If there was a problem with tag addressing, the common error messages described in chapter “Tag Addressing” may also appear. |
Some full examples of the system’s error responses would be:
$PEKIO,NOT_GOOD,BIAS_VALUE
$PEKIO,NOT_GOOD,UNKNOWN_TAG
SET_TAG_SAMPLE_INTERVALS
This request allows to modify the tag’s update intervals. Note that actual update interval may be longer due to radio overload, which happens when too many tags are alive and configured for too frequent updates (i.e. have too short update intervals). Also note that response to this request does not check if the tag’s update intervals could actually be updated, only if processing the request was successful.
When receiving this request, the system stores the new desired update interval values in its database. As the actual configuration change happens over UWB radio link, this can be done only in case the tag is online. If the tag is currently offline or there are radio coverage problems, the system keeps trying to update the tag’s configuration as long as it finally succeeds. Note that for tags, which were previously working with long update intervals, this might take a lot of time.
To check the status of sample interval update, use the GET_TAG_SAMPLE_INTERVALS request.
Client sends:
$PEKIO,SET_TAG_SAMPLE_INTERVALS,<parameter list>
<parameter list> is a comma-separated list with the following fields:
|
Field name |
Explanation |
Examples |
|
Tag’s Serial Number OR Tag group ID OR The keyword “ALL” |
Can be one of the following:
|
0x123464 TG;1 ALL |
|
Tag’s New Update Interval High |
New Update Interval High in milliseconds. This value is used when the tag is moving. Please note that setting a large value (i.e. longer interval) here makes further configuration changes over UWB radio link very time consuming – this can happen only after the next “update blink” from the tag. |
100 |
|
Tag’s New Update Interval Low |
New Update Interval Low in milliseconds. This value is used when the tag is in standstill. Setting this value to be longer than the Tag’s Update Interval High helps to reduce UWB radio load and conserves battery power when the tag is not moving. Setting this value equal to the Update Interval High disables the dynamic update rate functionality. Otherwise Update Interval Low must always be longer than Update Interval High. |
1000 |
|
Tag’s New Update Interval No Response |
New Update Interval No Response in milliseconds. This value is used when the tag has reached the hard-coded limit of missed responses from anchors, which usually happens when it moves outside of the anchors' signal coverage area, i.e. there are no valid anchors in the range. This is an optional parameter and may be omitted. The value range is 10 - 60000 ms and the default value is 15000 ms. |
15000 |
For all update intervals, values from 10 to 60000 ms are allowed. But please note that when using small values for tag’s update interval (i.e. shorter intervals), the real update interval may be longer due to UWB radio load, national RF regulations and system performance.
Update interval values longer than 60000 ms (which corresponds to one minute) do not make sense, as it does not help to conserve more power and would make further configuration changes over UWB radio link very time consuming.
A full example of client’s request would be:
$PEKIO,SET_TAG_SAMPLE_INTERVALS,0x003464,100,1000,10000
If processing the request was successful, the system responds:
$PEKIO,OK
If the system encountered an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
<error ID> can be one of the following:
|
Error ID |
Explanation |
|
NO_PERIOD_HI |
Could not parse the Interval High value. |
|
NO_PERIOD_LO |
Could not parse the Interval Low value. |
|
WRONG_PERIOD_HI |
The Interval High value is out of bounds (10 to 60000 ms). |
|
WRONG_PERIOD_LO |
The Interval Low value is out of bounds (10 to 60000 ms). |
|
PARAMS_ORDER |
The Interval High value is longer than Interval Low value. |
|
NO_PERIOD_NR |
The given value of No Response Interval could not be parsed as integer. |
|
WRONG_PERIOD_NR |
The given value of No Response Interval is out of bounds (10 to 60000 ms). |
|
<tag addressing errors> |
In case there was a problem with tag addressing, the common error messages described in chapter “Tag Addressing” may also appear. |
Some full examples of the system’s error responses would be:
$PEKIO,NOT_GOOD,WRONG_PERIOD_HI
$PEKIO,NOT_GOOD,UNKNOWN_TAG
GET_TAG_SAMPLE_INTERVALS
This request allows the client to ask for tag’s update interval values and check the status of updating them.
Client sends:
$PEKIO,GET_TAG_SAMPLE_INTERVALS,<optional parameter>
<optional parameter> has the following meaning:
|
Field name |
Explanation |
Examples |
|
Tag’s Serial Number OR Tag group ID OR The keyword “ALL” |
Can be one of the following:
|
0x123464 TG;1 ALL |
Some full examples of client requests would be:
$PEKIO,GET_TAG_SAMPLE_INTERVALS
$PEKIO,GET_TAG_SAMPLE_INTERVALS,ALL
$PEKIO,GET_TAG_SAMPLE_INTERVALS,0x001E38
$PEKIO,GET_TAG_SAMPLE_INTERVALS,TG;3
If processing the request was successful, the system responds with one row per tag and terminates the list with special EOF marker:
$PEKIO,TAG_SAMPLE_INTERVALS,<parameter list>
$PEKIO,TAG_SAMPLE_INTERVALS,<parameter list>
...
$PEKIO,EOF
<parameter list> is a comma-separated list with the following fields:
|
Field name |
Explanation |
Example |
|
Tag’s Serial Number |
A 24-bit identifier that is unique among all the produced RTLS tags, in 6-digit hexadecimal format. The Serial Number does not change during the whole life cycle of the tag and can thus be used to uniquely identify it. |
0x003464 |
|
Tag’s Alias |
A human-readable alias for the tag. Empty when not set. |
Peter’s wristband |
|
Keyword “HIGH” |
“HIGH” – the keyword that specifies the meaning for the next three values. To enable future compatibility, the client should parse all the parameters following the “Tag’s Alias” by searching the keywords “HIGH” and “LOW”. When found, the following three values should be associated with that keyword. Unknown keywords should be skipped when parsing. |
HIGH |
|
Tag’s Desired Update Interval High |
A value in milliseconds for the Tag’s Update Interval High that the user has set by the SET_TAG_SAMPLE_INTERVALS request. In case the user has not ever set a value for this tag, a value of 0 is used here. Note that this might not yet be the value actually configured into the tag, but is a value that the system tries to configure into the tag as soon as possible. |
100 |
|
Tag’s Configured Update Interval High |
A value in milliseconds that is actually configured into the tag as the Update Interval High. If this value is unknown, a value of 0 is used. This might happen after the tag comes online and the system has not yet asked for its update intervals. Depending on the UWB radio load, tag’s actual update intervals and radio link quality, it may take some time for this information to reach the system. In case this value is different from the Tag’s Desired Update Interval High, the system tries to configure the tag as soon as possible to match the Desired value. Note that this happens only in case the Desired value is greater than 0, which means the user has actually set a Desired value by using the SET_TAG_SAMPLE_INTERVALS request. |
200 |
|
Tag’s Update Interval High Status |
An integer that allows to get information about Tag’s Update Interval High Status:
|
3 |
|
Keyword “LOW” |
“LOW” – the keyword that specifies the meaning for the next three values. To enable future compatibility, the client should parse all the parameters following the “Tag’s Alias” by searching the keywords “HIGH” and “LOW”. When found, the following three values should be associated with that keyword. Unknown keywords should be skipped when parsing. |
LOW |
|
Tag’s Desired Update Interval Low |
A value in milliseconds for the tag’s Update Interval Low that the user has set by the SET_TAG_SAMPLE_INTERVALS request. In case the user has not ever set a value for this tag, a value of 0 is used here. Note that this might not yet be the value actually configured into the tag, but is a value that the system tries to configure into the tag as soon as possible. |
1000 |
|
Tag’s Configured Update Interval Low |
A value in milliseconds that is actually configured into the tag as Update Interval Low. If this value is unknown, a value of 0 is used. This might happen after the tag comes online and the system has not yet asked for its update intervals. Depending on the UWB radio load, tag’s actual update intervals and radio link quality, it may take some time for this information to reach the system. In case this value is different from the Tag’s Desired Update Interval Low, the system tries to configure the tag as soon as possible to match the Desired value. Note that this happens only in case the Desired value is greater than 0, which means the user has actually set a Desired value by using the SET_TAG_SAMPLE_INTERVALS request. |
1000 |
|
Tag’s Update Interval Low Status |
An integer that allows to get information about Tag’s Update Interval Low Status:
|
5 |
|
Keyword “NO_R” |
“NO_R” – the keyword that specifies the meaning for the next three values. To enable future compatibility, the client should parse all the parameters following the “Tag’s Alias” by searching the keyword “NO_R”. When found, the following three values should be associated with that keyword. Unknown keywords should be skipped when parsing. |
NO_R |
|
Tag’s Desired Update Interval No Response |
A value in milliseconds for the tag’s Update Interval No Response that the user has set by the SET_TAG_SAMPLE_INTERVALS request. Note that this might not yet be the value actually configured into the tag, but is a value that the system tries to configure into the tag as soon as possible. |
10000 |
|
Tag’s Configured Update Interval No Response |
A value in milliseconds that is actually configured into the tag as Update Interval No Response. Depending on the UWB radio load, tag’s actual update intervals and radio link quality, it may take some time for this information to reach the system. In case this value is different from the Tag’s Desired Update Interval No Response, the system tries to configure the tag as soon as possible to match the Desired value set by the SET_TAG_SAMPLE_INTERVALS request. |
10000 |
|
Tag’s Update Interval No Response Status |
An integer that allows to get information about Tag’s Update Interval No Response Status:
|
5 |
A full example of the system’s response would be:
$PEKIO,TAG_SAMPLE_INTERVALS,0x000453,MyTag,HIGH,100,200,3,LOW,1000,2000,3,NO_R,10000,15000,3
$PEKIO,TAG_SAMPLE_INTERVALS,0x000462,,HIGH,200,200,5,LOW,2000,2000,5,NO_R,5000,5000,5
...
$PEKIO,EOF
If there was an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
Possible values for the <error ID> field are defined in chapter “Tag Addressing”.
A full example of error response would be:
$PEKIO,NOT_GOOD,UNKNOWN_TAG
REMOVE_TAGS
This request allows to remove tags from the database. Tags are added into the database automatically when they first appear online. When a tag is not needed anymore, it can be removed from the database with REMOVE_TAGS. This may be the case when a tag was used in the system just for testing purposes or when a tag is not used in the system any more. Note that when removing a tag that is currently online, it will be removed from the database, but added back automatically when the next ranging report from that tag arrives to the system. Depending on the tag’s update interval, this might happen virtually at once. Also note that by removing a tag from the database, the settings done previously by requests SET_TAG_ALIAS, SET_TAG_PARAMS, and SET_TAG_SAMPLE_INTERVALS will be lost.
Client sends:
$PEKIO,REMOVE_TAGS,<parameter>
<parameter> has the following meaning:
|
Field name |
Explanation |
Examples |
|
Tag’s Serial Number OR Tag group ID OR The keyword “ALL” |
Can be one of the following:
|
0x123464 TG;1 ALL |
Some full examples of client requests would be:
$PEKIO,REMOVE_TAGS,0x003464
$PEKIO,REMOVE_TAGS,ALL
$PEKIO,REMOVE_TAGS,TG;2
If the removal was successful, the system responds:
$PEKIO,OK
If there was an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
Possible values for the <error ID> field are defined in chapter “Tag Addressing”.
A full example of error response would be:
$PEKIO,NOT_GOOD,UNKNOWN_TAG
Tag groups
Introduction to tag groups
Tags can be grouped in the Eliko RTLS, so that the parameter changes can be simultaneously applied to all the tags belonging to a particular group. This feature can be useful when configuring different settings for different categories of tags: for example, to set up different fixed height values for tags on humans and vehicles.
Like anchor groups, tag groups also have priorities. There is a limitation in the Eliko RTLS: one tag can belong to multiple tag groups with different priorities but it cannot belong to multiple tag groups with equal priority.
ADD_TAG_GROUP
This request is used to create a new tag group in the RTLS.
Client sends:
$PEKIO,ADD_TAG_GROUP,<parameter list>
<parameter list> contains the following fields:
|
Field name |
Explanation |
Example |
|
Tag group ID |
Tag group ID. The ID value must be unique within the RTLS. Can be omitted, in this case it is generated automatically by the RTLS. The value 0 cannot be used, it is reserved for the default tag group “ALL”. |
1 |
|
Alias name |
A human-readable alias name, mandatory parameter. Cannot contain quotes or spaces. Must be unique within the RTLS. |
Players |
|
Priority |
A numeric float value. Higher value means higher priority. NB! A tag can belong to multiple tag groups with different priorities but it cannot belong to multiple tag groups with equal priority. |
1.5 |
Some full examples of client requests would be:
$PEKIO,ADD_TAG_GROUP,,Vehicles,1
$PEKIO,ADD_TAG_GROUP,5,Team5,2
If processing the request was successful, the system responds:
$PEKIO,OK,<parameter>
<parameter> has the following meaning:
|
Field name |
Explanation |
Example |
|
Tag group ID |
The unique numeric ID of the tag group in the RTLS |
1 |
An example of the system’s response would be:
$PEKIO,OK,5
In case there was an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
<error ID> can be one of the following:
|
Error ID |
Explanation |
|
ID_ALREADY_EXISTS |
The given tag group ID value is already in use |
|
CANNOT_PARSE_ID |
Problem with the ID field (e.g. the ID was given in a non-integer format) |
|
NAME_ALREADY_EXISTS |
The given tag group name value is already in use |
|
NAME_INCOMPATIBLE |
The tag group name contains unaccepted symbols (e.g. quotes or spaces) |
|
NAME_MISSING |
The mandatory tag group name value is missing |
|
PRIORITY_MISSING |
The mandatory priority value is missing |
|
CANNOT_PARSE_PRIORITY |
Problem with the priority field (e.g. a non-numeric value given) |
A full example of error response would be:
$PEKIO,NOT_GOOD,PRIORITY_MISSING
GET_TAG_GROUPS
This request allows to query the list of known tag groups from the system.
Client sends:
$PEKIO,GET_TAG_GROUPS,<parameter>
<parameter> has the following meaning:
|
Field name |
Explanation |
Example |
|
Tag group ID OR The keyword “ALL” |
Can be one of the following:
|
1 ALL |
Some full examples of client requests would be:
$PEKIO,GET_TAG_GROUPS,1
$PEKIO,GET_TAG_GROUPS,ALL
If processing the request was successful, the system responds with a TAG_GROUP message:
$PEKIO,TAG_GROUP,<parameter list>
<parameter list> contains the same fields as used in ADD_TAG_GROUP request:
|
Field name |
Explanation |
Example |
|
Tag group ID |
Tag group ID, unique within the RTLS. |
1 |
|
Alias name |
A human-readable alias name, unique within the RTLS. |
Players |
|
Priority |
Tag group priority, real number. Higher value means higher priority. |
1.5 |
An example of the system’s response would be:
$PEKIO,TAG_GROUP,5,Team5,2.000000
If there was an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
<error ID> can be one of the following:
|
Error ID |
Explanation |
|
NO_GROUP_ID |
Problem with parsing the ID field (e.g. the ID was given in a non-integer format) |
|
UNKNOWN_ID |
The group with given ID does not exist |
A full example of error response would be:
$PEKIO,NOT_GOOD,UNKNOWN_ID
GET_TAG_GROUPS_WM
This request is an extension of the regular GET_TAG_GROUPS command and allows to query the list of known tag groups with the list of tag belonging to each group from the system.
Client sends:
$PEKIO,GET_TAG_GROUPS_WM,<parameter>
<parameter> has the following meaning:
|
Field name |
Explanation |
Example |
|
Tag group ID OR The keyword “ALL” |
Can be one of the following:
|
1 ALL |
Some full examples of client requests would be:
$PEKIO,GET_TAG_GROUPS_WM,1
$PEKIO,GET_TAG_GROUPS_WM,ALL
If processing the request was successful, the system responds with a TAG_GROUP message:
$PEKIO,TAG_GROUP,<parameter list>
<parameter list> contains the same fields as used in the TAG_GROUP response to the GET_TAG_GROUPS request plus additional fields related to group members (tags):
|
Field name |
Explanation |
Example |
|
Tag group ID |
Tag group ID, unique within the RTLS. |
1 |
|
Alias name |
A human-readable alias name, unique within the RTLS. |
Team1 |
|
Priority |
Tag group priority, real number. Higher value means higher priority. |
1.5 |
|
Keyword “MEMBERS” |
This keyword is used as a flag to indicate the beginning of a semicolon-separated list of the tags belonging to the group |
MEMBERS |
|
Member list |
A semicolon-separated list of the serial numbers of the tags belonging to the group |
0x001234;0x005678;0x00ABCD |
An example of the system’s response would be:
$PEKIO,TAG_GROUP,4,Team4,2.000000,MEMBERS,0x000125;0x000210;0x0003C2;
If there was an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
<error ID> can be one of the following:
|
Error ID |
Explanation |
|
NO_GROUP_ID |
Problem with parsing the ID field (e.g. the ID was given in a non-integer format) |
|
UNKNOWN_ID |
The group with given ID does not exist |
A full example of error response would be:
$PEKIO,NOT_GOOD,NO_GROUP_ID
REMOVE_TAG_GROUP
This request allows to remove tag groups from the system. Please note that removing a tag group would also automatically remove any tag’s membership information with regards to that group.
Client sends:
$PEKIO,REMOVE_TAG_GROUP,<parameter>
<parameter> has the following meaning:
|
Field name |
Explanation |
Example |
|
Tag group ID OR The keyword “ALL” |
Can be one of the following:
|
1 ALL |
A client request example would be:
$PEKIO,REMOVE_TAG_GROUP,5
If processing the request was successful, the system responds:
$PEKIO,OK,<parameter>
<parameter> has the following meaning:
|
Field name |
Explanation |
Example |
|
Tag group ID |
The unique numeric ID of the tag group in the RTLS |
1 |
An example of the system’s response would be:
$PEKIO,OK,5
If there was an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
<error ID> can be one of the following:
|
Error ID |
Explanation |
|
WRONG_NUMBER_OF_PARAMETERS |
The command was given without any tag group addressing |
|
NO_SUCH_GROUP |
No group with a given ID exists in the system |
|
NO_GROUP_ID |
There was a problem with parsing of the id field, e.g. due to wrong format |
|
ALWAYS_PRESENT
|
This error code appears when trying to remove the default group with ID 0 aka automatic “ALL”-group |
A full example of error response would be:
$PEKIO,NOT_GOOD,NO_SUCH_GROUP
ADD_TAG_TO_GROUP
This request is used to add a new tag to a group in the RTLS.
Client sends:
$PEKIO,ADD_TAG_TO_GROUP,<parameter list>
<parameter list> contains the following fields:
|
Field name |
Explanation |
Example |
|
Tag’s Serial Number |
Tag’s serial number, mandatory parameter. The value “ALL” cannot be used. One tag can be added to a group at a time with this request. NB! A tag can belong to multiple tag groups with different priorities but it cannot belong to multiple tag groups with equal priority. If a tag already belongs to another group with the same priority, it will be automatically removed from that group with this command. |
0x1234 |
|
Tag group ID |
Tag group ID, mandatory parameter. The value 0 cannot be used, it is reserved for the default tag group “ALL”. |
1 |
A client request example would be:
$PEKIO,ADD_TAG_TO_GROUP,0x1A2B,3
If processing the request was successful, the system responds:
$PEKIO,OK
If there was an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
<error ID> can be one of the following:
|
Error ID |
Explanation |
|
NO_MEMBER_ID |
Tag serial number is either missing or there are problems with parsing this field, e.g. when 'ALL' is provided instead of a serial number. |
|
UNKNOWN_TAG |
The tag with the given serial number does not exist in the RTLS |
|
NO_GROUP_ID |
The group ID is missing |
|
NO_SUCH_GROUP |
The tag group with the given ID does not exist in the RTLS |
|
GROUP_ID_PARSING |
Cannot parse the tag group id field normally |
|
ALREADY_IN_GROUP |
The given tag already belongs to the group |
A full example of error response would be:
$PEKIO,NOT_GOOD,NO_SUCH_GROUP
REMOVE_TAG_FROM_GROUP
This request is used to remove a tag from a group in the RTLS.
Client sends:
$PEKIO,REMOVE_TAG_FROM_GROUP,<parameter list>
<parameter list> contains the following fields:
|
Field name |
Explanation |
Example |
|
Tag’s Serial Number OR The keyword “ALL” |
Can be one of the following:
|
0x1A2B ALL |
|
Tag group ID |
Tag group ID, mandatory parameter. The value 0 cannot be used, it is reserved for the default tag group “ALL”. |
1 |
A client request example would be:
$PEKIO,REMOVE_TAG_FROM_GROUP,0x01AC,3
If processing the request was successful, the system responds:
$PEKIO,OK
If there was an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
<error ID> can be one of the following:
|
Error ID |
Explanation |
|
NO_MEMBER_ID |
Tag serial number missing or there are problems with parsing this field
|
|
UNKNOWN_TAG |
The anchor with the given serial number does not exist in the RTLS |
|
NO_GROUP_ID |
The group ID is missing |
|
NO_SUCH_GROUP |
The tag group with the given ID does not exist in the RTLS |
|
GROUP_ID_PARSING |
Cannot parse the tag group id field normally |
|
ALWAYS_IN_GROUP |
This error code appears when trying to remove a tag from the default group with ID 0 aka automatic “ALL”-group |
|
WAS_NOT_A_MEMBER |
The given tag was not a member of the group |
A full example of error response would be:
$PEKIO,NOT_GOOD,ALWAYS_IN_GROUP
GET_TAG_IN_GROUPS
This request is used to query all the tag groups in the RTLS that a given tag belongs to.
Client sends:
$PEKIO,GET_TAG_IN_GROUPS,<parameter>
<parameter> has the following meaning:
|
Field name |
Explanation |
Example |
|
Tag’s serial number OR The keyword “ALL” |
Can be one of the following: Tag’s serial number
NB! This field cannot be omitted |
0x001B ALL |
Some full examples of client requests would be:
$PEKIO,GET_TAG_IN_GROUPS,0x001B
$PEKIO,GET_TAG_IN_GROUPS,ALL
If processing the request was successful, the system responds with an IN_GROUPS message (or a list of IN_GROUPS messages with one row per tag in case of addressing the request to ‘ALL’) terminated by the special EOF marker:
$PEKIO,IN_GROUPS,<parameter list>
<parameter list> contains the following fields:
|
Field name |
Explanation |
Example |
|
Tag’s serial number |
Tag’s serial number |
0x001B |
|
Tag group ID-s |
A comma-separated list of the ID-s of all tag groups that the given tag belongs to. NB! The default tag group with ID 0 is not returned in the IN_GROUPS response. If a tag does not belong to any group, its serial number appears in the IN_GROUPS response without any group ID |
1,4,8 |
A full example of the system’s response would be:
$PEKIO,IN_GROUPS,0x000025,3,5,7
$PEKIO,IN_GROUPS,0x00002B
$PEKIO,EOF
If there was an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
<error ID> has the following meaning:
|
Error ID |
Explanation |
|
UNKNOWN_TAG |
The given tag ID was either left empty in the request or missing in the system |
A full example of error response would be:
$PEKIO,NOT_GOOD,UNKNOWN_TAG
GET_TAGS_IN_AG
This request is used to query all the tags in the given anchor group area.
Client sends:
$PEKIO,GET_TAGS_IN_AG,<parameter>
<parameter> has the following meaning:
|
Field name |
Explanation |
Example |
|
Anchor group ID |
Anchor group ID, mandatory parameter. The value 0 cannot be used, it is reserved for the default anchor group “ALL”. Only one anchor group ID can be used with this command. |
1 |
A full example a of client request would be:
$PEKIO,GET_TAGS_IN_AG,5
If processing the request was successful, the system responds with a TAG_AG message (or a list of TAG_AG messages with one row per tag in case of multiple tags located in an anchor group) terminated by the special EOF marker:
$PEKIO,TAG_AG,<parameter list>
<parameter list> contains the following fields:
|
Field name |
Explanation |
Example |
|
Tag’s serial number |
Tag’s serial number |
0x001B |
|
Anchor group ID |
The ID of the queried anchor group |
5 |
A full example of the system’s response would be:
$PEKIO,TAG_AG,0x001591,1769598284.654039,5
$PEKIO,TAG_AG,0x0017F2,1769598284.257325,5
$PEKIO,EOF
If there was an error when processing the request, the following response will be sent:
$PEKIO,NOT_GOOD,<error ID>
<error ID> has the following meaning:
|
Error ID |
Explanation |
|
REDUNDANT_PARAMETERS |
Either no anchor group ID was given or there were more than one anchor group ID-s given with the command. |
|
GROUP_ID_PARSING |
There was an error parsing the anchor group ID, most likely due to a wrong format (other than integer). |
|
UNKNOWN_GROUP |
The anchor group ID addressing field was successfully parsed, but there is no such anchor group in the RTLS’s database. |
A full example of error response would be:
$PEKIO,NOT_GOOD,UNKNOWN_GROUP