1. 获取布防信息能力

1.1 命令

GET /ISAPI/AccessControl/DeployInfo/capabilities

1.2 输入参数

1.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<DeployInfo xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 布防信息, attr:version{req, string, 协议版本, range:[,]}-->
  <DeployList size="5">
    <!--ro, opt, array, 布防列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <Content>
      <!--ro, opt, object, 报文-->
      <deployNo min="1" max="10">
        <!--ro, req, int, 布防编号, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
      </deployNo>
      <deployType opt="0,1,2">
        <!--ro, req, int, 布防类型, range:[,], step:, unit:, unitType:, attr:opt{req, string, 取值范围, range:[,]}, desc:0-客户端布防,1-实时布防,2-ISAPI布防-->1
      </deployType>
      <ipAddr min="1" max="10">
        <!--ro, req, string, IP地址, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
      </ipAddr>
    </Content>
  </DeployList>
</DeployInfo>

2. 获取布防信息

2.1 命令

GET /ISAPI/AccessControl/DeployInfo

2.2 输入参数

2.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<DeployInfo xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 布防信息, attr:version{req, string, 协议版本, range:[,]}-->
  <DeployList size="5">
    <!--ro, opt, array, 布防列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <Content>
      <!--ro, opt, object, 报文-->
      <deployNo>
        <!--ro, req, int, 布防编号, range:[,], step:, unit:, unitType:-->1
      </deployNo>
      <deployType>
        <!--ro, req, enum, 布防类型, subType:int, [0#客户端布防,1#实时布防,2#ISAPI布防]-->1
      </deployType>
      <ipAddr>
        <!--ro, req, string, IP地址, range:[,]-->test
      </ipAddr>
    </Content>
  </DeployList>
</DeployInfo>

3. 获取人员数量查询

3.1 命令

GET /ISAPI/AccessControl/UserInfo/Count?format=json

3.2 输入参数

3.3 输出参数

{
    "UserInfoCount": {  
    /*ro, req, object, 用户数量*/
        "userNumber":  100  
        /*ro, req, int, 数量, range:[,], step:, unit:, unitType:*/
    }
}

4. 获取门禁设备事件总条数能力

4.1 命令

GET /ISAPI/AccessControl/AcsEventTotalNum/capabilities?format=json

4.2 输入参数

4.3 输出参数

{
    "AcsEvent": {   
    /*ro, opt, object, 门禁设备事件*/
        "AcsEventTotalNumCond": {   
        /*ro, opt, object, 查找条件*/
            "major": {  
            /*ro, opt, object, 主类型*/
                "@opt":  "0,1,2,3,5"    
                /*ro, req, string, 主类型, range:[,]*/
            },
            "minorAlarm": { 
            /*ro, opt, object, 报警次类型*/
                "@opt":  "1024,1025,1026,1027"  
                /*ro, req, string, 报警次类型, range:[,]*/
            },
            "minorException": { 
            /*ro, opt, object, 异常次类型*/
                "@opt":  "39,58,59,1024"    
                /*ro, req, string, 异常次类型, range:[,]*/
            },
            "minorOperation": { 
            /*ro, opt, object, 操作次类型*/
                "@opt":  "80,90,112,113"    
                /*ro, req, string, 操作次类型, range:[,]*/
            },
            "minorEvent": { 
            /*ro, opt, object, 事件次类型*/
                "@opt":  "1,2,3,4"  
                /*ro, req, string, 事件次类型, range:[,]*/
            },
            "startTime": {  
            /*ro, opt, object, 开始时间*/
                "@min":  1, 
                /*ro, opt, int, 开始时间(UTC时间), range:[,], step:, unit:, unitType:*/
                "@max":  1  
                /*ro, opt, int, 结束时间(UTC时间), range:[,], step:, unit:, unitType:*/
            },
            "endTime": {    
            /*ro, opt, object, 结束时间*/
                "@min":  1, 
                /*ro, opt, int, 开始时间(UTC时间), range:[,], step:, unit:, unitType:*/
                "@max":  1  
                /*ro, opt, int, 结束时间(UTC时间), range:[,], step:, unit:, unitType:*/
            },
            "cardNo": { 
            /*ro, opt, object, 卡号*/
                "@min":  1, 
                /*ro, opt, int, 卡号, range:[,], step:, unit:, unitType:*/
                "@max":  32 
                /*ro, opt, int, 卡号, range:[,], step:, unit:, unitType:*/
            },
            "name": {   
            /*ro, opt, object, 持卡人姓名*/
                "@min":  1, 
                /*ro, opt, int, 持卡人姓名, range:[,], step:, unit:, unitType:*/
                "@max":  32 
                /*ro, opt, int, 持卡人姓名, range:[,], step:, unit:, unitType:*/
            },
            "picEnable":  "true,false", 
            /*ro, opt, string, 是否带图片:false-不带图片, range:[,]*/
            "beginSerialNo": {  
            /*ro, opt, object, 起始流水号*/
                "@min":  1, 
                /*ro, opt, int, 起始流水号, range:[,], step:, unit:, unitType:*/
                "@max":  1  
                /*ro, opt, int, 起始流水号, range:[,], step:, unit:, unitType:*/
            },
            "endSerialNo": {    
            /*ro, opt, object, 结束流水号*/
                "@min":  1, 
                /*ro, opt, int, 结束流水号, range:[,], step:, unit:, unitType:*/
                "@max":  1  
                /*ro, opt, int, 结束流水号, range:[,], step:, unit:, unitType:*/
            },
            "employeeNoString": {   
            /*ro, opt, object, 工号(人员ID)*/
                "@min":  1, 
                /*ro, opt, int, 工号(人员ID), range:[,], step:, unit:, unitType:*/
                "@max":  32 
                /*ro, opt, int, 工号(人员ID), range:[,], step:, unit:, unitType:*/
            }
        },
        "totalNum": {   
        /*ro, opt, object, 满足搜索条件的事件总条数*/
            "@min":  1, 
            /*ro, opt, int, 满足搜索条件的事件总条数, range:[,], step:, unit:, unitType:*/
            "@max":  1  
            /*ro, req, int, 满足搜索条件的事件总条数, range:[,], step:, unit:, unitType:*/
        }
    }
}

5. 配置门禁设备事件总条数

5.1 命令

POST /ISAPI/AccessControl/AcsEventTotalNum?format=json

5.2 输入参数

{
    "AcsEventTotalNumCond": {   
    /*opt, object, 门禁设备事件总条数*/
        "major":  1,    
        /*req, int, 主类型, range:[,], step:, unit:, unitType:, desc:参考事件上传宏定义,0-全部(此处传递的是10进制数据,不能传递16进制,如传递1代表0x1(报警主类型))*/
        "minor":  1024, 
        /*req, int, 次类型, range:[,], step:, unit:, unitType:, desc:参考事件上传宏定义,0-全部(此处传递的是10进制数据,不能传递16进制,如传递1024代表0x400(防区短路报警次类型))*/
        "startTime":  "1970-01-01+08:00",   
        /*opt, date, 开始时间(UTC时间)*/
        "endTime":  "1970-01-01+08:00", 
        /*opt, date, 结束时间(UTC时间)*/
        "cardNo":  "test",  
        /*opt, string, 卡号, range:[,]*/
        "name":  "test",    
        /*opt, string, 持卡人姓名, range:[,]*/
        "picEnable":  true, 
        /*opt, bool, 是否带图片, desc:false-不带图片,true-带图片*/
        "beginSerialNo":  1,    
        /*opt, int, 起始流水号, range:[,], step:, unit:, unitType:*/
        "endSerialNo":  100,    
        /*opt, int, 结束流水号, range:[,], step:, unit:, unitType:*/
        "employeeNoString":  "test" 
        /*opt, string, 工号(人员ID), range:[1,32]*/
    }
}

5.3 输出参数

{
    "AcsEventTotalNum": {   
    /*ro, opt, object, 门禁设备事件总条数*/
        "totalNum":  1  
        /*ro, req, int, 满足搜索条件的事件总条数, range:[,], step:, unit:, unitType:*/
    }
}

6. 获取事件优化配置能力

6.1 命令

GET /ISAPI/AccessControl/EventOptimizationCfg/capabilities?format=json

6.2 输入参数

6.3 输出参数

{
    "EventOptimizationCfg": {   
    /*ro, opt, object, 事件优化配置*/
        "enable":  "true,false",    
        /*ro, opt, string, 是否启用事件优化, range:[,]*/
        "isCombinedLinkageEvents":  "true,false"    
        /*ro, opt, string, 是否启用联动事件合并, range:[,]*/
    }
}

7. 获取事件优化

7.1 命令

GET /ISAPI/AccessControl/EventOptimizationCfg?format=json

7.2 输入参数

7.3 输出参数

{
    "EventOptimizationCfg": {   
    /*ro, opt, object, 事件优化配置*/
        "enable":  true,    
        /*ro, opt, bool, 是否启用事件优化*/
        "isCombinedLinkageEvents":  true    
        /*ro, opt, bool, 是否启用联动事件合并*/
    }
}

8. 配置事件优化

8.1 命令

PUT /ISAPI/AccessControl/EventOptimizationCfg?format=json

8.2 输入参数

{
    "EventOptimizationCfg": {   
    /*opt, object, 事件优化配置*/
        "enable":  true,    
        /*opt, bool, 是否启用事件优化*/
        "isCombinedLinkageEvents":  true    
        /*opt, bool, 是否启用联动事件合并*/
    }
}

8.3 输出参数

{
    "requestURL":  "test",  
    /*ro, opt, string, URI, range:[,]*/
    "statusCode":  "test",  
    /*ro, opt, string, 状态码, range:[,]*/
    "statusString":  "test",    
    /*ro, opt, string, 状态描述, range:[,]*/
    "subStatusCode":  "test",   
    /*ro, opt, string, 子状态码, range:[,]*/
    "errorCode":  1,    
    /*ro, req, int, 错误码, range:[,], step:, unit:, unitType:*/
    "errorMsg":  "ok"   
    /*ro, req, string, 错误信息, range:[,]*/
}

9. 获取抓拍参数能力

9.1 命令

GET /ISAPI/AccessControl/SnapConfig/capabilities

9.2 输入参数

9.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<SnapConfig xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 抓拍参数, attr:version{req, string, 协议版本, range:[,]}-->
  <snapTimes min="0" max="5">
    <!--ro, req, int, 线圈抓拍次数, range:[0,5], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
  </snapTimes>
  <snapWaitTime min="0" max="6000">
    <!--ro, req, int, 抓拍等待时间, range:[0,6000], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:此字段未使用-->1
  </snapWaitTime>
  <intervalTimeList size="4">
    <!--ro, req, array, 间隔列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <intervalTime min="0" max="6000">
      <!--ro, req, int, 连拍时间间隔, range:[0,6000], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </intervalTime>
  </intervalTimeList>
  <JPEGParam>
    <!--ro, opt, object, 图片参数-->
    <pictureSize>
      <!--ro, req, string, 图片分辨率, range:[,], 
desc://0-CIF,1-QCIF,2-D1,3-UXGA(1600x1200),4-SVGA(800x600),5-HD720p(1280x720),6-VGA,7-XVGA,8-HD900p,9-HD1080,10-2560*1920,
        //11-1600*304,12-2048*1536,13-2448*2048,14-2448*1200,15-2448*800,16-XGA(1024*768), 17-SXGA(1280*1024),18-WD1(960*576/960*480), 19-1080i,20-576*576,
        //21-1536*1536, 22-1920*1920, 23-320*240, 24-720*720, 25-1024*768,26-1280*1280, 27-1600*600,28-2048*768,29-160*120,75-336*256,
        //78-384*256,79-384*216,80-320*256,82-320*192,83-512*384,127-480*272,128-512*272,161-288*320, 162-144*176,163-480*640,164-240*320,165-120*160,166-576*720,167-720*1280, 
        //168-576*960,180-180*240,181-360*480,182-540*720,183-720*960,184-960*1280,185-1080*1440,0xff-Auto(使用当前码流分辨率)-->0xff
    </pictureSize>
    <pictureQuality opt="best, better, general">
      <!--ro, req, enum, 图片质量系数, subType:string, [best#best,better#better,general#general], attr:opt{req, string, 取值范围, range:[,]}-->best
    </pictureQuality>
  </JPEGParam>
  <isSupportSetSnapConfig>
    <!--ro, opt, bool, 是否支持抓拍参数配置, desc:支持时返回true,不支持时不返回该字段或返回false-->true
  </isSupportSetSnapConfig>
</SnapConfig>

10. 获取抓拍参数

10.1 命令

GET /ISAPI/AccessControl/SnapConfig

10.2 输入参数

10.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<SnapConfig xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 抓拍参数, attr:version{req, string, 协议版本, range:[,]}-->
  <snapTimes>
    <!--ro, req, int, 线圈抓拍次数, range:[0,5], step:, unit:, unitType:-->1
  </snapTimes>
  <snapWaitTime>
    <!--ro, req, int, 抓拍等待时间, range:[0,6000], step:, unit:, unitType:-->1
  </snapWaitTime>
  <intervalTimeList size="4">
    <!--ro, opt, array, 间隔列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <intervalTime>
      <!--ro, req, int, 连拍时间间隔, range:[0,6000], step:, unit:, unitType:-->1
    </intervalTime>
  </intervalTimeList>
  <JPEGParam>
    <!--ro, opt, object, 图片参数-->
    <pictureSize>
      <!--ro, req, string, 图片分辨率, range:[,], 
desc://0-CIF,1-QCIF,2-D1,3-UXGA(1600x1200),4-SVGA(800x600),5-HD720p(1280x720),6-VGA,7-XVGA,8-HD900p,9-HD1080,10-2560*1920,
        //11-1600*304,12-2048*1536,13-2448*2048,14-2448*1200,15-2448*800,16-XGA(1024*768), 17-SXGA(1280*1024),18-WD1(960*576/960*480), 19-1080i,20-576*576,
        //21-1536*1536, 22-1920*1920, 23-320*240, 24-720*720, 25-1024*768,26-1280*1280, 27-1600*600,28-2048*768,29-160*120,75-336*256,
        //78-384*256,79-384*216,80-320*256,82-320*192,83-512*384,127-480*272,128-512*272,161-288*320, 162-144*176,163-480*640,164-240*320,165-120*160,166-576*720,167-720*1280, 
        //168-576*960,180-180*240,181-360*480,182-540*720,183-720*960,184-960*1280,185-1080*1440,0xff-Auto(使用当前码流分辨率)-->0xff
    </pictureSize>
    <pictureQuality>
      <!--ro, req, enum, 图片质量系数, subType:string, [best#best,better#better,general#general]-->best
    </pictureQuality>
  </JPEGParam>
</SnapConfig>

11. 获取人员数量查询

11.1 命令

GET /ISAPI/AccessControl/UserInfo/Count?format=json

11.2 输入参数

11.3 输出参数

{
    "UserInfoCount": {  
    /*ro, req, object, 用户数量*/
        "userNumber":  100  
        /*ro, req, int, 数量, range:[,], step:, unit:, unitType:*/
    }
}

12. 查询人员信息

12.1 命令

POST /ISAPI/AccessControl/UserInfo/Search?format=json

12.2 输入参数

{
    "UserInfoSearchCond": { 
    /*opt, object, 查询条件*/
        "searchID":  "123", 
        /*req, string, 搜索记录唯一标识, range:[,], desc:搜索记录唯一标识,用来确认上层客户端是否为同一个(倘若是同一个,设备记录内存,下次搜索加快速度),string类型*/
        "searchResultPosition":  0, 
        /*opt, int, 查询结果在结果列表中的起始位置, range:[,], step:, unit:, unitType:, desc:当记录条数很多时,一次查询不能获取所有的记录,下一次查询时指定位置可以查询后面的记录(若设备支持的最大totalMatches为M个,但是当前设备已存储的totalMatches为N个(N<=M),则该字段的合法范围为0~N-1)*/
        "maxResults":  30,  
        /*opt, int, 本次协议调用可获取的最大记录数, range:[,], step:, unit:, unitType:, desc:如maxResults值大于设备能力集返回的范围,则设备按照能力集最大值返回,设备不进行报错*/
        "EmployeeNoList": [ 
        /*opt, array, 人员ID列表, subType:object, range:[,]*/
            {
                "employeeNo":  "test"   
                /*opt, string, 工号, range:[,]*/
            }
        ],
        "fuzzySearch":  "test"  
        /*opt, string, 模糊查询关键字, range:[,]*/
    }
}

12.3 输出参数

{
    "UserInfoSearch": { 
    /*ro, opt, object, 查询结果*/
        "searchID":  "test",    
        /*ro, req, string, 搜索记录唯一标识, range:[,]*/
        "responseStatusStrg":  "OK",    
        /*ro, req, enum, 查询状态字符串描述, subType:string, [OK#查询结束,MORE#还有数据等待查询,NO MATCH#没有匹配数据], desc:OK-查询结束,MORE-还有数据等待查询,NO MATCH-没有匹配数据*/
        "numOfMatches":  1, 
        /*ro, req, int, 本次返回的记录条数, range:[,], step:, unit:, unitType:*/
        "totalMatches":  1, 
        /*ro, req, int, 符合条件的记录总条数, range:[,], step:, unit:, unitType:*/
        "UserInfo": [   
        /*ro, opt, array, 人员信息, subType:object, range:[,]*/
            {
                "employeeNo":  "test",  
                /*ro, req, string, 工号(人员ID), range:[,]*/
                "name":  "test",    
                /*ro, opt, string, 姓名, range:[,]*/
                "userType":  "normal",  
                /*ro, req, string, 人员类型, range:[,]*/
                "closeDelayEnabled":  true, 
                /*ro, opt, bool, 是否关门延迟*/
                "Valid": {  
                /*ro, opt, object, 有效期参数*/
                    "enable":  true,    
                    /*ro, req, bool, 使能有效期*/
                    "beginTime":  "test",   
                    /*ro, req, string, 有效期起始时间, range:[,], desc:timeType字段不存在或为local时*/
                    "endTime":  "test", 
                    /*ro, req, string, 有效期结束时间, range:[,], desc:timeType字段不存在或为local时*/
                    "timeType":  "test" 
                    /*ro, opt, string, 时间类型, range:[,]*/
                },
                "belongGroup":  "1,3,5",    
                /*ro, opt, string, 所属群组, range:[,]*/
                "password":  "123456",  
                /*ro, opt, string, 密码, range:[,]*/
                "doorRight":  "1,3",    
                /*ro, opt, string, 门权限, range:[,], desc:(代表对门1、门3有权限)(锁权限*/
                "RightPlan": [  
                /*ro, opt, array, 门权限计划, subType:object, range:[,]*/
                    {
                        "doorNo":  1,   
                        /*ro, opt, int, 门编号(锁ID), range:[,], step:, unit:, unitType:*/
                        "planTemplateNo":  "1,3,5"  
                        /*ro, opt, string, 计划模板编号, range:[,]*/
                    }
                ],
                "maxOpenDoorTime":  0,  
                /*ro, opt, int, 最大认证次数, range:[,], step:, unit:, unitType:*/
                "openDoorTime":  0, 
                /*ro, opt, int, 已认证次数, range:[,], step:, unit:, unitType:*/
                "roomNumber":  123, 
                /*ro, opt, int, 房间号, range:[,], step:, unit:, unitType:*/
                "floorNumber":  1,  
                /*ro, opt, int, 层号, range:[,], step:, unit:, unitType:*/
                "doubleLockRight":  true,   
                /*ro, opt, bool, 反锁开门权限, desc:true-有权限,false-无权限*/
                "localUIRight":  true,  
                /*ro, opt, bool, 是否具有设备本地UI访问权限, desc:true-有权限,false-无权限*/
                "userVerifyMode":  "card",  
                /*ro, opt, enum, 人员验证方式, subType:string, [cardAndPw#刷卡+密码,card#刷卡,cardOrPw#刷卡或密码,fp#指纹,fpAndPw#指纹+密码,fpOrCard#指纹或刷卡,fpAndCard#指纹+刷卡,fpAndCardAndPw#指纹+刷卡+密码,faceOrFpOrCardOrPw#人脸或指纹或刷卡或密码,faceAndFp#人脸+指纹,faceAndPw#人脸+密码,faceAndCard#人脸+刷卡,face#人脸,employeeNoAndPw#工号+密码,fpOrPw#指纹或密码,employeeNoAndFp#工号+指纹,employeeNoAndFpAndPw#工号+指纹+密码,faceAndFpAndCard#人脸+指纹+刷卡,faceAndPwAndFp#人脸+密码+指纹,employeeNoAndFace#工号+人脸,faceOrfaceAndCard#人脸或人脸+刷卡,fpOrface#指纹或人脸,cardOrfaceOrPw#刷卡或人脸或密码,cardOrFace#刷卡或人脸,cardOrFaceOrFp刷卡或人脸或指纹faceOrPw#人脸或密码,employeeNoAndFaceAndPw#工号+人脸+密码,cardOrFaceOrFaceAndCard#刷卡或人脸或人脸+刷卡], desc:人员验证方式的优先级高于读卡器验证方式*/
                "dynamicCode":  "123456",   
                /*ro, opt, string, 动态权限码, range:[,]*/
                "callNumbers": ["1-1-1-401", "1-1-1-402", "1-1-1-403"], 
                /*ro, opt, array, 呼叫号码列表, subType:string, range:[,], desc:默认规则X-X-X-X,如1-1-1-401, roomNumber字段扩展,支持列表时,使用列表配置相关信息*/
                "floorNumbers": [1, 2], 
                /*ro, opt, array, 层号列表, subType:int, range:[,], desc:floorNumber扩展,支持列表时,可使用该字段配置层号*/
                "numOfFace":  0,    
                /*ro, opt, int, 关联人脸数量, range:[,], step:, unit:, unitType:, desc:不返回不支持*/
                "numOfFP":  0,  
                /*ro, opt, int, 关联指纹数量, range:[,], step:, unit:, unitType:, desc:不返回不支持*/
                "numOfCard":  0,    
                /*ro, opt, int, 关联卡数量, range:[,], step:, unit:, unitType:, desc:不返回不支持*/
                "gender":  "male",  
                /*ro, opt, enum, 人脸图片对应的人员性别, subType:string, [male#男,female#女,unknown#未知]*/
                "PersonInfoExtends": [  
                /*ro, opt, array, 人员信息扩展, subType:object, range:[,]*/
                    {
                        "value":  "test"    
                        /*ro, opt, string, 人员信息扩展内容, range:[,]*/
                    }
                ],
                "groupName":  "test"    
                /*ro, opt, string, 组织架构, range:[1,64]*/
            }
        ]
    }
}

13. 配置人员信息

13.1 命令

PUT /ISAPI/AccessControl/UserInfo/SetUp?format=json

13.2 输入参数

{
    "UserInfo": {   
    /*opt, object, 人员信息*/
        "employeeNo":  "test",  
        /*req, string, 工号(人员ID), range:[,]*/
        "deleteUser":  true,    
        /*opt, bool, 是否删除该人员*/
        "name":  "test",    
        /*opt, string, 姓名, range:[,]*/
        "userType ":  "normal", 
        /*req, enum, 人员类型, subType:string, [normal#普通人(主人),visitor#来宾(访客),blackList#非授权名单人]*/
        "closeDelayEnabled":  true, 
        /*opt, bool, 是否关门延迟, desc:true-是,false-否*/
        "Valid": {  
        /*opt, object, 有效期参数, desc:(enable不使能代表长期有效)(有效时间跨度为1970年1月1日0点0分0秒~2037年12月31日23点59分59秒)*/
            "enable":  true,    
            /*req, bool, 使能有效期, desc:false-不使能,true-使能*/
            "beginTime":  "test",   
            /*req, string, 有效期起始时间, range:[,], desc:timeType字段不存在或为local时,beginTime为设备本地时间,如:2017-08-01T17:30:08;timeType字段为UTC时,beginTime为UTC时间,如:2017-08-01T17:30:08+08:00*/
            "endTime":  "test", 
            /*req, string, 有效期结束时间, range:[,], desc:timeType字段不存在或为local时,endTime为设备本地时间,如:2017-08-01T17:30:08;timeType字段为UTC时,endTime为UTC时间,如:2017-08-01T17:30:08+08:00*/
            "timeType":  "local"    
            /*opt, enum, 时间类型, subType:string, [local#设备本地时间,UTC#UTC时间]*/
        },
        "belongGroup ":  "1,3,5",   
        /*opt, string, 所属群组, range:[,]*/
        "password":  "123456",  
        /*opt, string, 密码, range:[,]*/
        "doorRight":  "1,3",    
        /*opt, string, 门权限, range:[,], desc:代表对门1、门3有权限*/
        "RightPlan": [  
        /*opt, array, 门权限计划, subType:object, range:[,]*/
            {
                "doorNo":  1,   
                /*opt, int, 门编号(锁ID), range:[,], step:, unit:, unitType:*/
                "planTemplateNo":  "1,3,5"  
                /*opt, string, 计划模板编号, range:[,], desc:同个门不同计划模板采用权限或的方式处理*/
            }
        ],
        "maxOpenDoorTime":  0,  
        /*opt, int, 最大认证次数, range:[,], step:, unit:, unitType:*/
        "openDoorTime":  0, 
        /*opt, int, 已认证次数, range:[,], step:, unit:, unitType:*/
        "roomNumber":  123, 
        /*opt, int, 房间号, range:[,], step:, unit:, unitType:*/
        "floorNumber":  1,  
        /*opt, int, 层号, range:[,], step:, unit:, unitType:*/
        "doubleLockRight":  true,   
        /*opt, bool, 反锁开门权限, desc:true-有权限,false-无权限*/
        "localUIRight":  true,  
        /*opt, bool, 是否具有设备本地UI访问权限, desc:true-有权限,false-无权限*/
        "userVerifyMode":  "card",  
        /*opt, enum, 人员验证方式, subType:string, [cardAndPw#刷卡+密码,card#刷卡,cardOrPw#刷卡或密码,fp#指纹,fpAndPw#指纹+密码,fpOrCard#指纹或刷卡,fpAndCard#指纹+刷卡,fpAndCardAndPw#指纹+刷卡+密码,faceOrFpOrCardOrPw#人脸或指纹或刷卡或密码,faceAndFp#人脸+指纹,faceAndPw#人脸+密码,faceAndCard#人脸+刷卡,face#人脸,employeeNoAndPw#工号+密码,fpOrPw#指纹或密码,employeeNoAndFp#工号+指纹,employeeNoAndFpAndPw#工号+指纹+密码,faceAndFpAndCard#人脸+指纹+刷卡,faceAndPwAndFp#人脸+密码+指纹,employeeNoAndFace#工号+人脸,faceOrfaceAndCard#人脸或人脸+刷卡,fpOrface#指纹或人脸,cardOrfaceOrPw#刷卡或人脸或密码,cardOrFace#刷卡或人脸,cardOrFaceOrFp#刷卡或人脸或指纹], 
        desc:人员验证方式的优先级高于读卡器验证方式
        若为空表示人员验证方式无效*/
        "checkUser":  true, 
        /*opt, bool, 设备是否进行人员重复添加校验, desc:false-不校验,true-校验(如果不配置该字段,则设备默认进行人员重复校验)(如果确认设备端不存在任何人员信息,可将其置为false,则设备不进行重复校验,这样会加快下发速度;如果不确认,则不建议配置该字段)*/
        "gender":  "male",  
        /*opt, enum, 人脸图片对应的人员性别, subType:string, [male#男,female#女,unknown#未知]*/
        "PersonInfoExtends": [  
        /*opt, array, 人员扩展信息, subType:object, range:[,]*/
            {
                "value":  "test"    
                /*opt, string, 人员信息扩展内容, range:[,]*/
            }
        ],
        "dynamicCode":  "123456",   
        /*opt, string, 动态权限码, range:[,]*/
        "callNumbers": ["1-1-1-401", "1-1-1-402", "1-1-1-403"], 
        /*opt, array, 呼叫号码列表, subType:string, range:[,], desc:默认规则X-X-X-X,如1-1-1-401, roomNumber字段扩展,支持列表时,使用列表配置相关信息*/
        "floorNumbers": [1, 2], 
        /*opt, array, 层号列表, subType:int, range:[,], desc:floorNumber扩展,支持列表时,可使用该字段配置层号*/
        "groupName":  "test"    
        /*opt, string, 组织架构, range:[1,64]*/
    }
}

13.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

14. 添加人员信息

14.1 命令

POST /ISAPI/AccessControl/UserInfo/Record?format=json

14.2 输入参数

{
    "UserInfo": {   
    /*opt, object, 人员信息*/
        "employeeNo":  "test",  
        /*req, string, 工号(人员ID), range:[,]*/
        "name":  "test",    
        /*opt, string, 姓名, range:[,]*/
        "userType":  "normal",  
        /*req, enum, 人员类型, subType:string, [normal#普通人(主人),visitor#来宾(访客),blackList#非授权名单人]*/
        "closeDelayEnabled":  true, 
        /*opt, bool, 是否关门延迟*/
        "Valid": {  
        /*opt, object, Valid*/
            "enable":  true,    
            /*req, bool, 使能有效期*/
            "beginTime":  "2017-08-01T17:30:08+08:00",  
            /*req, datetime, 有效期起始时间, desc:timeType字段不存在或为local时,beginTime为设备本地时间,如:2017-08-01T17:30:08;timeType字段为UTC时,beginTime为UTC时间,如:2017-08-01T17:30:08+08:00*/
            "endTime":  "2017-08-01T17:30:08+08:00",    
            /*req, datetime, 有效期结束时间(timeType字段不存在或为local时, desc:timeType字段不存在或为local时,beginTime为设备本地时间,如:2017-08-01T17:30:08;timeType字段为UTC时,beginTime为UTC时间,如:2017-08-01T17:30:08+08:00*/
            "timeType":  "local"    
            /*opt, enum, 时间类型, subType:string, [local#设备本地时间,UTC#UTC时间]*/
        },
        "belongGroup":  "1,3,5",    
        /*opt, string, 所属群组, range:[,]*/
        "password":  "123456",  
        /*opt, string, 密码, range:[,]*/
        "doorRight":  "1,3",    
        /*opt, string, 门权限, range:[,]*/
        "RightPlan": [  
        /*opt, array, 门权限计划(锁权限计划), subType:object, range:[,]*/
            {
                "doorNo":  1,   
                /*opt, int, 门编号(锁ID), range:[,], step:, unit:, unitType:*/
                "planTemplateNo":  "1,3,5"  
                /*opt, string, 计划模板编号, range:[,], desc:同个门不同计划模板采用权限或的方式处理*/
            }
        ],
        "maxOpenDoorTime":  0,  
        /*opt, int, 最大认证次数, range:[,], step:, unit:, unitType:, desc:0为无次数限制*/
        "openDoorTime":  1, 
        /*opt, int, 已认证次数, range:[,], step:, unit:, unitType:*/
        "roomNumber":  123, 
        /*opt, int, 房间号, range:[,], step:, unit:, unitType:*/
        "floorNumber":  1,  
        /*opt, int, 层号, range:[,], step:, unit:, unitType:*/
        "doubleLockRight":  true,   
        /*opt, bool, 反锁开门权限*/
        "localUIRight":  true,  
        /*opt, bool, 是否具有设备本地UI访问权限*/
        "userVerifyMode":  "card",  
        /*opt, enum, 人员验证方式, subType:string, [cardAndPw#刷卡+密码,card#刷卡,cardOrPw#刷卡或密码,fp#指纹,fpAndPw#指纹+密码,fpOrCard#指纹或刷卡,fpAndCard#指纹+刷卡,fpAndCardAndPw#指纹+刷卡+密码,faceOrFpOrCardOrPw#人脸或指纹或刷卡或密码,faceAndFp#人脸+指纹,faceAndPw#人脸+密码,faceAndCard#人脸+刷卡,face#人脸,employeeNoAndPw#工号+密码,fpOrPw#指纹或密码,employeeNoAndFp#工号+指纹,employeeNoAndFpAndPw#工号+指纹+密码,faceAndFpAndCard#人脸+指纹+刷卡,faceAndPwAndFp#人脸+密码+指纹,employeeNoAndFace#工号+人脸,faceOrfaceAndCard#人脸或人脸+刷卡,fpOrface#指纹或人脸,cardOrfaceOrPw#刷卡或人脸或密码], 
        desc:人员验证方式的优先级高于读卡器验证方式
        若为空表示人员验证方式无效*/
        "checkUser":  true, 
        /*opt, bool, 设备是否进行人员重复添加校验, desc:false-不校验,true-校验(如果不配置该字段,则设备默认进行人员重复校验)(如果确认设备端不存在任何人员信息,可将其置为false,则设备不进行重复校验,这样会加快下发速度;如果不确认,则不建议配置该字段)*/
        "numOfFace":  0,    
        /*opt, int, 关联人脸数量, range:[,], step:, unit:, unitType:, desc:不返回不支持*/
        "numOfFP":  0,  
        /*opt, int, 关联指纹数量, range:[,], step:, unit:, unitType:, desc:不返回不支持*/
        "numOfCard":  0,    
        /*opt, int, 关联卡数量, range:[,], step:, unit:, unitType:, desc:不返回不支持*/
        "gender":  "male",  
        /*opt, enum, 人脸图片对应的人员性别, subType:string, [male#男,female#女,unknown#未知], desc:male-男, female-女, unknown-未知*/
        "PersonInfoExtends": [  
        /*opt, array, 人员信息扩展, subType:object, range:[,]*/
            {
                "value":  "test"    
                /*opt, string, 人员信息扩展内容, range:[,]*/
            }
        ],
        "operateType":  "byTerminal",   
        /*opt, string, 操作类型, range:[,], desc:byTerminal:按终端操作*/
        "terminalNoList": [1],  
        /*opt, array, 终端ID列表, subType:int, range:[,], desc:type为byTerminal,byTerminalOrg时必填,终端ID列表(目前仅支持单个终端)*/
        "dynamicCode":  "123456",   
        /*opt, string, 动态权限码, range:[,]*/
        "callNumbers": ["1-1-1-401"],   
        /*opt, array, 呼叫号码列表, subType:string, range:[,], desc:默认规则X-X-X-X,如1-1-1-401, roomNumber字段扩展,支持列表时,使用列表配置相关信息*/
        "floorNumbers": [1, 2], 
        /*opt, array, 层号列表, subType:int, range:[,], desc:floorNumber扩展,支持列表时,可使用该字段配置层号*/
        "groupName":  "test"    
        /*opt, string, 组织架构, range:[1,64]*/
    }
}

14.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

15. 修改人员信息

15.1 命令

PUT /ISAPI/AccessControl/UserInfo/Modify?format=json

15.2 输入参数

{
    "UserInfo": {   
    /*opt, object, 人员信息*/
        "employeeNo":  "test",  
        /*req, string, 工号(人员ID), range:[,]*/
        "name":  "test",    
        /*opt, string, 姓名, range:[,]*/
        "userType ":  "normal", 
        /*req, enum, 人员类型, subType:string, [normal#普通人(主人),visitor#来宾(访客),blackList#非授权名单人]*/
        "closeDelayEnabled":  true, 
        /*opt, bool, 是否关门延迟*/
        "Valid": {  
        /*opt, object, Valid*/
            "enable":  true,    
            /*req, bool, 使能有效期*/
            "beginTime":  "2017-08-01T17:30:08+08:00",  
            /*req, datetime, 有效期起始时间, desc:timeType字段不存在或为local时,beginTime为设备本地时间,如:2017-08-01T17:30:08;timeType字段为UTC时,beginTime为UTC时间,如:2017-08-01T17:30:08+08:00*/
            "endTime":  "2017-08-01T17:30:08+08:00",    
            /*req, datetime, 有效期结束时间(timeType字段不存在或为local时, desc:timeType字段不存在或为local时,beginTime为设备本地时间,如:2017-08-01T17:30:08;timeType字段为UTC时,beginTime为UTC时间,如:2017-08-01T17:30:08+08:00*/
            "timeType":  "local"    
            /*opt, enum, 时间类型, subType:string, [local#设备本地时间,UTC#UTC时间]*/
        },
        "belongGroup ":  "1,3,5",   
        /*opt, string, 所属群组, range:[,]*/
        "password":  "123456",  
        /*opt, string, 密码, range:[,]*/
        "doorRight":  "1,3",    
        /*opt, string, 门权限, range:[,]*/
        "RightPlan": [  
        /*opt, array, 门权限计划(锁权限计划), subType:object, range:[,]*/
            {
                "doorNo":  1,   
                /*opt, int, 门编号(锁ID), range:[,], step:, unit:, unitType:*/
                "planTemplateNo":  "1,3,5"  
                /*opt, string, 计划模板编号, range:[,], desc:同个门不同计划模板采用权限或的方式处理*/
            }
        ],
        "maxOpenDoorTime":  0,  
        /*opt, int, 最大认证次数, range:[,], step:, unit:, unitType:, desc:0为无次数限制*/
        "openDoorTime":  1, 
        /*opt, int, 已认证次数, range:[,], step:, unit:, unitType:*/
        "roomNumber":  123, 
        /*opt, int, 房间号, range:[,], step:, unit:, unitType:*/
        "floorNumber":  1,  
        /*opt, int, 层号, range:[,], step:, unit:, unitType:*/
        "doubleLockRight":  true,   
        /*opt, bool, 反锁开门权限*/
        "localUIRight":  true,  
        /*opt, bool, 是否具有设备本地UI访问权限*/
        "userVerifyMode":  "card",  
        /*opt, enum, 人员验证方式, subType:string, [cardAndPw#刷卡+密码,card#刷卡,cardOrPw#刷卡或密码,fp#指纹,fpAndPw#指纹+密码,fpOrCard#指纹或刷卡,fpAndCard#指纹+刷卡,fpAndCardAndPw#指纹+刷卡+密码,faceOrFpOrCardOrPw#人脸或指纹或刷卡或密码,faceAndFp#人脸+指纹,faceAndPw#人脸+密码,faceAndCard#人脸+刷卡,face#人脸,employeeNoAndPw#工号+密码,fpOrPw#指纹或密码,employeeNoAndFp#工号+指纹,employeeNoAndFpAndPw#工号+指纹+密码,faceAndFpAndCard#人脸+指纹+刷卡,faceAndPwAndFp#人脸+密码+指纹,employeeNoAndFace#工号+人脸,faceOrfaceAndCard#人脸或人脸+刷卡,fpOrface#指纹或人脸,cardOrfaceOrPw#刷卡或人脸或密码], 
        desc:人员验证方式的优先级高于读卡器验证方式。
        若为空表示清空人员验证方式*/
        "checkUser":  true, 
        /*opt, bool, 设备是否进行人员重复添加校验, desc:false-不校验,true-校验(如果不配置该字段,则设备默认进行人员重复校验)(如果确认设备端不存在任何人员信息,可将其置为false,则设备不进行重复校验,这样会加快下发速度;如果不确认,则不建议配置该字段)*/
        "gender":  "male",  
        /*opt, enum, 人脸图片对应的人员性别, subType:string, [male#男,female#女,unknown#未知], desc:male-男, female-女, unknown-未知*/
        "PersonInfoExtends": [  
        /*opt, array, 人员信息扩展, subType:object, range:[,]*/
            {
                "value":  "test"    
                /*opt, string, 人员信息扩展内容, range:[,]*/
            }
        ],
        "dynamicCode":  "123456",   
        /*opt, string, 动态权限码, range:[,]*/
        "callNumbers": ["1-1-1-401"],   
        /*opt, array, 呼叫号码列表, subType:string, range:[,], desc:默认规则X-X-X-X,如1-1-1-401, roomNumber字段扩展,支持列表时,使用列表配置相关信息*/
        "floorNumbers": [1, 2], 
        /*opt, array, 层号列表, subType:int, range:[,], desc:floorNumber扩展,支持列表时,可使用该字段配置层号*/
        "operateType":  "byTerminal",   
        /*opt, string, 操作类型, range:[,], desc:byTerminal:按终端操作*/
        "terminalNoList": [1],  
        /*opt, array, 终端ID列表, subType:int, range:[,], desc:type为byTerminal,byTerminalOrg时必填,终端ID列表(目前仅支持单个终端)*/
        "groupName":  "test"    
        /*opt, string, 组织架构, range:[1,64]*/
    }
}

15.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

16. 配置人员信息及权限删除

16.1 命令

PUT /ISAPI/AccessControl/UserInfoDetail/Delete?format=json

16.2 输入参数

{
    "UserInfoDetail": { 
    /*opt, object, 用户信息*/
        "mode":  "all", 
        /*req, enum, 删除模式, subType:string, [all#删除所有,byEmployeeNo#按工号]*/
        "EmployeeNoList": [ 
        /*opt, array, 人员ID列表, subType:object, range:[,]*/
            {
                "employeeNo":  "test"   
                /*opt, string, 工号, range:[,]*/
            }
        ],
        "operateType":  "byTerminal",   
        /*opt, enum, 操作类型, subType:string, [byTerminal#按终端操作,byOrg#按组织操作,byTerminalOrg#按终端组织操作]*/
        "terminalNoList": [1, 2, 3, 4], 
        /*opt, array, 终端列表, subType:int, range:[,], dep:and,{$.UserInfoDetail.operateType,eq,byTerminal}*/
        "orgNoList": [1, 2, 3, 4]   
        /*opt, array, 组织列表, subType:int, range:[,], dep:or,{$.UserInfoDetail.operateType,eq,byOrg},{$.UserInfoDetail.operateType,eq,byTerminalOrg}*/
    }
}

16.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

17. 获取人员信息及权限删除进度

17.1 命令

GET /ISAPI/AccessControl/UserInfoDetail/DeleteProcess?format=json

17.2 输入参数

17.3 输出参数

{
    "UserInfoDetailDeleteProcess": {    
    /*ro, req, object, 人员删除信息*/
        "status":  "processing" 
        /*ro, req, enum, 状态, subType:string, [processing#处理中,success#成功,failed#失败]*/
    }
}

18. 获取指定工号的卡数量查询

18.1 命令

GET /ISAPI/AccessControl/CardInfo/Count?format=json

18.2 输入参数

18.3 输出参数

{
    "CardInfoCount": {  
    /*ro, req, object, 卡数量*/
        "cardNumber":  100  
        /*ro, opt, int, 卡数量, range:[,], step:, unit:, unitType:*/
    }
}

19. 查询卡信息

19.1 命令

POST /ISAPI/AccessControl/CardInfo/Search?format=json

19.2 输入参数

{
    "CardInfoSearchCond": { 
    /*req, object, 卡查询条件*/
        "searchID":  "test",    
        /*req, string, 搜索记录唯一标识, range:[,], desc:用来确认上层客户端是否为同一个(倘若是同一个,设备记录内存,下次搜索加快速度)*/
        "searchResultPosition":  0, 
        /*req, int, 查询结果在结果列表中的起始位置, range:[,], step:, unit:, unitType:, 
        desc:当记录条数很多时,一次查询不能获取所有的记录,下一次查询时指定位置可以查询后面的记录。
        若设备支持的最大totalMatches为M个,但是当前设备已存储的totalMatches为N个(N<=M),则该字段的合法范围为0~N-1*/
        "maxResults":  30,  
        /*req, int, 本次协议调用可获取的最大记录数, range:[,], step:, unit:, unitType:, desc:如maxResults值大于设备能力集返回的范围,则设备按照能力集最大值返回,设备不进行报错*/
        "EmployeeNoList": [ 
        /*opt, array, 人员ID列表, subType:object, range:[,]*/
            {
                "employeeNo":  "test"   
                /*opt, string, 工号(人员ID), range:[,]*/
            }
        ],
        "CardNoList": [ 
        /*opt, array, 卡号列表, subType:object, range:[,], desc:与人员ID列表互斥,两者选一*/
            {
                "cardNo":  "1234567890" 
                /*opt, string, 卡号, range:[,]*/
            }
        ]
    }
}

19.3 输出参数

{
    "CardInfoSearch": { 
    /*ro, opt, object, 卡查询信息*/
        "searchID":  "test",    
        /*ro, req, string, 搜索记录唯一标识, range:[,]*/
        "responseStatusStrg":  "OK",    
        /*ro, req, enum, 查询状态字符串描述, subType:string, [OK#查询结束,MORE#还有数据等待查询,NO MATCH#没有匹配数据]*/
        "numOfMatches":  1, 
        /*ro, req, int, 本次返回的记录条数, range:[,], step:, unit:, unitType:*/
        "totalMatches":  1, 
        /*ro, req, int, 符合条件的记录总条数, range:[,], step:, unit:, unitType:*/
        "CardInfo": [   
        /*ro, opt, array, 卡信息, subType:object, range:[,]*/
            {
                "employeeNo":  "test",  
                /*ro, req, string, 工号(人员ID), range:[,]*/
                "cardNo":  "test",  
                /*ro, req, string, 卡号, range:[,]*/
                "cardType":  "normalCard",  
                /*ro, req, enum, 卡类型, subType:, [normalCard#普通卡,patrolCard#巡更卡,hijackCard#胁迫卡,superCard#超级卡,dismissingCard#解除卡,emergencyCard#应急管理卡], desc:(用于授权临时卡权限,本身不能开门)*/
                "leaderCard":  "1,3,5"  
                /*ro, opt, string, 是否有首次认证功能, range:[,], desc:(表示该卡对于门1、门3、门5有首次认证功能)*/
            }
        ]
    }
}

20. 配置卡信息

20.1 命令

PUT /ISAPI/AccessControl/CardInfo/SetUp?format=json

20.2 输入参数

{
    "CardInfo": {   
    /*opt, object, 卡信息*/
        "employeeNo":  "test",  
        /*req, string, 工号(人员ID), range:[,]*/
        "cardNo":  "1234567890",    
        /*req, string, 卡号, range:[,]*/
        "deleteCard":  true,    
        /*opt, bool, 是否删除该卡, desc:true-是(只有删除该卡时,才填写该字段;新增或修改卡时,不填写该字段)*/
        "cardType":  "normalCard",  
        /*req, enum, 卡类型, subType:string, [normalCard#普通卡,patrolCard#巡更卡,hijackCard#胁迫卡,superCard#超级卡,dismissingCard#解除卡,emergencyCard#应急管理卡]*/
        "leaderCard":  "1,3,5", 
        /*opt, string, 是否有首次认证功能, range:[,], desc:(表示该卡对于门1、门3、门5有首次认证功能)*/
        "checkCardNo":  true,   
        /*opt, bool, 设备是否进行卡重复添加校验, desc:false-不校验,true-校验(如果不配置该字段,则设备默认进行卡重复校验)(如果确认设备端不存在任何卡信息,可将其置为false,则设备不进行重复校验,这样会加快下发速度;如果不确认,则不建议配置该字段)*/
        "checkEmployeeNo":  true    
        /*opt, bool, 设备是否进行工号(人员ID)存在校验, 
        desc:false-不校验,true-校验(如果不配置该字段,则设备默认进行工号(人员ID)存在校验)
        (该字段配置为false时,设备不进行工号(人员ID)存在校验(可加快设备下发卡的速度);该字段配置为true或不配置该字段时,设备进行工号(人员ID)存在校验,如不对处理速度有强烈要求,建议使用该方式)*/
    }
}

20.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

21. 添加卡信息

21.1 命令

POST /ISAPI/AccessControl/CardInfo/Record?format=json

21.2 输入参数

{
    "CardInfo": {   
    /*req, object, 卡信息*/
        "employeeNo":  "test",  
        /*req, string, 工号(人员ID), range:[,]*/
        "cardNo":  "1234567890",    
        /*req, string, 卡号, range:[,]*/
        "cardType ":  "normalCard", 
        /*opt, enum, 卡类型, subType:string, [normalCard#普通卡,patrolCard#巡更卡,hijackCard#胁迫卡,superCard#超级卡,dismissingCard#解除卡,emergencyCard#应急管理卡(用于授权临时卡权限]*/
        "leaderCard":  "1,3,5", 
        /*opt, string, 是否有首次认证功能, range:[,], desc:(表示该卡对于门1、门3、门5有首次认证功能)*/
        "checkCardNo":  true,   
        /*opt, bool, 设备是否进行卡重复添加校验, 
        desc:如果不配置该字段,则设备默认进行卡重复校验
        如果确认设备端不存在任何卡信息,可将其置为false,则设备不进行重复校验,这样会加快下发速度;如果不确认,则不建议配置该字段*/
        "checkEmployeeNo":  true,   
        /*opt, bool, 设备是否进行工号存在校验, 
        desc:如果不配置该字段,则设备默认进行工号存在校验
        该字段配置为false时,设备不进行工号(人员ID)存在校验(可加快设备下发卡的速度);该字段配置为true或不配置该字段时,设备进行工号(人员ID)存在校验,如不对处理速度有强烈要求,建议使用该方式*/
        "operateType":  "byTerminal",   
        /*opt, string, 操作类型, range:[,]*/
        "terminalNoList": [1]   
        /*opt, array, 终端ID列表, subType:int, range:[,], desc:type为byTerminal,byTerminalOrg时必填,终端ID列表(目前仅支持单个终端*/
    }
}

21.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

22. 修改卡信息

22.1 命令

PUT /ISAPI/AccessControl/CardInfo/Modify?format=json

22.2 输入参数

{
    "CardInfo": {   
    /*req, object, 卡信息*/
        "employeeNo":  "test",  
        /*req, string, 工号(人员ID), range:[,]*/
        "cardNo":  "1234567890",    
        /*req, string, 卡号, range:[,]*/
        "cardType ":  "normalCard", 
        /*opt, enum, 卡类型, subType:string, [normalCard#普通卡,patrolCard#巡更卡,hijackCard#胁迫卡,superCard#超级卡,dismissingCard#解除卡,emergencyCard#应急管理卡(用于授权临时卡权限]*/
        "leaderCard":  "1,3,5", 
        /*opt, string, 是否有首次认证功能, range:[,], desc:(表示该卡对于门1、门3、门5有首次认证功能)*/
        "operateType":  "byTerminal",   
        /*opt, string, 操作类型, range:[,]*/
        "terminalNoList": [1]   
        /*opt, array, 终端ID列表, subType:int, range:[,], desc:type为byTerminal,byTerminalOrg时必填,终端ID列表(目前仅支持单个终端*/
    }
}

22.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

23. 删除卡信息

23.1 命令

PUT /ISAPI/AccessControl/CardInfo/Delete?format=json

23.2 输入参数

{
    "CardInfoDelCond": {    
    /*req, object, 删除卡条件信息*/
        "EmployeeNoList": [ 
        /*opt, array, 人员ID列表, subType:object, range:[,]*/
            {
                "employeeNo":  "test"   
                /*opt, string, 工号(人员ID), range:[,]*/
            }
        ],
        "CardNoList": [ 
        /*opt, array, 卡号列表, subType:object, range:[,], desc:与人员ID列表互斥,两者选一*/
            {
                "cardNo":  "1234567890" 
                /*opt, string, 卡号, range:[,]*/
            }
        ],
        "operateType":  "byTerminal",   
        /*opt, enum, 操作类型, subType:string, [byTerminal#按终端操作]*/
        "terminalNoList": [1]   
        /*opt, array, type为byTerminal, subType:int, range:[,]*/
    }
}

23.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

24. 获取人脸库中人脸记录总数

24.1 命令

GET /ISAPI/Intelligent/FDLib/Count?format=json

24.2 输入参数

24.3 输出参数

{
    "requestURL":  "http://10.7.52.31:8080/kms/services/rest/dataInfoService/downloadFile", 
    /*ro, opt, string, 请求URL, range:[,]*/
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, req, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok",  
    /*ro, req, string, 错误信息, range:[,], desc:当statusCode不为1时,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
    "FDRecordDataInfo": [   
    /*ro, opt, array, 人脸库记录信息, subType:object, range:[,], desc:人脸库记录信息, {dep if errcode==1&&errMsg==ok}*/
        {
            "FDID":  "test",    
            /*ro, opt, string, 人脸库ID, range:[,], desc:人脸库ID, string类型, 最大长度为63字节*/
            "faceLibType":  "blackFD",  
            /*ro, opt, enum, 人脸库类型, subType:string, [blackFD#名单库,staticFD#静态库], desc:人脸库类型: blackFD-名单库, staticFD-静态库, string类型, 最大长度为32*/
            "name":  "test",    
            /*ro, opt, string, 人脸库的名称, range:[,], desc:人脸库的名称, string类型, 最大长度为48字节*/
            "recordDataNumber":  123,   
            /*ro, opt, int, 记录数据条数, range:[,], step:, unit:, unitType:*/
            "libArmingType":  "armingLib",  
            /*ro, opt, enum, 库布防类型, subType:string, [armingLib#布防库,nonArmingLib#非布防库], desc:可选,库布防类型:”armingLib:布防库, nonArmingLib:非布防库",老设备不支持该字段,默认是布防库,即新建的所有库都运行进行布防,strin*/
            "libAttribute":  "general", 
            /*ro, opt, enum, 库属性类型, subType:string, [general#普通库,blackList#非授权名单库,VIP#VIP库,passerby#路人库], desc:可选,库属性类型:"general:普通库,blackList:非授权名单库,VIP:VIP库, passerby:路人库",string*/
            "personnelFileEnabled":  true   
            /*ro, opt, bool, 是否启用人员档案配置*/
        }
    ],
    "totalRecordDataNumber":  500000,   
    /*ro, opt, int, 所有记录数据条数, range:[,], step:, unit:, unitType:, desc:所有记录数据条数, integer32类型*/
    "FDCapacity": { 
    /*ro, opt, object, 人脸库容量信息*/
        "total":  0,    
        /*ro, req, int, 总容量, range:[,], step:, unit:, unitType:, desc:单位GB*/
        "use":  0,  
        /*ro, req, int, 已用容量, range:[,], step:, unit:, unitType:, desc:单位GB*/
        "remain":  0,   
        /*ro, req, int, 剩余容量, range:[,], step:, unit:, unitType:, desc:单位GB*/
        "maxRecordDataNumber":  0,  
        /*ro, opt, int, 最大记录数据条数, range:[,], step:, unit:, unitType:*/
        "useRecordDataNumber":  0,  
        /*ro, opt, int, 已记录数据条数, range:[,], step:, unit:, unitType:*/
        "remainRecordDataNumber":  0    
        /*ro, opt, int, 剩余记录数据条数, range:[,], step:, unit:, unitType:*/
    }
}

25. 查询人脸图片数据

25.1 命令

POST /ISAPI/Intelligent/FDLib/FDSearch?format=json

25.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<FDSearchDescription xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--opt, object, 查询描述, attr:version{req, string, 协议版本, range:[,]}-->
  <searchID>
    <!--req, string, 搜索记录唯一标识, range:[,], desc:用来确认上层客户端是否为同一个(倘若是同一个,则设备记录内存,下次搜索加快速度)-->test
  </searchID>
  <searchResultPosition>
    <!--req, int, 查询结果在结果列表中的起始位置, range:[,], step:, unit:, unitType:, desc:当记录条数很多时, 一次查询不能获取所有的记录, 下一次查询时指定位置可以查询后面的记录-->1
  </searchResultPosition>
  <maxResults>
    <!--req, int, 本次查询(每页显示)最大记录数, range:[,], step:, unit:, unitType:-->1
  </maxResults>
  <FDID>
    <!--opt, string, 人脸比对库唯一标示ID, range:[,]-->test
  </FDID>
  <startTime>
    <!--opt, date, 人脸库人员出生开始时间-->1970-01-01+08:00
  </startTime>
  <endTime>
    <!--opt, date, 人脸库人员出生结束时间-->1970-01-01+08:00
  </endTime>
  <name>
    <!--req, string, 姓名, range:[1,32]-->test
  </name>
  <sex>
    <!--opt, enum, 性别, subType:string, [male#男,female#女]-->male
  </sex>
  <province>
    <!--opt, string, 省份, range:[,], desc:参考《全国各省份城市列表.txt》-->11
  </province>
  <city>
    <!--opt, string, 城市, range:[,], desc:参考《全国各省份城市列表.txt》-->11
  </city>
  <certificateType>
    <!--opt, enum, 证件类型, subType:string, [ID#身份证,passportID#护照,other#其他]-->ID
  </certificateType>
  <certificateNumber>
    <!--opt, string, 证件号, range:[8,32], desc:当certificateType为ID时,certificateNumber长度范围[8,18];当certificateType为passportID时,certificateNumber长度范围[8,32];当certificateType为other时,certificateNumber长度范围[8,18];-->test
  </certificateNumber>
  <phoneNumber>
    <!--opt, string, 电话号码, range:[1,64]-->test
  </phoneNumber>
  <FaceModeList>
    <!--opt, array, 人脸模型信息列表, subType:object, range:[,]-->
    <FaceMode>
      <!--opt, object, 人脸模型-->
      <ModeInfo>
        <!--opt, object, 模型数据, desc:以图搜图时<ModeInfo>字段必填-->
        <similarity>
          <!--opt, float, 相似度, range:[0.0,100.0], step:, unit:, unitType:-->0.0
        </similarity>
        <modeData>
          <!--opt, string, 目标模型数据, range:[,], desc:传输过程中针对二进制非建模数据进行base64的加密处理-->test
        </modeData>
      </ModeInfo>
    </FaceMode>
  </FaceModeList>
  <modelStatus>
    <!--opt, enum, 建模状态(旧), subType:string, [modeling#已建模,unmodeled#未建模,modelingFailed#建模失败]-->modeling
  </modelStatus>
  <modelingStatus>
    <!--opt, string, 建模状态, range:[,], desc:success-建模成功,failed-建模失败,none-尚未建模;支持复选;后续使用这个字段,modelStatus将会去除-->success,failed,none
  </modelingStatus>
  <customFaceLibID>
    <!--opt, string, 自定义人脸库ID, range:[,], desc:当FDID和customFaceLibID同时存在时,以customFaceLibID为准-->test
  </customFaceLibID>
  <sortord>
    <!--opt, enum, 搜索结果排序类型, subType:string, [time#入库时间,contrastSuccessTime#比对成功时间,count#比对成功次数]-->time
  </sortord>
  <order>
    <!--opt, enum, 搜索结果排序方式, subType:string, [DESC#最晚入库最先展示,ASC#最早入库最先展示], desc:默认:DESC-->DESC
  </order>
  <StrangerLibFaceAppendData>
    <!--opt, object, 陌生人库支持人脸属性信息-->
    <PersonInfoExtendList size="4">
      <!--opt, array, 人员扩展信息列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
      <PersonInfoExtend>
        <!--opt, object, 人员扩展信息-->
        <id>
          <!--req, int, 人员扩展信息序号, range:[,], step:, unit:, unitType:, desc:从1开始赋值,依次增加-->1
        </id>
        <enable>
          <!--req, bool, 人员扩展信息使能-->true
        </enable>
        <name>
          <!--opt, string, 人员标签信息扩展名称, range:[,]-->test
        </name>
        <value>
          <!--opt, string, 人员标签信息扩展内容, range:[,]-->test
        </value>
      </PersonInfoExtend>
    </PersonInfoExtendList>
  </StrangerLibFaceAppendData>
  <OccurrencesInfo>
    <!--opt, object, 频次信息-->
    <enabled>
      <!--req, bool, 频次是否返回-->true
    </enabled>
    <occurrences>
      <!--opt, int, 频次, range:[,], step:, unit:, unitType:, desc:达到最低频次的人脸库图片才返回,当enabled为true时必须存在-->1
    </occurrences>
    <occurrencesSearchType>
      <!--opt, enum, 频次检索方式, subType:string, [greaterThanOrEqual#大于等于,lessThan#小于,equal#等于], desc:当enabled为true时必须存在-->greaterThanOrEqual
    </occurrencesSearchType>
  </OccurrencesInfo>
  <faceScore>
    <!--opt, int, 人脸评分, range:[-1,100], step:, unit:, unitType:, desc:-1表示评分未知(未对该人脸评分)-->1
  </faceScore>
  <FDIDList>
    <!--opt, object, 人脸库列表, desc:支持查询多个人脸库搜索,理论上FDID和FDIDList是互斥的,若用户同时下发,则以FDIDList为准-->
    <FDID>
      <!--req, string, 人脸库ID, range:[1,64]-->test
    </FDID>
  </FDIDList>
  <faceScoreMax>
    <!--opt, int, 人脸评分范围最大值, range:[-1,100], step:, unit:, unitType:, desc:有效值[0-100],-1表示评分未知(未对该人脸评分),该节点可以和faceScore组合,此时faceScore表示该范围最小值,faceScore表示该范围最大值,如果单独使用,则最小值为0-->0
  </faceScoreMax>
  <pictureStatus>
    <!--opt, enum, 人脸图片状态, subType:string, [normal#正常人脸,abnormal#异常人脸], 
desc:异常人脸(建模失败+人脸评分为低+图片url下载失败的),
    Note:此搜索结果是设备根据当前算法识别效果提供的评判标准,异常图片可能影响人脸抓拍和比对的效果,如果为异常图片的,建议更换图片,后期随着算法准确率的提提升,此判断标准可能发生变化,因此此判断标准结果仅供参考,-->normal
  </pictureStatus>
  <importStartTime>
    <!--ro, opt, datetime, 入库开始时间-->1970-01-01T00:00:00+08:00
  </importStartTime>
  <importEndTime>
    <!--ro, opt, datetime, 入库结束时间-->1970-01-01T00:00:00+08:00
  </importEndTime>
  <faceContrastSuccessStartTime>
    <!--ro, opt, datetime, 人脸比对成功开始时间, desc:支持确认某段时间内监控场景有哪些人出现过。配合使用的查询条件:人脸库ID(FDID,包括:动态库、允许库、静态库)、排序类型(sortord)、排序顺序(order)-->1970-01-01T00:00:00+08:00
  </faceContrastSuccessStartTime>
  <faceContrastSuccessEndTime>
    <!--ro, opt, datetime, 人脸比对成功结束时间, desc:支持确认某段时间内监控场景有哪些人出现过。配合使用的查询条件:人脸库ID(FDID,包括:动态库,允许库、静态库)、排序类型(sortord)、排序顺序(order)-->1970-01-01T00:00:00+08:00
  </faceContrastSuccessEndTime>
</FDSearchDescription>

25.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<FDSearchResult xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 查询结果, attr:version{req, string, 协议版本, range:[,]}-->
  <searchID>
    <!--ro, req, string, 搜索记录唯一标识, range:[,], desc:用来确认上层客户端是否为同一个(倘若是同一个,则设备记录内存,下次搜索加快速度)-->test
  </searchID>
  <responseStatus>
    <!--ro, req, bool, 查询结果-->true
  </responseStatus>
  <responseStatusStrg>
    <!--ro, req, enum, 查询状态字符串描述, subType:string, [OK#查询结束,MORE#还有数据等待查询,NO MATCH#没有匹配数据]-->OK
  </responseStatusStrg>
  <numOfMatches>
    <!--ro, req, int, 本次返回的记录条数, range:[,], step:, unit:, unitType:-->1
  </numOfMatches>
  <totalMatches>
    <!--ro, req, int, 符合条件的记录总条数, range:[,], step:, unit:, unitType:-->1
  </totalMatches>
  <progress>
    <!--ro, opt, int, 查询进度, range:[0,100], step:, unit:, unitType:, desc:设备库的容量可能非常大,检索时间较长,对于远程检索时更加明显,为了提高检索性能,在交互链接中增加进度返回(只有在进度达到100的时候,就可以搜索出具体的数据<MatchList></MatchList>-->1
  </progress>
  <MatchList>
    <!--ro, opt, array, 匹配结果列表, subType:object, range:[,]-->
    <MatchElement>
      <!--ro, opt, object, 匹配结果-->
      <FDID>
        <!--ro, opt, string, 人脸比对库唯一标示ID, range:[,]-->test
      </FDID>
      <thresholdValue>
        <!--ro, opt, int, 检测阈值, range:[0,100], step:, unit:, unitType:, desc:阈值越大检测准确率越高-->1
      </thresholdValue>
      <bornTime>
        <!--ro, opt, date, 人员出生日期-->1970-01-01+08:00
      </bornTime>
      <name>
        <!--ro, req, string, 姓名, range:[1,32]-->test
      </name>
      <sex>
        <!--ro, opt, enum, 性别, subType:string, [male#男,female#女]-->male
      </sex>
      <province>
        <!--ro, opt, string, 省份, range:[,], desc:参考《全国各省份城市列表.txt》-->11
      </province>
      <city>
        <!--ro, opt, string, 城市, range:[,], desc:参考《全国各省份城市列表.txt》-->11
      </city>
      <certificateType>
        <!--ro, opt, enum, 证件类型, subType:string, [ID#身份证,passportID#护照,other#其他]-->ID
      </certificateType>
      <certificateNumber>
        <!--ro, opt, string, 证件号, range:[8,32], desc:当certificateType为ID时,certificateNumber长度范围[8,18];当certificateType为passportID时,certificateNumber长度范围[8,32];当certificateType为other时,certificateNumber长度范围[8,18];-->test
      </certificateNumber>
      <picURL>
        <!--ro, req, picurl, 人脸信息的对应图片的URL, desc:上层根据这个返回的URL在获取图片数据-->http://127.0.0.1
      </picURL>
      <PID>
        <!--ro, req, string, 图片ID, range:[,]-->test
      </PID>
      <PersonInfoExtendList>
        <!--ro, opt, array, 人员扩展信息列表, subType:object, range:[,]-->
        <PersonInfoExtend>
          <!--ro, opt, object, 人员扩展信息-->
          <id>
            <!--ro, req, int, 人员扩展信息序号, range:[,], step:, unit:, unitType:-->1
          </id>
          <enable>
            <!--ro, req, bool, 人员扩展信息使能-->true
          </enable>
          <name>
            <!--ro, opt, string, 人员标签信息扩展名称, range:[,]-->test
          </name>
          <value>
            <!--ro, opt, string, 人员标签信息扩展内容, range:[,]-->test
          </value>
        </PersonInfoExtend>
      </PersonInfoExtendList>
      <similarity>
        <!--ro, opt, float, 相似度, range:[0.0,100.0], step:, unit:, unitType:-->0.0
      </similarity>
      <ModelingStatus>
        <!--ro, opt, object, 建模状态, desc:后续使用这个字段,modelStatus将会去除-->
        <FDID>
          <!--ro, opt, string, 人脸库ID, range:[,]-->test
        </FDID>
        <PID>
          <!--ro, opt, string, 图片ID, range:[,]-->test
        </PID>
        <name>
          <!--ro, req, string, 图片名称, range:[,]-->test
        </name>
        <status>
          <!--ro, req, enum, 建模状态, subType:string, [success#建模成功,failed#建模失败,none#尚未建模]-->success
        </status>
        <reason>
          <!--ro, opt, enum, 建模失败原因, subType:string, [noface#没有人脸,faceSizeSmall#图片尺寸太小,shadeFace#人脸被遮挡,unknow#未知错误,imageURLDownloadFailed#图片下载失败,noJpgPicture#图片不是jpg格式,errorPictureResolution#错误的图片分辨率,faceSizeBig#图片尺寸太大,diskError#磁盘错误,diskFull#磁盘满,analysisFailed#分析失败,multipleFaces#存在多个人脸], desc:当<status>==failed时存在-->noface
        </reason>
        <customHumanID>
          <!--ro, opt, string, 集成客户自定义人员ID, range:[,], desc:最小长度32-->12345678901234567890123456789012
        </customHumanID>
        <customFaceLibID>
          <!--ro, opt, string, 集成客户自定义人脸库ID, range:[,], desc:最小长度32-->12345678901234567890123456789012
        </customFaceLibID>
        <modeData>
          <!--ro, opt, string, 目标模型数据, range:[,], desc:传输过程中针对二进制非建模数据进行base64的加密处理-->test
        </modeData>
      </ModelingStatus>
      <isNoSaveFDPicture>
        <!--ro, opt, bool, 不保存人脸库图片, desc:若开启了导入图片或者建模时不保存原图功能,则需返回该节点为true,未开启则无需返回该节点-->true
      </isNoSaveFDPicture>
      <humanId>
        <!--ro, opt, string, 人员ID, range:[,]-->test
      </humanId>
      <modelStatus>
        <!--ro, opt, enum, 建模状态(旧), subType:string, [modeling#已建模,unmodeled#未建模,modelingFailed#建模失败]-->modeling
      </modelStatus>
      <FMCount>
        <!--ro, opt, int, 人脸比对成功总次数, range:[,], step:, unit:, unitType:-->1
      </FMCount>
      <importTime>
        <!--ro, opt, datetime, 入库时间-->1970-01-01T00:00:00+08:00
      </importTime>
      <UUPID>
        <!--ro, opt, string, 人脸库底库图片唯一标识ID, range:[,]-->test
      </UUPID>
      <occurrences>
        <!--ro, opt, int, 出现频次, range:[,], step:, unit:, unitType:, desc:仅搜索条件中启用频次返回,本字段才返回-->1
      </occurrences>
      <IMSIList>
        <!--ro, opt, array, IMSI列表, subType:object, range:[,], desc:若人脸库类型为允许库,必须绑定至少一个IMSI号码,最多5个-->
        <IMSIItem>
          <!--ro, opt, object, IMSI采集信息-->
          <IMSI>
            <!--ro, opt, string, IMSI号码, range:[,]-->123456789012345
          </IMSI>
          <count>
            <!--ro, opt, int, 比中次数, range:[,], step:, unit:, unitType:-->10
          </count>
          <lastFMTime>
            <!--ro, opt, datetime, 最近比对成功时间-->1970-01-01T00:00:00+08:00
          </lastFMTime>
        </IMSIItem>
      </IMSIList>
      <lastFMTime>
        <!--ro, opt, datetime, 最近比对成功时间-->1970-01-01T00:00:00+08:00
      </lastFMTime>
    </MatchElement>
  </MatchList>
</FDSearchResult>

26. 配置人脸库中的人脸数据

26.1 命令

PUT /ISAPI/Intelligent/FDLib/FDSetUp?format=json

26.2 输入参数

{
    "faceURL":  "http", 
    /*opt, string, 图片url, range:[,]*/
    "faceLibType":  "blackFD",  
    /*req, enum, 人脸库类型, subType:string, [blackFD#名单库,staticFD#静态库], desc:必填, 人脸库类型: blackFD-名单库, staticFD-静态库, string类型, 最大长度为32*/
    "FDID":  "test",    
    /*req, string, 人脸库ID, range:[,], desc:最大长度为63字节,多个人脸库用逗号隔开*/
    "FPID":  " ",   
    /*opt, string, 人脸记录ID, range:[,], desc:可选, 人脸记录ID, string类型, 如果外部传入,最长63字节, 字母数字组合, 需要保证唯一性; 如果外部不传则由设备自动生成(与非视频工号(人员ID)字段一致)*/
    "deleteFP":  true,  
    /*opt, bool, 是否删除该人脸, desc:可选,boolean,是否删除该人脸,true-是(只有删除该人脸时,才填写该字段;新增或修改人脸时,不填写该字段)*/
    "modelData":  "test",   
    /*opt, string, 目标模型数据, range:[,], desc:可选,目标模型数据,字符串类型,传输过程中针对二进制非建模数据进行base64的加密处理*/
    "PicFeaturePoints": [   
    /*opt, array, 特征图片坐标, subType:object, range:[,], 
    desc:图片特征点下发,若设备仅支持3种类型的特征点,平台下发3种以上特征点时,设备不能报错
        背景:不同设备人脸评分算法不一致,导致平台评分通过的人脸下发至设备评分不通过,无法建模
        解决方法:由上层平台采用统一的人脸评分以及特征点提取算法计算出图片的特征点并下发至设备,有了特征点可以保证设备建模成功,兼容不同设备人脸评分算法的差异性
        特征点下发方式:特征点数据编码至人脸图片数据下发、特征点数据以json参数格式随人脸图片url下发
        设备获取特征点优先级从高到低:1.图片内携带特征点 2.json格式特征点*/
        {
            "featurePointType":  "face",    
            /*req, enum, 特征点类型, subType:string, [face#人脸,leftEye#左眼,rightEye#右眼,leftMouthCorner#左嘴角,rightMouthCorner#右嘴角,nose#鼻子], desc:必填,string,特征点类型:face-人脸,leftEye-左眼,rightEye-右眼,leftMouthCorner-左嘴角,rightMouthCorner-右嘴角,nose-鼻子*/
            "coordinatePoint": {    
            /*opt, object, 点坐标*/
                "x":  1,    
                /*req, int, x坐标, range:[0,1000], step:, unit:, unitType:, desc:坐标进行归一化处理*/
                "y":  1,    
                /*req, int, y坐标, range:[0,1000], step:, unit:, unitType:, desc:坐标进行归一化处理*/
                "width":  1,    
                /*opt, int, 宽度, range:[0,1000], step:, unit:, unitType:, desc:当featurePointType为face时必填*/
                "height":  1    
                /*opt, int, 高度, range:[0,1000], step:, unit:, unitType:, desc:当featurePointType为face时必填*/
            }
        }
    ],
    "faceType":  "normalFace",  
    /*opt, enum, 人脸类型, subType:string, [normalFace#普通人脸(默认),patrolFace#巡更人脸,hijackFace#胁迫人脸,superFace#超级人脸]*/
    "saveFacePic":  true,   
    /*opt, bool, 是否保存人脸底图*/
    "leaderPermission": [1, 2, 3, 4]    
    /*opt, array, 首次认证权限, subType:int, range:[1,4], 
    desc:数组为空表示清空人员首次认证权限
    表示人员具有1,2,3,4门编号的首次认证权限*/
}

26.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

27. 添加人脸数据

27.1 命令

POST /ISAPI/Intelligent/FDLib/FaceDataRecord?format=json

27.2 输入参数

{
    "faceURL":  "test", 
    /*opt, string, 人脸url, range:[,]*/
    "faceLibType":  "blackFD",  
    /*req, enum, 人脸库类型, subType:string, [blackFD#名单库,staticFD#静态库], desc:人脸库类型: blackFD-名单库, staticFD-静态库, string类型, 最大长度为32*/
    "FDID":  "test",    
    /*req, string, 人脸库ID, range:[,], desc:人脸库ID, string类型, 最大长度为63字节,多个人脸库用逗号隔开;*/
    "FPID":  " test",   
    /*opt, string, 人脸记录ID, range:[,], desc:人脸记录ID(与非视频工号(人员ID)字段一致), string类型, 最大长度为63字节*/
    "name":  "张三",  
    /*req, string, 人脸图片对应的人员姓名, range:[,], desc:最大长度为96字节*/
    "gender":  "male",  
    /*opt, enum, 人脸图片对应的人员性别, subType:string, [male#男,female#女,unknown#未知], desc:最大长度为32*/
    "bornTime":  "2004-05-03",  
    /*req, string, 人脸图片对应的人员出生日期, range:[,], desc:最大长度为20*/
    "city":  "130100",  
    /*opt, string, 人脸图片对应的人员出生城市编号, range:[,], desc:人脸图片对应的人员出生城市编号(详见:全国各省份城市列表), string类型, 最大长度为32*/
    "certificateType ":  "ID",  
    /*opt, enum, 证件类型, subType:string, [ID#身份证,other#其他], desc:最大长度为10*/
    "certificateNumber":  "test",   
    /*opt, string, 证件号, range:[,], desc:string类型, 最大长度为32字节(由数字和字母 "0-9a-zA-Z"组成)*/
    "caseInfo":  "test",    
    /*opt, string, 备注信息, range:[,], desc:string类型, 最大长度为192字节, {dep if type == blackFD}*/
    "tag":  "aa,bb,cc,dd",  
    /*opt, string, 自定义标签, range:[,], desc:自定义标签,单个标签最大48字节,(最多4个标签, 英文逗号隔开, 最大长度为195字节), string类型, , {dep if faceLibType == blackFD}*/
    "address":  "test", 
    /*opt, string, 人员住址, range:[,], desc:最大长度为192字节, {dep if faceLibType == staticFD }*/
    "customInfo":  "test",  
    /*opt, string, 自定义信息, range:[,], desc:最大长度为192字节, {dep if faceLibType == staticFD }*/
    "modelData":  "test",   
    /*opt, string, 目标模型数据, range:[,], desc:目标模型数据,字符串类型,传输过程中针对二进制非建模数据进行base64的加密处理*/
    "transfer":  true,  
    /*opt, bool, PBG对接, 
    desc:boolean类型,PBG对接,需要设备开启微视云安全认证,为了兼容原有功能,对部分协议进行变更,
        涉及到名单添加和名单修改2个接口,协议中增加是否转存的字段,不填默认不转存,如果是web操作,需要将此字段写成需要转存,智能应用服务器1.1.0增加*/
    "operateType":  "byTerminal",   
    /*opt, enum, 操作类型, subType:string, [byTerminal#按终端操作]*/
    "terminalNoList": [1],  
    /*opt, array, type为byTerminal, subType:int, range:[,], desc:type为byTerminal,byTerminalOrg时必填,终端ID列表(目前仅支持单个终端)*/
    "PicFeaturePoints": [   
    /*opt, array, 图片特征点坐标, subType:object, range:[,]*/
        {
            "featurePointType":  "face",    
            /*req, enum, 特征点类型, subType:string, [face#人脸,leftEye#左眼,rightEye#右眼,leftMouthCorner#左嘴角,rightMouthCorner#右嘴角,nose#鼻子], desc:特征点类型:face-人脸,leftEye-左眼,rightEye-右眼,leftMouthCorner-左嘴角,rightMouthCorner-右嘴角,nose-鼻子*/
            "coordinatePoint": {    
            /*opt, object, 坐标点, desc:坐标原点位于左上方*/
                "x":  1,    
                /*req, int, x坐标, range:[0,1000], step:, unit:, unitType:, desc:坐标进行归一化处理*/
                "y":  1,    
                /*req, int, y坐标, range:[0,1000], step:, unit:, unitType:, desc:坐标进行归一化处理*/
                "width":  1,    
                /*opt, int, 宽度, range:[0,1000], step:, unit:, unitType:, desc:当featurePointType为face时必填*/
                "height":  1    
                /*opt, int, 高度, range:[0,1000], step:, unit:, unitType:, desc:当featurePointType为face时必填*/
            }
        }
    ],
    "faceType":  "normalFace",  
    /*opt, enum, 人脸类型, subType:string, [normalFace#普通人脸(默认),patrolFace#巡更人脸,hijackFace#胁迫人脸,superFace#超级人脸]*/
    "saveFacePic":  true,   
    /*opt, bool, 是否保存人脸底图*/
    "leaderPermission": [1, 2, 3, 4]    
    /*opt, array, 首次认证权限, subType:int, range:[1,4], 
    desc:数组为空表示清空人员首次认证权限
    表示人员具有1,2,3,4门编号的首次认证权限*/
}

27.3 输出参数

{
    "requestURL":  "test",  
    /*ro, opt, string, 请求URL, range:[,]*/
    "statusCode":  1,   
    /*ro, req, int, 状态码, range:[,], step:, unit:, unitType:*/
    "statusString":  "test",    
    /*ro, req, string, 状态描述, range:[,]*/
    "subStatusCode":  "test",   
    /*ro, req, string, 子状态码, range:[,]*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时*/
    "errorMsg":  "ok",  
    /*ro, opt, string, 错误描述, range:[,], desc:当statusCode不为1时*/
    "FPID":  "test",    
    /*ro, opt, string, 人脸记录ID, range:[,], desc:人脸数据添加成功之后返回的人脸记录ID, 具有唯一性, string类型,最大长度为63字节, {dep if errcode == 1 && errMsg == ok}*/
    "rowKey":  "test"   
    /*ro, opt, string, 人脸记录rowKey, range:[,], desc:人脸数据添加成功之后返回的人脸记录rowKey, 具有唯一性, string类型,最大长度为64字节, {dep if errcode == 1 && errMsg == ok*/
}

28. 修改人脸库中的人脸数据

28.1 命令

PUT /ISAPI/Intelligent/FDLib/FDSearch?format=json&FDID=1&FPID=<FPID>&faceLibType=blackFD

28.2 输入参数

{
    "faceURL":  "test", 
    /*opt, string, 人脸图片URL方式上传时输入的图片存储URL, range:[0,256]*/
    "name":  "张三",  
    /*req, string, 人脸图片对应的人员姓名, range:[0,96]*/
    "gender":  "male",  
    /*opt, enum, 人脸图片对应的人员性别, subType:string, [male#男,female#女,unknown#未知]*/
    "bornTime":  "1970-01-01+08:00",    
    /*req, date, 人脸图片对应的人员出生日期*/
    "city":  "130100",  
    /*opt, string, 人脸图片对应的人员出生城市编号(详见全国各省份城市列表), range:[,]*/
    "certificateType ":  "ID",  
    /*opt, enum, 证件类型, subType:string, [ID#身份证]*/
    "certificateNumber":  "test",   
    /*opt, string, 证件号, range:[,]*/
    "caseInfo":  "test",    
    /*opt, string, 备注信息, range:[0,192], desc:dep if type == blackFD*/
    "tag":  "aa,bb,cc,dd",  
    /*opt, string, 自定义标签, range:[0,195], desc:单个标签最大48字节,(最多4个标签,  英文逗号隔开,  最大长度为195字节), dep if faceLibType == blackFD*/
    "address":  "test", 
    /*opt, string, 人员住址, range:[0,192], desc:dep if faceLibType == staticFD*/
    "customInfo":  "test",  
    /*opt, string, 自定义信息, range:[0,192], desc:dep if faceLibType == staticFD*/
    "modelData":  "test",   
    /*opt, string, 目标模型数据, range:[,], desc:传输过程中针对二进制非建模数据进行base64的加密处理*/
    "rowKey ":  "test", 
    /*opt, string, 人脸记录数据库主键, range:[0,64], desc:根据rowKey进行查询,能提高查找效率*/
    "transfer":  true,  
    /*opt, bool, 是否转存, 
    desc:PBG对接,需要设备开启微视云安全认证,为了兼容原有功能,对部分协议进行变更,
        涉及到名单添加和名单修改2个接口,协议中增加是否转存的字段,不填默认不转存,如果是web操作,需要将此字段写成需要转存,智能应用服务器1.1.0增加*/
    "PicFeaturePoints": [   
    /*opt, array, 图片特征点下发, subType:object, range:[,], 
    desc:若设备仅支持3种类型的特征点,平台下发3种以上特征点时,设备不能报错
        背景:不同设备人脸评分算法不一致,导致平台评分通过的人脸下发至设备评分不通过,无法建模
        解决方法:由上层平台采用统一的人脸评分以及特征点提取算法计算出图片的特征点并下发至设备,有了特征点可以保证设备建模成功,兼容不同设备人脸评分算法的差异性
        特征点下发方式:特征点数据编码至人脸图片数据下发、特征点数据以json参数格式随人脸图片url下发
        设备获取特征点优先级从高到低:1.图片内携带特征点 2.json格式特征点*/
        {
            "featurePointType":  "face",    
            /*req, enum, 特征点类型, subType:string, [face#人脸,leftEye#左眼,rightEye#右眼,leftMouthCorner#左嘴角,rightMouthCorner#右嘴角,nose#鼻子]*/
            "coordinatePoint": {    
            /*opt, object, 区域, desc:坐标原点位于左上方*/
                "x":  1,    
                /*req, int, x坐标, range:[0,1000], step:, unit:, unitType:, desc:坐标进行归一化处理,归至0-1000*/
                "y":  1,    
                /*req, int, y坐标, range:[0,1000], step:, unit:, unitType:, desc:坐标进行归一化处理,归至0-1000*/
                "width":  1,    
                /*opt, int, 宽度, range:[0,1000], step:, unit:, unitType:, desc:当featurePointType为face时必填*/
                "height":  1    
                /*opt, int, 高度, range:[0,1000], step:, unit:, unitType:, desc:当featurePointType为face时必填*/
            }
        }
    ],
    "faceType":  "normalFace",  
    /*opt, enum, 人脸类型, subType:string, [normalFace#普通人脸(默认),patrolFace#巡更人脸,hijackFace#胁迫人脸,superFace#超级人脸]*/
    "saveFacePic":  true,   
    /*opt, bool, 是否保存人脸底图*/
    "leaderPermission": [1, 2, 3, 4]    
    /*opt, array, 首次认证权限, subType:int, range:[1,4], 
    desc:数组为空表示清空人员首次认证权限
    表示人员具有1,2,3,4门编号的首次认证权限*/
}

28.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

29. 删除人脸库中的人脸数据

29.1 命令

PUT /ISAPI/Intelligent/FDLib/FDSearch/Delete?format=json&FDID=1&faceLibType=blackFD

29.2 输入参数

{
    "FPID": [   
    /*opt, array, 人脸记录ID列表, subType:object, range:[,]*/
        {
            "value":  "test",   
            /*req, string, 人脸记录ID, range:[0,63]*/
            "rowKey":  "test"   
            /*opt, string, 人脸记录数据库主键, range:[0,64], desc:可选,人脸记录数据库主键,根据rowKey进行查询,能提高查找效率,string,64字节 在轻量级产品中是必填字段*/
        }
    ],
    "operateType":  "byTerminal",   
    /*opt, enum, 操作类型, subType:string, [byTerminal#按终端操作]*/
    "terminalNoList": [1]   
    /*opt, array, 终端ID列表, subType:int, range:[,], desc:可选,array,type为byTerminal,byTerminalOrg时必填,终端ID列表(目前仅支持单个终端)*/
}

29.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

30. 查询指纹信息

30.1 命令

POST /ISAPI/AccessControl/FingerPrintUpload?format=json

30.2 输入参数

{
    "FingerPrintCond": {    
    /*opt, object, 搜索条件*/
        "searchID":  "test",    
        /*req, string, 搜索记录唯一标识, range:[1,32], desc:用来确认上层客户端是否为同一个(倘若是同一个,设备记录内存,下次搜索加快速度)*/
        "employeeNo":  "test",  
        /*req, string, 指纹关联的工号(人员ID), range:[1,32]*/
        "cardReaderNo":  1, 
        /*opt, int, 读卡器编号, range:[,], step:, unit:, unitType:*/
        "fingerPrintID":  1 
        /*opt, int, 手指编号, range:[1,10], step:, unit:, unitType:*/
    }
}

30.3 输出参数

{
    "FingerPrintInfo": {    
    /*ro, opt, object, 指纹信息*/
        "searchID":  "test",    
        /*ro, req, string, 搜索记录唯一标识, range:[,]*/
        "status":  "OK",    
        /*ro, req, enum, 状态, subType:string, [OK#存在指纹,NoFP#不存在指纹]*/
        "FingerPrintList": [    
        /*ro, opt, array, 指纹列表, subType:object, range:[,]*/
            {
                "cardReaderNo":  1, 
                /*ro, req, int, 读卡器编号, range:[1,10], step:, unit:, unitType:*/
                "fingerPrintID":  1,    
                /*ro, req, int, 手指编号, range:[,], step:, unit:, unitType:*/
                "fingerType":  "normalFP",  
                /*ro, req, enum, 指纹类型, subType:string, [normalFP#普通指纹,hijackFP#胁迫指纹,patrolFP#巡更指纹,superFP#超级指纹,dismissingFP#解除指纹]*/
                "fingerData":  "test",  
                /*ro, req, string, 指纹数据, range:[,]*/
                "leaderFP": [1, 3, 5]   
                /*ro, opt, array, 是否有首次认证功能, subType:int, range:[,], desc:([1,3,5]代表指纹对于门1、门3、门5有首次认证功能)*/
            }
        ]
    }
}

31. 配置指纹信息

31.1 命令

POST /ISAPI/AccessControl/FingerPrint/SetUp?format=json

31.2 输入参数

{
    "FingerPrintCfg": { 
    /*opt, object, 指纹配置*/
        "employeeNo":  "test",  
        /*req, string, 指纹关联的工号, range:[1,32]*/
        "enableCardReader": [1, 3, 5],  
        /*req, array, 需要下发指纹的读卡器, subType:int, range:[,], desc:[1,3,5]代表需要下发给读卡器1、读卡器3、读卡器5*/
        "fingerPrintID":  1,    
        /*req, int, 手指编号, range:[1,10], step:, unit:, unitType:*/
        "deleteFingerPrint":  true, 
        /*opt, bool, 是否删除该指纹, desc:true-是(只有删除该指纹时,才填写该字段;新增或修改指纹时,不填写该字段)*/
        "fingerType":  "normalFP",  
        /*req, enum, 指纹类型, subType:string, [normalFP#普通指纹,hijackFP#胁迫指纹,patrolFP#巡更指纹,superFP#超级指纹,dismissingFP#解除指纹]*/
        "fingerData":  "test",  
        /*opt, string, 指纹数据, range:[,], desc:base64处理,如果需要加密,则指纹数据仅做一次base64处理,直接进行aes加密*/
        "leaderFP": [1, 3, 5],  
        /*opt, array, 是否有首次认证功能, subType:int, range:[1,5], desc:([1,3,5]代表指纹对于门1、门3、门5有首次认证功能)*/
        "checkEmployeeNo":  true    
        /*opt, bool, 设备是否进行工号(人员ID)存在校验*/
    }
}

31.3 输出参数

{
    "FingerPrintStatus": {  
    /*ro, opt, object, 指纹状态*/
        "status":  "success",   
        /*ro, opt, enum, 状态, subType:string, [success#成功,failed#失败], desc:(对于实际下发指纹数据到读卡器时,不会返回该字段。如果仅是修改指纹参数(不涉及到指纹数据下发到读卡器)或删除指纹,才会返回该字段)*/
        "StatusList": [ 
        /*ro, opt, array, 状态列表, subType:object, range:[,], desc:(对于实际下发指纹数据到读卡器时,才会返回该列表。如果仅是修改指纹参数(不涉及到指纹数据下发到读卡器)或删除指纹,则不会返回该列表)*/
            {
                "id":  1,   
                /*ro, opt, int, 读卡器编号, range:[,], step:, unit:, unitType:*/
                "cardReaderRecvStatus":  "1",   
                /*ro, opt, enum, 指纹读卡器状态, subType:, [0#失败,1#成功,2#该指纹模组不在线,3#重试或指纹质量差,4#内存已满,5#已存在该指纹,7#非法指纹ID,8#该指纹模组无需配置,10#指纹读卡器版本过低]*/
                "errorMsg":  "test" 
                /*ro, opt, string, 下发错误信息, range:[1,32], desc:当cardReaderRecvStatus为5时,表示已存在指纹对应的工号(人员ID)*/
            }
        ]
    }
}

32. 获取门禁主机参数

32.1 命令

GET /ISAPI/AccessControl/AcsCfg?format=json

32.2 输入参数

32.3 输出参数

{
    "AcsCfg": { 
    /*ro, req, object, 门禁主机参数配置*/
        "RS485Backup":  true,   
        /*ro, opt, bool, 是否启用下行RS485通信备份功能:false-不启用*/
        "showCapPic":  true,    
        /*ro, opt, bool, 是否显示抓拍图片*/
        "showUserInfo":  true,  
        /*ro, opt, bool, 是否显示用户信息*/
        "overlayUserInfo":  true,   
        /*ro, opt, bool, 是否叠加用户信息*/
        "voicePrompt":  true,   
        /*ro, opt, bool, 是否启用语音提示*/
        "uploadCapPic":  true,  
        /*ro, opt, bool, 联动抓拍是否上传图片*/
        "saveCapPic":  true,    
        /*ro, opt, bool, 是否保存抓拍图片*/
        "inputCardNo":  true,   
        /*ro, opt, bool, 是否是否允许按键输入卡号*/
        "enable3G4G":  true,    
        /*ro, opt, bool, 3G4G使能*/
        "protocol":  "Private", 
        /*ro, opt, enum, 读卡器通信协议类型, subType:string, [Private#私有协议,OSDP#OSDP协议]*/
        "enableCaptureCertificate":  true,  
        /*ro, opt, bool, 是否启动证件抓拍, desc:false-不启动,true-启动, 无该字段不支持*/
        "showPicture":  true,   
        /*ro, opt, bool, 是否显示认证照片*/
        "showEmployeeNo":  true,    
        /*ro, opt, bool, 是否显示认证工号*/
        "showName":  true,  
        /*ro, opt, bool, 是否显示认证姓名*/
        "thermalEnabled":  true,    
        /*ro, opt, bool, 测温开关使能*/
        "thermalMode":  true,   
        /*ro, opt, bool, 是否开启仅测温模式*/
        "thermalPictureEnabled":  true, 
        /*ro, opt, bool, 仅测温模式可见光图片上传使能(用于控制抓拍图片和热成像可见光图片是否上传)*/
        "thermalIp":  "192.168.1.1",    
        /*ro, opt, string, 热成像测温仪ip, range:[,], desc:门禁设备采用和卡片机定制的协议集成的,只需要一个ip地址即可添加到网络;对于安检门设备,专门用一个网口连接热成像测温仪,故不需要配置*/
        "highestThermalThreshold":  37.3,   
        /*ro, opt, float, 温度阈值上限, range:[,], step:, unit:, unitType:*/
        "lowestThermalThreshold":  38.5,    
        /*ro, opt, float, 温度阈值下限, range:[,], step:, unit:, unitType:*/
        "thermalDoorEnabled":  false,   
        /*ro, opt, bool, 温度阈值开门使能, desc:超过温度阈值上限(highestThermalThreshold)/低于温度阈值下限(lowestThermalThreshold)后是否开门,true-开门,false-不开门(默认)*/
        "QRCodeEnabled":  false,    
        /*ro, opt, bool, 二维码功能使能*/
        "remoteCheckDoorEnabled":  false,   
        /*ro, opt, bool, 远程核验是否控制门的开关*/
        "checkChannelType":  "Ezviz",   
        /*ro, opt, enum, 核验通道类型, subType:string, [Ezviz#萤石通道,ISUP#ISUP(原EHome)通道,ISAPI#ISAPI通道,PrivateSDK#私有SDK通道,ISAPIListen#ISAPI监听], desc:当remoteCheckDoorEnabled字段为true时,该字段生效*/
        "channelIp":  "test",   
        /*ro, opt, string, 核验通道ip, range:[,], desc:当checkChannelType字段为PrivateSDK时,该字段生效*/
        "uploadVerificationPic":  true, 
        /*ro, opt, bool, 认证是否上传图片*/
        "saveVerificationPic":  true,   
        /*ro, opt, bool, 是否保存认证图片*/
        "saveFacePic":  true,   
        /*ro, opt, bool, 是否保存人脸底图*/
        "thermalUnit":  "celsius",  
        /*ro, opt, enum, 测温单位配置, subType:string, [celsius#摄氏度,fahrenheit#华氏度]*/
        "highestThermalThresholdF":  1.0,   
        /*ro, opt, float, 华氏度温度阈值上限, range:[,], step:, unit:, unitType:, desc:单位:华氏度,精度:小数点后一位。用于判断超出该阈值门禁设备是否开门,温度字段若未0表明不启用该字段,需增加注释*/
        "lowestThermalThresholdF":  1.0,    
        /*ro, opt, float, 华氏度温度阈值下限, range:[,], step:, unit:, unitType:, desc:单位:华氏度,精度:小数点后一位。用于判断超出该阈值门禁设备是否开门,温度字段若未0表明不启用该字段,需增加注释*/
        "thermalCompensation":  1.0 
        /*ro, opt, float, 温度补偿, range:[,], step:, unit:, unitType:, desc:单位根据thermalUnit字段确定,若thermalUnit字段不存在认为单位为摄氏度*/
    }
}

33. 配置门禁主机参数

33.1 命令

PUT /ISAPI/AccessControl/AcsCfg?format=json

33.2 输入参数

{
    "AcsCfg": { 
    /*req, object, 门禁主机参数配置*/
        "RS485Backup":  true,   
        /*opt, bool, 是否启用下行RS485通信备份功能:false-不启用*/
        "showCapPic":  true,    
        /*opt, bool, 是否显示抓拍图片*/
        "showUserInfo":  true,  
        /*opt, bool, 是否显示用户信息*/
        "overlayUserInfo":  true,   
        /*opt, bool, 是否叠加用户信息*/
        "voicePrompt":  true,   
        /*opt, bool, 是否启用语音提示*/
        "uploadCapPic":  true,  
        /*opt, bool, 联动抓拍是否上传图片*/
        "saveCapPic":  true,    
        /*opt, bool, 是否保存抓拍图片*/
        "inputCardNo":  true,   
        /*opt, bool, 是否是否允许按键输入卡号*/
        "enable3G4G":  true,    
        /*opt, bool, 3G4G使能*/
        "protocol":  "Private", 
        /*opt, enum, 读卡器通信协议类型, subType:string, [Private#私有协议,OSDP#OSDP协议]*/
        "enableCaptureCertificate":  true,  
        /*opt, bool, 是否启动证件抓拍, desc:false-不启动,true-启动, 无该字段不支持*/
        "showPicture":  true,   
        /*opt, bool, 是否显示认证照片*/
        "showEmployeeNo":  true,    
        /*opt, bool, 是否显示认证工号*/
        "showName":  true,  
        /*opt, bool, 是否显示认证姓名*/
        "thermalEnabled":  true,    
        /*opt, bool, 测温开关使能*/
        "thermalMode":  true,   
        /*opt, bool, 是否开启仅测温模式*/
        "thermalPictureEnabled":  true, 
        /*opt, bool, 仅测温模式可见光图片上传使能(用于控制抓拍图片和热成像可见光图片是否上传)*/
        "thermalIp":  "192.168.1.1",    
        /*opt, string, 热成像测温仪ip, range:[,], desc:门禁设备采用和卡片机定制的协议集成的,只需要一个ip地址即可添加到网络;对于安检门设备,专门用一个网口连接热成像测温仪,故不需要配置*/
        "highestThermalThreshold":  37.3,   
        /*opt, float, 温度阈值上限, range:[,], step:, unit:, unitType:*/
        "lowestThermalThreshold":  38.5,    
        /*opt, float, 温度阈值下限, range:[,], step:, unit:, unitType:*/
        "thermalDoorEnabled":  false,   
        /*opt, bool, 温度阈值开门使能, desc:超过温度阈值上限(highestThermalThreshold)/低于温度阈值下限(lowestThermalThreshold)后是否开门,true-开门,false-不开门(默认)*/
        "QRCodeEnabled":  false,    
        /*opt, bool, 二维码功能使能*/
        "remoteCheckDoorEnabled":  false,   
        /*opt, bool, 远程核验是否控制门的开关*/
        "checkChannelType":  "Ezviz",   
        /*opt, enum, 核验通道类型, subType:string, [Ezviz#萤石通道,ISUP#ISUP(原EHome)通道,ISAPI#ISAPI通道,PrivateSDK#私有SDK通道,ISAPIListen#ISAPI监听通道], desc:当remoteCheckDoorEnabled字段为true时,该字段生效*/
        "channelIp":  "test",   
        /*opt, string, 核验通道ip, range:[,], desc:当checkChannelType字段为PrivateSDK时,该字段生效*/
        "uploadVerificationPic":  true, 
        /*opt, bool, 认证是否上传图片*/
        "saveVerificationPic":  true,   
        /*opt, bool, 是否保存认证图片*/
        "saveFacePic":  true,   
        /*opt, bool, 是否保存人脸底图*/
        "thermalUnit":  "celsius",  
        /*opt, enum, 测温单位配置, subType:string, [celsius#摄氏度,fahrenheit#华氏度]*/
        "highestThermalThresholdF":  1.0,   
        /*opt, float, 华氏度温度阈值上限, range:[,], step:, unit:, unitType:, desc:单位:华氏度,精度:小数点后一位。用于判断超出该阈值门禁设备是否开门,温度字段若未0表明不启用该字段,需增加注释*/
        "lowestThermalThresholdF":  1.0,    
        /*opt, float, 华氏度温度阈值下限, range:[,], step:, unit:, unitType:, desc:单位:华氏度,精度:小数点后一位。用于判断超出该阈值门禁设备是否开门,温度字段若未0表明不启用该字段,需增加注释*/
        "thermalCompensation":  1.0 
        /*opt, float, 温度补偿, range:[,], step:, unit:, unitType:, desc:单位根据thermalUnit字段确定,若thermalUnit字段不存在认为单位为摄氏度*/
    }
}

33.3 输出参数

{
    "requestURL":  "test",  
    /*ro, opt, string, URI, range:[,]*/
    "statusCode":  "test",  
    /*ro, opt, string, 状态码, range:[,]*/
    "statusString":  "test",    
    /*ro, opt, string, 状态描述, range:[,]*/
    "subStatusCode":  "test",   
    /*ro, opt, string, 子状态码, range:[,]*/
    "errorCode":  1,    
    /*ro, req, int, 错误码, range:[,], step:, unit:, unitType:*/
    "errorMsg":  "ok"   
    /*ro, req, string, 错误信息, range:[,]*/
}

34. 配置远程核验

34.1 命令

PUT /ISAPI/AccessControl/remoteCheck?format=json

34.2 输入参数

{
    "RemoteCheck": {    
    /*req, object, 远程核验*/
        "serialNo":  1, 
        /*req, int, 事件流水号, range:[,], step:, unit:, unitType:, desc:与事件上传的流水号保持一致*/
        "checkResult":  "success",  
        /*req, enum, 核验结果, subType:string, [success#核验成功,failed#核验失败]*/
        "info":  "test" 
        /*opt, string, 附加信息, range:[1,32]*/
    }
}

34.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

35. 获取就地控制器参数能力

35.1 命令

GET /ISAPI/AccessControl/localController/capabilities

35.2 输入参数

35.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<LocalController xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 就地控制器参数能力, attr:version{req, string, 协议版本, range:[,]}-->
  <localControllerID min="1" max="64">
    <!--ro, req, int, 就地控制器编号, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
  </localControllerID>
  <devName min="1" max="32">
    <!--ro, req, string, 设备名称, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
  </devName>
  <devType opt="1door,2doors,4doors">
    <!--ro, req, string, 设备类型, range:[,], attr:opt{req, string, 取值范围, range:[,]}-->1door
  </devType>
  <offlineWorkMode opt="notSupport,configuration,autoLearn">
    <!--ro, req, string, 离线工作模式, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:notSupport-不支持,configuration-配置模式, autoLearn-自学习模式-->configuration
  </offlineWorkMode>
  <networkEnable>
    <!--ro, req, bool, 是否启用网络通信-->true
  </networkEnable>
  <ipAddress min="1" max="64">
    <!--ro, opt, string, IPV4地址, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
  </ipAddress>
  <subnetMask min="1" max="64">
    <!--ro, opt, string, IPV4掩码地址, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
  </subnetMask>
  <ipv6Address min="1" max="64">
    <!--ro, opt, string, IPV6地址, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
  </ipv6Address>
  <bitMask min="1" max="64">
    <!--ro, opt, string, IPV6掩码地址, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
  </bitMask>
  <DefaultGateway>
    <!--ro, opt, object, 默认网关-->
    <ipAddress min="1" max="64">
      <!--ro, opt, string, IPV4地址, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </ipAddress>
    <ipv6Address min="1" max="64">
      <!--ro, opt, string, IPV6地址, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </ipv6Address>
  </DefaultGateway>
  <portNo min="1" max="65535">
    <!--ro, req, int, 端口, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->0
  </portNo>
</LocalController>

36. 配置添加就地控制器

36.1 命令

PUT /ISAPI/AccessControl/localController/addDevice

36.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<LocalController xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--opt, object, 添加就地控制器, attr:version{req, string, 协议版本, range:[,]}-->
  <localControllerID>
    <!--req, int, 就地控制器编号, range:[1,64], step:1, unit:, unitType:-->1
  </localControllerID>
  <devName>
    <!--req, string, 设备名称, range:[1,32]-->test
  </devName>
  <devType>
    <!--req, enum, 设备类型, subType:string, [1door#1门,2doors#2门,4doors#4门]-->1door
  </devType>
  <offlineWorkMode>
    <!--req, enum, 离线工作模式, subType:string, [notSupport#不支持,configuration#配置模式,autoLearn#自学习模式]-->configuration
  </offlineWorkMode>
  <networkEnable>
    <!--req, bool, 是否启用网络通信-->true
  </networkEnable>
  <ipAddress>
    <!--opt, string, IPV4地址, range:[1,64]-->test
  </ipAddress>
  <subnetMask>
    <!--opt, string, IPV4掩码地址, range:[1,64]-->test
  </subnetMask>
  <ipv6Address>
    <!--opt, string, IPV6地址, range:[1,64]-->test
  </ipv6Address>
  <bitMask>
    <!--opt, string, IPV6掩码地址, range:[1,64]-->test
  </bitMask>
  <DefaultGateway>
    <!--opt, object, 网关地址-->
    <ipAddress>
      <!--opt, string, IPV4地址, range:[1,64]-->test
    </ipAddress>
    <ipv6Address>
      <!--opt, string, IPV6地址, range:[1,64]-->test
    </ipv6Address>
  </DefaultGateway>
  <portNo>
    <!--req, int, 端口号, range:[1,65535], step:1, unit:, unitType:-->1
  </portNo>
</LocalController>

36.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

37. 获取就地控制器参数

37.1 命令

GET /ISAPI/AccessControl/localController/localControllerID/<localControllerID>

37.2 输入参数

37.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<LocalController xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 添加就地控制器, attr:version{req, string, 协议版本, range:[,]}-->
  <localControllerID>
    <!--ro, req, int, 就地控制器编号, range:[1,64], step:1, unit:, unitType:-->1
  </localControllerID>
  <devName>
    <!--ro, req, string, 设备名称, range:[1,32]-->test
  </devName>
  <devType>
    <!--ro, req, enum, 设备类型, subType:string, [1door#1门,2doors#2门,4doors#4门]-->1door
  </devType>
  <offlineWorkMode>
    <!--ro, req, enum, 离线工作模式, subType:string, [notSupport#不支持,configuration#配置模式,autoLearn#自学习模式]-->configuration
  </offlineWorkMode>
  <networkEnable>
    <!--ro, req, bool, 是否启用网络通信-->true
  </networkEnable>
  <ipAddress>
    <!--ro, opt, string, IPV4地址, range:[1,64]-->test
  </ipAddress>
  <subnetMask>
    <!--ro, opt, string, IPV4掩码地址, range:[1,64]-->test
  </subnetMask>
  <ipv6Address>
    <!--ro, opt, string, IPV6地址, range:[1,64]-->test
  </ipv6Address>
  <bitMask>
    <!--ro, opt, string, IPV6掩码地址, range:[1,64]-->test
  </bitMask>
  <DefaultGateway>
    <!--ro, opt, object, 网关地址-->
    <ipAddress>
      <!--ro, opt, string, IPV4地址, range:[1,64]-->test
    </ipAddress>
    <ipv6Address>
      <!--ro, opt, string, IPV6地址, range:[1,64]-->test
    </ipv6Address>
  </DefaultGateway>
  <portNo>
    <!--ro, req, int, 端口号, range:[1,65535], step:1, unit:, unitType:-->1
  </portNo>
</LocalController>

38. 配置就地控制器参数

38.1 命令

PUT /ISAPI/AccessControl/localController/localControllerID/<localControllerID>

38.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<LocalController xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--opt, object, 添加就地控制器, attr:version{req, string, 协议版本, range:[,]}-->
  <localControllerID>
    <!--req, int, 就地控制器编号, range:[1,64], step:1, unit:, unitType:-->1
  </localControllerID>
  <devName>
    <!--req, string, 设备名称, range:[1,32]-->test
  </devName>
  <devType>
    <!--req, enum, 设备类型, subType:string, [1door#1门,2doors#2门,4doors#4门]-->1door
  </devType>
  <offlineWorkMode>
    <!--req, enum, 离线工作模式, subType:string, [notSupport#不支持,configuration#配置模式,autoLearn#自学习模式]-->configuration
  </offlineWorkMode>
  <networkEnable>
    <!--req, bool, 是否启用网络通信-->true
  </networkEnable>
  <ipAddress>
    <!--opt, string, IPV4地址, range:[1,64]-->test
  </ipAddress>
  <subnetMask>
    <!--opt, string, IPV4掩码地址, range:[1,64]-->test
  </subnetMask>
  <ipv6Address>
    <!--opt, string, IPV6地址, range:[1,64]-->test
  </ipv6Address>
  <bitMask>
    <!--opt, string, IPV6掩码地址, range:[1,64]-->test
  </bitMask>
  <DefaultGateway>
    <!--opt, object, 网关地址-->
    <ipAddress>
      <!--opt, string, IPV4地址, range:[1,64]-->test
    </ipAddress>
    <ipv6Address>
      <!--opt, string, IPV6地址, range:[1,64]-->test
    </ipv6Address>
  </DefaultGateway>
  <portNo>
    <!--req, int, 端口号, range:[1,65535], step:1, unit:, unitType:-->1
  </portNo>
</LocalController>

38.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

39. 删除单个就地控制器

39.1 命令

DELETE /ISAPI/AccessControl/localController/localControllerID/<localControllerID>

39.2 输入参数

39.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

40. 删除所有就地控制器

40.1 命令

DELETE /ISAPI/AccessControl/localController

40.2 输入参数

40.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

41. 获取就地控制器控制能力

41.1 命令

GET /ISAPI/AccessControl/localController/control/capabilities

41.2 输入参数

41.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<LocalControllerControl xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 就地控制器控制能力, attr:version{req, string, 协议版本, range:[,]}-->
  <commandType opt="restore,reboot">
    <!--ro, req, string, 控制命令类型, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:restore-恢复,reboot-重启-->restore
  </commandType>
</LocalControllerControl>

42. 配置就地控制器控制命令

42.1 命令

PUT /ISAPI/AccessControl/localController/control/localControllerID/<localControllerID>

42.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<LocalControllerControl xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--opt, object, 就地控制器控制命令, attr:version{req, string, 协议版本, range:[,]}-->
  <commandType>
    <!--req, enum, 控制命令类型, subType:string, [restore#恢复,reboot#重启]-->restore
  </commandType>
</LocalControllerControl>

42.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

43. 获取USB设备状态能力

43.1 命令

GET /ISAPI/AccessControl/USBStatus/capabilities

43.2 输入参数

43.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<USBStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, USB设备状态能力, attr:version{req, string, 协议版本, range:[,]}-->
  <connectStatus opt="connected,disconnected">
    <!--ro, req, string, 设备连接状态, range:[,], attr:opt{req, string, 取值范围, range:[,]}-->test
  </connectStatus>
  <DeviceInfo>
    <!--ro, opt, object, 设备信息-->
    <deviceName min="1" max="32">
      <!--ro, opt, string, 设备名称, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </deviceName>
  </DeviceInfo>
</USBStatus>

44. 获取USB设备状态

44.1 命令

GET /ISAPI/AccessControl/USBStatus/USBNumber/<USBID>

44.2 输入参数

44.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<USBStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, USB设备状态, attr:version{req, string, 协议版本, range:[,]}-->
  <connectStatus>
    <!--ro, req, enum, 设备连接状态, subType:string, [connected#连接,disconnected#未连接]-->connected
  </connectStatus>
  <DeviceInfo>
    <!--ro, opt, object, 设备信息-->
    <deviceName>
      <!--ro, opt, string, 设备名称, range:[1,32]-->test
    </deviceName>
  </DeviceInfo>
</USBStatus>

45. 获取USB控制能力

45.1 命令

GET /ISAPI/AccessControl/USBControl/capabilities

45.2 输入参数

45.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<USBControl xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, USB控制能力, attr:version{req, string, 协议版本, range:[,]}-->
  <commandType opt="commonParamImport,commonParamExport,cardParamImport,cardParamExport,attendanceParamExport">
    <!--ro, req, string, 命令类型, range:[,], attr:opt{req, string, 取值范围, range:[,]}-->test
  </commandType>
</USBControl>

46. 配置USB控制

46.1 命令

PUT /ISAPI/AccessControl/USBControl/USBNumber/<USBID>

46.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<USBControl xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--opt, object, USB控制, attr:version{req, string, 协议版本, range:[,]}-->
  <commandType>
    <!--req, enum, 命令类型, subType:string, [commonParamImport#通用参数导入,commonParamExport#通用参数导出,cardParamImport#卡参数导入,cardParamExport#卡参数导出,attendanceParamExport#考勤参数导出]-->commonParamImport
  </commandType>
</USBControl>

46.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

47. 获取USB控制进度能力

47.1 命令

GET /ISAPI/AccessControl/USBControlProgress/capabilities

47.2 输入参数

47.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<USBControlProgress xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, USB控制进度能力, attr:version{req, string, 协议版本, range:[,]}-->
  <operationProgress min="0" max="100">
    <!--ro, req, int, 操作进度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->0
  </operationProgress>
</USBControlProgress>

48. 获取USB控制进度

48.1 命令

GET /ISAPI/AccessControl/USBControlProgress/USBNumber/<USBID>

48.2 输入参数

48.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<USBControlProgress xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, USB控制进度, attr:version{req, string, 协议版本, range:[,]}-->
  <operationProgress>
    <!--ro, req, int, 操作进度, range:[0,100], step:1, unit:, unitType:-->0
  </operationProgress>
</USBControlProgress>

49. 获取韦根参数能力

49.1 命令

GET /ISAPI/AccessControl/WiegandCfg/capabilities

49.2 输入参数

49.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<WiegandCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 韦根配置, attr:version{req, string, 协议版本, range:[,]}-->
  <wiegandNo min="0" max="4">
    <!--ro, opt, int, 韦根接口编号, range:[0,4], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:韦根编号为0表示针对主机的韦根参数配置-->1
  </wiegandNo>
  <communicateDirection opt="receive,send">
    <!--ro, opt, enum, 通信方向, subType:string, [receive#接收,send#发送], attr:opt{req, string, 取值范围, range:[,]}-->receive
  </communicateDirection>
  <wiegandMode opt="wiegand26,wiegand34,wiegand27,wiegand35,Corporate1000_35,Corporate1000_48,H10302_37,H10304_37,wiegand_26CSN,H103130_32CSN,wiegand_56CSN,wiegand_58">
    <!--ro, opt, enum, 韦根模式, subType:string, [wiegand26#韦根26,wiegand34#韦根34,wiegand27#韦根27,wiegand35#韦根35,Corporate1000_35#韦根Corporate 1000 35bits,Corporate1000_48#韦根Corporate 1000 48bits,H10302_37#韦根H10302 37bits,H10304_37#韦根H10304 37bits,wiegand_26CSN#韦根26 CSN,H103130_32CSN#韦根H103130 32bits CSN,wiegand_56CSN#韦根56 CSN,wiegand_58#韦根58], attr:opt{req, string, 取值范围, range:[,]}-->wiegand26
  </wiegandMode>
  <signalInterval min="1" max="20">
    <!--ro, opt, int, 韦根信号发送间隔, range:[1,20], step:, unit:, unitType:时间, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:单位 ms-->1
  </signalInterval>
  <enable opt="true,false">
    <!--ro, opt, bool, 使能开关, attr:opt{req, string, 取值范围, range:[,]}-->true
  </enable>
  <pulseDuration min="1" max="10">
    <!--ro, opt, int, 脉冲宽度, range:[1,10], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:单位us-->1
  </pulseDuration>
  <facilityCodeEnabled opt="true,false">
    <!--ro, opt, bool, facilityCode使能, attr:opt{req, string, 取值范围, range:[,]}-->true
  </facilityCodeEnabled>
  <facilityCode min="0" max="65535">
    <!--ro, opt, int, facilityCode, range:[0,65535], step:, unit:, unitType:, dep:and,{$.WiegandCfg.facilityCodeEnabled,eq,true}, attr:min{req, int, 最小值, range:[0,65535], step:, unit:, unitType:},max{req, int, 最大值, range:[0,65535], step:, unit:, unitType:}, 
desc:当wiegandMode为输出时,facilityCode可配置,且生效(用于设备输出卡号+facilityCode至三方设备进行校验)
当wiegandMode为输入时,facilityCode可配置,但不生效(即设备接收韦根数据时,不对输入的facilityCode进行校验)-->1
  </facilityCode>
</WiegandCfg>

50. 获取韦根参数

50.1 命令

GET /ISAPI/AccessControl/WiegandCfg/wiegandNo/<wiegandID>

50.2 输入参数

50.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<WiegandCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 韦根参数, attr:version{req, string, 协议版本, range:[,]}-->
  <communicateDirection>
    <!--ro, req, enum, 通信方向, subType:string, [receive#接收,send#发送]-->receive
  </communicateDirection>
  <wiegandMode>
    <!--ro, opt, enum, 韦根模式, subType:string, [wiegand26#韦根26,wiegand34#韦根34,wiegand27#韦根27,wiegand35#韦根35,Corporate1000_35#韦根Corporate 1000 35bits,Corporate1000_48#韦根Corporate 1000 48bits,H10302_37#韦根H10302 37bits,H10304_37#韦根H10304 37bits,wiegand_26CSN#韦根26 CSN,H103130_32CSN#韦根H103130 32bits CSN,wiegand_56CSN#韦根56 CSN,wiegand_58#韦根58]-->wiegand26
  </wiegandMode>
  <signalInterval>
    <!--ro, opt, int, 韦根信号发送间隔, range:[1,20], step:, unit:, unitType:, desc:单位 ms-->1
  </signalInterval>
  <enable>
    <!--ro, opt, bool, 使能开关-->true
  </enable>
  <pulseDuration>
    <!--ro, opt, int, 脉冲宽度, range:[1,10], step:, unit:, unitType:, desc:单位 us-->1
  </pulseDuration>
  <facilityCodeEnabled>
    <!--ro, opt, bool, facilityCode使能-->true
  </facilityCodeEnabled>
  <facilityCode>
    <!--ro, opt, int, facilityCode, range:[0,65535], step:, unit:, unitType:, dep:and,{$.WiegandCfg.facilityCodeEnabled,eq,true}, 
desc:当wiegandMode为输出时,facilityCode可配置,且生效(用于设备输出卡号+facilityCode至三方设备进行校验)
当wiegandMode为输入时,facilityCode可配置,但不生效(即设备接收韦根数据时,不对输入的facilityCode进行校验)-->1
  </facilityCode>
</WiegandCfg>

51. 配置韦根参数

51.1 命令

PUT /ISAPI/AccessControl/WiegandCfg/wiegandNo/<wiegandID>

51.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<WiegandCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--wo, req, object, 韦根参数, attr:version{req, string, 协议版本, range:[,]}-->
  <communicateDirection>
    <!--wo, req, enum, 通信方向, subType:string, [receive#接收,send#发送]-->receive
  </communicateDirection>
  <wiegandMode>
    <!--wo, opt, enum, 韦根模式, subType:string, [wiegand26#韦根26,wiegand34#韦根34,wiegand27#韦根27,wiegand35#韦根35,Corporate1000_35#韦根Corporate 1000 35bits,Corporate1000_48#韦根Corporate 1000 48bits,H10302_37#韦根H10302 37bits,H10304_37#韦根H10304 37bits,wiegand_26CSN#韦根26 CSN,H103130_32CSN#韦根H103130 32bits CSN,wiegand_56CSN#韦根56 CSN,wiegand_58#韦根58]-->wiegand26
  </wiegandMode>
  <signalInterval>
    <!--wo, opt, int, 韦根信号发送间隔, range:[1,20], step:, unit:, unitType:, desc:单位 ms-->1
  </signalInterval>
  <enable>
    <!--wo, opt, bool, 使能开关-->true
  </enable>
  <pulseDuration>
    <!--wo, opt, int, 脉冲宽度, range:[1,10], step:, unit:, unitType:, desc:单位 us-->1
  </pulseDuration>
  <facilityCodeEnabled>
    <!--ro, opt, bool, facilityCode使能-->true
  </facilityCodeEnabled>
  <facilityCode>
    <!--ro, opt, int, facilityCode, range:[0,65535], step:, unit:, unitType:, dep:and,{$.WiegandCfg.facilityCodeEnabled,eq,true}, 
desc:当wiegandMode为输出时,facilityCode可配置,且生效(用于设备输出卡号+facilityCode至三方设备进行校验)
当wiegandMode为输入时,facilityCode可配置,但不生效(即设备接收韦根数据时,不对输入的facilityCode进行校验)-->1
  </facilityCode>
</WiegandCfg>

51.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

52. 获取韦根规则配置能力

52.1 命令

GET /ISAPI/AccessControl/WiegandRuleCfg/capabilities

52.2 输入参数

52.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<WiegandRuleCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 韦根规则配置能力, attr:version{req, string, 协议版本, range:[,]}-->
  <name min="1" max="10">
    <!--ro, req, string, 韦根名称, range:[1,32], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
  </name>
  <CustomerCardIn>
    <!--ro, opt, object, 消费卡输入-->
    <totalLength min="1" max="10">
      <!--ro, req, int, 韦根总长度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </totalLength>
    <checkMethod opt="parityCheck,xorCheck,noCheck,">
      <!--ro, req, enum, 校验方式, subType:string, [parityCheck#奇偶校验规则,xorCheck#异或校验配置规则,noCheck#无校验], attr:opt{req, string, 取值范围, range:[,]}-->parityCheck
    </checkMethod>
    <ParityCheck>
      <!--ro, opt, object, 奇偶校验配置规则, desc:校验方式为parityCheck时存在-->
      <oddBeginBit min="1" max="10">
        <!--ro, opt, int, 奇校验开始位, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
      </oddBeginBit>
      <oddLength min="1" max="10">
        <!--ro, opt, int, 奇校验长度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
      </oddLength>
      <evenBeginBit min="1" max="10">
        <!--ro, opt, int, 偶校验开始位, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
      </evenBeginBit>
      <evenLength min="1" max="10">
        <!--ro, opt, int, 偶校验长度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
      </evenLength>
    </ParityCheck>
    <XorCheck>
      <!--ro, opt, object, 异或校验配置规则, desc:校验方式为xorCheck时存在-->
      <xorBeginBit min="1" max="10">
        <!--ro, opt, int, 异或校验开始位, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
      </xorBeginBit>
      <xorPerLength min="1" max="10">
        <!--ro, opt, int, 异或校验每组长度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
      </xorPerLength>
      <xorTotalLength min="1" max="10">
        <!--ro, opt, int, 异或校验数据位总长度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
      </xorTotalLength>
    </XorCheck>
    <cardIdBeginBit min="1" max="10">
      <!--ro, req, int, 卡号开始位, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </cardIdBeginBit>
    <cardIdLength min="1" max="10">
      <!--ro, req, int, 卡号长度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </cardIdLength>
    <siteCodeBeginBit min="1" max="10">
      <!--ro, req, int, 现场码开始位, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </siteCodeBeginBit>
    <siteCodeLength min="1" max="10">
      <!--ro, req, int, 现场码长度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </siteCodeLength>
    <oemBeginBit min="1" max="10">
      <!--ro, req, int, OEM开始位, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </oemBeginBit>
    <oemLength min="1" max="10">
      <!--ro, req, int, OEM长度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </oemLength>
    <manufacturerCodeBeginBit min="1" max="10">
      <!--ro, req, int, 发行码开始位, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </manufacturerCodeBeginBit>
    <manufacturerCodeLength min="1" max="10">
      <!--ro, req, int, 发行码长度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </manufacturerCodeLength>
  </CustomerCardIn>
  <CustomerCardOut>
    <!--ro, opt, object, 消费卡输出-->
    <CardContentList size="4">
      <!--ro, opt, array, 卡内容列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
      <Action>
        <!--ro, opt, object, 卡信息-->
        <No min="1" max="10">
          <!--ro, req, int, 编号, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
        </No>
        <type opt="cardId,siteCode,oem,manufacturerCode">
          <!--ro, req, enum, 类型, subType:string, [cardId#卡片ID,siteCode#现场码,oem#OEM号,manufacturerCode#发行码], attr:opt{req, string, 取值范围, range:[,]}-->cardId
        </type>
        <length min="1" max="10">
          <!--ro, req, int, 对应十进制数据长度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
        </length>
      </Action>
    </CardContentList>
  </CustomerCardOut>
</WiegandRuleCfg>

53. 获取韦根规则配置

53.1 命令

GET /ISAPI/AccessControl/WiegandRuleCfg

53.2 输入参数

53.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<WiegandRuleCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 韦根规则配置, attr:version{req, string, 协议版本, range:[,]}-->
  <name>
    <!--ro, req, string, 韦根名称, range:[,]-->test
  </name>
  <CustomerCardIn>
    <!--ro, opt, object, 消费卡输入-->
    <totalLength>
      <!--ro, req, int, 韦根总长度, range:[,], step:, unit:, unitType:, desc:当该字段传递的值为0时,则清除自定义的韦根规则设置-->1
    </totalLength>
    <checkMethod>
      <!--ro, req, enum, 校验方式, subType:string, [parityCheck#奇偶校验配置规则,xorCheck#异或校验配置规则,noCheck#无校验]-->parityCheck
    </checkMethod>
    <ParityCheck>
      <!--ro, opt, object, 奇偶校验配置规则, desc:校验方式为parityCheck时存在-->
      <oddBeginBit>
        <!--ro, opt, int, 奇校验开始位, range:[,], step:, unit:, unitType:-->1
      </oddBeginBit>
      <oddLength>
        <!--ro, opt, int, 奇校验长度, range:[,], step:, unit:, unitType:-->1
      </oddLength>
      <evenBeginBit>
        <!--ro, opt, int, 偶校验开始位, range:[,], step:, unit:, unitType:-->1
      </evenBeginBit>
      <evenLength>
        <!--ro, opt, int, 偶校验长度, range:[,], step:, unit:, unitType:-->1
      </evenLength>
    </ParityCheck>
    <XorCheck>
      <!--ro, opt, object, 异或校验配置规则, desc:校验方式为xorCheck时存在-->
      <xorBeginBit>
        <!--ro, opt, int, 异或校验开始位, range:[,], step:, unit:, unitType:-->1
      </xorBeginBit>
      <xorPerLength>
        <!--ro, opt, int, 异或校验每组长度, range:[,], step:, unit:, unitType:-->1
      </xorPerLength>
      <xorTotalLength>
        <!--ro, opt, int, 异或校验数据位总长度, range:[,], step:, unit:, unitType:-->1
      </xorTotalLength>
    </XorCheck>
    <cardIdBeginBit>
      <!--ro, req, int, 卡号开始位, range:[,], step:, unit:, unitType:-->1
    </cardIdBeginBit>
    <cardIdLength>
      <!--ro, req, int, 卡号长度, range:[,], step:, unit:, unitType:-->1
    </cardIdLength>
    <siteCodeBeginBit>
      <!--ro, req, int, 现场码开始位, range:[,], step:, unit:, unitType:-->1
    </siteCodeBeginBit>
    <siteCodeLength>
      <!--ro, req, int, 现场码长度, range:[,], step:, unit:, unitType:-->1
    </siteCodeLength>
    <oemBeginBit>
      <!--ro, req, int, OEM开始位, range:[,], step:, unit:, unitType:-->1
    </oemBeginBit>
    <oemLength>
      <!--ro, req, int, OEM长度, range:[,], step:, unit:, unitType:-->1
    </oemLength>
    <manufacturerCodeBeginBit>
      <!--ro, req, int, 发行码开始位, range:[,], step:, unit:, unitType:-->1
    </manufacturerCodeBeginBit>
    <manufacturerCodeLength>
      <!--ro, req, int, 发行码长度, range:[,], step:, unit:, unitType:-->1
    </manufacturerCodeLength>
  </CustomerCardIn>
  <CustomerCardOut>
    <!--ro, opt, object, 消费卡输出-->
    <CardContentList size="4">
      <!--ro, opt, array, 卡内容列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
      <Action>
        <!--ro, opt, object, 卡信息-->
        <No>
          <!--ro, req, int, 编号, range:[,], step:, unit:, unitType:-->1
        </No>
        <type>
          <!--ro, req, enum, 类型, subType:string, [cardId#卡片ID,siteCode#现场码,oem#OEM号,manufacturerCode#发行码]-->cardId
        </type>
        <length>
          <!--ro, req, int, 对应十进制数据长度, range:[,], step:, unit:, unitType:-->1
        </length>
      </Action>
    </CardContentList>
  </CustomerCardOut>
</WiegandRuleCfg>

54. 韦根规则配置

54.1 命令

PUT /ISAPI/AccessControl/WiegandRuleCfg

54.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<WiegandRuleCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--opt, object, 韦根规则配置, attr:version{req, string, 协议版本, range:[,]}-->
  <name>
    <!--req, string, 韦根名称, range:[,]-->test
  </name>
  <CustomerCardIn>
    <!--opt, object, 消费卡输入-->
    <totalLength>
      <!--req, int, 韦根总长度, range:[,], step:, unit:, unitType:, desc:当该字段传递的值为0时,则清除自定义的韦根规则设置-->1
    </totalLength>
    <checkMethod>
      <!--req, enum, 校验方式, subType:string, [parityCheck#奇偶校验配置规则,xorCheck#异或校验配置规则,noCheck#无校验]-->parityCheck
    </checkMethod>
    <ParityCheck>
      <!--opt, object, 奇偶校验配置规则, desc:校验方式为parityCheck时存在-->
      <oddBeginBit>
        <!--opt, int, 奇校验开始位, range:[,], step:, unit:, unitType:-->1
      </oddBeginBit>
      <oddLength>
        <!--opt, int, 奇校验长度, range:[,], step:, unit:, unitType:-->1
      </oddLength>
      <evenBeginBit>
        <!--opt, int, 偶校验开始位, range:[,], step:, unit:, unitType:-->1
      </evenBeginBit>
      <evenLength>
        <!--opt, int, 偶校验长度, range:[,], step:, unit:, unitType:-->1
      </evenLength>
    </ParityCheck>
    <XorCheck>
      <!--opt, object, 异或校验配置规则, desc:校验方式为xorCheck时存在-->
      <xorBeginBit>
        <!--opt, int, 异或校验开始位, range:[,], step:, unit:, unitType:-->1
      </xorBeginBit>
      <xorPerLength>
        <!--opt, int, 异或校验每组长度, range:[,], step:, unit:, unitType:-->1
      </xorPerLength>
      <xorTotalLength>
        <!--opt, int, 异或校验数据位总长度, range:[,], step:, unit:, unitType:-->1
      </xorTotalLength>
    </XorCheck>
    <cardIdBeginBit>
      <!--req, int, 卡号开始位, range:[,], step:, unit:, unitType:-->1
    </cardIdBeginBit>
    <cardIdLength>
      <!--req, int, 卡号长度, range:[,], step:, unit:, unitType:-->1
    </cardIdLength>
    <siteCodeBeginBit>
      <!--req, int, 现场码开始位, range:[,], step:, unit:, unitType:-->1
    </siteCodeBeginBit>
    <siteCodeLength>
      <!--req, int, 现场码长度, range:[,], step:, unit:, unitType:-->1
    </siteCodeLength>
    <oemBeginBit>
      <!--req, int, OEM开始位, range:[,], step:, unit:, unitType:-->1
    </oemBeginBit>
    <oemLength>
      <!--req, int, OEM长度, range:[,], step:, unit:, unitType:-->1
    </oemLength>
    <manufacturerCodeBeginBit>
      <!--req, int, 发行码开始位, range:[,], step:, unit:, unitType:-->1
    </manufacturerCodeBeginBit>
    <manufacturerCodeLength>
      <!--req, int, 发行码长度, range:[,], step:, unit:, unitType:-->1
    </manufacturerCodeLength>
  </CustomerCardIn>
  <CustomerCardOut>
    <!--opt, object, 消费卡输出-->
    <CardContentList size="4">
      <!--opt, array, 卡内容列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
      <Action>
        <!--opt, object, 卡信息-->
        <No>
          <!--req, int, 编号, range:[,], step:, unit:, unitType:-->1
        </No>
        <type>
          <!--req, enum, 类型, subType:string, [cardId#卡片ID,siteCode#现场码,oem#OEM号,manufacturerCode#发行码]-->cardId
        </type>
        <length>
          <!--req, int, 对应十进制数据长度, range:[,], step:, unit:, unitType:-->1
        </length>
      </Action>
    </CardContentList>
  </CustomerCardOut>
</WiegandRuleCfg>

54.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 响应状态, attr:version{req, string, 协议版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求url, range:[,]-->test
  </requestURL>
  <statusCode>
    <!--ro, req, int, 状态码, range:[,], step:, unit:, unitType:-->1
  </statusCode>
  <statusString>
    <!--ro, req, string, 状态描述, range:[,]-->test
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码的英文描述, range:[,]-->test
  </subStatusCode>
</ResponseStatus>

55. 获取门控安全模块状态能力

55.1 命令

GET /ISAPI/AccessControl/DoorSecurityModule/moduleStatus/capabilities

55.2 输入参数

55.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ModuleStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 模块状态, attr:version{req, string, 协议版本, range:[,]}-->
  <securityModuleNo min="1" max="256">
    <!--ro, req, string, 门控安全模块编号, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
  </securityModuleNo>
  <onlineStatus opt="0,1">
    <!--ro, req, enum, 在线状态, subType:int, [0#不在线,1#在线], attr:opt{req, string, 取值范围, range:[,]}-->1
  </onlineStatus>
  <desmantelStatus opt="0,1">
    <!--ro, req, enum, 防拆状态, subType:int, [0#关闭,1#防拆], attr:opt{req, string, 取值范围, range:[,]}-->1
  </desmantelStatus>
</ModuleStatus>

56. 获取门控安全模块状态

56.1 命令

GET /ISAPI/AccessControl/DoorSecurityModule/moduleStatus

56.2 输入参数

56.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ModuleStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 模块状态, attr:version{req, string, 协议版本, range:[,]}-->
  <securityModuleNo min="1" max="256">
    <!--ro, req, string, 门控安全模块编号, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
  </securityModuleNo>
  <onlineStatus opt="0,1">
    <!--ro, req, enum, 在线状态, subType:int, [0#不在线,1#在线], attr:opt{req, string, 取值范围, range:[,]}-->1
  </onlineStatus>
  <desmantelStatus opt="0,1">
    <!--ro, req, enum, 防拆状态, subType:int, [0#关闭,1#防拆], attr:opt{req, string, 取值范围, range:[,]}-->1
  </desmantelStatus>
</ModuleStatus>

57. 获取分控器参数配置能力

57.1 命令

GET /ISAPI/AccessControl/LadderControlRelay/capabilities

57.2 输入参数

57.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<LadderControlRelay xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 分控器参数配置能力, attr:version{req, string, 协议版本, range:[,]}-->
  <floorNo min="1" max="128">
    <!--ro, req, int, 楼层序号, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
  </floorNo>
  <KeyControl>
    <!--ro, req, object, 按键梯控-->
    <distractControlNo min="3" max="26">
      <!--ro, req, int, 分控器拨码编号, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </distractControlNo>
    <relayNo min="1" max="16">
      <!--ro, req, int, 继电器编号, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </relayNo>
  </KeyControl>
  <CallLadder>
    <!--ro, req, object, 呼梯-->
    <distractControlNo min="3" max="26">
      <!--ro, req, int, 分控器拨码编号, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </distractControlNo>
    <relayNo min="1" max="16">
      <!--ro, req, int, 继电器编号, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </relayNo>
  </CallLadder>
  <AutoKey>
    <!--ro, req, object, 自动按键-->
    <distractControlNo min="3" max="26">
      <!--ro, req, int, 分控器拨码编号, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </distractControlNo>
    <relayNo min="1" max="16">
      <!--ro, req, int, 继电器编号, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
    </relayNo>
  </AutoKey>
</LadderControlRelay>

58. 获取分控器参数

58.1 命令

GET /ISAPI/AccessControl/LadderControlRelay/FloorNo/<floorID>

58.2 输入参数

58.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<LadderControlRelay xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 分控器参数, attr:version{req, string, 协议版本, range:[,]}-->
  <CallLadder>
    <!--ro, req, object, 呼梯-->
    <distractControlNo>
      <!--ro, req, int, 分控器拨码编号, range:[3,26], step:1, unit:, unitType:-->3
    </distractControlNo>
    <relayNo>
      <!--ro, req, int, 继电器编号, range:[1,16], step:1, unit:, unitType:-->1
    </relayNo>
  </CallLadder>
  <KeyControl>
    <!--ro, req, object, 按键梯控-->
    <distractControlNo>
      <!--ro, req, int, 分控器拨码编号, range:[3,26], step:1, unit:, unitType:-->3
    </distractControlNo>
    <relayNo>
      <!--ro, req, int, 继电器编号, range:[1,16], step:1, unit:, unitType:-->1
    </relayNo>
  </KeyControl>
  <AutoKey>
    <!--ro, req, object, 自动按键-->
    <distractControlNo>
      <!--ro, req, int, 分控器拨码编号, range:[3,26], step:1, unit:, unitType:-->3
    </distractControlNo>
    <relayNo>
      <!--ro, req, int, 继电器编号, range:[1,16], step:1, unit:, unitType:-->1
    </relayNo>
  </AutoKey>
</LadderControlRelay>

59. 配置分控器参数

59.1 命令

PUT /ISAPI/AccessControl/LadderControlRelay/FloorNo/<floorID>

59.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<LadderControlRelay xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--opt, object, 分控器参数, attr:version{req, string, 协议版本, range:[,]}-->
  <CallLadder>
    <!--req, object, 呼梯-->
    <distractControlNo>
      <!--req, int, 分控器拨码编号, range:[3,26], step:1, unit:, unitType:-->3
    </distractControlNo>
    <relayNo>
      <!--req, int, 继电器编号, range:[1,16], step:1, unit:, unitType:-->1
    </relayNo>
  </CallLadder>
  <KeyControl>
    <!--req, object, 按键梯控-->
    <distractControlNo>
      <!--req, int, 分控器拨码编号, range:[3,26], step:1, unit:, unitType:-->3
    </distractControlNo>
    <relayNo>
      <!--req, int, 继电器编号, range:[1,16], step:1, unit:, unitType:-->1
    </relayNo>
  </KeyControl>
  <AutoKey>
    <!--req, object, 自动按键-->
    <distractControlNo>
      <!--req, int, 分控器拨码编号, range:[3,26], step:1, unit:, unitType:-->3
    </distractControlNo>
    <relayNo>
      <!--req, int, 继电器编号, range:[1,16], step:1, unit:, unitType:-->1
    </relayNo>
  </AutoKey>
</LadderControlRelay>

59.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

60. M1卡加密验证功能配置能力

60.1 命令

GET /ISAPI/AccessControl/M1CardEncryptCfg/capabilities

60.2 输入参数

60.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<M1CardEncryptCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, M1卡加密验证功能配置, attr:version{req, string, 协议版本, range:[,]}-->
  <enable opt="true,false">
    <!--ro, req, bool, 使能, attr:opt{req, string, 取值范围, range:[,]}-->true
  </enable>
  <sectionID min="0" max="100">
    <!--ro, req, int, 扇区ID, range:[0,100], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
  </sectionID>
</M1CardEncryptCfg>

61. 获取M1卡加密验证功能配置

61.1 命令

GET /ISAPI/AccessControl/M1CardEncryptCfg

61.2 输入参数

61.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<M1CardEncryptCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, M1卡加密验证功能配置, attr:version{req, string, 协议版本, range:[,]}-->
  <enable>
    <!--ro, req, bool, 使能-->true
  </enable>
  <sectionID>
    <!--ro, req, int, 扇区ID, range:[,], step:, unit:, unitType:, desc:每次只配置一个扇区,M1卡从0开始-->1
  </sectionID>
</M1CardEncryptCfg>

62. 设置M1卡加密验证功能配置

62.1 命令

PUT /ISAPI/AccessControl/M1CardEncryptCfg

62.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<M1CardEncryptCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--req, object, M1卡加密验证功能配置, attr:version{req, string, 协议版本, range:[,]}-->
  <enable>
    <!--req, bool, 使能-->true
  </enable>
  <sectionID>
    <!--req, int, 扇区ID, range:[,], step:, unit:, unitType:, desc:每次只配置一个扇区,M1卡从0开始-->1
  </sectionID>
</M1CardEncryptCfg>

62.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应状态, attr:version{req, string, 协议版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求URL, range:[,], desc:请求的URL-->test
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:string, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required], desc:0和1-OK, 2-Device Busy, 3-Device Error, 4-Invalid Operation, 5-Invalid XML Format, 6-Invalid XML Content; 7-Reboot Required-->1
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态描述, subType:string, [OK#成功,Device Busy#设备繁忙,Device Error#设备出错,Invalid Operation#非法操作,Invalid XML Format#非法XML,Invalid XML Content#非法XML内容,Reboot#重启], desc:OK,Device Busy,Device Error,Invalid Operation,Invalid XML Format,Invalid XML Content,Reboot-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 子状态码, range:[,], desc:详细错误码的英文描述,可描述的很详细-->test
  </subStatusCode>
</ResponseStatus>

63. 获取日志模式参数配置能力

63.1 命令

GET /ISAPI/AccessControl/LogModeCfg/capabilities?format=json

63.2 输入参数

63.3 输出参数

{
    "LogModeCfg": { 
    /*ro, opt, object, 日志模式*/
        "type": {   
        /*ro, opt, object, 日志模式类别*/
            "@opt":  "1, 2" 
            /*ro, opt, string, 可选项, range:[,], desc:日志模式:1-16字节(主机日志存储支持25w,工号支持16字节存储),2-12字节(主机日志存储支持25w,工号支持12字节存储)*/
        }
    }
}

64. 获取日志模式参数

64.1 命令

GET /ISAPI/AccessControl/LogModeCfg?format=json

64.2 输入参数

64.3 输出参数

{
    "LogModeCfg": { 
    /*ro, opt, object, 日志模式节点*/
        "type":  1  
        /*ro, opt, enum, 日志模式, subType:int, [1#16字节(主机日志存储支持25w,2#12字节(主机日志存储支持25w]*/
    }
}

65. 配置日志模式参数

65.1 命令

PUT /ISAPI/AccessControl/LogModeCfg?format=json

65.2 输入参数

{
    "LogModeCfg": { 
    /*opt, object, 日志模式节点*/
        "type":  1  
        /*opt, enum, 日志模式, subType:int, [1#16字节(主机日志存储支持25w,2#12字节(主机日志存储支持25w], desc:1-16字节(主机日志存储支持25w,工号支持16字节存储)(设备默认16字节),2-12字节(主机日志存储支持25w,工号支持12字节存储)*/
    }
}

65.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

66. 获取OSDP读卡器状态查询能力

66.1 命令

GET /ISAPI/AccessControl/OSDPStatus/capabilities?format=json

66.2 输入参数

66.3 输出参数

{
    "OSDPStatus": { 
    /*ro, req, object, OSDP状态*/
        "id": { 
        /*ro, req, object, OSDP读卡器ID范围*/
            "@min":  1, 
            /*ro, opt, int, 最小值, range:[,], step:, unit:, unitType:*/
            "@max":  1  
            /*ro, req, int, 最大值, range:[,], step:, unit:, unitType:*/
        },
        "status":  "online,offline" 
        /*ro, req, string, 在线状态, range:[,], desc:online-在线,offline-离线*/
    }
}

67. 获取OSDP读卡器状态

67.1 命令

GET /ISAPI/AccessControl/OSDPStatus/<doorID>?format=json

67.2 输入参数

67.3 输出参数

{
    "OSDPStatus": { 
    /*ro, req, object, OSDP状态*/
        "status":  "online" 
        /*ro, req, enum, 在线状态, subType:string, [online#在线,offline#离线]*/
    }
}

68. 获取OSDP读卡器ID修改能力

68.1 命令

GET /ISAPI/AccessControl/OSDPModify/capabilities?format=json

68.2 输入参数

68.3 输出参数

{
    "OSDPModify": { 
    /*ro, opt, object, OSD读卡器修改能力参数*/
        "id": { 
        /*ro, opt, object, 原OSDP读卡器ID范围*/
            "@min":  1, 
            /*ro, opt, int, 最小值, range:[,], step:, unit:, unitType:*/
            "@max":  1  
            /*ro, req, int, 最大值, range:[,], step:, unit:, unitType:*/
        },
        "newID": {  
        /*ro, opt, object, 目标OSDP读卡器ID范围*/
            "@min":  1, 
            /*ro, opt, int, 最小值, range:[,], step:, unit:, unitType:*/
            "@max":  1  
            /*ro, req, int, 最大值, range:[,], step:, unit:, unitType:*/
        }
    }
}

69. 配置OSDP读卡器ID

69.1 命令

PUT /ISAPI/AccessControl/OSDPModify/<cardReaderID>?format=json

69.2 输入参数

{
    "OSDPModify": { 
    /*ro, req, object, OSDP修改参数*/
        "newID":  1 
        /*ro, req, int, 目标OSDP读卡器ID, range:[,], step:, unit:, unitType:*/
    }
}

69.3 输出参数

{
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,必须返回,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

70. 获取远程控制读卡器蜂鸣器能力

70.1 命令

GET /ISAPI/AccessControl/RemoteControl/buzzer/capabilities?format=json

70.2 输入参数

70.3 输出参数

{
    "RemoteControlBuzzer": {    
    /*ro, req, object, 读卡器蜂鸣器能力*/
        "cardReaderNo": {   
        /*ro, opt, object, 读卡器编号*/
            "@min":  1, 
            /*ro, opt, int, 最小值, range:[,], step:, unit:, unitType:*/
            "@max":  512    
            /*ro, opt, int, 最大值, range:[,], step:, unit:, unitType:*/
        },
        "cmd": {    
        /*ro, req, object, 命令*/
            "@opt":  "start,stop"   
            /*ro, req, string, 命令:start-蜂鸣, range:[,]*/
        }
    }
}

71. 配置远程控制读卡器蜂鸣器

71.1 命令

PUT /ISAPI/AccessControl/RemoteControl/buzzer/<cardReaderID>?format=json

71.2 输入参数

{
    "RemoteControlBuzzer": {    
    /*ro, req, object, 读卡器蜂鸣器命令*/
        "cmd":  "start" 
        /*req, enum, 命令, subType:string, [start#蜂鸣,stop#停止蜂鸣], desc:start-蜂鸣,stop-停止蜂鸣*/
    }
}

71.3 输出参数

{
    "requestURL":  "test",  
    /*ro, opt, string, URI, range:[,]*/
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}

72. 获取权限控制器音频文件参数配置能力

72.1 命令

GET /ISAPI/AccessControl/RightControllerAudio/capabilities

72.2 输入参数

72.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<RightControllerAudio xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 权限控制器音频文件参数配置能力, attr:version{req, string, 协议版本, range:[,]}-->
  <id min="2" max="32">
    <!--ro, req, int, 音频ID, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->2
  </id>
  <audioName min="1" max="32">
    <!--ro, req, string, 音频名称, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
  </audioName>
  <playCondition opt="NotPlay,CompleteAuth,AuthFail,Alarm">
    <!--ro, req, string, 播放条件, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:NotPlay-不播放,CompleteAuth-完整认证通过,AuthFail-认证失败,Alarm-报警-->CompleteAuth
  </playCondition>
</RightControllerAudio>

73. 获取权限控制器音频文件参数

73.1 命令

GET /ISAPI/AccessControl/RightControllerAudio/<audioID>

73.2 输入参数

73.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<RightControllerAudio xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 权限控制器音频文件参数, attr:version{req, string, 协议版本, range:[,]}-->
  <audioName>
    <!--ro, req, string, 音频名称, range:[1,32]-->test
  </audioName>
  <playCondition>
    <!--ro, req, enum, 播放条件, subType:string, [NotPlay#不播放,CompleteAuth#完整认证通过,AuthFail#认证失败,Alarm#报警]-->CompleteAuth
  </playCondition>
</RightControllerAudio>

74. 配置权限控制器音频文件参数

74.1 命令

PUT /ISAPI/AccessControl/RightControllerAudio/<audioID>

74.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<RightControllerAudio xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--opt, object, 权限控制器音频文件参数, attr:version{req, string, 协议版本, range:[,]}-->
  <audioName>
    <!--req, string, 音频名称, range:[1,32]-->test
  </audioName>
  <playCondition>
    <!--req, enum, 播放条件, subType:string, [NotPlay#不播放,CompleteAuth#完整认证通过,AuthFail#认证失败,Alarm#报警]-->CompleteAuth
  </playCondition>
</RightControllerAudio>

74.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

75. 删除权限控制器音频文件

75.1 命令

DELETE /ISAPI/AccessControl/RightControllerAudio/<audioID>

75.2 输入参数

75.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

76. 获取人员通道状态能力

76.1 命令

GET /ISAPI/AccessControl/GateStatus/capabilities

76.2 输入参数

76.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<GateStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">null
  <!--ro, opt, object, 人员通道状态, attr:version{req, string, 协议版本, range:[,]}-->
  <busSync opt="Normal,DropArmPoorSyn,BusCommFailed">
    <!--ro, req, string, 总线同步性状态, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Normal-正常,DropArmPoorSync-摆臂同步性差,BusCommFailed-总线通信失败--> 
  </busSync>
  <inDoorPassCount min="0" max="0xffffffff">
    <!--ro, req, int, 进门红外通行计数, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:到0xFFFFFFFF后从0开始重新计数-->1
  </inDoorPassCount>
  <inDoorAuthCount min="0" max="0xffffffff">
    <!--ro, req, int, 进门认证计数, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:到0xFFFFFFFF后从0开始重新计数-->1
  </inDoorAuthCount>
  <outDoorPassCount min="0" max="0xffffffff">
    <!--ro, req, int, 出门红外通行计数, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:到0xFFFFFFFF后从0开始重新计数-->1
  </outDoorPassCount>
  <outDoorAuthCount min="0" max="0xffffffff">
    <!--ro, req, int, 出门认证计数, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:到0xFFFFFFFF后从0开始重新计数-->1
  </outDoorAuthCount>
  <remoteControlRecvModule opt="Normal,Abnormal">
    <!--ro, req, string, 遥控器接收模块状态, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Normal-正常,Abnormal-通信失败或未安装--> 
  </remoteControlRecvModule>
  <caseTempUnit opt="Centigrade,Fahrenheit">
    <!--ro, req, string, 闸机腔体温度显示单位, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Centigrade-摄氏度,Fahrenheit-华氏度--> 
  </caseTempUnit>
  <currentInDoorMode opt="Controlled,Forbid,Free">
    <!--ro, req, string, 当前进门通行模式, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Controlled-受控,Forbid-禁止,Free-自由--> 
  </currentInDoorMode>
  <currentOutDoorMode opt="Controlled,Forbid,Free">
    <!--ro, req, string, 当前出门通行模式, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Controlled-受控,Forbid-禁止,Free-自由--> 
  </currentOutDoorMode>
  <powerSupplyMode opt="ACPower,Battery">
    <!--ro, req, string, 通道供电方式, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:ACPower-交流电供电,Battery-蓄电池供电--> 
  </powerSupplyMode>
  <gateCurrentStatus opt="InDoorOpen,OutDoorOpen,Close">
    <!--ro, req, string, 闸门状态, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:InDoorOpen-进门开,OutDoorOpen-出门开,Close-关门--> 
  </gateCurrentStatus>
</GateStatus>

77. 获取人员通道状态

77.1 命令

GET /ISAPI/AccessControl/GateStatus

77.2 输入参数

77.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<GateStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 人员通道状态, attr:version{req, string, 协议版本, range:[,]}-->
  <busSync>
    <!--ro, req, enum, 总线同步性状态, subType:string, [Normal#正常,DropArmPoorSync#摆臂同步性差,BusCommFailed#总线通信失败]-->Normal
  </busSync>
  <inDoorPassCount>
    <!--ro, req, int, 进门红外通行计数, range:[0,], step:1, unit:, unitType:, desc:到0xFFFFFFFF后从0开始重新计数-->1
  </inDoorPassCount>
  <inDoorAuthCount>
    <!--ro, req, int, 进门认证计数, range:[0,], step:1, unit:, unitType:, desc:到0xFFFFFFFF后从0开始重新计数-->1
  </inDoorAuthCount>
  <outDoorPassCount>
    <!--ro, req, int, 出门红外通行计数, range:[0,], step:1, unit:, unitType:, desc:到0xFFFFFFFF后从0开始重新计数-->1
  </outDoorPassCount>
  <outDoorAuthCount>
    <!--ro, req, int, 出门认证计数, range:[0,], step:1, unit:, unitType:, desc:到0xFFFFFFFF后从0开始重新计数-->1
  </outDoorAuthCount>
  <remoteControlRecvModule>
    <!--ro, req, enum, 遥控器接收模块状态, subType:string, [Normal#正常,Abnormal#通信失败或未安装]-->Normal
  </remoteControlRecvModule>
  <caseTempUnit>
    <!--ro, req, enum, 闸机腔体温度显示单位, subType:string, [Centigrade#摄氏度,Fahrenheit#华氏度]-->Centigrade
  </caseTempUnit>
  <currentInDoorMode>
    <!--ro, req, enum, 当前进门通行模式, subType:string, [Controlled#受控,Forbid#禁止,Free#自由]-->Controlled
  </currentInDoorMode>
  <currentOutDoorMode>
    <!--ro, req, enum, 当前出门通行模式, subType:string, [Controlled#受控,Forbid#禁止,Free#自由]-->Controlled
  </currentOutDoorMode>
  <powerSupplyMode>
    <!--ro, req, enum, 通道供电方式, subType:string, [ACPower#交流电供电,Battery#蓄电池供电]-->ACPower
  </powerSupplyMode>
  <gateCurrentStatus>
    <!--ro, opt, enum, 闸门状态, subType:string, [InDoorOpen#进门开,OutDoorOpen#出门开,Close#关门]-->InDoorOpen
  </gateCurrentStatus>
</GateStatus>

78. 获取人员通道红外状态能力

78.1 命令

GET /ISAPI/AccessControl/GateIRStatus/capabilities

78.2 输入参数

78.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<GateIRStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 人员通道红外状态, attr:version{req, string, 协议版本, range:[,]}-->
  <IREmitter>
    <!--ro, opt, object, 红外对射状态-->
    <triggered min="1" max="48">
      <!--ro, req, string, 红外对射被触发ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1,3,5,7
    </triggered>
    <triggeredTimeout min="1" max="48">
      <!--ro, req, string, 红外对射被触发超时ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1,3,5,7
    </triggeredTimeout>
    <receiveBoardAbnormal min="1" max="48">
      <!--ro, req, string, 接收板通信异常ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1,3,5,7
    </receiveBoardAbnormal>
    <sendBoardAbnormal min="1" max="48">
      <!--ro, req, string, 发送板通信异常ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1,3,5,7
    </sendBoardAbnormal>
    <sendAndReceiveLocateAbnormal min="1" max="48">
      <!--ro, req, string, 发送及接收对应位置异常ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1,3,5,7
    </sendAndReceiveLocateAbnormal>
  </IREmitter>
  <masterIRAdaptorCommFailed min="1" max="2">
    <!--ro, req, string, 主通道控制器红外转接板通信失败ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1,2
  </masterIRAdaptorCommFailed>
  <slaveIRAdaptorCommFailed min="1" max="2">
    <!--ro, req, string, 从通道控制器红外转接板通信失败ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1,2
  </slaveIRAdaptorCommFailed>
</GateIRStatus>

79. 获取人员通道红外状态

79.1 命令

GET /ISAPI/AccessControl/GateIRStatus

79.2 输入参数

79.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<GateIRStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 人员通道红外状态, attr:version{req, string, 协议版本, range:[,]}-->
  <IREmitter>
    <!--ro, opt, object, 红外对射状态-->
    <triggered>
      <!--ro, req, string, 红外对射被触发ID, range:[1,48]-->1,3,5,7
    </triggered>
    <triggeredTimeout>
      <!--ro, req, string, 红外对射被触发超时ID, range:[1,48]-->1,3,5,7
    </triggeredTimeout>
    <receiveBoardAbnormal>
      <!--ro, req, string, 接收板通信异常ID, range:[1,48]-->1,3,5,7
    </receiveBoardAbnormal>
    <sendBoardAbnormal>
      <!--ro, req, string, 发送板通信异常ID, range:[1,48]-->1,3,5,7
    </sendBoardAbnormal>
    <sendAndReceiveLocateAbnormal>
      <!--ro, req, string, 发送及接收对应位置异常ID, range:[1,48]-->1,3,5,7
    </sendAndReceiveLocateAbnormal>
  </IREmitter>
  <masterIRAdaptorCommFailed>
    <!--ro, req, string, 主通道控制器红外转接板通信失败ID, range:[1,2]-->1,2
  </masterIRAdaptorCommFailed>
  <slaveIRAdaptorCommFailed>
    <!--ro, req, string, 从通道控制器红外转接板通信失败ID, range:[1,2]-->1,2
  </slaveIRAdaptorCommFailed>
</GateIRStatus>

80. 获取人员通道相关器件状态能力

80.1 命令

GET /ISAPI/AccessControl/GateRelatedPartsStatus/capabilities

80.2 输入参数

80.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<GateRelatedPartsStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 人员通道相关器件状态, attr:version{req, string, 协议版本, range:[,]}-->
  <MasterChannelController>
    <!--ro, opt, object, 主通道控制器相关器件状态-->
    <motorSensor opt="Normal,Abnormal">
      <!--ro, req, string, 电机或传感器是否正常, range:[,], attr:opt{req, string, 取值范围, range:[,]}, 
desc:1.检测电机的编码器与霍尔传感器的一致性;
2.Normal-正常,Abnormal-异常-->test
    </motorSensor>
    <dropArmSensorAbnormal min="1" max="4">
      <!--ro, req, string, 摆臂位置传感器异常ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:检测摆臂到位开关-->test
    </dropArmSensorAbnormal>
    <dropArm opt="Normal,Abnormal">
      <!--ro, req, string, 摆臂状态, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Normal-正常,Abnormal-异常(被阻挡或未转动)-->test
    </dropArm>
    <fireInput opt="Normal,Alarm">
      <!--ro, req, string, 消防输入状态, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Normal-正常,Alarm-报警-->test
    </fireInput>
    <caseTemp min="-2000.0" max="3000.0">
      <!--ro, req, float, 闸机腔体温度, range:[,], step:0.1, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->0.1
    </caseTemp>
    <alarmInTriggered min="1" max="8">
      <!--ro, req, string, 报警输入触发ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </alarmInTriggered>
    <alarmOutTriggered min="1" max="4">
      <!--ro, req, string, 报警输出触发ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </alarmOutTriggered>
    <brakeStatus opt="NotBrake,Brake">
      <!--ro, req, string, 制动器状态, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:NotBrake-未制动,Brake-制动-->test
    </brakeStatus>
    <fanStatus opt="NotStart,Start">
      <!--ro, req, string, 风扇状态, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:NotStart-未启动,Start-启动-->test
    </fanStatus>
    <lampBoardCommFailed min="1" max="4">
      <!--ro, req, string, 灯板通信失败ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </lampBoardCommFailed>
  </MasterChannelController>
  <SlaveChannelController>
    <!--ro, opt, object, 从通道控制器相关器件状态-->
    <motorSensor opt="Normal,Abnormal">
      <!--ro, req, string, 电机或传感器是否正常, range:[,], attr:opt{req, string, 取值范围, range:[,]}, 
desc:1.检测电机的编码器与霍尔传感器的一致性;
2.Normal-正常,Abnormal-异常-->test
    </motorSensor>
    <dropArmSensorAbnormal min="1" max="4">
      <!--ro, req, string, 摆臂位置传感器异常ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:检测摆臂到位开关-->test
    </dropArmSensorAbnormal>
    <dropArm opt="Normal,Abnormal">
      <!--ro, req, string, 摆臂状态, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Normal-正常,Abnormal-异常(被阻挡或未转动)-->test
    </dropArm>
    <fireInput opt="Normal,Alarm">
      <!--ro, req, string, 消防输入状态, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Normal-正常,Alarm-报警-->test
    </fireInput>
    <caseTemp min="-2000.0" max="3000.0">
      <!--ro, req, float, 闸机腔体温度, range:[,], step:0.1, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->0.1
    </caseTemp>
    <alarmInTriggered min="1" max="8">
      <!--ro, req, string, 报警输入触发ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </alarmInTriggered>
    <alarmOutTriggered min="1" max="4">
      <!--ro, req, string, 报警输出触发ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </alarmOutTriggered>
    <brakeStatus opt="NotBrake,Brake">
      <!--ro, req, string, 制动器状态, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:NotBrake-未制动,Brake-制动-->test
    </brakeStatus>
    <fanStatus opt="NotStart,Start">
      <!--ro, req, string, 风扇状态, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:NotStart-未启动,Start-启动-->test
    </fanStatus>
    <lampBoardCommFailed min="1" max="4">
      <!--ro, req, string, 灯板通信失败ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </lampBoardCommFailed>
  </SlaveChannelController>
</GateRelatedPartsStatus>

81. 获取人员通道相关器件状态

81.1 命令

GET /ISAPI/AccessControl/GateRelatedPartsStatus

81.2 输入参数

81.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<GateRelatedPartsStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 人员通道相关器件状态, attr:version{req, string, 协议版本, range:[,]}-->
  <MasterChannelController>
    <!--ro, opt, object, 主通道控制器相关器件状态-->
    <motorSensor>
      <!--ro, req, enum, 电机或传感器是否正常, subType:string, [Normal#正常,Abnormal#异常], desc:检测电机的编码器与霍尔传感器的一致性-->Normal
    </motorSensor>
    <dropArmSensorAbnormal>
      <!--ro, req, string, 摆臂位置传感器异常ID, range:[1,4], desc:检测摆臂到位开关-->1,3
    </dropArmSensorAbnormal>
    <dropArm>
      <!--ro, req, enum, 摆臂状态, subType:string, [Normal#正常,Abnormal#异常(被阻挡或未转动)]-->Normal
    </dropArm>
    <fireInput>
      <!--ro, req, enum, 消防输入状态, subType:string, [Normal#正常,Alarm#报警]-->Normal
    </fireInput>
    <caseTemp>
      <!--ro, req, float, 闸机腔体温度, range:[-2000.0,3000.0], step:0.1, unit:, unitType:-->0.1
    </caseTemp>
    <alarmInTriggered>
      <!--ro, req, string, 报警输入触发ID, range:[1,8]-->1,3,5
    </alarmInTriggered>
    <alarmOutTriggered>
      <!--ro, req, string, 报警输出触发ID, range:[1,4]-->1,3
    </alarmOutTriggered>
    <brakeStatus>
      <!--ro, req, enum, 制动器状态, subType:string, [NotBrake#未制动,Brake#制动]-->NotBrake
    </brakeStatus>
    <fanStatus>
      <!--ro, req, enum, 风扇状态, subType:string, [NotStart#未启动,Start#启动]-->NotStart
    </fanStatus>
    <lampBoardCommFailed>
      <!--ro, req, string, 灯板通信失败ID, range:[1,4]-->1,3
    </lampBoardCommFailed>
  </MasterChannelController>
  <SlaveChannelController>
    <!--ro, opt, object, 从通道控制器相关器件状态-->
    <motorSensor>
      <!--ro, req, enum, 电机或传感器是否正常, subType:string, [Normal#正常,Abnormal#异常], desc:检测电机的编码器与霍尔传感器的一致性-->Normal
    </motorSensor>
    <dropArmSensorAbnormal>
      <!--ro, req, string, 摆臂位置传感器异常ID, range:[1,4], desc:检测摆臂到位开关-->1,3
    </dropArmSensorAbnormal>
    <dropArm>
      <!--ro, req, enum, 摆臂状态, subType:string, [Normal#正常,Abnormal#异常(被阻挡或未转动)]-->Normal
    </dropArm>
    <fireInput>
      <!--ro, req, enum, 消防输入状态, subType:string, [Normal#正常,Alarm#报警]-->Normal
    </fireInput>
    <caseTemp>
      <!--ro, req, float, 闸机腔体温度, range:[-2000.0,3000.0], step:0.1, unit:, unitType:-->0.1
    </caseTemp>
    <alarmInTriggered>
      <!--ro, req, string, 报警输入触发ID, range:[1,8]-->1,3,5
    </alarmInTriggered>
    <alarmOutTriggered>
      <!--ro, req, string, 报警输出触发ID, range:[1,4]-->1,3
    </alarmOutTriggered>
    <brakeStatus>
      <!--ro, req, enum, 制动器状态, subType:string, [NotBrake#未制动,Brake#制动]-->NotBrake
    </brakeStatus>
    <fanStatus>
      <!--ro, req, enum, 风扇状态, subType:string, [NotStart#未启动,Start#启动]-->NotStart
    </fanStatus>
    <lampBoardCommFailed>
      <!--ro, req, string, 灯板通信失败ID, range:[1,4]-->1,3
    </lampBoardCommFailed>
  </SlaveChannelController>
</GateRelatedPartsStatus>

82. 获取人员通道本地拨码及信息能力

82.1 命令

GET /ISAPI/AccessControl/GateDialAndInfo/capabilities

82.2 输入参数

82.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<GateDialAndInfo xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 人员通道本地拨码及信息, attr:version{req, string, 协议版本, range:[,]}-->
  <workMode opt="Normal,Origin,Debug">
    <!--ro, req, string, 工作模式, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Normal-正常工作模式,Origin-原点设置模式,Debug-测试模式-->test
  </workMode>
  <memoryModeEnabled opt="enable,disable">
    <!--ro, req, string, 记忆模式是否开启, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:enable-开启,disable-未开启-->test
  </memoryModeEnabled>
  <alarmAreaNoAuth opt="true,false">
    <!--ro, req, bool, 报警区域是否禁止开门, attr:opt{req, string, 取值范围, range:[,]}-->true
  </alarmAreaNoAuth>
  <deviceType opt="DropGate,WingGate,ThreeRollerGate">
    <!--ro, req, string, 设备型号, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:DropGate-摆闸,WingGate-翼闸,ThreeRollerGate-三辊闸-->test
  </deviceType>
  <DialMode>
    <!--ro, opt, object, 本地拨码通信模式-->
    <InDoor opt="Controlled,Forbid,Free">
      <!--ro, req, string, 进门, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Controlled-受控,Forbid-禁止,Free-自由-->test
    </InDoor>
    <OutDoor opt="Controlled,Forbid,Free">
      <!--ro, req, string, 出门, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Controlled-受控,Forbid-禁止,Free-自由-->test
    </OutDoor>
  </DialMode>
  <remoteControllerMode opt="Normal,LocalCode">
    <!--ro, opt, string, 遥控器模式, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Normal-正常模式,LocalCode-本地对码模式-->test
  </remoteControllerMode>
</GateDialAndInfo>

83. 获取人员通道本地拨码及信息

83.1 命令

GET /ISAPI/AccessControl/GateDialAndInfo

83.2 输入参数

83.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<GateDialAndInfo xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 人员通道本地拨码及信息, attr:version{req, string, 协议版本, range:[,]}-->
  <workMode>
    <!--ro, req, enum, 工作模式, subType:string, [Normal#正常工作模式,Origin#原点设置模式,Debug#测试模式]-->Normal
  </workMode>
  <memoryModeEnabled>
    <!--ro, req, enum, 记忆模式是否开启, subType:string, [enable#开启,disable#未开启]-->enable
  </memoryModeEnabled>
  <alarmAreaNoAuth>
    <!--ro, req, bool, 报警区域是否禁止开门-->true
  </alarmAreaNoAuth>
  <deviceType>
    <!--ro, req, enum, 设备型号, subType:string, [DropGate#摆闸,WingGate#翼闸,ThreeRollerGate#三辊闸]-->DropGate
  </deviceType>
  <DialMode>
    <!--ro, opt, object, 本地拨码通信模式-->
    <InDoor>
      <!--ro, req, enum, 进门, subType:string, [Controlled#受控,Forbid#禁止,Free#自由]-->Controlled
    </InDoor>
    <OutDoor>
      <!--ro, req, enum, 出门, subType:string, [Controlled#受控,Forbid#禁止,Free#自由]-->Controlled
    </OutDoor>
  </DialMode>
  <remoteControllerMode>
    <!--ro, opt, enum, 遥控器模式, subType:string, [Normal#正常模式,LocalCode#本地对码模式]-->Normal
  </remoteControllerMode>
</GateDialAndInfo>

84. 获取通道控制器参数配置能力

84.1 命令

GET /ISAPI/AccessControl/ChannelControllerCfg/capabilities

84.2 输入参数

84.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ChannelControllerCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 通道控制器参数配置, attr:version{req, string, 协议版本, range:[,]}-->
  <gatePassingMode opt="ByChannelController,ByRightController">
    <!--ro, req, string, 闸机通行模式, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:ByChannelController-以通道控制器本地拨码为准,ByRightController-以权限控制器配置为准-->test
  </gatePassingMode>
  <freePassAuthEnabled opt="enable,disable">
    <!--ro, req, string, 自由通行是否需要认证, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:enable-需要,disable-不需要-->test
  </freePassAuthEnabled>
  <openAndCloseSpeed min="1" max="10">
    <!--ro, req, int, 开关门速度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:1-10,代表10%-100%的十档-->1
  </openAndCloseSpeed>
  <alarmSoundTime min="0" max="599">
    <!--ro, req, int, 报警提示音时间, range:[,], step:, unit:s, unitType:时间, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:0代表一直输出-->1
  </alarmSoundTime>
  <tempUnit opt="Centigrade,Fahrenheit">
    <!--ro, req, string, 温度显示单位, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Centigrade-摄氏度,Fahrenheit-华氏度-->test
  </tempUnit>
  <alarmAreaNoAuth opt="true,false">
    <!--ro, req, bool, 报警区域是否禁止开门, attr:opt{req, string, 取值范围, range:[,]}-->true
  </alarmAreaNoAuth>
  <gateWingMaterial opt="Acrylic,StellPipe,SinglePUGate,DoublePUGate">
    <!--ro, opt, string, 门翼材质, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Acrylic-亚克力,StellPipe-钢管,SinglePUGate-单PU门,DoublePUGate-双PU门-->test
  </gateWingMaterial>
  <channelLength min="550" max="1400">
    <!--ro, opt, int, 通道长度, range:[,], step:, unit:mm, unitType:长度, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->550
  </channelLength>
  <motorDirection opt="Clockwise,AntiClockwise">
    <!--ro, opt, string, 电机转动方向, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Clockwise-顺时针,AntiClockwise-逆时针-->test
  </motorDirection>
  <lampBoardLight min="0" max="100">
    <!--ro, opt, int, 灯板亮度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
  </lampBoardLight>
  <openSpeed min="1" max="10">
    <!--ro, opt, int, 门翼开门速度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:1-10,代表10%-100%的十档,默认速度5档-->5
  </openSpeed>
  <closeSpeed min="1" max="10">
    <!--ro, opt, int, 门翼关门速度, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:1-10,代表10%-100%的十档,默认速度4档-->4
  </closeSpeed>
  <runMode opt="doubleGateWing,singleGateWing">
    <!--ro, opt, string, 运行模式, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:doubleGateWing-双门翼运行模式(默认),singleGateWing-单门翼运行模式-->test
  </runMode>
</ChannelControllerCfg>

85. 获取通道控制器参数

85.1 命令

GET /ISAPI/AccessControl/ChannelControllerCfg

85.2 输入参数

85.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ChannelControllerCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">null
  <!--ro, opt, object, 通道控制器参数, attr:version{req, string, 协议版本, range:[,]}-->
  <gatePassingMode>
    <!--ro, req, enum, 闸机通行模式, subType:string, [ByChannelController#以通道控制器本地拨码为准,ByRightController#以权限控制器配置为准]-->ByChannelController
  </gatePassingMode>
  <freePassAuthEnabled>
    <!--ro, req, enum, 自由通行是否需要认证, subType:string, [enable#需要,disable#不需要]-->enable
  </freePassAuthEnabled>
  <openAndCloseSpeed>
    <!--ro, req, int, 开关门速度, range:[1,10], step:1, unit:, unitType:, desc:1-10,代表10%-100%的十档-->1
  </openAndCloseSpeed>
  <alarmSoundTime>
    <!--ro, req, int, 报警提示音时间, range:[0,599], step:1, unit:s, unitType:时间, desc:0代表一直输出-->1
  </alarmSoundTime>
  <tempUnit>
    <!--ro, req, enum, 温度显示单位, subType:string, [Centigrade#摄氏度,Fahrenheit#华氏度]-->Centigrade
  </tempUnit>
  <alarmAreaNoAuth>
    <!--ro, opt, bool, 报警区域是否禁止开门-->true
  </alarmAreaNoAuth>
  <gateWingMaterial>
    <!--ro, opt, enum, 门翼材质, subType:string, [Acrylic#亚克力,StellPipe#钢管,SinglePUGate#单PU门,DoublePUGate#双PU门]-->Acrylic
  </gateWingMaterial>
  <channelLength>
    <!--ro, opt, int, 通道长度, range:[550,1400], step:1, unit:mm, unitType:长度-->550
  </channelLength>
  <motorDirection>
    <!--ro, opt, enum, 电机转动方向, subType:string, [Clockwise#顺时针,AntiClockwise#逆时针]-->Clockwise
  </motorDirection>
  <lampBoardLight>
    <!--ro, opt, int, 灯板亮度, range:[0,100], step:1, unit:, unitType:-->1
  </lampBoardLight>
  <openSpeed>
    <!--ro, opt, int, 门翼开门速度, range:[1,10], step:1, unit:, unitType:, 
desc:1.1-10,代表10%-100%的十档,默认速度5档;
2.如openAndCloseSpeed和openSpeed同时配置,开门速度以openSpeed为准-->5
  </openSpeed>
  <closeSpeed>
    <!--ro, opt, int, 门翼关门速度, range:[1,10], step:1, unit:, unitType:, 
desc:1.1-10,代表10%-100%的十档,默认速度4档;
2.如openAndCloseSpeed和closeSpeed同时配置,开门速度以closeSpeed为准-->4
  </closeSpeed>
  <runMode>
    <!--ro, opt, enum, 运行模式, subType:string, [doubleGateWing#双门翼运行模式(默认),singleGateWing#单门翼运行模式]-->doubleGateWing
  </runMode>
</ChannelControllerCfg>

86. 配置通道控制器参数

86.1 命令

PUT /ISAPI/AccessControl/ChannelControllerCfg

86.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<ChannelControllerCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--opt, object, 通道控制器参数, attr:version{req, string, 协议版本, range:[,]}-->
  <gatePassingMode>
    <!--req, enum, 闸机通行模式, subType:string, [ByChannelController#以通道控制器本地拨码为准,ByRightController#以权限控制器配置为准]-->ByChannelController
  </gatePassingMode>
  <freePassAuthEnabled>
    <!--req, enum, 自由通行是否需要认证, subType:string, [enable#需要,disable#不需要]-->enable
  </freePassAuthEnabled>
  <openAndCloseSpeed>
    <!--req, int, 开关门速度, range:[1,10], step:1, unit:, unitType:, desc:1-10,代表10%-100%的十档-->1
  </openAndCloseSpeed>
  <alarmSoundTime>
    <!--req, int, 报警提示音时间, range:[0,599], step:1, unit:s, unitType:时间, desc:0代表一直输出-->1
  </alarmSoundTime>
  <tempUnit>
    <!--req, enum, 温度显示单位, subType:string, [Centigrade#摄氏度,Fahrenheit#华氏度]-->Centigrade
  </tempUnit>
  <alarmAreaNoAuth>
    <!--opt, bool, 报警区域是否禁止开门-->true
  </alarmAreaNoAuth>
  <gateWingMaterial>
    <!--opt, enum, 门翼材质, subType:string, [Acrylic#亚克力,StellPipe#钢管,SinglePUGate#单PU门,DoublePUGate#双PU门]-->Acrylic
  </gateWingMaterial>
  <channelLength>
    <!--opt, int, 通道长度, range:[550,1400], step:1, unit:mm, unitType:长度-->550
  </channelLength>
  <motorDirection>
    <!--opt, enum, 电机转动方向, subType:string, [Clockwise#顺时针,AntiClockwise#逆时针]-->Clockwise
  </motorDirection>
  <lampBoardLight>
    <!--opt, int, 灯板亮度, range:[0,100], step:1, unit:, unitType:-->1
  </lampBoardLight>
  <openSpeed>
    <!--opt, int, 门翼开门速度, range:[1,10], step:1, unit:, unitType:, 
desc:1.1-10,代表10%-100%的十档,默认速度5档;
2.如openAndCloseSpeed和openSpeed同时配置,开门速度以openSpeed为准-->5
  </openSpeed>
  <closeSpeed>
    <!--opt, int, 门翼关门速度, range:[1,10], step:1, unit:, unitType:, 
desc:1.1-10,代表10%-100%的十档,默认速度4档;
2.如openAndCloseSpeed和closeSpeed同时配置,开门速度以closeSpeed为准-->4
  </closeSpeed>
  <runMode>
    <!--opt, enum, 运行模式, subType:string, [doubleGateWing#双门翼运行模式(默认),singleGateWing#单门翼运行模式]-->doubleGateWing
  </runMode>
</ChannelControllerCfg>

86.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

87. 获取通道控制器报警联动配置能力

87.1 命令

GET /ISAPI/AccessControl/ChannelControllerAlarmLinkage/capabilities

87.2 输入参数

87.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ChannelControllerAlarmLinkage xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 通道控制器报警联动配置, attr:version{req, string, 协议版本, range:[,]}-->
  <Trailing>
    <!--ro, req, object, 尾随通行-->
    <masterAlarmOut min="1" max="4">
      <!--ro, req, string, 主通道控制器联动本地报警输出ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </masterAlarmOut>
    <slaveAlarmOut min="1" max="4">
      <!--ro, req, string, 从通道控制器联动本地报警输出ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </slaveAlarmOut>
  </Trailing>
  <ReverseAccess>
    <!--ro, req, object, 反向闯入-->
    <masterAlarmOut min="1" max="4">
      <!--ro, req, string, 主通道控制器联动本地报警输出ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </masterAlarmOut>
    <slaveAlarmOut min="1" max="4">
      <!--ro, req, string, 从通道控制器联动本地报警输出ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </slaveAlarmOut>
  </ReverseAccess>
  <ForceAccess>
    <!--ro, req, object, 外力强行冲撞打开挡门-->
    <masterAlarmOut min="1" max="4">
      <!--ro, req, string, 主通道控制器联动本地报警输出ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </masterAlarmOut>
    <slaveAlarmOut min="1" max="4">
      <!--ro, req, string, 从通道控制器联动本地报警输出ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </slaveAlarmOut>
  </ForceAccess>
  <ClimbingOverGate>
    <!--ro, req, object, 翻越-->
    <masterAlarmOut min="1" max="4">
      <!--ro, req, string, 主通道控制器联动本地报警输出ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </masterAlarmOut>
    <slaveAlarmOut min="1" max="4">
      <!--ro, req, string, 从通道控制器联动本地报警输出ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </slaveAlarmOut>
  </ClimbingOverGate>
  <PassingTimeout>
    <!--ro, req, object, 通行超时-->
    <masterAlarmOut min="1" max="4">
      <!--ro, req, string, 主通道控制器联动本地报警输出ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </masterAlarmOut>
    <slaveAlarmOut min="1" max="4">
      <!--ro, req, string, 从通道控制器联动本地报警输出ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </slaveAlarmOut>
  </PassingTimeout>
  <IntrusionAlarm>
    <!--ro, req, object, 误闯报警-->
    <masterAlarmOut min="1" max="4">
      <!--ro, req, string, 主通道控制器联动本地报警输出ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </masterAlarmOut>
    <slaveAlarmOut min="1" max="4">
      <!--ro, req, string, 从通道控制器联动本地报警输出ID, range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </slaveAlarmOut>
  </IntrusionAlarm>
</ChannelControllerAlarmLinkage>

88. 获取通道控制器报警联动配置

88.1 命令

GET /ISAPI/AccessControl/ChannelControllerAlarmLinkage

88.2 输入参数

88.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ChannelControllerAlarmLinkage xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 通道控制器报警联动配置, attr:version{req, string, 协议版本, range:[,]}-->
  <Trailing>
    <!--ro, req, object, 尾随通行-->
    <masterAlarmOut>
      <!--ro, req, string, 主通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </masterAlarmOut>
    <slaveAlarmOut>
      <!--ro, req, string, 从通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </slaveAlarmOut>
  </Trailing>
  <ReverseAccess>
    <!--ro, req, object, 反向闯入-->
    <masterAlarmOut>
      <!--ro, req, string, 主通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </masterAlarmOut>
    <slaveAlarmOut>
      <!--ro, req, string, 从通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </slaveAlarmOut>
  </ReverseAccess>
  <ForceAccess>
    <!--ro, req, object, 外力强行冲撞打开挡门-->
    <masterAlarmOut>
      <!--ro, req, string, 主通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </masterAlarmOut>
    <slaveAlarmOut>
      <!--ro, req, string, 从通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </slaveAlarmOut>
  </ForceAccess>
  <ClimbingOverGate>
    <!--ro, req, object, 翻越-->
    <masterAlarmOut>
      <!--ro, req, string, 主通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </masterAlarmOut>
    <slaveAlarmOut>
      <!--ro, req, string, 从通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </slaveAlarmOut>
  </ClimbingOverGate>
  <PassingTimeout>
    <!--ro, req, object, 通行超时-->
    <masterAlarmOut>
      <!--ro, req, string, 主通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </masterAlarmOut>
    <slaveAlarmOut>
      <!--ro, req, string, 从通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </slaveAlarmOut>
  </PassingTimeout>
  <IntrusionAlarm>
    <!--ro, req, object, 误闯报警-->
    <masterAlarmOut>
      <!--ro, req, string, 主通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </masterAlarmOut>
    <slaveAlarmOut>
      <!--ro, req, string, 从通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </slaveAlarmOut>
  </IntrusionAlarm>
</ChannelControllerAlarmLinkage>

89. 配置通道控制器报警联动配置

89.1 命令

PUT /ISAPI/AccessControl/ChannelControllerAlarmLinkage

89.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<ChannelControllerAlarmLinkage xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--opt, object, 通道控制器报警联动配置, attr:version{req, string, 协议版本, range:[,]}-->
  <Trailing>
    <!--req, object, 尾随通行-->
    <masterAlarmOut>
      <!--req, string, 主通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </masterAlarmOut>
    <slaveAlarmOut>
      <!--req, string, 从通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </slaveAlarmOut>
  </Trailing>
  <ReverseAccess>
    <!--req, object, 反向闯入-->
    <masterAlarmOut>
      <!--req, string, 主通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </masterAlarmOut>
    <slaveAlarmOut>
      <!--req, string, 从通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </slaveAlarmOut>
  </ReverseAccess>
  <ForceAccess>
    <!--req, object, 外力强行冲撞打开挡门-->
    <masterAlarmOut>
      <!--req, string, 主通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </masterAlarmOut>
    <slaveAlarmOut>
      <!--req, string, 从通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </slaveAlarmOut>
  </ForceAccess>
  <ClimbingOverGate>
    <!--req, object, 翻越-->
    <masterAlarmOut>
      <!--req, string, 主通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </masterAlarmOut>
    <slaveAlarmOut>
      <!--req, string, 从通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </slaveAlarmOut>
  </ClimbingOverGate>
  <PassingTimeout>
    <!--req, object, 通行超时-->
    <masterAlarmOut>
      <!--req, string, 主通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </masterAlarmOut>
    <slaveAlarmOut>
      <!--req, string, 从通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </slaveAlarmOut>
  </PassingTimeout>
  <IntrusionAlarm>
    <!--req, object, 误闯报警-->
    <masterAlarmOut>
      <!--req, string, 主通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </masterAlarmOut>
    <slaveAlarmOut>
      <!--req, string, 从通道控制器联动本地报警输出ID, range:[1,4]-->1,3
    </slaveAlarmOut>
  </IntrusionAlarm>
</ChannelControllerAlarmLinkage>

89.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

90. 获取通道控制器报警输出参数配置能力

90.1 命令

GET /ISAPI/AccessControl/ChannelControllerAlarmOut/capabilities

90.2 输入参数

90.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ChannelControllerAlarmOut xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 通道控制器报警输出参数配置, attr:version{req, string, 协议版本, range:[,]}-->
  <controllerType opt="Master,Slave">
    <!--ro, req, string, controllerType, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Master-主通道控制器,Slave-从通道控制器-->test
  </controllerType>
  <alarmOutNo min="1" max="4">
    <!--ro, req, int, 报警输出序号, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
  </alarmOutNo>
  <delay min="0" max="5999">
    <!--ro, req, int, 报警输出时间, range:[,], step:, unit:s, unitType:时间, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:0代表一直输出-->1
  </delay>
</ChannelControllerAlarmOut>

91. 获取通道控制器报警输出参数

91.1 命令

GET /ISAPI/AccessControl/ChannelControllerAlarmOut?controllerType=Master&alarmOutNo=1

91.2 输入参数

91.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ChannelControllerAlarmOut xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 通道控制器报警输出参数, attr:version{req, string, 协议版本, range:[,]}-->
  <delay>
    <!--ro, req, int, 报警输出时间, range:[0,5999], step:1, unit:s, unitType:时间, desc:0代表一直输出-->1
  </delay>
</ChannelControllerAlarmOut>

92. 配置通道控制器报警输出参数

92.1 命令

PUT /ISAPI/AccessControl/ChannelControllerAlarmOut?controllerType=Master&alarmOutNo=1

92.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<ChannelControllerAlarmOut xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--opt, object, 通道控制器报警输出参数, attr:version{req, string, 协议版本, range:[,]}-->
  <delay>
    <!--req, int, 报警输出时间, range:[0,5999], step:1, unit:s, unitType:时间, desc:0代表一直输出-->1
  </delay>
</ChannelControllerAlarmOut>

92.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

93. 获取通道控制器报警输出控制能力

93.1 命令

GET /ISAPI/AccessControl/ChannelControllerAlarmOutControl/capabilities

93.2 输入参数

93.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ChannelControllerAlarmOutControl xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 通道控制器报警输出控制, attr:version{req, string, 协议版本, range:[,]}-->
  <controllerType opt="Master,Slave">
    <!--ro, req, string, 通道控制器类别, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Master-主通道控制器,Slave-从通道控制器-->test
  </controllerType>
  <alarmOutNo min="1" max="4">
    <!--ro, opt, int, 报警输出序号, range:[,], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:当不传递该节点时,代表全部报警输出口-->1
  </alarmOutNo>
  <alarmOutControl opt="Start,Stop">
    <!--ro, opt, string, 报警输出控制, range:[,], attr:opt{req, string, 取值范围, range:[,]}, desc:Start-开始报警输出;Stop-停止报警输出-->test
  </alarmOutControl>
</ChannelControllerAlarmOutControl>

94. 配置通道控制器报警输出控制

94.1 命令

PUT /ISAPI/AccessControl/ChannelControllerAlarmOutControl

94.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<ChannelControllerAlarmOutControl xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--opt, object, 通道控制器报警输出控制, attr:version{req, string, 协议版本, range:[,]}-->
  <controllerType>
    <!--req, enum, 通道控制器类别, subType:string, [Master#主通道控制器,Slave#从通道控制器]-->Master
  </controllerType>
  <alarmOutNo>
    <!--opt, int, 报警输出序号, range:[1,4], step:1, unit:, unitType:, desc:不传递该节点时,代表全部报警输出口-->1
  </alarmOutNo>
  <alarmOutControl>
    <!--opt, enum, 报警输出控制, subType:string, [Start#开始报警输出,Stop#停止报警输出]-->Start
  </alarmOutControl>
</ChannelControllerAlarmOutControl>

94.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

95. 获取跨主机反潜回服务器参数能力

95.1 命令

GET /ISAPI/AccessControl/SubmarineBack/capabilities

95.2 输入参数

95.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<SubmarineBack xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 跨主机反潜回服务器配置能力, attr:version{req, string, 协议版本, range:[,]}-->
  <enabled opt="true,false">
    <!--ro, req, bool, 使能, attr:opt{req, string, 取值范围, range:[,]}-->true
  </enabled>
</SubmarineBack>

96. 获取跨主机反潜回服务器

96.1 命令

GET /ISAPI/AccessControl/SubmarineBack

96.2 输入参数

96.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<SubmarineBack xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 跨主机反潜回服务器配置, attr:version{req, string, 协议版本, range:[,]}-->
  <enabled>
    <!--ro, req, bool, 使能-->true
  </enabled>
</SubmarineBack>

97. 配置跨主机反潜回服务器

97.1 命令

PUT /ISAPI/AccessControl/SubmarineBack

97.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<SubmarineBack xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--wo, req, object, 跨主机反潜回服务器配置, attr:version{req, string, 协议版本, range:[,]}-->
  <enabled>
    <!--wo, req, bool, 使能-->true
  </enabled>
</SubmarineBack>

97.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

98. 获取加入跨主机反潜回主机参数能力

98.1 命令

GET /ISAPI/AccessControl/SubmarineBackHostInfo/capabilities

98.2 输入参数

98.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<SubmarineBackHostInfo xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 跨主机反潜回主机配置能力, attr:version{req, string, 协议版本, range:[,]}-->
  <ID min="1" max="4">
    <!--ro, req, int, 配置序号, range:[1,4], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
  </ID>
  <HostInfoList size="16">
    <!--ro, req, array, 主机信息列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <Action>
      <!--ro, req, object, 主机信息-->
      <deviceNo min="1" max="64">
        <!--ro, req, int, 设备编号, range:[1,64], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
      </deviceNo>
      <serial min="9" max="9">
        <!--ro, req, const, 设备序列号, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->E12345678
      </serial>
      <registrationCode min="4" max="8">
        <!--ro, opt, string, 注册码, range:[4,8], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}, desc:用于设备间校验,字符类型:数字+字母  敏感信息加密-->test
      </registrationCode>
    </Action>
  </HostInfoList>
</SubmarineBackHostInfo>

99. 获取加入跨主机反潜回主机参数

99.1 命令

GET /ISAPI/AccessControl/SubmarineBackHostInfo/ConfigureNo/<indexID>

99.2 输入参数

99.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<SubmarineBackHostInfo xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 跨主机反潜回主机配置, attr:version{req, string, 协议版本, range:[,]}-->
  <HostInfoList size="16">
    <!--ro, req, array, 主机列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <Action>
      <!--ro, req, object, 主机配置-->
      <deviceNo>
        <!--ro, req, int, 设备编号, range:[,], step:, unit:, unitType:-->1
      </deviceNo>
      <serial>
        <!--ro, req, string, 设备序列号, range:[,], desc:string长度固定为9-->E12345678
      </serial>
      <registrationCode>
        <!--ro, opt, string, 注册码, range:[4,8], desc:用于设备间校验,字符类型:数字+字母  敏感信息加密-->test
      </registrationCode>
    </Action>
  </HostInfoList>
</SubmarineBackHostInfo>

100. 配置加入跨主机反潜回主机参数

100.1 命令

PUT /ISAPI/AccessControl/SubmarineBackHostInfo/ConfigureNo/<indexID>

100.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<SubmarineBackHostInfo xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--req, object, 跨主机反潜回主机配置, attr:version{req, string, 协议版本, range:[,]}-->
  <HostInfoList size="16">
    <!--req, array, 跨主机列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <Action>
      <!--req, object, 跨主机信息-->
      <deviceNo>
        <!--req, int, 设备编号, range:[1,64], step:, unit:, unitType:-->1
      </deviceNo>
      <serial>
        <!--req, string, 设备序列号, range:[,], desc:String长度固定,为9-->E12345678
      </serial>
      <registrationCode>
        <!--opt, string, 注册码, range:[4,8], desc:用于设备间校验,字符类型:数字+字母  敏感信息加密-->test
      </registrationCode>
    </Action>
  </HostInfoList>
</SubmarineBackHostInfo>

100.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

101. 获取跨主机反潜回读卡器配置能力

101.1 命令

GET /ISAPI/AccessControl/SubmarineBackReader/capabilities

101.2 输入参数

101.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<SubmarineBackReader xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, opt, object, 跨主机反潜回读卡器配置能力, attr:version{req, string, 协议版本, range:[,]}-->
  <ID min="1" max="1">
    <!--ro, req, int, 配置序号, range:[1,128], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[1,128], step:, unit:, unitType:}-->1
  </ID>
  <selfHostNo min="1" max="64">
    <!--ro, req, int, 配置对象主机编号, range:[1,64], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
  </selfHostNo>
  <selfReaderNo min="1" max="8">
    <!--ro, req, int, 配置对象读卡器编号, range:[1,8], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->4
  </selfReaderNo>
  <FollowReaderList size="16">
    <!--ro, opt, array, 后续主机列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <Action>
      <!--ro, opt, object, 后续主机-->
      <followHostNo min="1" max="64">
        <!--ro, req, int, 后续主机编号, range:[1,64], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
      </followHostNo>
      <followReaderNo min="1" max="8">
        <!--ro, req, int, 后续读卡器编号, range:[1,8], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
      </followReaderNo>
    </Action>
  </FollowReaderList>
</SubmarineBackReader>

102. 获取跨主机反潜回读卡器

102.1 命令

GET /ISAPI/AccessControl/SubmarineBackReader/ConfigureNo/<indexID>

102.2 输入参数

102.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<SubmarineBackReader xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 跨主机反潜回读卡器配置, attr:version{req, string, 协议版本, range:[,]}-->
  <selfHostNo>
    <!--ro, req, int, 配置对象主机编号, range:[1,64], step:, unit:, unitType:-->1
  </selfHostNo>
  <selfReaderNo>
    <!--ro, req, int, 配置对象读卡器编号, range:[1,8], step:, unit:, unitType:-->1
  </selfReaderNo>
  <FollowReaderList size="16">
    <!--ro, req, array, 后续主机列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <Action>
      <!--ro, req, object, 后续主机列表信息-->
      <followHostNo>
        <!--ro, req, int, 后续主机编号, range:[1,64], step:, unit:, unitType:-->1
      </followHostNo>
      <followReaderNo>
        <!--ro, req, int, 后续读卡器编号, range:[1,8], step:, unit:, unitType:-->1
      </followReaderNo>
    </Action>
  </FollowReaderList>
</SubmarineBackReader>

103. 配置跨主机反潜回读卡器

103.1 命令

PUT /ISAPI/AccessControl/SubmarineBackReader/ConfigureNo/<indexID>

103.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<SubmarineBackReader xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--req, object, 跨主机反潜回读卡器配置, attr:version{req, string, 协议版本, range:[,]}-->
  <selfHostNo>
    <!--req, int, 配置对象主机编号, range:[1,64], step:, unit:, unitType:-->1
  </selfHostNo>
  <selfReaderNo>
    <!--req, int, 配置对象读卡器编号, range:[1,8], step:, unit:, unitType:-->1
  </selfReaderNo>
  <FollowReaderList size="16">
    <!--req, array, 后续主机列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <Action>
      <!--req, object, 后续主机信息-->
      <followHostNo>
        <!--req, int, 后续主机编号, range:[1,64], step:, unit:, unitType:-->1
      </followHostNo>
      <followReaderNo>
        <!--req, int, 后续读卡器编号, range:[1,8], step:, unit:, unitType:-->1
      </followReaderNo>
    </Action>
  </FollowReaderList>
</SubmarineBackReader>

103.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

104. 获取跨主机反潜回模式参数能力

104.1 命令

GET /ISAPI/AccessControl/SubmarineBackMode/capabilities

104.2 输入参数

104.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<SubmarineBackMode xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 跨主机反潜回模式配置能力, attr:version{req, string, 协议版本, range:[,]}-->
  <mode opt="disable,internetCommunicate,cardReadAndWrite">
    <!--ro, req, enum, 反潜回模式, subType:string, [disable#不启用,internetCommunicate#基于网络通信,cardReadAndWrite#基于卡读写], attr:opt{req, string, 取值范围, range:[,]}-->disable
  </mode>
  <rule opt="line,inOrOut">
    <!--ro, req, enum, 反潜回规则, subType:string, [line#线路反潜回,inOrOut#进出反潜回], attr:opt{req, string, 取值范围, range:[,]}, desc:mode节点为disable时该节点无效-->line
  </rule>
  <sectionID min="1" max="1">
    <!--ro, req, int, 扇区ID, range:[1,100], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{opt, int, 最大值, range:[1,100], step:, unit:, unitType:无, desc:mode节点为cardReadAndWrite时有效,扇区ID每次只能配置一个}, desc:扇区ID(mode节点为cardReadAndWrite时有效,扇区ID每次只能配置一个)-->1
  </sectionID>
</SubmarineBackMode>

105. 获取跨主机反潜回模式

105.1 命令

GET /ISAPI/AccessControl/SubmarineBackMode

105.2 输入参数

105.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<SubmarineBackMode xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 跨主机反潜回模式配置, attr:version{req, string, 协议版本, range:[,]}-->
  <mode>
    <!--ro, req, enum, 反潜回模式, subType:string, [disable#不启用,internetCommunicate#基于网络通信,cardReadAndWrite#基于卡读写]-->disable
  </mode>
  <rule>
    <!--ro, req, enum, 反潜回规则, subType:string, [line#线路反潜回,inOrOut#进出反潜回], desc:mode节点为disable时该节点无效-->line
  </rule>
  <sectionID>
    <!--ro, req, int, 扇区ID, range:[1,100], step:, unit:, unitType:无, desc:扇区ID(mode节点为cardReadAndWrite时有效,扇区ID每次只能配置一个)-->1
  </sectionID>
</SubmarineBackMode>

106. 配置跨主机反潜回模式

106.1 命令

PUT /ISAPI/AccessControl/SubmarineBackMode

106.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<SubmarineBackMode xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--req, object, 跨主机反潜回模式配置, attr:version{req, string, 协议版本, range:[,]}-->
  <mode>
    <!--ro, req, enum, 反潜回模式, subType:string, [disable#不启用,internetCommunicate#基于网络通信,cardReadAndWrite#基于卡读写]-->disable
  </mode>
  <rule>
    <!--ro, req, enum, 反潜回规则, subType:string, [line#线路反潜回,inOrOut#进出反潜回], desc:mode节点为disable时该节点无效-->line
  </rule>
  <sectionID>
    <!--ro, req, int, 扇区ID, range:[1,100], step:, unit:, unitType:无, desc:mode节点为cardReadAndWrite时有效,扇区ID每次只能配置一个-->1
  </sectionID>
</SubmarineBackMode>

106.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

107. 获取跨主机反潜回信息清除能力

107.1 命令

GET /ISAPI/AccessControl/ClearSubmarineBack/capabilities

107.2 输入参数

107.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ClearSubmarineBack xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 跨主机反潜回信息清除, attr:version{req, string, 协议版本, range:[,]}-->
  <clearHostInfo opt="true,false">
    <!--ro, opt, bool, 清除主机信息, attr:opt{req, string, 取值范围, range:[,]}-->true
  </clearHostInfo>
  <clearReaderInfo opt="true,false">
    <!--ro, opt, bool, 清除读卡器信息, attr:opt{req, string, 取值范围, range:[,]}-->true
  </clearReaderInfo>
  <clearSubmarineBack opt="true,false">
    <!--ro, opt, bool, 清除跨主机反潜回服务器配置, attr:opt{req, string, 取值范围, range:[,]}-->true
  </clearSubmarineBack>
  <clearSubmarineBackHostInfo opt="true,false">
    <!--ro, opt, bool, 清除加入跨主机反潜回主机配置, attr:opt{req, string, 取值范围, range:[,]}-->true
  </clearSubmarineBackHostInfo>
  <clearStartReaderInfo opt="true,false">
    <!--ro, opt, bool, 清除起始读卡器配置, attr:opt{req, string, 取值范围, range:[,]}-->true
  </clearStartReaderInfo>
  <clearSubmarineBackReader opt="true,false">
    <!--ro, opt, bool, 清除跨主机反潜回读卡器配置, attr:opt{req, string, 取值范围, range:[,]}-->true
  </clearSubmarineBackReader>
  <clearSubmarineBackMode opt="true,false">
    <!--ro, opt, bool, 清除跨主机反潜回模式配置, attr:opt{req, string, 取值范围, range:[,]}-->true
  </clearSubmarineBackMode>
  <clearServerDevice opt="true,false">
    <!--ro, opt, bool, 清除加入跨主机反潜回配置, attr:opt{req, string, 取值范围, range:[,]}-->true
  </clearServerDevice>
  <clearReaderAcrossHost opt="true,false">
    <!--ro, opt, bool, 清除读卡器跨主机反潜回配置, attr:opt{req, string, 取值范围, range:[,]}-->true
  </clearReaderAcrossHost>
</ClearSubmarineBack>

108. 配置跨主机反潜回信息清除

108.1 命令

PUT /ISAPI/AccessControl/ClearSubmarineBack

108.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<ClearSubmarineBack xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--req, object, 跨主机反潜回信息, attr:version{req, string, 协议版本, range:[,]}-->
  <clearHostInfo>
    <!--opt, bool, 清除主机信息-->true
  </clearHostInfo>
  <clearReaderInfo>
    <!--opt, bool, 清除读卡器信息-->true
  </clearReaderInfo>
  <clearSubmarineBack>
    <!--opt, bool, 清除跨主机反潜回服务器配置-->true
  </clearSubmarineBack>
  <clearSubmarineBackHostInfo>
    <!--opt, bool, 清除加入跨主机反潜回主机配置-->true
  </clearSubmarineBackHostInfo>
  <clearStartReaderInfo>
    <!--opt, bool, 清除起始读卡器配置-->true
  </clearStartReaderInfo>
  <clearSubmarineBackReader>
    <!--opt, bool, 清除跨主机反潜回读卡器配置-->true
  </clearSubmarineBackReader>
  <clearSubmarineBackMode>
    <!--opt, bool, 清除跨主机反潜回模式配置-->true
  </clearSubmarineBackMode>
  <clearServerDevice>
    <!--opt, bool, 清除加入跨主机反潜回配置-->true
  </clearServerDevice>
  <clearReaderAcrossHost>
    <!--opt, bool, 清除读卡器跨主机反潜回配置-->true
  </clearReaderAcrossHost>
</ClearSubmarineBack>

108.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

109. 获取起始读卡器配置能力

109.1 命令

GET /ISAPI/AccessControl/StartReaderInfo/capabilities

109.2 输入参数

109.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<StartReaderInfo xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 起始读卡器配置, attr:version{req, string, 协议版本, range:[,]}-->
  <hostNo min="1" max="64">
    <!--ro, req, int, 主机编号, range:[1,64], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
  </hostNo>
  <readerNo min="1" max="8">
    <!--ro, req, int, 读卡器编号, range:[1,8], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
  </readerNo>
</StartReaderInfo>

110. 获取起始读卡器配置

110.1 命令

GET /ISAPI/AccessControl/StartReaderInfo

110.2 输入参数

110.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<StartReaderInfo xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 起始读卡器配置, attr:version{req, string, 协议版本, range:[,]}-->
  <hostNo>
    <!--ro, req, int, 主机编号, range:[1,64], step:, unit:, unitType:-->1
  </hostNo>
  <readerNo>
    <!--ro, req, int, 读卡器编号, range:[1,8], step:, unit:, unitType:-->1
  </readerNo>
</StartReaderInfo>

111. 配置起始读卡器

111.1 命令

PUT /ISAPI/AccessControl/StartReaderInfo

111.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<StartReaderInfo xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--req, object, 起始读卡器配置, attr:version{req, string, 协议版本, range:[,]}-->
  <hostNo>
    <!--req, int, 主机编号, range:[1,64], step:, unit:, unitType:-->1
  </hostNo>
  <readerNo>
    <!--req, int, 读卡器编号, range:[1,8], step:, unit:, unitType:-->1
  </readerNo>
</StartReaderInfo>

111.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

112. 获取反潜回刷卡记录清除能力

112.1 命令

GET /ISAPI/AccessControl/ClearCardRecord/capabilities

112.2 输入参数

112.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ClearCardRecord xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 反潜回刷卡记录清除能力, attr:version{req, string, 协议版本, range:[,]}-->
  <clearAllCard opt="true,false">
    <!--ro, req, bool, 清除所有刷卡记录, attr:opt{req, string, 取值范围, range:[,]}-->true
  </clearAllCard>
  <CardList size="32">
    <!--ro, opt, array, 卡号列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <cardNo min="1" max="32">
      <!--ro, opt, string, 卡号, range:[1,32], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </cardNo>
  </CardList>
  <EmployeeNoList size="32">
    <!--ro, opt, array, 工号列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <employeeNo min="1" max="10">
      <!--ro, opt, string, 工号(人员ID), range:[,], attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->test
    </employeeNo>
  </EmployeeNoList>
</ClearCardRecord>

113. 配置反潜回刷卡记录清除

113.1 命令

PUT /ISAPI/AccessControl/ClearCardRecord

113.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<ClearCardRecord xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--req, object, 反潜回刷卡记录, attr:version{req, string, 协议版本, range:[,]}-->
  <clearAllCard>
    <!--req, bool, 清除所有刷卡记录-->true
  </clearAllCard>
  <CardList size="32">
    <!--opt, array, 卡号列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <cardNo>
      <!--opt, string, 卡号, range:[,]-->1
    </cardNo>
  </CardList>
  <EmployeeNoList size="32">
    <!--opt, array, 工号列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <employeeNo>
      <!--opt, string, 工号(人员ID), range:[,]-->1
    </employeeNo>
  </EmployeeNoList>
</ClearCardRecord>

113.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

114. 获取加入跨主机反潜回参数能力

114.1 命令

GET /ISAPI/AccessControl/ServerDevice/capabilities

114.2 输入参数

114.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ServerDevice xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 跨主机反潜回配置, attr:version{req, string, 协议版本, range:[,]}-->
  <ipAddr min="1" max="10">
    <!--ro, req, object, IP地址, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->127.127.0.1
  </ipAddr>
  <port min="1" max="10">
    <!--ro, req, object, 端口, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->80
  </port>
  <registrationCode min="4" max="8">
    <!--ro, opt, string, 注册码, range:[4,8], attr:min{req, int, 最小值, range:[4,8], step:, unit:, unitType:},max{req, int, 最大值, range:[4,8], step:, unit:, unitType:}-->test
  </registrationCode>
</ServerDevice>

115. 获取加入跨主机反潜回

115.1 命令

GET /ISAPI/AccessControl/ServerDevice

115.2 输入参数

115.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ServerDevice xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 跨主机反潜回配置, attr:version{req, string, 协议版本, range:[,]}-->
  <ipAddr>
    <!--ro, req, string, IP地址, range:[,]-->test
  </ipAddr>
  <port>
    <!--ro, req, int, 端口, range:[,], step:, unit:, unitType:-->3000
  </port>
  <registrationCode>
    <!--ro, opt, string, 注册码, range:[4,8], desc:用于设备间校验,字符类型:数字+字母,敏感信息加密-->test
  </registrationCode>
</ServerDevice>

116. 配置加入跨主机反潜回

116.1 命令

PUT /ISAPI/AccessControl/ServerDevice

116.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<ServerDevice xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--req, object, 跨主机反潜回配置, attr:version{req, string, 协议版本, range:[,]}-->
  <ipAddr>
    <!--req, string, IP地址, range:[,]-->127.127.0.1
  </ipAddr>
  <port>
    <!--req, int, 端口, range:[,], step:, unit:, unitType:-->30000
  </port>
  <registrationCode>
    <!--opt, string, 注册码, range:[4,8], desc:用于设备间校验,字符类型:数字+字母, 敏感信息加密-->test
  </registrationCode>
</ServerDevice>

116.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

117. 获取读卡器跨主机反潜回配置能力

117.1 命令

GET /ISAPI/AccessControl/ReaderAcrossHost/capabilities

117.2 输入参数

117.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ReaderAcrossHost xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 读卡器跨主机反潜回配置能力, attr:version{req, string, 协议版本, range:[,]}-->
  <AcrossHostList size="8">
    <!--ro, req, array, 读卡器跨主机反潜回配置列表, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <AcrossHostAction>
      <!--ro, req, object, 读卡器跨主机反潜回配置-->
      <readerNo min="1" max="8">
        <!--ro, req, int, 读卡器编号, range:[1,8], step:, unit:, unitType:, attr:min{req, int, 最小值, range:[,], step:, unit:, unitType:},max{req, int, 最大值, range:[,], step:, unit:, unitType:}-->1
      </readerNo>
      <submarineBackEnabled opt="true,false">
        <!--ro, req, bool, 读卡器是否加入跨主机反潜回, attr:opt{req, string, 取值范围, range:[,]}-->true
      </submarineBackEnabled>
    </AcrossHostAction>
  </AcrossHostList>
</ReaderAcrossHost>

118. 获取读卡器跨主机反潜回配置

118.1 命令

GET /ISAPI/AccessControl/ReaderAcrossHost

118.2 输入参数

118.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ReaderAcrossHost xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 读卡器跨主机反潜回列表, attr:version{req, string, 协议版本, range:[,]}-->
  <AcrossHostList size="8">
    <!--ro, req, array, 读卡器跨主机反潜回, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <AcrossHostAction>
      <!--ro, req, object, 读卡器跨主机反潜回-->
      <readerNo>
        <!--ro, req, int, 读卡器编号, range:[1,8], step:, unit:, unitType:无-->1
      </readerNo>
      <submarineBackEnabled>
        <!--ro, req, bool, 读卡器是否加入跨主机反潜回-->true
      </submarineBackEnabled>
    </AcrossHostAction>
  </AcrossHostList>
</ReaderAcrossHost>

119. 配置读卡器跨主机反潜回

119.1 命令

PUT /ISAPI/AccessControl/ReaderAcrossHost

119.2 输入参数

<?xml version="1.0" encoding="UTF-8"?>

<ReaderAcrossHost xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--req, object, 读卡器跨主机反潜回列表, attr:version{req, string, 协议版本, range:[,]}-->
  <AcrossHostList size="8">
    <!--req, array, 读卡器跨主机反潜回, subType:object, range:[,], attr:size{req, int, 数组元素总数, range:[,], step:, unit:, unitType:}-->
    <AcrossHostAction>
      <!--req, object, 读卡器跨主机反潜回-->
      <readerNo>
        <!--req, int, 读卡器编号, range:[1,8], step:, unit:, unitType:-->1
      </readerNo>
      <submarineBackEnabled>
        <!--req, bool, 读卡器是否加入跨主机反潜回-->true
      </submarineBackEnabled>
    </AcrossHostAction>
  </AcrossHostList>
</ReaderAcrossHost>

119.3 输出参数

<?xml version="1.0" encoding="UTF-8"?>

<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
  <!--ro, req, object, 响应消息, attr:version{ro, req, string, 版本, range:[,]}-->
  <requestURL>
    <!--ro, req, string, 请求的URL, range:[,]-->null
  </requestURL>
  <statusCode>
    <!--ro, req, enum, 状态码, subType:int, [0#OK,1#OK,2#Device Busy,3#Device Error,4#Invalid Operation,5#Invalid XML Format,6#Invalid XML Content,7#Reboot Required]-->0
  </statusCode>
  <statusString>
    <!--ro, req, enum, 状态信息, subType:string, [OK#成功,Device Busy#设备忙,Device Error#设备异常,Invalid Operation#无效的操作,Invalid XML Format#无效的XML格式,Invalid XML Content#无效的XML内容,Reboot#设备重启]-->OK
  </statusString>
  <subStatusCode>
    <!--ro, req, string, 详细错误码英文描述, range:[,], desc:详细错误码的英文描述-->OK
  </subStatusCode>
</ResponseStatus>

120. 获取设备内反潜回记录清除能力

120.1 命令

GET /ISAPI/AccessControl/ClearAntiSneak/capabilities?format=json

120.2 输入参数

120.3 输出参数

{
    "ClearAntiSneak": { 
    /*ro, req, object, 反潜回记录清除能力*/
        "EmployeeNoList": { 
        /*ro, opt, object, 人员ID列表*/
            "maxSize":  32, 
            /*ro, opt, int, 最大值, range:[,], step:, unit:, unitType:*/
            "employeeNo": { 
            /*ro, opt, object, 工号(人员ID)*/
                "@min":  1, 
                /*ro, opt, int, 最小值, range:[,], step:, unit:, unitType:*/
                "@max":  32 
                /*ro, opt, int, 最大值, range:[,], step:, unit:, unitType:*/
            }
        },
        "clearMode": {  
        /*ro, opt, object, 清除模式*/
            "@opt": ["employeeNo", "all"]   
            /*ro, opt, array, 枚举, subType:string, range:[,]*/
        }
    }
}

121. 配置设备内反潜回记录清除

121.1 命令

PUT /ISAPI/AccessControl/ClearAntiSneak?format=json

121.2 输入参数

{
    "ClearAntiSneak": { 
    /*ro, req, object, 反潜回记录清除, desc:门禁V2.1设备的设备内反潜回记录清除只支持按人员ID清除,不支持清除全部的操作。如果EmployeeNoList内不填写,那么设备返回失败*/
        "EmployeeNoList": [ 
        /*opt, array, 人员ID列表, subType:object, range:[,], dep:and,{$.ClearAntiSneak.clearMode,eq,employeeNo}, desc:不支持数组为空*/
            {
                "employeeNo":  "test"   
                /*opt, string, 工号(人员ID), range:[,]*/
            }
        ],
        "clearMode":  "employeeNo"  
        /*opt, enum, 清除模式, subType:string, [employeeNo#按工号列表EmployeeNoList清除(默认),all#清除所有人], 
        desc:当为all时,无论EmployeeNoList存在与否,均认为清除所有人
        当为employeeNo时,EmployeeNoList必须存在,且不能为空*/
    }
}

121.3 输出参数

{
    "requestURL":  "test",  
    /*ro, opt, string, URI, range:[,]*/
    "statusCode":  1,   
    /*ro, opt, int, 状态码, range:[,], step:, unit:, unitType:, desc:无法用1表示时(1表示成功且无特殊状态)必须返回*/
    "statusString":  "ok",  
    /*ro, opt, string, 状态描述, range:[1,64], desc:无法用ok表示时(ok表示成功且无特殊状态)必须返回*/
    "subStatusCode":  "ok", 
    /*ro, opt, string, 子状态码, range:[1,64], desc:无法用ok表示(ok表示成功且无特殊状态)必须返回*/
    "errorCode":  1,    
    /*ro, opt, int, 错误码, range:[,], step:, unit:, unitType:, desc:当statusCode不为1时,与subStatusCode对应*/
    "errorMsg":  "ok"   
    /*ro, opt, string, 错误信息, range:[,], desc:当statusCode不为1时,解释信息在协议约束中,允许设备在后续的版本迭代中,进行优化丰富提升(不限制死)*/
}