IP Camera
Last updated
Was this helpful?
Last updated
Was this helpful?
Introduction
Tested Devices
Run Device Service
IP Camera Setup
Device Service REST API Reference
The EdgeX camera device service is designed to control/communicate ONVIF-compliant cameras that can be accessed via http. Use Device-Camera to find out those IP cameras in the local area network and manage the interaction between the EdgeX application and the network cameras. The current system supports the ability to capture still images from IP cameras.
There are two sets of APIs. One is used by the native EdgeX device service, and the other is a simple API designed to configure camera scan rules and retrieve scan results. The former listens on port 50010, and the latter listens on port 50011.
This service has been tested with the following devices:
The tested devices with the following configuration:
GV-TBL2703 with firmware version: v1.0.1 2019-05-16
GV-TDR2700 with firmware version: v1.0.1 2018-07-24
VIVOTEK FD9360-H with firmware version: 0100p
Install the latest version of the Docker engine to avoid vulnerabilities
(1) How to remove the current Docker installation
$ sudo apt-get remove --purge docker docker-engine docker.io -y
(2) How to add the necessary repository
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
(3) How to install the latest Docker engine
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release -y
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io -y
(4) Make sure your user is still a member of the docker group
$ sudo usermod -aG docker $USER
(5) Install masscan (Mass IP port scanner)
$ sudo apt-get install masscan
(6) Install arp - manipulate the system ARP cache
$ sudo apt-get install net-tools
(7) Preparing EdgeX Stack
1.The camera device service runs on TCP port numbers 50010 and 50011. Before starting the service, open a command prompt and enter the below two commands to make sure that no one is using the port numbers.
Windows
netstat -na | look for "50010"
Linux
netstat -na | look for "50011"
Service
Port
device-camera
50010
Adv-REST-API
50011
2. For Windows, please use the installed Windows batch scripts start_ds.bat and stop_ds.bat provided in the installation package to start or stop the device service.
3. Ubuntu platforms
Launch the EdgeX stack by checking
Run the device-camera executable directly with root privileges, and note that the configuration file directory res/ must be the same path as the device-camera file.
4. After the device service is started, you could request to hit ping endpoint for check if device service is available. If yes, it returns a string: pong.
$ curl http://{hostip}:50010/api/v1/ping
5. To check whether the ADV-REST-API is available, you can request scanning rules to confirm. If it is, the current scan rule is returned in JSON format.
$ curl http://{hostip}:50011/camscan.json
In addition to the setup and operation of the IP camera, please pay attention to the following points.
Make sure that the IP camera and EdgeX server are on the same local area network (LAN).
Configure 80 as the HTTP port of each IP camera.
Record the serial number, login account/password, and IP address.
Provide instructions for using the IP camera, such as nickname, location and purpose. This information will be used to build camtag.json.
http://{hostip}:50010/api/v1/device/name/edgex-camera-onvif-{serialnumber}/{CommandId}
http://{hostip}:50010/api/v1/device/{id}/{CommandId}
CommandId
Description
onvif_profiles
ONVIF-compliant IP camera information with its queried capabilities
Tags
Camera information and its tag data combined by serial number index
hostip: The host ip address of the EdgeX device camera service running
serialnumber: The serial number of ONVIF camera
id: The ONVIF camera registered id in EdgeX core
The collection {CommandId} has the following properties:
CommandId
Type
Read/Write
HTTP Method
onvif_profiles
JSON
R
GET
tags
JSON
R
GET
Example
1. Get the camera onvif_profiles:
Example Requests
http://127.0.0.1:50010/api/v1/device/name/edgex-camera-onvif-0002D18921E9/onvif_profiles
http://127.0.0.1:50010/api/v1/device/62620d189f8fc200016104aa/onvif_profiles
Example Response
{"id":"","pushed":0,"device":"edgex-camera-onvif-0002D18921E9","created":0,"modified":0,"origin":1650594198189,"schedule":null,"event":null,"readings":[{"id":"","pushed":0,"created":0,"origin":1650594198189,"modified":0,"device":"edgex-camera-onvif-0002D18921E9","name":"onvif_camera_metadata","value":"{"ip":"192.168.0.106:80","productname":"VIVOTEK","firmwareversion":"0100","serialnumber":"0002D18921E9","profiles":[{"ProfileName":"Profile8442","Formats":"H264","Resolutions":["1920","1080"],"RTSPPath":"rtsp://192.168.0.106:554/live1s1.sdp","ImagePath":"http://192.168.0.106:80/cgi-bin/viewer/video.jpg?channel=0\u0026streamid=0","ProfileToken":"Profile8442"},{"ProfileName":"Profile6707","Formats":"H264","Resolutions":["640","360"],"RTSPPath":"rtsp://192.168.0.106:554/live1s2.sdp","ImagePath":"http://192.168.0.106:80/cgi-bin/viewer/video.jpg?channel=0\u0026streamid=1","ProfileToken":"Profile6707"}],"tags":"nickname:onvif3,location:room3","ScannedTimes":0}"}]}
2. Find EdgeX registered id from the available EdgeX core commands using your device name:
Example Requests
http://127.0.0.1:48082/api/v1/device/name/edgex-camera-onvif-0002D18921E9
Example Response
{"id":"62620d189f8fc200016104aa","name":"edgex-camera-onvif-0002D18921E9","adminState":"UNLOCKED","operatingState":"ENABLED","lastConnected":0,"lastReported":0,"labels":[],"location":null,"commands":[{"created":1650003530589,"modified":0,"origin":0,"id":"62590e4a9f8fc200018ff341","name":"tags","get":{"path":"/api/v1/device/{deviceId}/tags","responses":[{"code":"200","description":"Get Tags","expectedValues":["cameradevice_tags"]},{"code":"503","description":"Get Tags Error","expectedValues":["cameradevice_error"]}],"url":"http://edgex-core-command:48082/api/v1/device/62620d189f8fc200016104aa/command/62590e4a9f8fc200018ff341"},"put":{"path":"/api/v1/device/{deviceId}/tags","responses":[{"code":"200","description":"Set Tags","expectedValues":["cameradevice_id"]},{"code":"503","description":"Set Tags Error","expectedValues":["cameradevice_error"]}],"parameterNames":["cameradevice_tags"],"url":"http://edgex-core-command:48082/api/v1/device/62620d189f8fc200016104aa/command/62590e4a9f8fc200018ff341"}},{"created":1650003530590,"modified":0,"origin":0,"id":"62590e4a9f8fc200018ff342","name":"onvif_profiles","get":{"path":"/api/v1/device/{deviceId}/onvif_profiles","responses":[{"code":"200","description":"Get ONVIF Profiles","expectedValues":["onvif_camera_metadata"]},{"code":"503","description":"Get ONVIF Profiles Error","expectedValues":["cameradevice_error"]}],"url":"http://edgex-core-command:48082/api/v1/device/62620d189f8fc200016104aa/command/62590e4a9f8fc200018ff342"},"put":{"path":"/api/v1/device/{deviceId}/onvif_profiles","responses":[{"code":"200","description":"Set ONVIF Profiles","expectedValues":["onvif_camera_metadata"]},{"code":"503","description":"Set ONVIF Profiles Error","expectedValues":["cameradevice_error"]}],"parameterNames":["onvif_camera_metadata"],"url":"http://edgex-core-command:48082/api/v1/device/62620d189f8fc200016104aa/command/62590e4a9f8fc200018ff342"}}]}
3. Get the camera tags:
Example Requests
http://127.0.0.1:50010/api/v1/device/name/edgex-camera-onvif-0002D18921E9/tags
http://127.0.0.1:50010/api/v1/device/62620d189f8fc200016104aa/tags
Example Response
{"id":"","pushed":0,"device":"edgex-camera-onvif-0002D18921E9","created":0,"modified":0,"origin":1650594337132,"schedule":null,"event":null,"readings":[{"id":"","pushed":0,"created":0,"origin":1650594337132,"modified":0,"device":"edgex-camera-onvif-0002D18921E9","name":"cameradevice_tags","value":"nickname:onvif3,location:room3"}]}
http://{hostip}:50011/{CommandId}
CommandId
Description
advinfocache.json
Camera scan runtime result
camscan.json
Scan camera IP address and login account configuration
camtags.json
Camera usage tags configuration
The collection {CommandId} has the following properties:
Command ID
Type
Read/Write
HTTP Method
advinfocache.json
JSON
R
GET
camscan.json
JSON
R/W
GET/PUT
camtags.json
JSON
R/W
GET/PUT
For the rules in camscan.json, the ip range rules cannot overlap.
Except that the system has just started, the system will only perform camera scan operations when the content of the camscan.json file is changed or the timestamp is updated.
The value of camtags.json members cannot contain double quote characters, even if they are escaped with a backslash.
Each camtages.json object consists of a camera serial number and a 255-length tag string name/value pair.
Get the current camera scan result:
curl http://127.0.0.1:50011/advinfocache.jsonn
[{"SerialNumber":"000017509314","IPAddress":"172.22.24.96","Snapshot":"http://172.22.24.96:85/images/snapshot.jpg","Tags":"nickname:onvif1,location:room1"},{"SerialNumber":"0002D18921E9","IPAddress":"172.22.24.85","Snapshot":"http://172.22.24.85:80/cgi-bin/viewer/video.jpg?channel=0\u0026streamid=0","Tags":"nickname:onvif3,location:room3"},{"SerialNumber":"000017658940","IPAddress":"172.22.24.76","Snapshot":"http://172.22.24.76:85/images/snapshot.jpg","Tags":"nickname:onvif2,location:room2"},{"SerialNumber":"0002D18921ED","IPAddress":"172.22.24.101","Snapshot":"http://172.22.24.101:80/cgi-bin/viewer/video.jpg?channel=0\u0026streamid=0","Tags":"nickname:onvif?,location:room!"}]
Set the camera scan rules:
curl -H 'Content-Type: application/json' -X PUT -d '[{"ipRange":"172.22.24.85","username":"root","password":"trek-676"},{"ipRange":"172.22.24.100-172.22.24.132","username":"root","password":"trek-676"},{"ipRange":"172.22.24.96","username":"admin","password":"admin"},{"ipRange":"172.22.24.72/29","username":"admin","password":"admin"}]' http://127.0.0.1:50011/camscan.json
Set the camera tags data:
curl -H 'Content-Type: application/json' -X PUT -d '[{"sn":"000017509314","tags":"nickname:onvif1,location:room1"},{"sn":"000017658940","tags":"nickname:onvif2,location:room2"},{"sn":"0002D18921ED","tags":"nickname:onvif?,location:room!"},{"sn":"0002D18921E9","tags":"nickname:onvif3,location:room3"}]' http://127.0.0.1:50011/camtags.json
Please reference