User records come to the device through a “new” or an “updated” database. This ability is controlled through the “deleteAll” tag. When the “deleteAll” tag value is set to “1”, the device gets a new user database. When this value is set to “0”, the device gets an update to the existing user database. For the reader-controller, a user database of up to 64,000 records is required.
For the device to support 64,000 records, a mechanism for multiple transfers of up to 5000 records at a time is required. This is accomplished using the “partialDB” tag. The “partialDB” value starts at 1 and is incremented for each group of up to 5000 records. The final group of records is sent with a “partialDB” value of “255” denoting that this is the final transfer. NOTE: When the “partialDB” tag is used, it takes priority over the “deleteAll” tag (i.e., “deleteAll” is ignored if “multi” is non-zero”.) A “partialDB” value of “0” indicates that there is not a multiple transfer database being sent.
There are instances when a completely new database is sent to the device. This happens under two conditions:
When the ENGAGE device is programmed for the very first time.
When the Host device determines that the differences between the device’s existing database and the new database are too numerous.
When the host sends user records to the device, the records are grouped in terms of user records that will be deleted, updated, or added to the device. The order in which these records are sent from the host must be in that same order: delete, update and add. All four of the tags (deleteAll, delete, update, add) must be included inside the db tag, even if there is no applicable user record changes to the respective tag. When user records need to be updated within the ENGAGE device, it is logical that the device has knowledge of which records need to be deleted before updating and adding new user records.
For the purposes of updating a user record, the entire user record is sent from the host. The record includes data that needs to be updated along with data that does not need to be updated.
When an individual user record needs to be deleted, only the primary credential ID and primary credential type is sent as the identifier for that record.
A user record describes the parameters associated with each user of the access control device. A complete user record is delimited with several different JSON tags. The individual tags within a User Record are described in the Individual tags Within User Records table.
The order defined in the usrRcrd tag defines the searching order for the lock. As user records are modified, these are appended to the devices database.
The credential records must be encrypted as specified in the Schlage ENGAGE Sort & Encryption document. <Q1: where is this document? is it 09_ENGAGE_Credential_Sort_and_Encryption?> <R2: need to add link to document.>
User Record | ||||
Tag | JSON Tag | Type/Length (ASCII bytes) | Value | Device Exclusions |
Database Block | db | String/2 | N/A | <R4: There should be no blanks in tables, use N/A or None> |
User Record Block | usrRcrd | String/7 | N/A | RMRU, MTB, MTKB |
Delete All | deleteAll | Int/1 | 1 = Delete entire existing database 0 = Do not delete entire existing database | RMRU, MTB, MTKB |
Partial Database Transfer Counter | partialDb | Int/3 | 0 = ignore, 1-239 = incrementing counter, 255 = final transfer | CTE, LE, LEB, MTB, MTKB, NDE, NDEB, RMRU, SC, SCB |
Delete User Record | delete | String/6 | N/A | RMRU, MTB, MTKB |
Update User Record | update | String/6 | N/A | RMRU, MTB, MTKB |
Add User Record | add | String/3 | N/A | RMRU, MTB, MTKB |
UserID | usrID | Unsigned Int/7 | 1-1,048,575 record number identifier | RMRU, MTB, MTKB |
ADA enable | adaEn | Int/1 | 0 = ADA Disabled 1 = ADA Enabled | SC, RMRU, MTB, MTKB |
Credential Function | fnctn | String/8 | “norm”, “freeze”, “toggle”, “passThru”, “lockDown” “oneTm” “dogd” “suprv” “delAlrm” “ctAux” “ctMnAux” “ctMnAuxToggle” “ctMnAuxPassThru” “ctAuxToggle” “updtFrmSvr” “updtFrmSvrNrm” “blocked” | RMRU, MTB, MTKB, see Appendix A <Q3: is this referencing DevOps rows 2061-2174?> <R5: if yes, should add link to this section..> |
Credential Schedule | crSch | Array of Unsigned Int/2s | 1 through N, where N is the maximum number of credential schedules the device allows. At a minimum, a user record will have a credential schedule of “[1]”, which means the credential will have 24-7 access. | RMRU, MTB, MTKB |
Activation Date, Time | actDtTm | String/14 | YYYYMMDDHHMMSS – “20140706130530” July 6, 2014, 1:05:30 pm. Minimum date/time is 20100101000000 Note: All devices have resolution to hours. | RMRU, MTB, MTKB |
Expiration Date, Time | expDtTm | String/14 | YYYYMMDDHHMMSS – “20140924150000” Sept 24, 2014, 3:00:00 pm. Minimum date/time is 20100101000000 Note: All devices have resolution to hours. The recommended value for no expiration is “21351231235959” | RMRU, MTB, MTKB |
Primary Credential | primeCr | String/25 | May need 200 bits = 25 bytes of data. Credential data in hexadecimal format. The contents of this tag must be encrypted. See ENGAGE Sort & Encryption document for more information. | RMRU, MTB, MTKB |
Primary Credential Type | prCrTyp | String/7 | “card”, ”pin”, ”biomtrc”, "ble" | RMRU, MTB, MTKB, RC |
Secondary Credential | scndCr | String/25 | Credential data in hexadecimal format. The contents of this tag must be encrypted. See ENGAGE Sort & Encryption document <same as Q1> for more information. | SC, RMRU, MTB, MTKB, RC |
Secondary Credential Type | scndCrTyp | String/7 | “card”, ”pin”, ”biomtrc”, "ble" | SC, RMRU, MTB, MTKB, RC |
The following JSON data structure excerpt represents how the user record data structure might look if a user list was being sent for the very first time or when the current user list needs to be erased and populated with a new user list. Note the value of “deleteAll” is set to 1, which signifies that the database should replace the existing database.
{
"db": {
"usrRcrd": {
"deleteAll": 1,
"delete": [],
"update": [],
"add": [
{
"usrID": 64,
"adaEn": 0,
"actDtTm": "20140101000000",
"expDtTm": "20200101000000",
"fnctn": "norm",
"crSch": [1, 3],
"primeCr": "01020304050607080910111213141516",
"prCrTyp": "card"
},
{
"usrID": 146,
"adaEn": 1,
"actDtTm": "20100101000000",
"expDtTm": "20200101000000",
"fnctn": "norm",
"crSch": [1, 3],
"primeCr": "16151413121110090807060504030201",
"prCrTyp": "card"
}]
}
The following JSON data structure excerpt represents how the user record data structure might look if an updated user list was being sent to the device. This list might contain a set of users to delete, update and add.
NOTE: The value of “deleteAll” is set to 0, which signifies that the existing database in the device should be updated.
{
"db": {
"usrRcrd": {
"deleteAll": 0,
"delete": [
{
"primeCr": "02030405060708091011121314151617",
"prCrTyp": "card"
},
{
"primeCr": "17161514131211100908070605040302",
"prCrTyp": "card"
},
{
"primeCr": "03040506070809101112131415161718",
"prCrTyp": "card"
}
],
"update": [
{
"usrID": 149,
"adaEn": 1,
"actDtTm": "20100101000000",
"expDtTm": "20200101000000",
"fnctn": "toggle",
"crSch": [1],
"primeCr": "16151413121110090807060504030201",
"prCrTyp": "card"
}
],
"add": [
{
"usrID": 148,
"adaEn": 0,
"actDtTm": "20100101000000",
"expDtTm": "20200101000000",
"fnctn": "norm",
"crSch": [1],
"primeCr": "01020304050607080910111213141516",
"prCrTyp": "card"
}
]
},
The following JSON data structure excerpt represents how the user record data structure might look if an updated database is sent that contains no updates to the user records. Note the delete, update, and add records are empty ( [] ), which signifies that there are no records to delete, add, or update.
{
"db": {
"usrRcrd": {
"deleteAll": 0,
"delete": [],
"update": [],
"add": []
},
Last Modified: October 30, 2019