Documentation for Axxon One 1.0.

Previous page Data export  Bearer authorization Next page

Bearer authorization

Receive a token

Attention!

A direct gRPC request can be anonymous. If an HTTP request is made to a web server, then it is necessary to use the Basic authorization type, since the anonymous requests to the web server are prohibited.

Request body:

{
    "method": "axxonsoft.bl.auth.AuthenticationService.AuthenticateEx",
    "data": {
        "user_name" : "root",
        "password" : "root"
    }
}

Response example:

{
    "token_name": "auth_token",
    "token_value": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiIqLioiLCJleHAiOjE2MDUxOTIxMDcsImlhdCI6MTYwNTE3NzcwNywiaXNzIjoiVi1CRUxZQUtPViIsImxnbiI6InJvb3QiLCJybHMiOlsiOTc0NWI5MDItMmEzNi00MDM1LWJkZDYtMDEyZTBkYWU2NmMwIl0sInNpZCI6Ijk3YjA3ZWQ0LTEzOTctNGFiNC1iZjZiLWQwNTUwYmM1YjcwMSIsInN1YiI6IjMyOGUzODc0LTRhMzMtOWRkMS0yOWViLTQ0YzM3YTQ0MTIxYyJ9.nkqap2aosAafD41vPIICJjIaVCWwGnC1nZRFrPWkt8JpgUnQsxAaZMa1UwIdsTicnH9vWeq6laQgmRJagVnWcunjoJ6wHWptwfk-pGT49YE9V1_PMT_1f3wQoc8Hl5a118DXECQc2lcu56U0H74C9PBc2Xmh-8fbvaWws65y0Ly4rDbwEWdMd-0ocnnErpSiFOr-XEnok9PIVXo_mjgWsg1zxBlgijWqA4jVoQdfBvKzGpTFLxXgguDvCDZQyF3LfpxtjB1jNsZgaFHzxPkloLeq2eQ8TY2Y1g4BDDNW2QU-Ee-DhWoKIMrRWWhsbHLDMNC2sNpNVw0MMMEYSjDyng",
    "expires_at": "20201112T144147",
    "is_unrestricted": true,
    "user_id": "328e3874-4a33-9dd1-29eb-44c37a44121c",
    "roles_ids": [
        "9745b902-2a36-4035-bdd6-012e0dae66c0"
    ],
    "error_code": "AUTHENTICATE_CODE_OK"
}

where

token_value − a Bearer token. The received token should be used in the metadata of the gRPC request. The HTTP requests should be made with the Bearer authorization type using the received token.

expires_at − token expiration date and time in the UTC time zone.

Renew a token

Request body:

{
	"method": "axxonsoft.bl.auth.AuthenticationService.RenewSession",
	"data":
	{		
	}
}

The response will be the same as the response to the receive token request.

Attention!

The token should be active at the time of the request.

Close a token

Request body:

{
	"method": "axxonsoft.bl.auth.AuthenticationService.CloseSession",
	"data":
	{
	}
}

Response example:

{
    "error_code": "OK"
}

Time synchronization of Server and video cameras

POST http://IP-address:port/prefix/grpc

Request body:

{
    "method":"axxonsoft.bl.tz.TimeZoneManager.SetNTP",
    "data":{

        "ntp": {
            "ntp_url": "time.windows.com",
            "sync_ip_devices": true
        }
    }
}

where

  • ntp_url − NTP server of the correct time;
  • sync_ip_devices − if true, then the time is also synchronized on all video cameras of the Server.

Get video cameras list and their parameters using gRPC API methods (DomainService)

POST http://IP-address:port/prefix/grpc

Get list of all cameras

Request body:

 {
"method": "axxonsoft.bl.domain.DomainService.ListCameras",
"data": {
"view" : "VIEW_MODE_FULL"
}
}

Response example:

 
--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 4567

{
 "items": [
  {
   "access_point": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
   "display_name": "Camera",
   "display_id": "1",
   "version": "",
   "ip_address": "0.0.0.0",
   "camera_access": "CAMERA_ACCESS_FULL",
   "vendor": "AxxonSoft",
   "model": "Virtual",
   "comment": "",
   "armed": true,
   "video_streams": [
    {
     "stream_acess_point": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
     "decoder_acess_point": "hosts/Server1/VideoDecoder.1/SourceEndpoint.video",
     "enabled": false,
     "display_name": "Camera",
     "display_id": "0",
     "is_activated": true
    }
   ],
   "microphones": [
    {
     "access_point": "hosts/Server1/DeviceIpint.1/SourceEndpoint.audio:0",
     "display_name": "",
     "display_id": "0",
     "microphone_access": "MICROPHONE_ACCESS_FULL",
     "is_activated": false
    }
   ],
   "ptzs": [],
   "archive_bindings": [
    {
     "name": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
     "storage": "hosts/Server1/DeviceIpint.1/MultimediaStorage.0",
     "archive": {
      "access_point": "hosts/Server1/DeviceIpint.1/MultimediaStorage.0",
      "display_name": "",
      "display_id": "DeviceIpint.1",
      "is_embedded": true,
      "archive_access": "ARCHIVE_ACCESS_FULL",
      "bindings": [],
      "is_activated": false
     },
     "is_default": false,
     "sources": [
      {
       "access_point": "hosts/Server1/DeviceIpint.1/Sources/src.0",
       "storage": "hosts/Server1/DeviceIpint.1/MultimediaStorage.0",
       "binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "media_source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "origin": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "mimetype": "video/h264",
       "origin_storage": "",
       "origin_storage_source": ""
      }
     ]
    },
    {
     "name": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
     "storage": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
     "archive": {
      "access_point": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
      "display_name": "AliceBlue",
      "display_id": "MultimediaStorage.AliceBlue",
      "is_embedded": false,
      "archive_access": "ARCHIVE_ACCESS_FULL",
      "bindings": [],
      "is_activated": true
     },
     "is_default": true,
     "sources": [
      {
       "access_point": "hosts/Server1/MultimediaStorage.AliceBlue/Sources/src.47A57090-40B8-7604-A7A1-8E9E9D1421D2",
       "storage": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
       "binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "media_source": "hosts/Server1/AVDetector.13/SourceEndpoint.vmda",
       "origin": "hosts/Server1/AVDetector.13/SourceEndpoint.vmda",
       "mimetype": "application/vmda",
       "origin_storage": "",
       "origin_storage_source": ""
      },
      {
       "access_point": "hosts/Server1/MultimediaStorage.AliceBlue/Sources/src.1A00AA71-A796-A96C-80BD-8ADAAD59938E",
       "storage": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
       "binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "media_source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "origin": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "mimetype": "video/vc-raw",
       "origin_storage": "",
       "origin_storage_source": ""
      },
      {
       "access_point": "hosts/Server1/MultimediaStorage.AliceBlue/Sources/src.875C1A55-D315-4DE1-B7F8-F0CB2F2F6B97",
       "storage": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
       "binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "media_source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.audio:0",
       "origin": "hosts/Server1/DeviceIpint.1/SourceEndpoint.audio:0",
       "mimetype": "application/audio",
       "origin_storage": "",
       "origin_storage_source": ""
      }
     ]
    }
   ],
   "ray": [],
   "relay": [],
   "detectors": [
    {
     "access_point": "hosts/Server1/AVDetector.13/EventSupplier",
     "display_name": "",
     "display_id": "13",
     "parent_detector": "",
     "scene_descriptions": [
      {
       "access_point": "hosts/Server1/AVDetector.13/SourceEndpoint.vmda"
      }
     ],
     "events": []
    }
   ],
   "offline_detectors": [],
   "group_ids": [
    "e2f20843-7ce5-d04c-8a4f-826e8b16d39c"
   ],
   "is_activated": true,
   "text_sources": [],
   "speakers": []
  }
 ],
 "next_page_token": ""
}

--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 41

{
 "items": [],
 "next_page_token": ""
}

Get info about a particular camera

Request body:

{
"method": "axxonsoft.bl.domain.DomainService.BatchGetCameras",
"data": {
	"items":[{
	    "access_point":"hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0"
			}]
	}
}

Response example:

 
--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 9038

{
 "items": [
  {
   "access_point": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
   "display_name": "Server1-Auto",
   "display_id": "1",
   "version": "",
   "ip_address": "0.0.0.0",
   "camera_access": "CAMERA_ACCESS_FULL",
   "vendor": "AxxonSoft",
   "model": "Virtual",
   "comment": "",
   "armed": true,
   "video_streams": [
    {
     "stream_acess_point": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
     "decoder_acess_point": "hosts/Server1/VideoDecoder.1/SourceEndpoint.video",
     "enabled": false,
     "display_name": "Server1-Auto",
     "display_id": "0",
     "is_activated": true
    }
   ],
   "microphones": [],
   "ptzs": [],
   "archive_bindings": [
    {
     "name": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
     "storage": "hosts/Server1/DeviceIpint.1/MultimediaStorage.0",
     "archive": {
      "access_point": "hosts/Server1/DeviceIpint.1/MultimediaStorage.0",
      "display_name": "",
      "display_id": "DeviceIpint.1",
      "is_embedded": true,
      "archive_access": "ARCHIVE_ACCESS_FULL",
      "bindings": [],
      "is_activated": false
     },
     "is_default": false,
     "sources": [
      {
       "access_point": "hosts/Server1/DeviceIpint.1/Sources/src.0",
       "storage": "hosts/Server1/DeviceIpint.1/MultimediaStorage.0",
       "binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "media_source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "origin": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "mimetype": "video/h264",
       "origin_storage": "",
       "origin_storage_source": ""
      }
     ]
    },
    {
     "name": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
     "storage": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
     "archive": {
      "access_point": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
      "display_name": "1",
      "display_id": "MultimediaStorage.AntiqueWhite",
      "is_embedded": false,
      "archive_access": "ARCHIVE_ACCESS_FULL",
      "bindings": [],
      "is_activated": true
     },
     "is_default": true,
     "sources": [
      {
       "access_point": "hosts/Server1/MultimediaStorage.AntiqueWhite/Sources/src.9287FD97-D0FE-4675-B3E4-3E859ABC92B8",
       "storage": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
       "binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "media_source": "hosts/Server1/AVDetector.14/SourceEndpoint.vmda",
       "origin": "hosts/Server1/AVDetector.14/SourceEndpoint.vmda",
       "mimetype": "application/vmda",
       "origin_storage": "",
       "origin_storage_source": ""
      },
      {
       "access_point": "hosts/Server1/MultimediaStorage.AntiqueWhite/Sources/src.19C6698F-5674-7A0A-8C6F-2253D21F86D2",
       "storage": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
       "binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "media_source": "hosts/Server1/AVDetector.35/SourceEndpoint.vmda",
       "origin": "hosts/Server1/AVDetector.35/SourceEndpoint.vmda",
       "mimetype": "application/vmda",
       "origin_storage": "",
       "origin_storage_source": ""
      },
      {
       "access_point": "hosts/Server1/MultimediaStorage.AntiqueWhite/Sources/src.D208E3CC-E717-BC96-DA01-3F420784A1D0",
       "storage": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
       "binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "media_source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "origin": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "mimetype": "video/vc-raw",
       "origin_storage": "",
       "origin_storage_source": ""
      },
      {
       "access_point": "hosts/Server1/MultimediaStorage.AntiqueWhite/Sources/src.A7CC6732-57F5-0FF0-C48C-7ADA7ECD779D",
       "storage": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
       "binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "media_source": "hosts/Server1/DeviceIpint.10/SourceEndpoint.audio:0",
       "origin": "hosts/Server1/DeviceIpint.10/SourceEndpoint.audio:0",
       "mimetype": "application/audio",
       "origin_storage": "",
       "origin_storage_source": ""
      }
     ]
    },
    {
     "name": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
     "storage": "hosts/Server1/MultimediaStorage.Aquamarine/MultimediaStorage",
     "archive": {
      "access_point": "hosts/Server1/MultimediaStorage.Aquamarine/MultimediaStorage",
      "display_name": "Aquamarine",
      "display_id": "MultimediaStorage.Aquamarine",
      "is_embedded": false,
      "archive_access": "ARCHIVE_ACCESS_FULL",
      "bindings": [],
      "is_activated": true
     },
     "is_default": false,
     "sources": [
      {
       "access_point": "hosts/Server1/MultimediaStorage.Aquamarine/Sources/src.9287FD97-D0FE-4675-B3E4-3E859ABC92B8",
       "storage": "hosts/Server1/MultimediaStorage.Aquamarine/MultimediaStorage",
       "binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "media_source": "hosts/Server1/AVDetector.14/SourceEndpoint.vmda",
       "origin": "hosts/Server1/AVDetector.14/SourceEndpoint.vmda",
       "mimetype": "application/vmda",
       "origin_storage": "",
       "origin_storage_source": ""
      },
      {
       "access_point": "hosts/Server1/MultimediaStorage.Aquamarine/Sources/src.19C6698F-5674-7A0A-8C6F-2253D21F86D2",
       "storage": "hosts/Server1/MultimediaStorage.Aquamarine/MultimediaStorage",
       "binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "media_source": "hosts/Server1/AVDetector.35/SourceEndpoint.vmda",
       "origin": "hosts/Server1/AVDetector.35/SourceEndpoint.vmda",
       "mimetype": "application/vmda",
       "origin_storage": "",
       "origin_storage_source": ""
      },
      {
       "access_point": "hosts/Server1/MultimediaStorage.Aquamarine/Sources/src.D208E3CC-E717-BC96-DA01-3F420784A1D0",
       "storage": "hosts/Server1/MultimediaStorage.Aquamarine/MultimediaStorage",
       "binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "media_source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "origin": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "mimetype": "video/vc-raw",
       "origin_storage": "",
       "origin_storage_source": ""
      }
     ]
    }
   ],
   "ray": [],
   "relay": [],
   "detectors": [
    {
     "access_point": "hosts/Server1/AVDetector.14/EventSupplier",
     "display_name": "",
     "display_id": "14",
     "parent_detector": "",
     "is_activated": true,
     "scene_descriptions": [
      {
       "access_point": "hosts/Server1/AVDetector.14/SourceEndpoint.vmda"
      }
     ],
     "events": [
      {
       "id": "TargetList",
       "name": "",
       "event_type": "PERIODICAL_EVENT_TYPE"
      },
      {
       "id": "plateRecognized",
       "name": "",
       "event_type": "ONE_PHASE_EVENT_TYPE"
      }
     ]
    },
    {
     "access_point": "hosts/Server1/AVDetector.39/EventSupplier",
     "display_name": "",
     "display_id": "39",
     "parent_detector": "",
     "is_activated": false,
     "scene_descriptions": [],
     "events": [
      {
       "id": "SmokeDetected",
       "name": "",
       "event_type": "TWO_PHASE_EVENT_TYPE"
      },
      {
       "id": "MotionMask",
       "name": "",
       "event_type": "ONE_PHASE_EVENT_TYPE"
      }
     ]
    },
    {
     "access_point": "hosts/Server1/AVDetector.40/EventSupplier",
     "display_name": "",
     "display_id": "40",
     "parent_detector": "",
     "is_activated": false,
     "scene_descriptions": [],
     "events": [
      {
       "id": "FireDetected",
       "name": "",
       "event_type": "TWO_PHASE_EVENT_TYPE"
      },
      {
       "id": "MotionMask",
       "name": "",
       "event_type": "ONE_PHASE_EVENT_TYPE"
      }
     ]
    },
    {
     "access_point": "hosts/Server1/AVDetector.35/EventSupplier",
     "display_name": "",
     "display_id": "35",
     "parent_detector": "",
     "is_activated": true,
     "scene_descriptions": [
      {
       "access_point": "hosts/Server1/AVDetector.35/SourceEndpoint.vmda"
      }
     ],
     "events": [
      {
       "id": "TargetList",
       "name": "",
       "event_type": "PERIODICAL_EVENT_TYPE"
      },
      {
       "id": "faceAppeared",
       "name": "",
       "event_type": "ONE_PHASE_EVENT_TYPE"
      }
     ]
    }
   ],
   "offline_detectors": [],
   "group_ids": [
    "e2f20843-7ce5-d04c-8a4f-826e8b16d39c"
   ],
   "is_activated": true,
   "text_sources": [],
   "speakers": []
  }
 ],
 "not_found_objects": [],
 "unreachable_objects": []
}

