Custom Metadata
Custom metadata can be applied and retrieved for each camera added to the service.
Usage
- The
CustomMetadata
map is an element in theProtocolProperties
device field. It is initialized to be empty on discovery, so the user can add their desired fields. Otherwise, the user can pre-define this field in a camera.toml file.
Preset Custom Metadata
If you add pre-defined devices, set up the CustomMetadata
object as shown in the cmd/res/devices/camera.toml.example
.
# Pre-defined Devices
[[DeviceList]]
Name = "Camera001"
ProfileName = "onvif-camera"
Description = "onvif conformant camera"
[DeviceList.Protocols]
...
[DeviceList.Protocols.CustomMetadata]
Location = "Front door"
Color = "Black and white"
Set Custom Metadata
Use the CustomMetadata resource to set the fields of CustomMetadata
. Choose the key/value pairs to represent your custom fields.
- Use this command to put the data in the CustomMetadata field.
curl --request PUT 'http://0.0.0.0:59882/api/v2/device/name/<device name>/CustomMetadata' \ --header 'Content-Type: application/json' \ --data-raw '{ "CustomMetadata": { "Location":"Front Door", "Color":"Black and white", "Condition": "Good working condition" } }' | jq .
- The response from the curl command.
{ "apiVersion": "v2", "statusCode": 200 }
Note
Ensure all data is properly formatted json, and that all special characters are escaped if necessary
Get Custom Metadata
Use the CustomMetadata resource to get and display the fields of CustomMetadata
.
- Use this command to return all of the data in the CustomMetadata field.
curl http://localhost:59882/api/v2/device/name/<device name>/CustomMetadata | jq .
{
"apiVersion" : "v2",
"event" : {
"apiVersion" : "v2",
"deviceName" : "3fa1fe68-b915-4053-a3e1-cc32e5000688",
"id" : "ba3987f9-b45b-480a-b582-f5501d673c4d",
"origin" : 1655409814077374935,
"profileName" : "onvif-camera",
"readings" : [
{
"deviceName" : "3fa1fe68-b915-4053-a3e1-cc32e5000688",
"id" : "cf96e5c0-bde1-4c0b-9fa4-8f765c8be456",
"objectValue" : {
"Color" : "Black and white",
"Condition" : "Good working condition",
"Location" : "Front Door"
},
"origin" : 1655409814077374935,
"profileName" : "onvif-camera",
"resourceName" : "CustomMetadata",
"value" : "",
"valueType" : "Object"
}
],
"sourceName" : "CustomMetadata"
},
"statusCode" : 200
}
Get Specific Custom Metadata
Pass the CustomMetadata
resource a query to get specific field(s) in CustomMetadata. The query must be a base64 encoded json object with an array of fields you want to access.
-
Json object holding an array of fields you want to query.
'[ "Color", "Location" ]'
-
Use this command to convert the json object to base64.
echo '[ "Color", "Location" ]' | base64
-
The response converted to base64.
WwogICAgIkNvbG9yIiwKICAgICJMb2NhdGlvbiIKXQo=
-
Use this command to query the fields you provided in the json object.
curl http://localhost:59882/api/v2/device/name/<device name>/CustomMetadata?jsonObject=WwogICAgIkNvbG9yIiwKICAgICJMb2NhdGlvbiIKXQo= | jq .
-
Curl response.
{ "apiVersion" : "v2", "event" : { "apiVersion" : "v2", "deviceName" : "3fa1fe68-b915-4053-a3e1-cc32e5000688", "id" : "24c3eb0a-48b1-4afe-b874-965aeb2e42a2", "origin" : 1655410556448058195, "profileName" : "onvif-camera", "readings" : [ { "deviceName" : "3fa1fe68-b915-4053-a3e1-cc32e5000688", "id" : "d0c26303-20b5-4ccd-9e63-fb02b87b8ebc", "objectValue" : { "Color": "Black and white", "Location" : "Front Door" }, "origin" : 1655410556448058195, "profileName" : "onvif-camera", "resourceName" : "CustomMetadata", "value" : "", "valueType" : "Object" } ], "sourceName" : "CustomMetadata" }, "statusCode" : 200 }
Additional Usage
Use the DeleteCustomMetadata resource to delete entries in custom metadata
- Use this command to delete fields.
curl --request PUT 'http://0.0.0.0:59882/api/v2/device/name/<device name>/DeleteCustomMetadata' \ --header 'Content-Type: application/json' \ --data-raw '{ "DeleteCustomMetadata": [ "Color", "Condition" ] }' | jq .
- The response from the curl command.
{ "apiVersion": "v2", "statusCode": 200 }