--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 71

{
 "items": [],
 "not_found_objects": [],
 "unreachable_objects": []
}


}

--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 71

{
 "items": [],
 "not_found_objects": [],
 "unreachable_objects": []
}

Get list of all cameras of all nodes of this Server

Request body:

{
	"method": "axxonsoft.bl.domain.DomainService.ListCameras",
	"data":
	{
		"view": "VIEW_MODE_NO_CHILD_OBJECTS"
	}
}

Get list of all cameras of a particular node

Request body:

{
	"method": "axxonsoft.bl.domain.DomainService.ListCameras",
	"data":
	{
		"filter": "hosts/Node1/",
		"view": "VIEW_MODE_NO_CHILD_OBJECTS"
	}
}


Manage devices using gRPC API methods (ConfigurationService)


Get information about device

{
    "method": "axxonsoft.bl.config.ConfigurationService.ListUnits",
    "data": {
        "unit_uids": [
            "hosts/Server1/DeviceIpint.10"
        ]
    }
}

Response example:

{
    "units": [
        {
            "uid": "hosts/Server1/DeviceIpint.10",
            "display_id": "10",
            "type": "DeviceIpint",
            "display_name": "",
            "access_point": "",
            "properties": [
                {
                    "id": "display_name",
                    "name": "Display name",
                    "type": "string",
                    "readonly": false,
                    "value_string": "axis"
                },
                {
                    "id": "driverName",
                    "name": "Driver Name",
                    "type": "string",
                    "readonly": true,
                    "value_string": "Axis"
                },
                {
                    "id": "driverVersion",
                    "name": "Driver Version",
                    "type": "string",
                    "readonly": true,
                    "value_string": "3.0.0"
                },
                {
                    "id": "vendor",
                    "name": "Device Vendor",
                    "type": "string",
                    "readonly": false,
                    "enum_constraint": {},
                    "value_string": "Axis"
                },
                {
                    "id": "model",
                    "name": "Device Model",
                    "type": "string",
                    "readonly": false,
                    "value_string": "P1343"
                },
                {
                    "id": "firmware",
                    "name": "Firmware version",
                    "type": "string",
                    "readonly": false,
                    "value_string": "5.06"
                },
                {
                    "id": "address",
                    "name": "IP Address of device",
                    "type": "string",
                    "readonly": false,
                    "value_string": "192.168.0.181"
                },
                {
                    "id": "port",
                    "name": "Port number",
                    "type": "int32",
                    "readonly": false,
                    "value_int32": 80
                },
                {
                    "id": "useDefaultAuthentication",
                    "name": "Use default device credentials",
                    "type": "bool",
                    "readonly": false,
                    "value_bool": false
                },
                {
                    "id": "user",
                    "name": "Login",
                    "type": "string",
                    "readonly": false,
                    "value_string": "root"
                },
                {
                    "id": "password",
                    "name": "Password",
                    "type": "string",
                    "readonly": false,
                    "value_string": "pass"
                },
                {
                    "id": "blockingConfiguration",
                    "name": "Preserve device settings",
                    "type": "bool",
                    "readonly": false,
                    "value_bool": false
                },
                {
                    "id": "geoLocationLatitude",
                    "name": "Geolocation Latitude",
                    "type": "double",
                    "readonly": false,
                    "value_double": 35
                },
                {
                    "id": "geoLocationLongitude",
                    "name": "Geolocation Longitude",
                    "type": "double",
                    "readonly": false,
                    "value_double": 45
                },
                {
                    "id": "geoLocationAzimuth",
                    "name": "Geolocation Azimuth",
                    "type": "double",
                    "readonly": false,
                    "value_double": 0
                }
            ],
            "units": [
                {
                    "uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0",
                    "display_id": "0",
                    "type": "VideoChannel",
                    "display_name": "",
                    "access_point": "",
                    "properties": [],
                    "units": [],
                    "factory": [],
                    "destruction_args": [],
                    "discoverable": false,
                    "status": "UNIT_STATUS_ACTIVE",
                    "stripped": false,
                    "opaque_params": [],
                    "assigned_templates": []
                },
                {
                    "uid": "hosts/Server1/DeviceIpint.10/Microphone.0",
                    "display_id": "0",
                    "type": "Microphone",
                    "display_name": "",
                    "access_point": "",
                    "properties": [],
                    "units": [],
                    "factory": [],
                    "destruction_args": [],
                    "discoverable": false,
                    "status": "UNIT_STATUS_INACTIVE",
                    "stripped": false,
                    "opaque_params": [],
                    "assigned_templates": []
                },
                {
                    "uid": "hosts/Server1/DeviceIpint.10/Telemetry.0",
                    "display_id": "0",
                    "type": "Telemetry",
                    "display_name": "",
                    "access_point": "",
                    "properties": [],
                    "units": [],
                    "factory": [],
                    "destruction_args": [],
                    "discoverable": false,
                    "status": "UNIT_STATUS_ACTIVE",
                    "stripped": false,
                    "opaque_params": [],
                    "assigned_templates": []
                },
                {
                    "uid": "hosts/Server1/DeviceIpint.10/IO.0",
                    "display_id": "0",
                    "type": "IO",
                    "display_name": "",
                    "access_point": "",
                    "properties": [],
                    "units": [],
                    "factory": [],
                    "destruction_args": [],
                    "discoverable": false,
                    "status": "UNIT_STATUS_INACTIVE",
                    "stripped": false,
                    "opaque_params": [],
                    "assigned_templates": []
                },
                {
                    "uid": "hosts/Server1/DeviceIpint.10/Speaker.0",
                    "display_id": "0",
                    "type": "Speaker",
                    "display_name": "",
                    "access_point": "",
                    "properties": [],
                    "units": [],
                    "factory": [],
                    "destruction_args": [],
                    "discoverable": false,
                    "status": "UNIT_STATUS_INACTIVE",
                    "stripped": false,
                    "opaque_params": [],
                    "assigned_templates": []
                }
            ],
            "factory": [],
            "destruction_args": [],
            "discoverable": false,
            "status": "UNIT_STATUS_ACTIVE",
            "stripped": false,
            "opaque_params": [],
            "assigned_templates": [
                "502f5739-0b18-4852-891a-35aefbd85d7c"
            ]
        }
    ],
    "unreachable_objects": [],
    "not_found_objects": []
}

The units field properties contain the following information:

  • device name,
  • manufacturer,
  • device model,
  • IP address,
  • port,
  • firmware,
  • login and password,
  • geolocation data.

The child objects of the device (video channels, streams, microphones, speakers, telemetry, sensors and relays) will be indicated in child units.

Get information about device child objects

Request example for getting information about a video channel:

{
    "method":"axxonsoft.bl.config.ConfigurationService.ListUnits",
    "data":{
        "unit_uids":["hosts/Server1/DeviceIpint.10/VideoChannel.0"]
            }
}

Response:

{
                    "uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0",
                    "display_id": "0",
                    "type": "VideoChannel",
                    "display_name": "",
                    "access_point": "",
                    "properties": [
                        {
                            "id": "channel_id",
                            "name": "",
                            "type": "int32",
                            "readonly": true,
                            "value_int32": 0
                        },
                        {
                            "id": "display_name",
                            "name": "Display name",
                            "type": "string",
                            "readonly": false,
                            "value_string": "axis"
                        },
                        {
                            "id": "comment",
                            "name": "Comment",
                            "type": "string",
                            "readonly": false,
                            "value_string": ""
                        },
                        {
                            "id": "enabled",
                            "name": "Enable VideoChannel",
                            "type": "bool",
                            "readonly": false,
                            "value_bool": true
                        },
                        {
                            "id": "brightness",
                            "name": "",
                            "type": "int32",
                            "readonly": false,
                            "range_constraint": {},
                            "value_int32": 50
                        },
                        {
                            "id": "contrast",
                            "name": "",
                            "type": "int32",
                            "readonly": false,
                            "range_constraint": {},
                            "value_int32": 50
                        },
                        {
                            "id": "digitalPtz",
                            "name": "",
                            "type": "bool",
                            "readonly": false,
                            "value_bool": false
                        },
                        {
                            "id": "flickerfree",
                            "name": "",
                            "type": "string",
                            "readonly": false,
                            "enum_constraint": {},
                            "value_string": "auto"
                        },
                        {
                            "id": "imageFlip",
                            "name": "",
                            "type": "int32",
                            "readonly": false,
                            "enum_constraint": {},
                            "value_int32": 0
                        },
                        {
                            "id": "maxZoom",
                            "name": "",
                            "type": "int32",
                            "readonly": false,
                            "enum_constraint": {},
                            "value_int32": 250
                        },
                        {
                            "id": "saturation",
                            "name": "",
                            "type": "int32",
                            "readonly": false,
                            "range_constraint": {},
                            "value_int32": 50
                        },
                        {
                            "id": "sharpness",
                            "name": "",
                            "type": "int32",
                            "readonly": false,
                            "range_constraint": {},
                            "value_int32": 50
                        }
                    ],
                    "units": [
                        {
                            "uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0/Streaming.0",
                            "display_id": "0",
                            "type": "Streaming",
                            "display_name": "",
                            "access_point": "",
                            "properties": [],
                            "units": [],
                            "factory": [],
                            "destruction_args": [],
                            "discoverable": false,
                            "status": "UNIT_STATUS_ACTIVE",
                            "stripped": false,
                            "opaque_params": [],
                            "assigned_templates": []
                        },
                        {
                            "uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0/Streaming.1",
                            "display_id": "1",
                            "type": "Streaming",
                            "display_name": "",
                            "access_point": "",
                            "properties": [],
                            "units": [],
                            "factory": [],
                            "destruction_args": [],
                            "discoverable": false,
                            "status": "UNIT_STATUS_ACTIVE",
                            "stripped": false,
                            "opaque_params": [],
                            "assigned_templates": []
                        },
                        {
                            "uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0/Detector.motion_detection",
                            "display_id": "motion_detection",
                            "type": "Detector",
                            "display_name": "",
                            "access_point": "",
                            "properties": [],
                            "units": [],
                            "factory": [],
                            "destruction_args": [],
                            "discoverable": false,
                            "status": "UNIT_STATUS_INACTIVE",
                            "stripped": false,
                            "opaque_params": [],
                            "assigned_templates": []
                        },
                        {
                            "uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0/Detector.tampering_detection",
                            "display_id": "tampering_detection",
                            "type": "Detector",
                            "display_name": "",
                            "access_point": "",
                            "properties": [],
                            "units": [],
                            "factory": [],
                            "destruction_args": [],
                            "discoverable": false,
                            "status": "UNIT_STATUS_INACTIVE",
                            "stripped": false,
                            "opaque_params": [],
                            "assigned_templates": []
                        },
                        {
                            "uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0/Detector.audio_detection",
                            "display_id": "audio_detection",
                            "type": "Detector",
                            "display_name": "",
                            "access_point": "",
                            "properties": [],
                            "units": [],
                            "factory": [],
                            "destruction_args": [],
                            "discoverable": false,
                            "status": "UNIT_STATUS_INACTIVE",
                            "stripped": false,
                            "opaque_params": [],
                            "assigned_templates": []
                        }
                    ],
                    "factory": [],
                    "destruction_args": [],
                    "discoverable": false,
                    "status": "UNIT_STATUS_ACTIVE",
                    "stripped": false,
                    "opaque_params": [],
                    "assigned_templates": []
                }

The properties contain the video parameters, the child ones contain streams and detection tools, if created.

Change the configuration

Adding the device

Adding a virtual video camera without settings:

{
    "method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data": {
        "added": [
            {
                "uid": "hosts/Server1",
                "units": [
                    {
                        "type": "DeviceIpint",
                        "units": [],
                        "properties": [
                            {
                                "id": "vendor",
                                "value_string": "axxonsoft",
                                "properties": [
                                    {
                                        "id": "model",
                                        "value_string": "Virtual",
                                        "properties": []
                                    }
                                ]
                            },
                            {
                                "id": "display_name",
                                "value_string": "newOrder2",
                                "properties": []
                            },
                            {
                                "id": "blockingConfiguration",
                                "value_bool": false,
                                "properties": []
                            },
                            {
                                "id": "display_id",
                                "value_string": "199"
                            }
                        ]
                    }
                ]
            }
        ]
    }
}


where uid is the Server where the device is created.

As a result, a camera with a child microphone, an embedded archive and a sensor will be created. All child objects except the video channel will be turned off.

{    
	"failed": [],    
	"added": ["hosts/Server1/DeviceIpint.199"]
}

where 199 is the id of the created device.

Note

In some cases, the id of the created device may not coincide with the specified value of display_id in the request.

Creating the object tracker

{
    "method":"axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data":{
        "added": {
            "uid": "hosts/Server1",
            "units": {
                "type": "AVDetector",
                "properties": [
                    {
                        "id": "display_name",
                        "value_string": "Object tracker"
                    },
                    {                      
                        "id": "input",
                        "value_string": "Video",
                        "properties": [
                            {      
                                "id": "camera_ref",
                                "value_string": "hosts/Server1/DeviceIpint.200/SourceEndpoint.video:0:0",
                                "properties": [
                                    {
                                        "id": "streaming_id",
                                        "value_string": "hosts/Server1/DeviceIpint.200/SourceEndpoint.video:0:0"
                                    }
                                ]
                            },                     
                            {
                                "id": "detector",
                                "value_string": "SceneDescription"
                            }
                        ]
                    }
                ]
            }
        }
    }
}

Creating the motion in area detection tool under the object tracker

{
    "method":"axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data":{
        "added": {
            "uid": "hosts/Server1",
            "units": {
                "type": "AppDataDetector",
                "properties": [
                    {
                        "id": "display_name",
                        "value_string": "AppDataDetectorMoveInZone"
                    },
                    {                      
                        "id": "input",
                        "value_string": "TargetList",
                        "properties": [
                            {      
                                "id": "camera_ref",
                                "value_string": "hosts/Server1/DeviceIpint.200/SourceEndpoint.video:0:0",
                                "properties": [
                                    {
                                        "id": "streaming_id",
                                        "value_string": "hosts/Server1/AVDetector.1/SourceEndpoint.vmda"
                                    }
                                ]
                            },                     
                            {
                                "id": "detector",
                                "value_string": "MoveInZone"
                            }
                        ]
                    }
                ]
            }
        }
    }
}

Changing a video folder for a virtual camera

{
    "method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data": {
        "changed": [
            {
                "uid": "hosts/Server1/DeviceIpint.199/VideoChannel.0/Streaming.0",
                "type": "Streaming",
                "properties": [
                    {
                        "id": "folder",
                        "value_string": "D:/Video"
                    }
                ],
                "opaque_params": []
            }
        ]
    }
}

Enabling/disabling the object

Each unit contains an enabled property.

Enabling the microphone:

{
    "method":"axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data":{
        "changed":[{
              "uid": "hosts/Server1/DeviceIpint.10/Microphone.0",
              "type": "Microphone",
              "properties": [ {
                  "id": "enabled",
                  "value_bool": true
                } ],
               "units":[]
        }]
    }
}

Removing the device

{
    "method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data": {
        "removed": [
            {
                "uid": "hosts/Server1/DeviceIpint.199"
            }
        ]
    }
}

Change detection tool mask using gRPC API (ConfigurationService)

To get the identifier of the detection tool mask, it is necessary to run a query of the following type:
{
    "method":"axxonsoft.bl.config.ConfigurationService.ListUnits",
    "data":{
        "unit_uids": ["hosts/Server1/AppDataDetector.1"]
    }
}

where unit_uids is the name of the required detection tool (see Manage devices using gRPC API methods (ConfigurationService)).

Find the units parameter group in the query response:

  "units": [
                {
                    "uid": "hosts/Server1/AppDataDetector.1/VisualElement.76c7fadf-7f96-4f30-b57a-e3ba585fbc6f",
                    "display_id": "76c7fadf-7f96-4f30-b57a-e3ba585fbc6f",
                    "type": "VisualElement",
                    "display_name": "Polyline",
                    "access_point": "",
                    "properties": [
                        {
                            "id": "polyline",
                            "name": "Polyline",
                            "description": "Polyline.",
                            "type": "SimplePolygon",
                            "readonly": false,
                            "internal": false,
                            "value_simple_polygon": {
                                "points": [
                                    {
                                        "x": 0.01,
                                        "y": 0.01
                                    },
                                    {
                                        "x": 0.01,
                                        "y": 0.99
                                    },
                                    {
                                        "x": 0.99,
                                        "y": 0.99
                                    },
                                    {
                                        "x": 0.99,
                                        "y": 0.01
                                    }
                                ]
                            }
                        }

where 

  • uid − the mask identifier.
  • x, y − the coordinates of the point apex.

To change the points of the mask, it is necessary to run a query using the obtained mask uid:

{
    "method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data": {
        "changed": [
            {
                "uid": "hosts/Server1/AppDataDetector.1/VisualElement.76c7fadf-7f96-4f30-b57a-e3ba585fbc6f",
                "type": "VisualElement",
                "properties": [
                        {
                            "id": "polyline",
                            "value_simple_polygon": {
                                "points": [
                                   {
                                        "x": 0.01,
                                        "y": 0.01
                                    },
                                    {
                                        "x": 0.01,
                                        "y": 0.99
                                    },
                                    {
                                        "x": 0.99,
                                        "y": 0.99
                                    },
                                    {
                                        "x": 0.99,
                                        "y": 0.01
                                    }
                                ]
                            }
                        
                    }
                ]
            }
        ]
    }

You can also add and remove the polygon points of the mask using this query.

Manage groups of video cameras using gRPC API methods

POST http://IP-address:port/prefix/grpc

Get list of all groups

Request body:

{
"method": "axxonsoft.bl.groups.GroupManager.ListGroups",
"data": {
     "view": "VIEW_MODE_TREE"
}
}
  • "view": "VIEW_MODE_TREE" − the object tree view.
  • "view": "VIEW_MODE_DEFAULT" − not the object tree view.

Get info about certain group

{
"method": "axxonsoft.bl.groups.GroupManager.BatchGetGroups",
"data": {
     "group_ids": ["5229f799-b8d8-9045-90e8-7e0e78bcd719"],
     "with_sub_groups": true
}
}
  • "with_sub_groups": true − including the child groups.
  • "with_sub_groups": false − without the child groups.

Create a group

{
"method": "axxonsoft.bl.groups.GroupManager.ChangeGroups",
"data": {
    "added_groups": {
                            "group_id":"01e42aac-30f9-3d4b-8bb1-6ef60e215a6d",
                            "name":"Edited group",
                            "description":"postman"
                            }
        }
}

Edit a group

{
"method": "axxonsoft.bl.groups.GroupManager.ChangeGroups",
"data": {
    "changed_groups_info": {
                            "group_id":"01e42aac-30f9-3d4b-8bb1-6ef60e215a7d",
                            "parent":"e2f20843-7ce5-d04c-8a4f-826e8b16d39c"
                            }
        }
}

Delete a group

{
"method": "axxonsoft.bl.groups.GroupManager.ChangeGroups",
"data": {
    "removed_groups":"b7d2fc67-6125-b341-800f-5f1747946788"
        }
}

Add a camera to the group

{
"method": "axxonsoft.bl.groups.GroupManager.SetObjectsMembership",
"data": {
    "added_objects":{
            "group_id":"01e42aac-30f9-3d4b-8bb1-6ef60e215a6d",
            "object":"hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0"
            }
        }
}

Delete a camera from the group

{
"method": "axxonsoft.bl.groups.GroupManager.SetObjectsMembership",
"data": {
    "removed_objects":{
            "group_id":"01e42aac-30f9-3d4b-8bb1-6ef60e215a6d",
            "object":"hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0"
            }
        }
}

Manage alerts using gRPC API methods

Alert initiation

POST http://IP-address:port/prefix/grpc

Request body:

{
    "method":"axxonsoft.bl.logic.LogicService.RaiseAlert",
    "data":   {
        "camera_ap" : "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0"
        }
}

The response contains the alert id and the result.

{
    "result": true,
    "alert_id": "ddb5ab56-627e-4761-a1eb-f497ef2f7745"
}

Proceed to alert handling

{
    "method":"axxonsoft.bl.logic.LogicService.BeginAlertReview",
    "data":{
        "camera_ap" : "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0",
        "alert_id" : "ddb5ab56-627e-4761-a1eb-f497ef2f7745"
            }
}

Cancel alert handling

{
    "method":"axxonsoft.bl.logic.LogicService.CancelAlertReview",
    "data":{
        "camera_ap" : "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0",
        "alert_id" : "ddb5ab56-627e-4761-a1eb-f497ef2f7745"
    }
}

Continue alert handling

{
    "method":"axxonsoft.bl.logic.LogicService.ContinueAlertReview",
    "data":{
        "camera_ap" : "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0",
        "alert_id" : "ddb5ab56-627e-4761-a1eb-f497ef2f7745"
            }
}

Review the alert

Attention!

To review the alert, it should be in the handling state.

{
    "method":"axxonsoft.bl.logic.LogicService.CompleteAlertReview",
    "data":{       
        "severity" : "SV_WARNING",
        "bookmark" : {},
        "camera_ap" : "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0",
        "alert_id" : "ddb5ab56-627e-4761-a1eb-f497ef2f7745"
            }
}

Note

The severity parameter determines the alert type:

SV_UNCLASSIFIED − missed;
SV_FALSE − false;
SV_WARNING − suspicious;
SV_ALARM − confirmed.

Review the alert with a comment

Attention!

To review the alert, it should be in the handling state.

{
    "method": "axxonsoft.bl.logic.LogicService.RaiseAlert",
    "data": {
        "camera_ap": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0"
    }
}

{
    "method": "axxonsoft.bl.logic.LogicService.BeginAlertReview",
    "data": {
       "camera_ap": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
       "alert_id": "eb683ba7-f30c-44cc-b762-71465f8d7015"
    }
}

{
    "method": "axxonsoft.bl.logic.LogicService.CompleteAlertReview",
    "data": {
        "severity": "SV_ALARM",
        "bookmark": {
            "guid": "b6ba95f2-b7c9-4bd4-93ef-f26040bc93e4",
            "timestamp": "20201001T072442.364",
            "node_info":  {
               "name": "Server1"
            },
            "is_protected": false,
            "camera": {
                "access_point":"hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0"
            },
            "archive": {
                "accessPoint": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"
            },
            "alert_id": "eb683ba7-f30c-44cc-b762-71465f8d7015",
            "group_id": "",
            "boundary": {
                "x": 0.5002633,
                "y": 0.4734651,
                "w": 75.50027,
                "h": 13.47346,
                "index": 0
            },
            "user": "root",
            "range": {
                "begin_time": "20201001T072442.364",
                "end_time": "20201001T072442.364"
            },
            "geometry": {
                "guid": "46486492-34ea-4e48-92ce-2cb43dfd7695",
                "alpha": 147,
                "type": "PT_NONE"
            },
            "message": "TEST"
        },
        "camera_ap": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
        "alert_id": "eb683ba7-f30c-44cc-b762-71465f8d7015"
    }
}

where in the bookmark parameter group:

  • guid − the value should be user-defined and unique for each comment.
  • range: begin_time and end_time − the time interval for which the comment will be saved. The interval should correspond to the alarm time.
  • message − a comment.

Manage macros using gRPC API methods


Get list of all macros

POST http://IP-address:port/prefix/grpc

Request body:

{
    "method":"axxonsoft.bl.logic.LogicService.ListMacros",
    "data": {
        "view": "VIEW_MODE_FULL"
            }
}

Note

VIEW_MODE_FULL − complete information;

VIEW_MODE_STRIPPED − only basic information about macros without the launch and operation conditions.

Get complete information on one/several macros

{
    "method":"axxonsoft.bl.logic.LogicService.BatchGetMacros",
    "data":{
        "macros_ids" : ["cfd41b18-c983-4a48-aaa1-ca7e666e6e49"]
            }
}

Create/Remove/Change macro

Attention!

Requests for creating and changing a macro should contain its entire structure.

Creating:

{
"method": "axxonsoft.bl.logic.LogicService.ChangeMacros",
"data": {
        "added_macros": {
           "guid": "3303abb2-181e-4183-8987-8a06c309a741",
           "name": "TEST_MACRO",
           "mode": {
                "enabled": true,
                "user_role": "",
                "is_add_to_menu": true,
                "common": {}
            },
            "conditions": {
                "0": {
                    "path": "/C:0",
                    "archive_write": {
                        "camera": "hosts/SERVER1/DeviceIpint.1/SourceEndpoint.video:0:0",
                        "state": "ON"
                    }
                },
                    "1": {
                    "path": "/C:0",
                    "archive_write": {
                        "camera": "hosts/SERVER1/DeviceIpint.1/SourceEndpoint.video:0:0",
                        "state": "ON"
                    }
                }
            },
            "rules": {
                "0": {
                    "path": "/E:0",
                    "action": {
                        "timeout_ms": 60000,
                        "cancel_conditions": {},
                        "action": {
                            "raise_alert": {
                                "zone": "",
                                "archive": "",
                                "offset_ms": 0,
                                "mode": "RAM_AlwaysIfNoActiveAlert"
                            }
                        }
                    }
                },
                "1": {
                    "path": "/E:0",
                    "action": {
                        "timeout_ms": 60000,
                        "cancel_conditions": {},
                        "action": {
                            "raise_alert": {
                                "zone": "",
                                "archive": "",
                                "offset_ms": 0,
                                "mode": "RAM_AlwaysIfNoActiveAlert"
                            }
                        }
                    }    
                }
            }
        }
    }
}

Changing (removing conditions and rules):

Note

Leave empty curly brackets { } in the conditions and rules groups.

{
    "method": "axxonsoft.bl.logic.LogicService.ChangeMacros",
    "data": {
            "modified_macros": {
            "guid": "3303abb2-181e-4183-8987-8a06c309a741",
            "mode": {
                "common": {}
            },
            "conditions": {
                "0": {}
            },            
            "rules": {
                "1": {}
            }
        }
    }
}

Removing:

{
    "method":"axxonsoft.bl.logic.LogicService.ChangeMacros",
    "data":{
        "removed_macros" : ["3303abb2-181e-4183-8987-8a06c309a741"]
            }
}

Launch a macro

{
    "method":"axxonsoft.bl.logic.LogicService.LaunchMacro",
    "data":{
        "macro_id" : "caef76f0-37e9-43b0-aba6-c2a2f32ccd2f"
            }
}

Examples

  1. Get information on automatic rule

    Response:

    {
        "items": [
            {
                "guid": "4932bbc7-c702-4a18-b050-2898b1b61738",
                "name": "534k_1.Camera. Motion detection",
                "mode": {
                    "enabled": true,
                    "user_role": "",
                    "is_add_to_menu": false,
                    "autorule": {
                        "zone_ap": "hosts/Server1/DeviceIpint.6/SourceEndpoint.video:0:0",
                        "only_if_armed": false,
                        "timezone_id": "00000000-0000-0000-0000-000000000000"
                    }
                },
                "conditions": {
                    "0": {
                        "path": "/C:0",
                        "detector": {
                            "event_type": "MotionDetected",
                            "source_ap": "hosts/Server1/AVDetector.4/EventSupplier",
                            "state": "BEGAN",
                            "details": []
                        }
                    }
                },
                "rules": {
                    "1": {
                        "path": "/E:1",
                        "action": {
                            "timeout_ms": 0,
                            "cancel_conditions": {
                                "0": {
                                    "path": "/E:1/C:0",
                                    "detector": {
                                        "event_type": "MotionDetected",
                                        "source_ap": "hosts/Server1/AVDetector.4/EventSupplier",
                                        "state": "ENDED",
                                        "details": []
                                    }
                                }
                            },
                            "action": {
                                "raise_alert": {
                                    "zone": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
                                    "archive": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
                                    "offset_ms": 0,
                                    "mode": "RAM_AlwaysIfNoActiveAlert"
                                }
                            }
                        }
                    },
                    "0": {
                        "path": "/E:0",
                        "action": {
                            "timeout_ms": 0,
                            "cancel_conditions": {
                                "0": {
                                    "path": "/E:0/C:0",
                                    "detector": {
                                        "event_type": "MotionDetected",
                                        "source_ap": "hosts/Server1/AVDetector.6/EventSupplier",
                                        "state": "BEGAN",
                                        "details": []
                                    }
                                }
                            },
                            "action": {
                                "write_archive": {
                                    "camera": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
                                    "archive": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
                                    "min_prerecord_ms": 0,
                                    "post_event_timeout_ms": 0
                                }
                            }
                        }
                    }
                }
            }
        ]
    }
  2. Create a macro.

    {
        "method":"axxonsoft.bl.logic.LogicService.ChangeMacros",
        "data":{
            "added_macros" : {
                "guid": "b55c118a-f902-43ec-b55a-67ee062640b2",
                "name": "MacroEmail",
                "mode": {
                    "enabled": true,
                    "user_role": "",
                    "is_add_to_menu": false,
                    "continuous": {
                        "server": "Server1",
                        "timezone_id": "00000000-0000-0000-0000-000000000000",
                        "heartbeat_ms": 0,
                        "random": true
                    }
                },
                "conditions": {},
                "rules": {
                    "0": {
                        "path": "/E:0",
                        "check": {
                            "check": {
                                "camera": "99f72952-d8b8-4590-90e8-7e0e78bcd719",
                                "archive": "",
                                "depth_ms": 5400000,
                                "type": "CT_CHECK_RECORD"
                            },
                            "success_rules": {},
                            "failure_rules": {
                                "0": {
                                    "path": "/E:0/T:0",
                                    "action": {
                                        "timeout_ms": 0,
                                        "cancel_conditions": {},
                                        "action": {
                                            "email_notification": {
                                                "notifier": "hosts/Server1/EMailModule.1",
                                                "recipients": [
                                                    "mail@server.com"
                                                ],
                                                "subject": "Notification: Attention, automatic rule is triggered.",
                                                "msg_text": "On server: {cameraNode} by camera {cameraName}  problems with archiving.\nDate: {dateTime}",
                                                "atach_video": false,
                                                "export_agent": "",
                                                "span_ms": 0,
                                                "camera": "",
                                                "archive": ""
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    Note

    "camera": "99f72952-d8b8-4590-90e8-7e0e78bcd719" is the camera group id.

Get info about archives using gRPC API (DomainService)

Get a list of Axxon domain archives.

POST http://IP-address:port/prefix/grpc

Request body:

{
"method": "axxonsoft.bl.domain.DomainService.ListArchives",
"data": { "filter": "", "view": "VIEW_MODE_FULL", "page_token": "", "page_size": 1000}
} 

The response will contain a list of archives. Take the value of the access_point parameter for the required archive:

 "access_point": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"

Note

The response will contain the page_token parameter if the number of archives (including the built-in ones) is greater than the value of the page_size parameter.


Get the archive occupation percentage.

POST http://IP-address:port/prefix/grpc

Request body:

 {"method": "axxonsoft.bl.statistics.StatisticService.GetStatistics","data": { "keys": {  "type": "SPT_ArchiveUsage", "name": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage" }}}

where "name" is the value of the access_point parameter from the first request.

Response:

 {
    "stats": [
        {
            "hint": "",
            "key": {
                "type": "SPT_ArchiveUsage",
                "name": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"
            },
            "labels": [],
            "value_double": 27.851564407348633
        }
    ],
    "fails": []
}

value_double is the the archive occupation percentage.


Get information about the archive contents.

POST http://IP-address:port/prefix/grpc

Request body:

{
"method": "axxonsoft.bl.archive.ArchiveService.GetRecordingInfo",
"data": {  "update_cache": false, "access_point": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"}
}

where "access_point" is taken from the first request.

Response:

 {
    "recording_info": {
        "system_size": "292",
        "recording_size": "30134",
        "recording_rate": "303597",
        "capacity": "30720",
        "last_update": "1551865173"
    }
}

where "capacity" is the archive size in megabytes.

Manage archives using gRPC API (ConfigurationService)

Get a list of Axxon domain archives.

POST http://IP-address:port/prefix/grpc

Request body:

{
"method": "axxonsoft.bl.domain.DomainService.ListArchives",
"data": { "filter": "", "view": "VIEW_MODE_FULL", "page_token": "", "page_size": 1000}
} 

The response will contain a list of archives. Take the value of the access_point parameter for the required archive:

 "access_point": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"

Note

The response will contain the page_token parameter if the number of archives (including the built-in ones) is greater than the value of the page_size parameter.


Get the archive occupation percentage.

POST http://IP-address:port/prefix/grpc

Request body:

 {"method": "axxonsoft.bl.statistics.StatisticService.GetStatistics","data": { "keys": {  "type": "SPT_ArchiveUsage", "name": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage" }}}

where "name" is the value of the access_point parameter from the first request.

Response:

 {
    "stats": [
        {
            "hint": "",
            "key": {
                "type": "SPT_ArchiveUsage",
                "name": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"
            },
            "labels": [],
            "value_double": 27.851564407348633
        }
    ],
    "fails": []
}

value_double is the the archive occupation percentage.


Get information about the archive contents.

POST http://IP-address:port/prefix/grpc

Request body:

{
"method": "axxonsoft.bl.archive.ArchiveService.GetRecordingInfo",
"data": {  "update_cache": false, "access_point": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"}
}

where "access_point" is taken from the first request.

Response:

 {
    "recording_info": {
        "system_size": "292",
        "recording_size": "30134",
        "recording_rate": "303597",
        "capacity": "30720",
        "last_update": "1551865173"
    }
}

where "capacity" is the archive size in megabytes.

Creating an archive entity

{
    "method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data": {
        "added": [
            {
                "uid": "hosts/Server1",
                "units": [
                    {
                        "type": "MultimediaStorage",
                        "properties": [
                            {
                                "id": "color",
                                "value_string": "Pink",
                                "properties": []
                            },
                            {
                                "id": "display_name",
                                "value_string": "Pink",
                                "properties": []
                            }
                        ],
                        "units": [],
                        "opaque_params": []
                    }
                ],
                "opaque_params": []
            }
        ]
    }
}

where

  • uid − Server on which the archive is created;
  • units − properties.

Adding an archive file

{
    "method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data": {
        "added": [
            {
                "uid": "hosts/Server1/MultimediaStorage.Red",
                "units": [
                    {
                        "type": "ArchiveVolume",
                        "properties": [
                            {
                                "id": "volume_type",
                                "properties": [
                                    {
                                        "id": "file_name",
                                        "value_string": "D:/archiveRed.afs"
                                    }
                                ],
                                "value_string": "local"
                            },
                            {
                                "id": "file_size",
                                "value_int32": 2
                            },
                            {
                                "id": "format",
                                "value_bool": true
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

Linking a camera to archive

Creating an ArchiveContext with constant recording:

{
    "method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data": {
        "added": [
            {
                "uid": "hosts/Server1/MultimediaStorage.Yellow",
                "units": [
                    {
                        "type": "ArchiveContext",
                        "properties": [
                            {
                                "id": "camera_ref",
                                "value_string": "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0"
                            },
                            {
                                "id": "constant_recording",
                                "value_bool": true
                            },
                            {
                                "id": "prerecord_sec",
                                "value_int32": 0
                            },
                            {
                                "id": "specific_fps",
                                "value_double": 0
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

The response will contain uid of the added ArchiveContext:

{
    "failed": [],
    "added": [
        "hosts/Server1/MultimediaStorage.Yellow/ArchiveContext/b73f4b6c-2962-5d51-e9ee-ceb5420b4cd2"
    ]
}

Changing a stream linked to the archive

{
    "method":"axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data":{
        "changed":[{
              "uid": "hosts/Server1/MultimediaStorage.Aqua/ArchiveContext/b73f4b6c-2962-5d51-e9ee-ceb5420b4cd2",
              "type": "ArchiveContext",
              "properties": [
                {
                  "id": "streaming_id",
                  "value_string": "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0"
                }]
            }
        ]
    }
}


On this page:

Remove entire archive

{
    "method":"axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data":{
        "removed":[
            {
            "uid": "hosts/Server1/MultimediaStorage.Aqua",
            "type": "MultimediaStorage",
            "properties": [],
            "units": [],
            "opaque_params": []
        }]
    }
}

Remove the archive and archive file

{
    "method":"axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data":{
        "removed" : [
             {
                  "uid" : "hosts/Server1/MultimediaStorage.AliceBlue/ArchiveVolume/E:/archiveAliceBlue.afs",
                  "properties": [
                    {
                        "id": "remove_file",
                        "value_bool": true
                    }] 
            },
            {
                "uid": "hosts/Server1/MultimediaStorage.AliceBlue"
            }]
    }
}

Remove the camera linking

{
    "method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data": {
        "removed": [
            {
                "uid": "hosts/Server1/MultimediaStorage.AliceBlue/ArchiveContext/580063c3-71d6-a265-0ae1-4a1fef231f5c",
                "type": "ArchiveContext",
                "properties": [],
                "units": [],
                "opaque_params": []
            }
        ]
    }
}

Remove the archive volume

{
    "method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
    "data": {
        "removed": [
            {
                "uid": "hosts/Server1/MultimediaStorage.Red/ArchiveVolume/D:/archiveRed.afs"
            }
        ]
    }
}

Search in archive using gRPC API methods

POST http://IP-address:port/prefix/grpc

Request body:

    "method": "axxonsoft.bl.events.EventHistoryService.FindSimilarObjects",
    "data": {
        "session": 0,
        "is_face": true,
        "minimal_score": 0.75,
        "jpeg_image": "",
        "range": {
            "begin_time": "20200916T104305.137",
            "end_time": "20200918T105305.137"
        },
        "origin_ids":
        [
            "hosts/DESKTOP-FQETIKR/DeviceIpint.2/SourceEndpoint.video:0:0"
        ],
        "limit": 1000,
        "offset": 0
    }
}

where jpeg_image is a picture with a byte-serial face in the format: /9j/4AAQSkZJRgABAQEAYABgAAD/4REGRXhpZgAATU0AKgAA etc.

Response example:

{
 "items": [
  {
   "event": {
    "guid": "f136d184-9101-417d-a24c-edb46aad113f",
    "timestamp": "20200917T071919.869000",
    "state": "SPECIFIED",
    "origin_deprecated": "hosts/DESKTOP-FQETIKR/DeviceIpint.2/SourceEndpoint.video:0:0",
    "origin_ext": {
     "access_point": "hosts/DESKTOP-FQETIKR/DeviceIpint.2/SourceEndpoint.video:0:0",
     "friendly_name": "Camera"
    },
    "offline_analytics_source": "",
    "detector_deprecated": "hosts/DESKTOP-FQETIKR/AVDetector.2/EventSupplier",
    "detector_ext": {
     "access_point": "hosts/DESKTOP-FQETIKR/AVDetector.2/EventSupplier",
     "friendly_name": "Face detection"
    },
    "node_info": {
     "name": "DESKTOP-FQETIKR",
     "friendly_name": ""
    },
    "event_type": "faceAppeared",
    "multi_phase_id": "",
    "detectors_group": [
     "DG_FACE_DETECTOR",
     "DG_TEMPERATURE_DETECTOR"
    ],
    "details": [
     {
      "rectangle": {
       "x": 0.2397222222222222,
       "y": 0.135,
       "w": 0.12541666666666665,
       "h": 0.21518518518518515,
       "index": 3203
      }
     },
     {
      "face_recognition_result": {
       "begin_time": "1600327157949",
       "best_quality": 0.618347704410553,
       "age": 0,
       "gender": "UNKNOWN",
       "temperature": {
        "value": -1000,
        "unit": "CELSIUS"
       }
      }
     },
     {
      "byte_vector": {
       "data": "sEYKPSAwkj0iwZu9yl/Tu5kP4L01KsW7Z6KVPUd6zr2SdYy9s91iveWm7jxi3BQ9MWaCPCcnlL1WbKU8z/PEvMO58bxJp5q9TmdNPYn8AL1GGso8j8A4vHdw4zybxvc8HdeUPaF4Yj1AZp69dx8OvEgE3L1aKM89ARirPePB1jrVqQ29ongXvX6lKz5QYyK9uMpVvX+Yeb2E58Q9WciRPV2noL21kaG7zEKavNElXr0T3yK97HV5vYU3kD1p08c9zxMPPXQM8Ty1hE89YXCBPIuhyz23vQM+QuGqvPBjVT0lV9U5m0TKPESvOT1iM8w9ZzebvU4Eiz3ZD/+9HvhCvfkMyryHlKO7dAooO+zbCz2NJiw8OMyxunfPar28Uh2+cqiXPV6I273IQHU8O5GVvfDPbTzWkw6+eYX+vYTAij0kAIy9wXKFPDKGHb3mhnk9CXMCPSdEV7z52ms9vcI1vZrSbTxs0Wm9RyQXvXv8273RKMw8eyxjPOWyIr4MzkE98sjLPXFnEz6CkTg9cyyHvVlwJry7s3E9JOgEPRcYYrreLLw7cYQcvENyJ70+8K88P+iZPGhTUjxOpGW84rJEPbpDmb3zL9W8guGDPGiXiz0Z5IM91zFlPYnRl7yXnTI8oLTfvfCUOz3IJ1C976yNPfCMg7xRczA8kM+4vf5S5L0G3t28ZiEzPFFzmb3OuoG78SMCPblR47zD0SA9WRzJveoSirwH5nm9XRBMPW3G1z2zrH89VvizPP2a2b2BUCC9KAmUvc52cj3XlU08zoJbvfY4fj2vRy092im+PS+FvTyydnc9iCouvXPY4T3i5jm8ynIovNCd0jwiFS69Hs7IPfpBxbxt0SI90CJzPYNpgr0SW7491eQ3vZfuvTyUnM09ZEQ2vZgG1rxbS2E9dnmVPZZXuLwPdN69JBiSvFggoLvnZeG77tyWvVSFVTxVBxo9seqbvbLuXj2CBk89CEpqvTt2M71VjBW9WAHdvHFg8T2myWS9uSAWPWPgM7mv5hK9dUvJvUuWrTx2EK09DYDCu5KVCj5Ekfm7OFAHvR6c07wkKnc8WpXQvXrzrrzPpFG965MJPmlNRbykeN89SzjNPWzS9bu2UoG9p//Tu2UhVT2PpD49zNOHvX9M3LxaC2G9Z/oNvXahjLyTNhg9FQWOvKtXW71VDA69il/5PVlOcr1XDk494iowvbGY9jwXYLO9YhIjPv8Wubth8RO9MUt8PdAOSD1io+e7bwzYPXQsvj02Go06cleBvO+Vyjz21hU7CFOnuzN1+z3tg8i9yN+nO9KgAb70sHg8fik9vSdd/Dzjd/k8pfSbO3poOjwj65Q9rujnu0cY8ztHdmc97YeavQ==",
       "type": -1,
       "subtype": "",
       "version": 0
      }
     }
    ],
    "params": []
   },
   "score": 0.994738
  }
 ],
 "offset": "1"
}

--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 33

{
 "items": [],
 "offset": "0"
}

POST http://IP-address:port/prefix/grpc

Request body:

 {
    "method": "axxonsoft.bl.events.EventHistoryService.ReadLprEvents",
    "data": {
        "range": {
            "begin_time": "20200916T104305.137",
            "end_time": "20200918T105305.137"
        },
        "filters": {
            "filters": [
                {
                    "subjects": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0"
                }
            ]
        },
        "limit":2,
        "offset":0,
        "search_predicate":"829DT97"
    }
}

Response example:

{
 "items": [
  {
   "event_type": "ET_DetectorEvent",
   "subject": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
   "body": {
    "@type": "type.googleapis.com/axxonsoft.bl.events.DetectorEvent",
    "guid": "825bd3c9-adef-4ec3-ae23-2e8b6a7d2e8e",
    "timestamp": "20200917T073828.069000",
    "state": "HAPPENED",
    "origin_deprecated": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
    "origin_ext": {
     "access_point": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
     "friendly_name": "Camera"
    },
    "offline_analytics_source": "",
    "detector_deprecated": "hosts/DESKTOP-FQETIKR/AVDetector.1/EventSupplier",
    "detector_ext": {
     "access_point": "hosts/DESKTOP-FQETIKR/AVDetector.1/EventSupplier",
     "friendly_name": "License plate recognition (VT)"
    },
    "node_info": {
     "name": "DESKTOP-FQETIKR",
     "friendly_name": ""
    },
    "event_type": "plateRecognized",
    "multi_phase_id": "",
    "detectors_group": [
     "DG_LPR_DETECTOR"
    ],
    "details": [
     {
      "auto_recognition_result": {
       "direction": 1,
       "time_begin": "20200917T073827.309000",
       "time_end": "20200917T073828.349000",
       "hypotheses": [
        {
         "ocr_quality": 81,
         "plate_full": "829DT97",
         "plate_rectangle": {
          "x": 0.36388888888888887,
          "y": 0.65625,
          "w": 0.19722222222222224,
          "h": 0.04340277777777779,
          "index": 0
         },
         "time_best": "20200917T073828.069000",
         "country": "es"
        },
        {
         "ocr_quality": 39,
         "plate_full": "299DD97",
         "plate_rectangle": {
          "x": 0.36388888888888887,
          "y": 0.65625,
          "w": 0.19722222222222224,
          "h": 0.04340277777777779,
          "index": 0
         },
         "time_best": "20200917T073828.069000",
         "country": "es"
        },
        {
         "ocr_quality": 51,
         "plate_full": "829DT*7*",
         "plate_rectangle": {
          "x": 0.36388888888888887,
          "y": 0.65625,
          "w": 0.19722222222222224,
          "h": 0.04340277777777779,
          "index": 0
         },
         "time_best": "20200917T073828.069000",
         "country": "es"
        }
       ]
      }
     }
    ],
    "params": []
   },
   "subjects": [
    "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
    "hosts/DESKTOP-FQETIKR/AVDetector.1/EventSupplier"
   ],
   "localization": {
    "text": "Camera \"Camera\". License plate recognition detection triggered, number \"829DT97\""
   }
  },
  {
   "event_type": "ET_DetectorEvent",
   "subject": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
   "body": {
    "@type": "type.googleapis.com/axxonsoft.bl.events.DetectorEvent",
    "guid": "adc555c5-850a-44fb-9ee3-26978799f3ab",
    "timestamp": "20200917T073705.291000",
    "state": "HAPPENED",
    "origin_deprecated": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
    "origin_ext": {
     "access_point": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
     "friendly_name": "Camera"
    },
    "offline_analytics_source": "",
    "detector_deprecated": "hosts/DESKTOP-FQETIKR/AVDetector.1/EventSupplier",
    "detector_ext": {
     "access_point": "hosts/DESKTOP-FQETIKR/AVDetector.1/EventSupplier",
     "friendly_name": "License plate recognition (VT)"
    },
    "node_info": {
     "name": "DESKTOP-FQETIKR",
     "friendly_name": ""
    },
    "event_type": "plateRecognized",
    "multi_phase_id": "",
    "detectors_group": [
     "DG_LPR_DETECTOR"
    ],
    "details": [
     {
      "auto_recognition_result": {
       "direction": 1,
       "time_begin": "20200917T073704.531000",
       "time_end": "20200917T073705.571000",
       "hypotheses": [
        {
         "ocr_quality": 81,
         "plate_full": "829DT97",
         "plate_rectangle": {
          "x": 0.36388888888888887,
          "y": 0.65625,
          "w": 0.19722222222222224,
          "h": 0.04340277777777779,
          "index": 0
         },
         "time_best": "20200917T073705.291000",
         "country": "es"
        },
        {
         "ocr_quality": 39,
         "plate_full": "FF299Y97",
         "plate_rectangle": {
          "x": 0.36388888888888887,
          "y": 0.65625,
          "w": 0.19722222222222224,
          "h": 0.04340277777777779,
          "index": 0
         },
         "time_best": "20200917T073705.291000",
         "country": "es"
        },
        {
         "ocr_quality": 51,
         "plate_full": "829DT*7*",
         "plate_rectangle": {
          "x": 0.36388888888888887,
          "y": 0.65625,
          "w": 0.19722222222222224,
          "h": 0.04340277777777779,
          "index": 0
         },
         "time_best": "20200917T073705.291000",
         "country": "es"
        }
       ]
      }
     }
    ],
    "params": []
   },
   "subjects": [
    "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
    "hosts/DESKTOP-FQETIKR/AVDetector.1/EventSupplier"
   ],
   "localization": {
    "text": "Camera \"Camera\". License plate recognition detection triggered, number \"829DT97\""
   }
  }
 ],
 "unreachable_subjects": []
}

--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 46

{
 "items": [],
 "unreachable_subjects": []
}

POST http://IP-address:port/prefix/grpc

Request body:

{
    "method": "axxonsoft.bl.vmda.VMDAService.ExecuteQuery",
    "data": {
        "access_point": "hosts/DESKTOP-FQETIKR/VMDA_DB.0/Database",
        "camera_ID": "AVDetector.1/SourceEndpoint.vmda",
        "schema_ID": "vmda_schema",
        "dt_posix_start_time": "20200916T114345.368",
        "dt_posix_end_time": "20200918T134347.240",
        "query": "figure fZone=polygon(0.3,0.3,0.7,0.3,0.7,0.7,0.3,0.7); figure fDir=(ellipses(-10000, -10000, 10000, 10000) - ellipses(-0, -0, 0, 0));set r = group[obj=vmda_object] { res = or(fZone((obj.left + obj.right) / 2, obj.bottom)) }; result = r.res;",
        "language": "EVENT_BASIC"
    }
}

Response example:

--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 6271

{
 "intervals": [
  {
   "limit": {
    "begin_time": "20200917T065039.101000",
    "end_time": "20200917T065041.181000"
   },
   "objects": [
    {
     "id": "11",
     "left": 0.60833333333333328,
     "top": 0.28125,
     "right": 0.72777777777777775,
     "bottom": 0.328125
    }
   ]
  },
  {
   "limit": {
    "begin_time": "20200917T065041.181000",
    "end_time": "20200917T065041.541000"
   },
   "objects": [
    {
     "id": "20",
     "left": 0.56111111111111112,
     "top": 0.34722222222222221,
     "right": 0.67777777777777781,
     "bottom": 0.38541666666666663
    }
   ]
  },
  {
   "limit": {
    "begin_time": "20200917T065047.741000",
    "end_time": "20200917T065047.821000"
   }

Manage layouts using gRPC API methods

Create a new layout named "Layout" without specifying the id.

POST http://IP-address:port/prefix/grpc

Request body:

{
"method": "axxonsoft.bl.layout.LayoutManager.Update",
"data": {
    "created":{
    	"display_name":"Layout"
    	}
    	}
}

The response will contain the id

{
    "created_layouts": [
        "b0bd2b36-064a-4cc4-9a6f-382de02be7ef"
    ]
}

Get a list of layouts.

POST http://IP-address:port/prefix/grpc

Request body:

{
"method": "axxonsoft.bl.layout.LayoutManager.ListLayouts",
"data": {
     "view": "VIEW_MODE_FULL"
}
}

Response:

{
    "current": "",
    "items": [
        {
            "meta": {
                "layout_id": "b0bd2b36-064a-4cc4-9a6f-382de02be7ef",
                "owned_by_user": true,
                "shared_with": [],
                "etag": "63F1DF706EE001985D858352029DB0BDBCF257FC"
            },
            "body": {
                "id": "b0bd2b36-064a-4cc4-9a6f-382de02be7ef",
                "display_name": "my",
                "is_user_defined": false,
                "is_for_alarm": false,
                "alarm_mode": false,
                "map_id": "",
                "map_view_mode": "MAP_VIEW_MODE_LAYOUT_ONLY",
                "cells": {}
            }
        }
    ],
    "special_layouts": {
        "favorite": {
            "id": "",
            "enabled": false
        },
        "alarm": {
            "id": "",
            "enabled": false
        }
    }
}

Manage users using gRPC API methods


{
	"method":"axxonsoft.bl.security.SecurityService.ListConfig",
	"data":{
	}
}

The response will contain:

  • roles;
  • users;
  • user_assignments (correspondance of roles and users);
  • ldap_servers (LDAP servers);
  • pwd_policy (security policy);
  • ip_filters (IP-address filtering).


On this page:

Create a role

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "added_roles": [
            {
                "index": "60c60ed4-47e3-4d5e-9737-0f00b684f535",
                "name": "newRole",
                "comment": "comment",
                "timezone_id": "00000000-0000-0000-0000-000000000000",
                "supervisor": "00000000-0000-0000-0000-000000000000"
            }
        ]
    }
}

Attention!

timezone_id − id of the time zone. If 00000000-0000-0000-0000-000000000000, then the time zone is Always.

supervisor − id of the role that will be a supervisor (see Creating and configuring roles). If 00000000-0000-0000-0000-000000000000, then the supervisor is not defined.

Creater a user

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "added_users": [
            {
                "index": "393b06f3-d419-441d-8834-b5d1824c135a",
                "login": "user",
                "name": "user",
                "comment": "comment",
                "date_created": "",
                "date_expires": "",
                "enabled": true,
 				"ldap_link": {
                	"server_id": "",
            		"username": "",
            		"dn": ""
      	 	 	},
                "restrictions": {
                    "web_count": 0,
                    "mobile_count": 0
                },
                "email": "",
                "cloud_id": 160,
          		"extra_fields": {
             	   "SocialId": "test",
              	   "IpAddress": "160.85.208.94",
             	   "CompanyId": "test"
         	   },
                ],
                "locked_till": ""
            }
        ]
    }
}

Add a user to the role

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "added_users_assignments": [
            {
                "user_id": "52537c93-3efc-4465-b553-1c1ccf42faef",
                "role_id": "75863211-6fe5-4a79-9abf-f8137b1e767c"
            }
        ]
    }
}

Block and unblock the users

{
	"method":"axxonsoft.bl.security.SecurityService.ChangeConfig",
	"data":{
		"modified_users": [
        {
            "index": "fa00ea14-0ff5-4586-b6c8-ea449391a3a8",
            "login": "user1",
            "name": "user1",
            "comment": "",
            "enabled": true,
            "ldap_server_id": "00000000-0000-0000-0000-000000000000",
            "ldap_domain_name": "",
            "restrictions": {
                "web_count": 2147483647,
                "mobile_count": 2147483647
            },
            "email": "",
            "cloud_id": "0",
          	"extra_fields": {
             	   "SocialId": "test",
              	   "IpAddress": "160.85.208.94",
             	   "CompanyId": "test"
            },
            ],
            "locked_till": "29990101T000000"
        }
    ]
	}
}

where the locked_till parameter specifies the date and time in the YYYYMMDDTHHMMSS format until which the user will be blocked.

To unblock a user, set the date and time less than the current one.

Check username availability

{
    "method": "axxonsoft.bl.security.SecurityService.CheckLogin",
    "data": {
        "login": "user"
    }
}

The response will contain the following information:

  • "result": "TAKEN" − a user with that name already exists in the system;
  • "result": "FREE" − there is no user with this name in the system.


On this page:

Edit a role

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "modified_roles": [
            {
                "index": "21b8907c-bee4-4729-acf1-eeab31354b8b",
                "name": "57",
                "comment": "1581664337",
                "timezone_id": "00000000-0000-0000-0000-000000000000",
                "cloud_id": 11648,
                "supervisor": "2b74c26e-eb61-4499-b763-9df13148fb81"
            }
        ]
    }
}

Edit a user

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "modified_users": [
            {
                "index": "26248a39-584f-4efb-8ad6-ccfb026b4c26",
                "login": "usr",
                "name": "usr_lab",
                "comment": "now 1581664730",
                "date_created": "20200213T114440",
                "date_expires": "",
                "enabled": false,
                "ldap_server_id": "00000000-0000-0000-0000-000000000000",
                "ldap_domain_name": "",
                "restrictions": {
                    "web_count": 0,
                    "mobile_count": 500
                },
                "email": "",
                "cloud_id": 158,
          		"extra_fields": {
             	   "SocialId": "test",
              	   "IpAddress": "160.85.208.94",
             	   "CompanyId": "test"
         	   },
                ],
                "locked_till": "19700101T000000"
            }
        ]
    }
}

Assign a password to a user

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "modified_user_passwords": [
            {
                "user_index": "b7ecfde8-b080-45b9-9cb8-76ad85992666",
                "password": "BLekX1kJElmI9g",
                "expire_date": ""
            }
        ]
    }
}


On this page:

Unlink a user from a role

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "removed_users_assignments": [
            {
                "user_id": "26248a39-584f-4efb-8ad6-ccfb026b4c26",
                "role_id": "2b74c26e-eb61-4499-b763-9df13148fb81"
            }
        ]
    }
}

Remove a user

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "removed_users": ["52537c93-3efc-4465-b553-1c1ccf42faef"]
    }
}

Remove a role

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "removed_roles": ["75863211-6fe5-4a79-9abf-f8137b1e767c"]
    }
}


On this page:

Get global role parameters

{
    "method":"axxonsoft.bl.security.SecurityService.ListGlobalPermissions",
    "data":{
        "role_ids":"356e84ea-8b66-4cc7-a330-feaa34fff83d"
        }
}

Response example:

{
    "permissions": {
        "21b8907c-bee4-4729-acf1-eeab31354b8b": {
            "unrestricted_access": "UNRESTRICTED_ACCESS_NO",
            "maps_access": "MAP_ACCESS_FULL",
            "feature_access": [
                "FEATURE_ACCESS_SEARCH",
                "FEATURE_ACCESS_MINMAX_BUTTON_ALLOWED",
                "FEATURE_ACCESS_ADD_CAMERA_TO_LAYOUT_IN_MONITORING",
                "FEATURE_ACCESS_ALLOW_SHOW_TITLES",
                "FEATURE_ACCESS_ARCHIVES_SETUP",
                "FEATURE_ACCESS_ALLOW_SHOW_PRIVACY_VIDEO_IN_ARCHIVE",
                "FEATURE_ACCESS_SYSTEM_JOURNAL",
                "FEATURE_ACCESS_LAYOUTS_TAB",
                "FEATURE_ACCESS_ALLOW_DELETE_RECORDS",
                "FEATURE_ACCESS_EXPORT",
                "FEATURE_ACCESS_EDIT_PTZ_PRESETS",
                "FEATURE_ACCESS_ALLOW_SHOW_FACES_IN_LIVE",
                "FEATURE_ACCESS_DEVICES_SETUP",
                "FEATURE_ACCESS_PROGRAMMING_SETUP",
                "FEATURE_ACCESS_DOMAIN_MANAGING_OPS",
                "FEATURE_ACCESS_USERS_RIGHTS_SETUP",
                "FEATURE_ACCESS_SETTINGS_SETUP",
                "FEATURE_ACCESS_ALLOW_BUTTON_MENU_CAMERA",
                "FEATURE_ACCESS_DETECTORS_SETUP",
                "FEATURE_ACCESS_ALLOW_UNPROTECTED_EXPORT",
                "FEATURE_ACCESS_WEB_UI_LOGIN",
                "FEATURE_ACCESS_CHANGING_LAYOUTS"
            ],
            "alert_access": "ALERT_ACCESS_FULL",
            "bookmark_access": "BOOKMARK_ACCESS_CREATE_PROTECT_EDIT_DELETE",
            "default_camera_access": "CAMERA_ACCESS_FORBID",
            "default_microphone_access": "MICROPHONE_ACCESS_FORBID",
            "default_archive_access": "ARCHIVE_ACCESS_FORBID",
            "default_videowall_access": "VIDEOWALL_ACCESS_FORBID"
        }
    }
}

Edit global role parameters

{
    "method": "axxonsoft.bl.security.SecurityService.SetGlobalPermissions",
    "data": {
        "permissions": {
            "21b8907c-bee4-4729-acf1-eeab31354b8b": {
                "unrestricted_access": "UNRESTRICTED_ACCESS_NO",
                "maps_access": "MAP_ACCESS_FULL",
                "feature_access": [
                    "FEATURE_ACCESS_EDIT_PTZ_PRESETS",
                    "FEATURE_ACCESS_ALLOW_SHOW_FACES_IN_LIVE",
                    "FEATURE_ACCESS_ALLOW_UNPROTECTED_EXPORT",
                    "FEATURE_ACCESS_WEB_UI_LOGIN",
                    "FEATURE_ACCESS_CHANGING_LAYOUTS"
                ],
                "alert_access": "ALERT_ACCESS_VIEW_ONLY"
            }
        }
    }
}

Attention!

Only the parameters that are specified in the request will be edited.


On this page:

Get device access settings

{
    "method": "axxonsoft.bl.security.SecurityService.ListObjectPermissions",
    "data": {
        "role_id": "b9060002-c7fc-48d9-9c5c-a16b9f5c4a82",
        "camera_ids": [
            "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0"
        ],
        "microphone_ids": [
            "hosts/Server1/DeviceIpint.10/SourceEndpoint.audio:0"
        ],
        "telemetry_ids": [
            "hosts/Server1/DeviceIpint.10/TelemetryControl.0"
        ],
        "archive_ids": [
            "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"
        ],
        "videowall_ids": []
    }
}


Edit device access settings

{
    "method": "axxonsoft.bl.security.SecurityService.SetObjectPermissions",
    "data": {
        "role_id": "b9060002-c7fc-48d9-9c5c-a16b9f5c4a82",
        "permissions": {
            "camera_access": {
                "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0": "CAMERA_ACCESS_ARCHIVE"
            },
            "microphone_access": {
                "hosts/Server1/DeviceIpint.10/SourceEndpoint.audio:0": "MICROPHONE_ACCESS_MONITORING"
            },
            "telemetry_priority": {
                "hosts/Server1/DeviceIpint.10/TelemetryControl.0": "TELEMETRY_PRIORITY_LOW"
            },
            "archive_access": {
                "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage": "ARCHIVE_ACCESS_FULL"
            },
            "videowall_access": {}
        }
    }
}

Edit PTZ control priority for multiple devices

{
    "method": "axxonsoft.bl.security.SecurityService.SetObjectPermissions",
    "data": {
        "role_id": "e99602c3-0730-44a0-9f7c-0ef242a6314f",
        "permissions": {
            "telemetry_priority": {
                "hosts/Server1/DeviceIpint.6/TelemetryControl.0": "TELEMETRY_PRIORITY_NO_ACCESS",
                "hosts/Server1/DeviceIpint.7/TelemetryControl.0": "TELEMETRY_PRIORITY_NO_ACCESS",
                "hosts/Server1/DeviceIpint.8/TelemetryControl.0": "TELEMETRY_PRIORITY_NO_ACCESS",
                "hosts/Server1/DeviceIpint.9/TelemetryControl.0": "TELEMETRY_PRIORITY_NO_ACCESS",
                "hosts/Server1/DeviceIpint.10/TelemetryControl.0": "TELEMETRY_PRIORITY_NO_ACCESS",
                "hosts/Server1/DeviceIpint.11/TelemetryControl.0": "TELEMETRY_PRIORITY_NO_ACCESS"
            }
        }
    }
}


On this page:

User Security Policy Framework

"pwd_policy": [
    {
        "policy_name": "",
        "guid": "00000000-0000-0000-0000-000000000000",
        "minimum_password_length": "0",
        "maximum_password_age_days": "0",
        "password_history_count": "0",
        "maximum_failed_logon_attempts": "0",
        "account_lockout_duration_minutes": "0",
        "password_must_meet_complexity_requirements": false,
        "forbid_multiple_user_sessions": false
    }
],

Edit the Security Policy

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "modified_pwd_policy": {
            "method": "MM_OVERWRITE_DATA",
            "data": [
                {
                    "policy_name": "111",
                    "guid": "48fc6637-2077-4f06-9c43-f214b1735ef8",
                    "minimum_password_length": "1",
                    "maximum_password_age_days": "365",
                    "password_history_count": "10",
                    "maximum_failed_logon_attempts": "0",
                    "account_lockout_duration_minutes": "0",
                    "password_must_meet_complexity_requirements": true,
                    "forbid_multiple_user_sessions": false
                }
            ]
        }
    }
}

Reset the Security Policy

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "modified_pwd_policy": {
            "method": "MM_OVERWRITE_DATA",
            "data": []
        }
    }
}

Change the IP filtering

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "modified_trusted_ip_list": {
            "method": "MM_OVERWRITE_DATA",
            "data": [
                {
                    "guid": "b037d6b8-d826-483d-8893-54cbcad5030e",
                    "ipAddress": "10.0.37.159",
                    "prefix": 24
                }
            ]
        }
    }
}

Reset the IP filtering

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "modified_trusted_ip_list": {
            "method": "MM_OVERWRITE_DATA",
            "data": []
        }
    }
}


On this page:

Get a list of added LDAP directories

{
    "method":"axxonsoft.bl.security.SecurityService.ListConfig",
    "data":{
    }
}

Response example:

"ldap_servers": [
    {
        "index": "6b5769e8-1322-4666-9567-14d129a8548a",
        "server_name": "qa.test",
        "friendly_name": "QA.TEST",
        "port": 389,
        "base_dn": "ou=LOAD,dc=qa,dc=test",
        "login": "cn=Tester QA-T. Tester,ou=LOAD,dc=qa,dc=test",
        "password": "Zz123456",
        "use_ssl": false,
        "search_filter": "(objectClass=person)",
        "login_attribute": "cn",
        "dn_attribute": "distinguishedname",
        "roles_assignments_for_new_users": [
            "00000000-0000-0000-0000-000000000000"
        ]
    },
    {
        "index": "d3231030-b7ce-4435-af85-ded1eb9b4622",
        "server_name": "192.168.33.80",
        "friendly_name": "ldap",
        "port": 389,
        "base_dn": "ou=Address,dc=axxonsoft,dc=us",
        "login": "cn=admin,dc=Axxondomain,dc=com",
        "password": "jwxWWf4f",
        "use_ssl": false,
        "search_filter": "(objectClass=person)",
        "login_attribute": "cn",
        "dn_attribute": "entrydn",
        "roles_assignments_for_new_users": [
            "00000000-0000-0000-0000-000000000000"
        ]
    }
],


Add a LDAP directory

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "added_ldap_servers": {
            "index": "d3231030-b7ce-4435-af85-ded1eb9b4622",
            "server_name": "192.168.33.80",
            "friendly_name": "ldap",
            "port": 389,
            "base_dn": "ou=Address,dc=axxonsoft,dc=us",
            "login": "cn=admin,dc=Axxondomain,dc=com",
            "password": "jwxWWf4f",
            "use_ssl": false,
            "search_filter": "(objectClass=person)",
            "login_attribute": "cn",
            "dn_attribute": "entrydn",
            "roles_assignments_for_new_users": [
                "00000000-0000-0000-0000-000000000000"
            ]
        }
    }

Edit a LDAP directory

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "modified_ldap_servers": [
            {
                "index": "d3231030-b7ce-4435-af85-ded1eb9b4622",
                "server_name": "192.168.33.80",
                "friendly_name": "ldap",
                "port": 636,
                "base_dn": "ou=Address,dc=axxonsoft,dc=us",
                "login": "cn=admin,dc=Axxondomain,dc=com",
                "password": "jwxWWf4f",
                "use_ssl": true,
                "search_filter": "(objectClass=person)",
                "login_attribute": "cn",
                "dn_attribute": "entrydn",
                "roles_assignments_for_new_users": [
                    "d4451805-13f2-4414-b0c5-6ae9f081e3e1"
                ]
            }
        ]
    }
}

Remove a LDAP directory

{
    "method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
    "data": {
        "removed_ldap_servers": ["d3231030-b7ce-4435-af85-ded1eb9b4622"]
    }
}

Get a list of LDAP directory users

Attention!

LDAP directory must be available.


{
    "method": "axxonsoft.bl.security.SecurityService.SearchLDAP",
    "data": {
        "ldap_server_id": "6b5769e8-1322-4666-9567-14d129a8548a"
    }
}

Response example:

{
    "entries": [
        {
            "login": "User1",
            "dn": "CN=User1,OU=LOAD,DC=qa,DC=test"
        },
        {
            "login": "User2",
            "dn": "CN=User2,OU=LOAD,DC=qa,DC=test"
        },
        {
            "login": "User3",
            "dn": "CN=User3,OU=LOAD,DC=qa,DC=test"
        },
        {
            "login": "User4",
            "dn": "User4,OU=LOAD,DC=qa,DC=test"
        },
        {
            "login": "User5",
            "dn": "User5,OU=LOAD,DC=qa,DC=test"
        }
    ]
}

Get heatmap using gRPC API methods

POST http://IP-address:port/prefix/grpc

Request body:

{
	"method":"axxonsoft.bl.heatmap.HeatMapService.BuildHeatmap",
	"data":
{
	"access_point":"hosts/Server1/HeatMapBuilder.0/HeatMapBuilder",
	"camera_ID":"hosts/Server1/AVDetector.13/SourceEndpoint.vmda",
	"dt_posix_start_time":"20190320T200000.001",
	"dt_posix_end_time":"20190321T200000.001",
	"mask_size":{"width":320,"height":240},
	"image_size":{"width":640,"height":480},
	"result_type":"RESULT_TYPE_IMAGE"
},
	"result_type":"RESULT_TYPE_IMAGE"
}

where 

  • dt_posix_end_time and dt_posix_start_time specify the interval,
  • image_size is the image size.

Note

To get the coordinates of the objects movement, it is necessary to specify the RESULT_TYPE_DATA value for the result_type parameter in the request body.


Response:

{
    "result": true,
    "heatmap": [],
    "image_data": "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"
}

where image_data is the received image in the base64 format. 

Manage control panels using gRPC API methods

POST http://IP-address:port/prefix/grpc

Get list of control panels

Request body:

ListControlPanels(
               ListControlPanelsRequest(
                         view=VIEW_MODE_FULL
                            )
)

Response:

items {
  access_point: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
  display_id: "4"
  vendor: "Pelco-joystick"
  model: "KBD5000"
  properties {
    axes {
      key: "jog"
      value: "supportsContinuousJog"
    }
    axes {
      key: "pan"
      value: "supportsContinuousPan"
    }
    axes {
      key: "shuttle"
      value: "supportsContinuousShuttle"
    }
    axes {
      key: "tilt"
      value: "supportsContinuousTilt"
    }
    axes {
      key: "zoom"
      value: "supportsContinuousZoom"
    }
    buttons {
      value: "buttonFourPoint"
    }
    buttons {
      key: 1
      value: "buttonIris"
    }
    buttons {
      key: 2
      value: "buttonVision"
    }
    buttons {
      key: 3
      value: "buttonAbout"
    }
    buttons {
      key: 4
      value: "buttonInfo"
    }
    buttons {
      key: 5
      value: "buttonJoystickButton"
    }
    buttons {
      key: 8
      value: "buttonLeftFolder"
    }
    buttons {
      key: 9
      value: "buttonRightFolder"
    }
    buttons {
      key: 10
      value: "buttonPlayPause"
    }
    buttons {
      key: 11
      value: "buttonStop"
    }
    buttons {
      key: 12
      value: "buttonDelay"
    }
    buttons {
      key: 13
      value: "buttonOnePoint"
    }
    buttons {
      key: 14
      value: "buttonTwoPoint"
    }
    buttons {
      key: 15
      value: "buttonThreePoint"
    }
    buttons {
      key: 16
      value: "buttonNine"
    }
    buttons {
      key: 17
      value: "buttonZero"
    }
    buttons {
      key: 18
      value: "buttonVideo"
    }
    buttons {
      key: 19
      value: "buttonOneWindow"
    }
    buttons {
      key: 20
      value: "buttonFourWindow"
    }
    buttons {
      key: 21
      value: "buttonNineWindow"
    }
    buttons {
      key: 22
      value: "buttonSixteenWindow"
    }
    buttons {
      key: 23
      value: "buttonComputer"
    }
    buttons {
      key: 24
      value: "buttonOne"
    }
    buttons {
      key: 25
      value: "buttonTwo"
    }
    buttons {
      key: 26
      value: "buttonThree"
    }
    buttons {
      key: 27
      value: "buttonFour"
    }
    buttons {
      key: 28
      value: "buttonFive"
    }
    buttons {
      key: 29
      value: "buttonSix"
    }
    buttons {
      key: 30
      value: "buttonSeven"
    }
    buttons {
      key: 31
      value: "buttonEight"
    }
  }


Get list of events

Request body:

PullEvents(PullEventsRequest(filters=EventFilters(include=[EventFilter(subject="hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0",event_type=ET_ControlPanelStateEvent)])))

Response:

items {
  event_type: ET_ControlPanelStateEvent
  subject: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
  body {
    [type.googleapis.com/axxonsoft.bl.events.ControlPanelStateEvent] {
      guid: "c95204e2-1e63-47d4-ad43-c12ea7a4e928"
      object_id: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
      axes {
        name: "pan"
        value: -0.302052795887
      }
    }
  }
  subjects: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
}

items {
  event_type: ET_ControlPanelStateEvent
  subject: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
  body {
    [type.googleapis.com/axxonsoft.bl.events.ControlPanelStateEvent] {
      guid: "9a27d338-5280-4ae6-a686-a94181859cb9"
      object_id: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
      axes {
        name: "pan"
        value: -0.302052795887
      }
      axes {
        name: "tilt"
        value: 0.564027428627
      }
    }
  }
  subjects: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
}

items {
  event_type: ET_ControlPanelStateEvent
  subject: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
  body {
    [type.googleapis.com/axxonsoft.bl.events.ControlPanelStateEvent] {
      guid: "d8cec48a-99d9-4ee5-a24e-7aa59802760b"
      object_id: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
      axes {
        name: "pan"
        value: -0.726295232773
      }
      axes {
        name: "tilt"
        value: 0.564027428627
      }
    }
  }
  subjects: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
}

Get water level using gRPC API methods

POST http://IP-address:port/prefix/grpc

Request body:

{
	"method":"axxonsoft.bl.statistics.StatisticService.GetStatistics",
	"data":{
		"keys": [
			{
				"type":"SPT_WaterLevel", 
				"name":"hosts/SERVER1/AVDetector.93/EventSupplier"
			}
			]
	}
}

Manage events using gRPC API methods


Get all events within a given interval

{
    "method": "axxonsoft.bl.events.EventHistoryService.ReadEvents",
    "data": {
        "range": {
            "begin_time": "20200225T125548.340",
            "end_time": "20200225T130548.341"
        },
        "limit": 30,
        "offset": 0,
		"descending": false
    }
}

If descending = false, then the events in the response will be sorted by time in ascending order. If descending = true, then the events will be sorted in descending order.

limit the limit of events in the response.

Get events by filter

The following parameters can be set as a filter:

  • type type of event; the actual types of events are given in the axxonsoft\bl\events.proto file;
  • subjects subject of event (server, device, archive, detector, etc.);
  • values exact value of event;
  • texts brief description of event.

Get events about status change of a specific camera

{
    "method": "axxonsoft.bl.events.EventHistoryService.ReadEvents",
    "data": {
        "range": {
            "begin_time": "20200225T152806.572",
            "end_time": "20200225T153806.572"
        },
        "filters": {
            "filters": [
                {
                    "type": "ET_IpDeviceStateChangedEvent",
                    "subjects": "hosts/Server1/DeviceIpint.10"
                }
            ]
        },
        "limit": 300,
        "offset": 0,
		"descending": false
    }
}

Get events about disconnection of all cameras

{
    "method": "axxonsoft.bl.events.EventHistoryService.ReadEvents",
    "data": {
        "range": {
            "begin_time": "20200226T074425.274",
            "end_time": "20200226T075425.274"
        },
        "filters": {
            "filters": [
                {
                    "type": "ET_IpDeviceStateChangedEvent",
                    "values": "IPDS_DISCONNECTED"
                }
            ]
        },
        "limit": 300,
        "offset": 0,
		"descending": false
    }
}

Get events from all domain LPR detection tools

{
    "method": "axxonsoft.bl.events.EventHistoryService.ReadEvents",
    "data": {
        "range": {
            "begin_time": "20211020T120000.000",
            "end_time": "20211020T200000.000"
        },
        "filters": {
            "filters": [
                {
                    "type": "ET_DetectorEvent",
                    "values": "DG_LPR_DETECTOR"
                }
            ]
        },
        "limit": 10000,
        "descending": true
    }
}

Search by text in event

The subject and the text of event are specified in filter.

Search by a specific camera for all events that contain the word tracker (2 events limit)

{
    "method": "axxonsoft.bl.events.EventHistoryService.ReadTextEvents",
    "data": {
        "range": {
            "begin_time": "20200226T082741.159",
            "end_time": "20200226T083741.160"
        },
        "filters": {
            "filters": [
                {
                    "subjects": "hosts/Server1/DeviceIpint.7/SourceEndpoint.video:0:0",
                    "texts": "tracker"
                }
            ]
        },
        "limit": 2,
        "offset": 0,
		"descending": false
    }
}

Get all alerts

{
    "method": "axxonsoft.bl.events.EventHistoryService.ReadAlerts",
    "data": {
        "range": {
            "begin_time": "20200225T150142.437",
            "end_time": "20200225T151142.437"
        },
        "limit":100,
        "offset":0,
		"descending": false
    }
}

Note

If an operator’s comment was specified for the alarm, it will be in the response with the frame coordinates.

Get alerts by filter

Alarms start time on a specific camera

{
    "method": "axxonsoft.bl.events.EventHistoryService.ReadAlerts",
    "data": {
        "range": {
            "begin_time": "20200225T150845.757",
            "end_time": "20200225T151845.758"
        },
        "filters": {
            "filters": [
                {
                    "subjects": "hosts/Server1/DeviceIpint.7/SourceEndpoint.video:0:0",
                    "values": "BEGAN"
                }
            ]
        },
        "limit":100,
        "offset":0,
		"descending": false
    }
}

Search for LPR events

Search for a specific LP number

{
    "method": "axxonsoft.bl.events.EventHistoryService.ReadLprEvents",
    "data": {
        "range": {
            "begin_time": "20200226T104305.137",
            "end_time": "20200226T105305.137"
        },
        "filters": {
            "filters": [
                {
                    "subjects": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
                    "values":"Н829М7"
                }
            ]
        },
        "limit":50,
        "offset":0,
		"descending": false
    }
}

Search by part of a LP number

{
    "method": "axxonsoft.bl.events.EventHistoryService.ReadLprEvents",
    "data": {
        "range": {
            "begin_time": "20200226T104305.137",
            "end_time": "20200226T105305.137"
        },
        "filters": {
            "filters": [
                {
                    "subjects": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0"
                }
            ]
        },
        "limit":50,
        "offset":0,
        "search_predicate":"*82*",
		"descending": false
    }
}

Subscription to events

If you subscribe, you will be notified as events occur.

Subscription to LPR detection tool events

{
    "method": "axxonsoft.bl.events.DomainNotifier.PullEvents",
    "data": {
        "subscription_id": "a003ed13-3b8f-4cef-a450-0199dc259w37",
        "filters": {
                "include": [{
                    "event_type":"ET_DetectorEvent",
                    "subject":"hosts/Server1/AVDetector.1/EventSupplier"
                },
                {
                    "event_type":"ET_DetectorEvent",
                    "subject":"hosts/Server1/AVDetector.2/EventSupplier"
                },
                {
                    "event_type":"ET_DetectorEvent",
                    "subject":"hosts/Server2/AVDetector.1/EventSupplier"
                }
                ]   
        }
    }
}

where 

  • subscription_id − subscription ID (set arbitrarily in UUID format; mandatory parameter).
  • event_type – event type (optional parameter).
  • subject – subject of the event (detectors in this example; optional parameter).

To receive events using a subscription, do the following:

  1. Run a request with the PullEvents method.
    After receiving the "200 OK" response, the events will be accumulated.
  2. After the required time interval, run a request with the DisconnectEventChannel method.
    You will receive a list of events that occurred between the two requests.

The request body with the DisconnectEventChannel method:

{
    "method": "axxonsoft.bl.events.DomainNotifier.DisconnectEventChannel",
    "data": {
        "subscription_id": "a003ed13-3b8f-4cef-a450-0199dc259w37"
    }
}

Note

The value of the subscription_id field should be equal in all requests.

Manage device templates using gRPC API methods


On this page:

Templates allow you to apply the same preset parameters to cameras.

Note

If a template has been assigned to the camera but has not yet been applied, then the response to the ListUnits method (see Manage devices using gRPC API methods (ConfigurationService)) will contain the parameter "has_unapplied_templates": true.

Get list of created templates

{
    "method": "axxonsoft.bl.config.ConfigurationService.ListTemplates",
    "data": {
        "view": "VIEW_MODE_FULL"
    }
}

Create a template

Template example with a specified device manufacturer, model, username and password

{
    "method": "axxonsoft.bl.config.ConfigurationService.ChangeTemplates",
    "data": {
        "created": [
            {
                "id": "8a7a73d7-ca8c-4a09-b7f0-7b45ef9cfe8d",
                "name": "Hikvision DS-2CD2135FWD-I",
                "unit": {
                    "uid": "hosts/Server1/DeviceIpint.13",
                    "type": "DeviceIpint",
                    "properties": [
                        {
                            "id": "vendor",
                            "readonly": false,
                            "value_string": "Hikvision"
                        },
                        {
                            "id": "model",
                            "readonly": false,
                            "value_string": "DS-2CD2135FWD-I"
                        },
                        {
                            "id": "user",
                            "readonly": false,
                            "value_string": "admin"
                        },
                        {
                            "id": "password",
                            "readonly": false,
                            "value_string": "Pe28age33tv"
                        }
                    ],
                    "units": [],
                    "opaque_params": [
                        {
                            "id": "color",
                            "readonly": false,
                            "properties": [],
                            "value_string": "#e91e63"
                        }
                    ]
                }
            }
        ]
    }
}

Attention!

The opaque_params parameter group is required in order to display the template in the Web Client.

Template example with a specified device geodata

{
    "method": "axxonsoft.bl.config.ConfigurationService.ChangeTemplates",
    "data": {
        "created": [
            {
                "id": "1322d30b-bdd4-4734-8a17-7e8bff92b41c",
                "name": "Geolocation 35-45",
                "unit": {
                    "uid": "hosts/Server1/DeviceIpint.14",
                    "type": "DeviceIpint",
                    "properties": [
                        {
                            "id": "geoLocationLatitude",
                            "readonly": false,
                            "value_double": 35
                        },
                        {
                            "id": "geoLocationLongitude",
                            "readonly": false,
                            "value_double": 45
                        }
                    ],
                    "units": [],
                    "opaque_params": [
                        {
                            "id": "color",
                            "readonly": false,
                            "properties": [],
                            "value_string": "#00bcd4"
                        }
                    ]
                }
            }
        ]
    }
}

Edit a template

{
    "method": "axxonsoft.bl.config.ConfigurationService.ChangeTemplates",
    "data": {
        "modified": [
            {
                "body": {
                    "id": "1652b728-3292-32b3-bb7f-e0adb8c9048c",
                    "name": "Geolocation",
                    "unit": {
                        "uid": "hosts/Server1/DeviceIpint.22",
                        "type": "DeviceIpint",
                        "properties": [
                            {
                                "id": "geoLocationLatitude",
                                "readonly": false,
                                "value_double": 38.83424
                            },
                            {
                                "id": "geoLocationLongitude",
                                "readonly": false,
                                "value_double": -111.0824
                            }
                        ],
                        "units": [
                            {
                                "uid": "hosts/Server1/DeviceIpint.22/VideoChannel.0",
                                "type": "VideoChannel",
                                "properties": [
                                    {
                                        "id": "display_name",
                                        "readonly": false,
                                        "properties": [],
                                        "value_string": "camera1"
                                    },
                                    {
                                        "id": "comment",
                                        "readonly": false,
                                        "properties": [],
                                        "value_string": ""
                                    },
                                    {
                         				"id": "enabled",
                                        "readonly": false,
                                        "properties": [],
                                        "value_bool": true
                                    }
                                ],
                                "units": [],
                                "opaque_params": []
                            }
                        ],
                        "opaque_params": [
                            {
                                "id": "color",
                                "readonly": false,
                                "properties": [],
                                "value_string": "#00bcd4"
                            }
                        ]
                    }
                },
                "etag": "1AC1B6FA562B290E0D1080A7D1DA2D3B3596EC95"
            }
        ]
    }
}

where etag is the template label that will change after each template edit.

Assign a template to a device

{
    "method": "axxonsoft.bl.config.ConfigurationService.SetTemplateAssignments",
    "data": {
        "items": [
            {
                "unit_id": "hosts/Server1/DeviceIpint.10",
                "template_ids": [
                    "834794f0-1085-4604-a985-7715d88165bc"
                ]
            }
        ]
    }
}

Get information on selected templates

{
    "method": "axxonsoft.bl.config.ConfigurationService.BatchGetTemplates",
    "data": {
        "items": [
            {
                "id": "e35f6a3f-ab44-4e20-a48c-e7e36f511cc1",
                "etag": "0501160E0A8513E1E95689A5E6E7CD488C0EE54D"
            }
        ]
    }
}

where etag parameter is optional:

  • if it is not specified, then the request will return all information about template;
  • if it is specified, then the request will return information about template updates.

Delete templates

{
    "method": "axxonsoft.bl.config.ConfigurationService.ChangeTemplates",
    "data": {
        "removed": [
            "cd97d7cc-3573-3864-bb6f-2814b6831341",
            "834794f0-1085-4604-a985-7715d88165bc"
        ]
    }
}

Configure PTZ mode for Tag & Track Pro using gRPC API methods

POST http://IP-address:port/prefix/grpc

Get current mode

Request body:

{
"method":"axxonsoft.bl.ptz.TagAndTrackService.ListTrackers",
"data": {
	"access_point":"hosts/Server1/DeviceIpint.1/Observer.0"
	}
}

where access_point is taken from the response to the ListCameras request in the tag_and_track parameter group (see Get video cameras list and their parameters using gRPC API methods (DomainService)).

Response example:

{
    "mode": "TAG_AND_TRACK_EVENT_TYPE_AUTOMATIC",
    "trackers": []
}

Change PTZ mode

Request body:

{
"method":"axxonsoft.bl.ptz.TagAndTrackService.SetMode",
"data": {
	"access_point":"hosts/Server1/DeviceIpint.1/Observer.0",
	"mode":"2"
	}
}

where the mode parameter value defines the PTZ control mode (see Setting PTZ mode for Tag & Track Pro):

0 − disabled (TAG_AND_TRACK_EVENT_TYPE_OFF),

1 − manual (TAG_AND_TRACK_EVENT_TYPE_MANUAL),

2 − automatic (TAG_AND_TRACK_EVENT_TYPE_AUTOMATIC),

3 − user priority (TAG_AND_TRACK_EVENT_TYPE_USER_PRIORITY),

4 − manual PTZ control (TAG_AND_TRACK_EVENT_TYPE_USER_PRIORITY_MANUAL).

Manage detection tools using gRPC API methods


On this page:


Get the list of detection tool parameters

To get the list of detection tool parameters, do the following:

  1. Use ListUnits to request the required detection tool.
    Request body:

    {
        "method":"axxonsoft.bl.config.ConfigurationService.ListUnits",
        "data":{
            "unit_uids": ["hosts/D-COMPUTER/AVDetector.2"]
        }
    }
  2. Get the response. It will have all parameters of the detection tool.
    Response example:

    {
        "units": [
            {
                "uid": "hosts/D-COMPUTER/AVDetector.2",
                "display_id": "2",
                "type": "AVDetector",
                "display_name": "License plate recognition (VT)",
                "access_point": "hosts/D-COMPUTER/AVDetector.2/EventSupplier",
                "properties": [
                    {
                        "id": "display_name",
                        "name": "Name",
                        "description": "Detector object name.",
                        "category": "",
                        "type": "string",
                        "readonly": false,
                        "internal": false,
                        "value_string": "License plate recognition (VT)"
                    },
                    {
                        "id": "enabled",
                        "name": "Enabled",
                        "description": "Use selected detection algorithm.",
                        "category": "",
                        "type": "bool",
                        "readonly": false,
                        "internal": false,
                        "value_bool": true
                    },
                    {
                        "id": "detector",
                        "name": "Type",
                        "description": "Detector type.",
                        "category": "",
                        "type": "string",
                        "readonly": true,
                        "internal": false,
                        "display_value": "License plate recognition (VT)",
                        "value_string": "LprDetector"
                    },
                    {
                        "id": "streaming_id",
                        "name": "Video stream",
                        "description": "Select video stream for detector.",
                        "category": "&2. Object characteristics",
                        "type": "string",
                        "readonly": false,
                        "internal": false,
                        "enum_constraint": {
                            "items": [
                                {
                                    "name": "",
                                    "traits": [],
                                    "properties": [],
                                    "value_string": "hosts/D-COMPUTER/DeviceIpint.5/SourceEndpoint.video:0:0"
                                },
                                {
                                    "name": "",
                                    "traits": [],
                                    "properties": [],
                                    "value_string": "hosts/D-COMPUTER/DeviceIpint.5/SourceEndpoint.video:0:1"
                                }
                            ]
                        },
                        "value_string": "hosts/D-COMPUTER/DeviceIpint.5/SourceEndpoint.video:0:1"
                    },
                    {
                        "id": "EnableRealtimeRecognition",
                        "name": "Real time recognition",
                        "description": "Enable real time recognition.",
                        "category": "&2. Object characteristics",
                        "type": "bool",
                        "readonly": false,
                        "internal": false,
                        "value_bool": false
                    },
                    {
                        "id": "EnableRecordingObjectsTracking",
                        "name": "Recording objects tracking",
                        "description": "Recording objects tracking into same-name database. Objects tracking is used for smart search in archive.",
                        "category": "&2. Object characteristics",
                        "type": "bool",
                        "readonly": false,
                        "internal": false,
                        "value_bool": true
                    },
                    {
                        "id": "period",
                        "name": "Period",
                        "description": "Time in ms after which next frame will be processed. With \"0\" each frame is processed.",
                        "category": "",
                        "type": "int32",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_int": 0,
                            "max_int": 65535
                        },
                        "value_int32": 0
                    },
                    {
                        "id": "onlyKeyFrames",
                        "name": "Only key frames",
                        "description": "Decode only key frames.",
                        "category": "",
                        "type": "bool",
                        "readonly": false,
                        "internal": false,
                        "value_bool": false
                    },
                    {
                        "id": "Extra angle analyse",
                        "name": "Extra angle license plate recognition algorithm",
                        "description": "Enable extra angle license plate recognition algorithm.",
                        "category": "",
                        "type": "bool",
                        "readonly": false,
                        "internal": false,
                        "value_bool": false
                    },
                    {
                        "id": "Extra ranges analyse",
                        "name": "Extra ranges license plate search algorithm",
                        "description": "Enable extra ranges license plate search algorithm to find license plates that vary in size significantly.",
                        "category": "",
                        "type": "bool",
                        "readonly": false,
                        "internal": false,
                        "value_bool": false
                    },
                    {
                        "id": "FrameScale",
                        "name": "Frame scale",
                        "description": "Specify the size to which video image will be scaled before analysis.",
                        "category": "",
                        "type": "int32",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_int": 640,
                            "max_int": 10000,
                            "default_int": 1920
                        },
                        "value_int32": 1920
                    },
                    {
                        "id": "Precise analyse",
                        "name": "Advanced image analysis",
                        "description": "Use advanced image analysis to improve recognition quality in nonstandard conditions (rain, snow, incorrect settings of recognition camera). When using this parameter recognition time increases by 20-30 %.",
                        "category": "",
                        "type": "bool",
                        "readonly": false,
                        "internal": false,
                        "value_bool": false
                    },
                    {
                        "id": "deviceType",
                        "name": "Operation mode",
                        "description": "Specify detector operation mode.",
                        "category": "",
                        "type": "string",
                        "readonly": false,
                        "internal": false,
                        "enum_constraint": {
                            "items": [
                                {
                                    "name": "CPU",
                                    "traits": [],
                                    "properties": [],
                                    "value_string": "CPU"
                                },
                                {
                                    "name": "Intel GPU",
                                    "traits": [],
                                    "properties": [],
                                    "value_string": "IntelGPU"
                                },
                                {
                                    "name": "Intel NCS",
                                    "traits": [],
                                    "properties": [],
                                    "value_string": "IntelNCS"
                                }
                            ],
                            "default_string": "CPU"
                        },
                        "value_string": "CPU"
                    },
                    {
                        "id": "directionDetectionAlg",
                        "name": "Algorithm of vehicle direction detection",
                        "description": "Select from list the algorithm of vehicle direction detection by license plate.",
                        "category": "",
                        "type": "string",
                        "readonly": false,
                        "internal": false,
                        "enum_constraint": {
                            "items": [
                                {
                                    "name": "By license plate coordinates",
                                    "traits": [],
                                    "properties": [],
                                    "value_string": "ByCooridnates"
                                },
                                {
                                    "name": "By license plate scale change",
                                    "traits": [],
                                    "properties": [],
                                    "value_string": "ByScaleChange"
                                }
                            ],
                            "default_string": "ByCooridnates"
                        },
                        "value_string": "ByCooridnates"
                    },
                    {
                        "id": "dynamicEnable",
                        "name": "VodiCTL_VPW_DYNAMIC_ENABLE",
                        "description": "VodiCTL_VPW_DYNAMIC_ENABLE",
                        "category": "",
                        "type": "bool",
                        "readonly": false,
                        "internal": false,
                        "value_bool": true
                    },
                                   {
                        "id": "dynamicOutputTimeout",
                        "name": "VodiCTL_VPW_DYNAMIC_OUTPUT_TIMEOUT",
                        "description": "VodiCTL_VPW_DYNAMIC_OUTPUT_TIMEOUT",
                        "category": "",
                        "type": "double",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_double": 0,
                            "max_double": 3600,
                            "default_double": 1
                        },
                        "value_double": 1
                    },
                    {
                        "id": "dynamicWithDuplicate",
                        "name": "VodiCTL_VPW_DYNAMIC_WITH_DUPLICATE",
                        "description": "VodiCTL_VPW_DYNAMIC_WITH_DUPLICATE",
                        "category": "",
                        "type": "bool",
                        "readonly": false,
                        "internal": false,
                        "value_bool": true
                    },
                    {
                        "id": "forceReportTimeout",
                        "name": "Timeout",
                        "description": "Specify timeout in seconds.",
                        "category": "",
                        "type": "int32",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_int": 0,
                            "max_int": 3600,
                            "default_int": 0
                        },
                        "value_int32": 0
                    },
                    {
                        "id": "imageBlur",
                        "name": "VodiCTL_VPW_IMAGE_BLUR",
                        "description": "VodiCTL_VPW_IMAGE_BLUR",
                        "category": "",
                        "type": "int32",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_int": 0,
                            "max_int": 100000,
                            "default_int": 13
                        },
                        "value_int32": 13
                    },
                    {
                        "id": "imageThreshold",
                        "name": "Contrast threshold",
                        "description": "Specify contrast threshold.",
                        "category": "",
                        "type": "int32",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_int": 0,
                            "max_int": 100,
                            "default_int": 40
                        },
                        "value_int32": 40
                    },
                    {
                        "id": "licenseType",
                        "name": "Available license type",
                        "description": "Use selected license type if available.",
                        "category": "",
                        "type": "string",
                        "readonly": false,
                        "internal": false,
                        "enum_constraint": {
                            "items": [
                                {
                                    "name": "Archive search",
                                    "traits": [],
                                    "properties": [],
                                    "value_string": "archivesearch"
                                },
                                {
                                    "name": "Standard (25 FPS or 6 FPS)",
                                    "traits": [],
                                    "properties": [],
                                    "value_string": "normal"
                                },
                                {
                                    "name": "High rate (25 FPS)",
                                    "traits": [],
                                    "properties": [],
                                    "value_string": "fast"
                                },
                                {
                                    "name": "Low rate (6 FPS)",
                                    "traits": [],
                                    "properties": [],
                                    "value_string": "slow"
                                }
                            ],
                            "default_string": "archivesearch"
                        },
                        "value_string": "archivesearch"
                    },
                    {
                        "id": "logSettings",
                        "name": "VodiCTL_VPW_LOG_SETTINGS",
                        "description": "VodiCTL_VPW_LOG_SETTINGS",
                        "category": "",
                        "type": "bool",
                        "readonly": false,
                        "internal": false,
                        "value_bool": false
                    },
                    {
                        "id": "maxPlateWidth",
                        "name": "Maximum plate width, in %",
                        "description": "Specify maximum plate width in percent.",
                        "category": "",
                        "type": "int32",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_int": 0,
                            "max_int": 100,
                            "default_int": 20
                        },
                        "value_int32": 20
                    },
                    {
                        "id": "minPlateWidth",
                        "name": "Minimum plate width, in %",
                        "description": "Specify minimum plate width in percent.",
                        "category": "",
                        "type": "int32",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_int": 0,
                            "max_int": 100,
                            "default_int": 5
                        },
                        "value_int32": 5
                    },
                    {
                        "id": "outputFramecount",
                        "name": "Frame count",
                        "description": "Specify frame count sufficient to get recognition result.",
                        "category": "",
                        "type": "int32",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_int": 1,
                            "max_int": 20,
                            "default_int": 6
                        },
                        "value_int32": 6
                    },
                    {
                        "id": "plateCandsMethod",
                        "name": "Analysis mode",
                        "description": "Select from list analysis mode.",
                        "category": "",
                        "type": "string",
                        "readonly": false,
                        "internal": false,
                        "enum_constraint": {
                            "items": [
                                {
                                    "name": "Standard (morphemic)",
                                    "traits": [],
                                    "properties": [],
                                    "value_string": "platecandsByMorph"
                                },
                                {
                                    "name": "Advanced (neural)",
                                    "traits": [],
                                    "properties": [],
                                    "value_string": "platecandsByDNN"
                                }
                            ],
                            "default_string": "platecandsByMorph"
                        },
                        "value_string": "platecandsByMorph"
                    },
                    {
                        "id": "plateDisplayQuality",
                        "name": "Plate display quality",
                        "description": "Specify in % plate display quality.",
                        "category": "",
                        "type": "int32",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_int": 0,
                            "max_int": 100,
                            "default_int": 0
                        },
                        "value_int32": 0
                    },
                    {
                        "id": "plateFilterRodropfactor",
                        "name": "VodiCTL_VPW_PLATE_FILTER_RODROPFACTOR",
                        "description": "VodiCTL_VPW_PLATE_FILTER_RODROPFACTOR",
                        "category": "",
                        "type": "int32",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_int": 0,
                            "max_int": 100000,
                            "default_int": 0
                        },
                        "value_int32": 0
                    },
                    {
                        "id": "plateFilterRofactor",
                        "name": "VodiCTL_VPW_PLATE_FILTER_ROFACTOR",
                        "description": "VodiCTL_VPW_PLATE_FILTER_ROFACTOR",
                        "category": "",
                        "type": "int32",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_int": 0,
                            "max_int": 100000,
                            "default_int": 95
                        },
                        "value_int32": 95
                    },
                    {
                        "id": "plateFilterSymcount",
                        "name": "VodiCTL_VPW_PLATE_FILTER_SYMCOUNT",
                        "description": "VodiCTL_VPW_PLATE_FILTER_SYMCOUNT",
                        "category": "",
                        "type": "int32",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_int": 0,
                            "max_int": 100000,
                            "default_int": 0
                        },
                        "value_int32": 0
                    },
                    {
                        "id": "plateProbMin",
                        "name": "Minimal similarity",
                        "description": "Specify in % minimal similarity to template required for recognition.",
                        "category": "",
                        "type": "int32",
                        "readonly": false,
                        "internal": false,
                        "range_constraint": {
                            "min_int": 0,
                            "max_int": 100,
                            "default_int": 40
                        },
                        "value_int32": 40
                    }, 
                    {
                        "id": "camera_ref",
                        "name": "",
                        "description": "",
                        "category": "",
                        "type": "string",
                        "readonly": false,
                        "internal": false,
                        "value_string": "hosts/D-COMPUTER/DeviceIpint.5/SourceEndpoint.video:0:0"
                    }
                ],
                "units": [
                    {
                        "uid": "hosts/D-COMPUTER/AVDetector.2/VisualElement.19aa889c-a00b-470c-9d7f-765fbc49e5c2",
                        "display_id": "19aa889c-a00b-470c-9d7f-765fbc49e5c2",
                        "type": "VisualElement",
                        "display_name": "Detection area (rectangle)",
                        "access_point": "",
                        "properties": [
                            {
                                "id": "rectangle",
                                "name": "Detection area (rectangle)",
                                "description": "Rectangular area within which detection takes place.",
                                "category": "",
                                "type": "Rectangle",
                                "readonly": false,
                                "internal": false,
                                "value_rectangle": {
                                    "x": 0.01,
                                    "y": 0.01,
                                    "w": 0.98,
                                    "h": 0.98,
                                    "index": 0
                                }
                            },
                            {
                                "id": "element_type",
                                "name": "",
                                "description": "",
                                "category": "",
                                "type": "string",
                                "readonly": true,
                                "internal": false,
                                "value_string": "cropRect"
                            },
                            {
                                "id": "element_index",
                                "name": "",
                                "description": "",
                                "category": "",
                                "type": "int32",
                                "readonly": true,
                                "internal": false,
                                "value_int32": 0
                            }
                        ],
                        "traits": [],
                        "units": [],
                        "factory": [],
                        "destruction_args": [],
                        "discoverable": false,
                        "status": "UNIT_STATUS_ACTIVE",
                        "stripped": false,
                        "opaque_params": [],
                        "assigned_templates": [],
                        "has_unapplied_templates": false
                    }
                ],
                "destruction_args": [],
                "discoverable": false,
                "status": "UNIT_STATUS_ACTIVE",
                "stripped": false,
                "opaque_params": [
                    {
                        "id": "Guid",
                        "name": "",
                        "description": "",
                        "category": "",
                        "type": "string",
                        "readonly": false,
                        "internal": false,
                        "value_string": "9b9f5bd7-8d31-4ce6-8f78-fb95276f5b0a"
                    }
                ],
                "assigned_templates": [],
                "has_unapplied_templates": false
            }
        ],
        "unreachable_objects": [],
        "not_found_objects": [],
        "more_data": false
    }

    The list of the detection tool parameters is received.

Make a request to change the configuration of the detection tool main parameter

To make a request to change the configuration of the detection tool main parameter, do the following:

  1.  Select the required main parameter.
    For example, “Minimal similarity”.

    {
                      "id": "plateProbMin",
                      "name": "Minimal similarity",
                      "description": "Specify in % the minimal similarity to the template required for recognition.",
                      "category": "",
                      "type": "int32",
                      "readonly": false,
                      "internal": false,
                      "range_constraint": {
                          "min_int": 0,
                          "max_int": 100,
                          "default_int": 40
                      },
                      "value_int32": 40
                  }
    where
    • id  detection tool parameter ID;
    • value  parameter value.

      Note

      The value parameter should be used as in the response.

      For example, "value_int32": 40.

      • "value_int32" integer type;
      • "value_string" string type;
      • "value_bool" boolean type, accepting only True or False.

      Note

      If the parameter has a range of the available values, you should set the value within the defined range.

  2. Make a request for editing.
    Request example:

    {
        "method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
        "data": {
            "changed": [
                {
                    "uid": "hosts/D-COMPUTER/AVDetector.2",
                    "type": "AVDetector",
                    "properties": [
                            {
                                "id": "plateProbMin",
                                "value_int32": 100
                            }
                    ]
                }
            ]
        }
    }

Request to change the configuration of the detection tool main parameter is made.

Make a request to change the configuration of an optional detection tool parameter

To make a request to change the configuration of an optional detection tool parameter, do the following: 

  1. Select the required optional parameter.
    For example, "Detection area (rectangle)".

    "units": [
                  {
                      "uid": "hosts/D-COMPUTER/AVDetector.2/VisualElement.19aa889c-a00b-470c-9d7f-765fbc49e5c2",
                      "display_id": "19aa889c-a00b-470c-9d7f-765fbc49e5c2",
                      "type": "VisualElement",
                      "display_name": "Detection area (rectangle)",
                      "access_point": "",
                      "properties": [
                          {
                              "id": "rectangle",
                              "name": "Detection area (rectangle)",
                              "description": "Rectangular area within which detection takes place.",
                              "category": "",
                              "type": "Rectangle",
                              "readonly": false,
                              "internal": false,
                              "value_rectangle": {
                                  "x": 0.01,
                                  "y": 0.01,
                                  "w": 0.98,
                                  "h": 0.98,
                                  "index": 0
                              }
                          },
                          {
                              "id": "element_type",
                              "name": "",
                              "description": "",
                              "category": "",
                              "type": "string",
                              "readonly": true,
                              "internal": false,
                              "value_string": "cropRect"
                          },
                          {
                              "id": "element_index",
                              "name": "",
                              "description": "",
                              "category": "",
                              "type": "int32",
                              "readonly": true,
                              "internal": false,
                              "value_int32": 0
                          }
                      ],
                      "traits": [],
                      "units": [],
                      "factory": [],
                      "destruction_args": [],
                      "discoverable": false,
                      "status": "UNIT_STATUS_ACTIVE",
                      "stripped": false,
                      "opaque_params": [],
                      "assigned_templates": [],
                      "has_unapplied_templates": false
                  }
              ],

    where

    • uid − detection tool ID;
    • type detection tool type;
    • id − detection tool parameter ID;
    • value − parameter value.

      Note

      The value parameter should be used as in the response.

      For example, "value_int32": 40.

      • "value_int32"  integer type;
      • "value_string" string type;
      • "value_bool" boolean type, accepting only True or False.

      Note

      If the parameter has a range of the available values, you should set the value within the defined range.


  2. Make a request for editing.
    Request example:

    {
        "method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
        "data": {
            "changed": [
                {
                    "uid": "hosts/D-COMPUTER/AVDetector.2/VisualElement.19aa889c-a00b-470c-9d7f-765fbc49e5c2",
                    "type": "VisualElement",
                    "properties": [
                            {
                                "id": "rectangle",
                                "value_rectangle": {
                                    "x": 0.21,
                                    "y": 0.41,
                                    "w": 0.58,
                                    "h": 0.88,
                                    "index": 0
                                }
                            }
                    ]           
                     
                }
            ]
        }
    }

Request to change the configuration of an optional detection tool parameter is made.

Content

  • No labels