onvif-python 0.1.8__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {onvif_python-0.1.8/onvif_python.egg-info → onvif_python-0.2.0}/PKG-INFO +195 -23
- {onvif_python-0.1.8 → onvif_python-0.2.0}/README.md +194 -22
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/cli/interactive.py +26 -11
- onvif_python-0.2.0/onvif/cli/main.py +736 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/cli/utils.py +2 -9
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/client.py +90 -8
- onvif_python-0.2.0/onvif/db/companies.db +0 -0
- onvif_python-0.2.0/onvif/db/products.db +0 -0
- onvif_python-0.2.0/onvif/operator.py +348 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/analyticsdevice.py +4 -4
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/utils/discovery.py +38 -6
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/utils/error_handlers.py +26 -9
- onvif_python-0.2.0/onvif/utils/service.py +307 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/utils/wsdl.py +53 -44
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/utils/xml_capture.py +33 -5
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/utils/zeep.py +11 -0
- onvif_python-0.2.0/onvif/wsdl/LICENSE.md +232 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0/onvif_python.egg-info}/PKG-INFO +195 -23
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif_python.egg-info/SOURCES.txt +3 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/pyproject.toml +4 -4
- onvif_python-0.1.8/onvif/cli/main.py +0 -416
- onvif_python-0.1.8/onvif/operator.py +0 -193
- onvif_python-0.1.8/onvif/utils/service.py +0 -108
- {onvif_python-0.1.8 → onvif_python-0.2.0}/LICENSE.md +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/MANIFEST.in +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/__init__.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/cli/__init__.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/cli/__main__.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/__init__.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/accesscontrol.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/accessrules.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/actionengine.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/analytics/analytics.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/analytics/ruleengine.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/appmgmt.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/authenticationbehavior.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/credential.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/deviceio.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/devicemgmt.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/display.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/doorcontrol.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/events/events.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/events/notification.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/events/pullpoint.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/events/subscription.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/imaging.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/media.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/media2.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/provisioning.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/ptz.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/receiver.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/recording.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/replay.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/schedule.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/search.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/security/advancedsecurity.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/security/authorizationserver.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/security/dot1x.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/security/jwt.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/security/keystore.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/security/mediasigning.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/security/tlsserver.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/thermal.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/services/uplink.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/utils/__init__.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/utils/exceptions.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/accesscontrol/wsdl/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/accessrules/wsdl/accessrules.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/accessrules/wsdl/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/actionengine.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/advancedsecurity/wsdl/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/analyticsdevice.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/appmgmt/wsdl/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/authenticationbehavior/wsdl/authenticationbehavior.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/authenticationbehavior/wsdl/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/credential/wsdl/credential.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/credential/wsdl/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/device/wsdl/devicemgmt.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/deviceio.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/display/display.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/display/wsdl/index.htm +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/display.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/doorcontrol/wsdl/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/events/wsdl/bw-2-vs-mod.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/events/wsdl/event-vs.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/events/wsdl/event.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/events/wsdl/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/federatedsearch.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/media/wsdl/media.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/pacs/accesscontrol.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/pacs/doorcontrol.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/pacs/types.xsd +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/provisioning/wsdl/provisioning.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/receiver.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/recording.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/replay.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/schedule/wsdl/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/schedule/wsdl/schedule.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/schema/common.xsd +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/schema/metadatastream.xsd +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/schema/onvif.xsd +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/search.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/thermal/wsdl/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/thermal/wsdl/thermal.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/topics/topicns.xml +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/uplink/wsdl/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver10/uplink/wsdl/uplink.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/analytics/humanbody.xsd +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/analytics/humanface.xsd +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/analytics/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/analytics/radiometry.xsd +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/analytics/rules.xsd +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/analytics/wsdl/analytics.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/analytics/wsdl/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/imaging/wsdl/imaging.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/media/wsdl/index.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/media/wsdl/media.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/ptz/wsdl/ptz.wsdl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/util/federated_search_documentation.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/util/fedsearch-docu-viewer.xsl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/util/onvif-wsdl-viewer.xsl +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif/wsdl/ver20/util/operationIndex.html +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif_python.egg-info/dependency_links.txt +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif_python.egg-info/entry_points.txt +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif_python.egg-info/requires.txt +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/onvif_python.egg-info/top_level.txt +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/setup.cfg +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/setup.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/tests/test_client.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/tests/test_core.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/tests/test_error_handlers.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/tests/test_exceptions.py +0 -0
- {onvif_python-0.1.8 → onvif_python-0.2.0}/tests/test_wsdl_map.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: onvif-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: A modern Python library for ONVIF-compliant devices
|
|
5
5
|
Author-email: Nirsimetri Technologies® <open@nirsimetri.com>
|
|
6
6
|
Maintainer: Kaburagi
|
|
@@ -47,7 +47,7 @@ Dynamic: license-file
|
|
|
47
47
|
|
|
48
48
|
[](https://app.codacy.com/gh/nirsimetri/onvif-python/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
|
|
49
49
|
[](https://deepwiki.com/nirsimetri/onvif-python)
|
|
50
|
-
[](https://pypi.org/project/onvif-python/)
|
|
51
51
|
[](https://clickpy.clickhouse.com/dashboard/onvif-python)
|
|
52
52
|
<br>
|
|
53
53
|
[](https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml)
|
|
@@ -55,7 +55,7 @@ Dynamic: license-file
|
|
|
55
55
|
</div>
|
|
56
56
|
|
|
57
57
|
<h1 align="center">
|
|
58
|
-
<img src="https://raw.githubusercontent.com/nirsimetri/onvif-python/refs/heads/main/assets/carbon_onvif.png" alt="onvif" width="700px">
|
|
58
|
+
<img src="https://raw.githubusercontent.com/nirsimetri/onvif-python/refs/heads/main/assets/images/carbon_onvif.png" alt="onvif" width="700px">
|
|
59
59
|
<br>
|
|
60
60
|
</h1>
|
|
61
61
|
|
|
@@ -193,6 +193,109 @@ print(stream)
|
|
|
193
193
|
|
|
194
194
|
Explore more advanced usage and service-specific operations in the [`examples/`](./examples/) folder.
|
|
195
195
|
|
|
196
|
+
## Helper Methods
|
|
197
|
+
|
|
198
|
+
Every ONVIF service provides three essential helper methods to improve the development experience and make working with ONVIF operations more intuitive:
|
|
199
|
+
|
|
200
|
+
**1. `type(type_name)`**
|
|
201
|
+
|
|
202
|
+
Creates and returns an instance of the specified ONVIF type for building complex request parameters (applied at [`>=v0.1.9`](https://github.com/nirsimetri/onvif-python/releases/tag/v0.1.9)).
|
|
203
|
+
|
|
204
|
+
**Usage:**
|
|
205
|
+
```python
|
|
206
|
+
device = client.devicemgmt()
|
|
207
|
+
|
|
208
|
+
# Create a new user object
|
|
209
|
+
new_user = device.type('CreateUsers')
|
|
210
|
+
new_user.User.append({
|
|
211
|
+
"Username": 'new_user',
|
|
212
|
+
"Password": 'new_password',
|
|
213
|
+
"UserLevel": 'User'
|
|
214
|
+
})
|
|
215
|
+
device.CreateUsers(new_user)
|
|
216
|
+
|
|
217
|
+
# Set hostname
|
|
218
|
+
hostname = device.type('SetHostname')
|
|
219
|
+
hostname.Name = 'NewHostname'
|
|
220
|
+
device.SetHostname(hostname)
|
|
221
|
+
|
|
222
|
+
# Configure system time
|
|
223
|
+
time_params = device.type('SetSystemDateAndTime')
|
|
224
|
+
time_params.DateTimeType = 'NTP'
|
|
225
|
+
time_params.DaylightSavings = True
|
|
226
|
+
time_params.TimeZone.TZ = 'UTC+02:00'
|
|
227
|
+
now = datetime.now()
|
|
228
|
+
time_params.UTCDateTime.Date.Year = now.year
|
|
229
|
+
time_params.UTCDateTime.Date.Month = now.month
|
|
230
|
+
time_params.UTCDateTime.Date.Day = now.day
|
|
231
|
+
time_params.UTCDateTime.Time.Hour = now.hour
|
|
232
|
+
time_params.UTCDateTime.Time.Minute = now.minute
|
|
233
|
+
time_params.UTCDateTime.Time.Second = now.second
|
|
234
|
+
device.SetSystemDateAndTime(time_params)
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**2. `operations()`**
|
|
238
|
+
|
|
239
|
+
Lists all available operations for the current service (applied at [`>=v0.2.0`](https://github.com/nirsimetri/onvif-python/releases/tag/v0.2.0)).
|
|
240
|
+
|
|
241
|
+
**Returns:**
|
|
242
|
+
- List of operation names that can be called on the service
|
|
243
|
+
|
|
244
|
+
**Usage:**
|
|
245
|
+
```python
|
|
246
|
+
device = client.devicemgmt()
|
|
247
|
+
media = client.media()
|
|
248
|
+
ptz = client.ptz()
|
|
249
|
+
|
|
250
|
+
# List all available operations for each service
|
|
251
|
+
print("Device Management Operations:")
|
|
252
|
+
for op in device.operations():
|
|
253
|
+
print(f" - {op}")
|
|
254
|
+
|
|
255
|
+
print("\nMedia Operations:")
|
|
256
|
+
for op in media.operations():
|
|
257
|
+
print(f" - {op}")
|
|
258
|
+
|
|
259
|
+
print("\nPTZ Operations:")
|
|
260
|
+
for op in ptz.operations():
|
|
261
|
+
print(f" - {op}")
|
|
262
|
+
|
|
263
|
+
# Check if specific operation is supported
|
|
264
|
+
if 'ContinuousMove' in ptz.operations():
|
|
265
|
+
print("PTZ continuous movement is supported")
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
**3. `desc(method_name)`**
|
|
269
|
+
|
|
270
|
+
Provides comprehensive documentation and parameter information for any ONVIF operation (applied at [`>=v0.2.0`](https://github.com/nirsimetri/onvif-python/releases/tag/v0.2.0)).
|
|
271
|
+
|
|
272
|
+
**Returns:**
|
|
273
|
+
- `doc`: Method documentation from WSDL
|
|
274
|
+
- `required`: List of required parameter names
|
|
275
|
+
- `optional`: List of optional parameter names
|
|
276
|
+
- `method_name`: The method name
|
|
277
|
+
- `service_name`: The service name
|
|
278
|
+
|
|
279
|
+
**Usage:**
|
|
280
|
+
```python
|
|
281
|
+
device = client.devicemgmt()
|
|
282
|
+
|
|
283
|
+
# Get detailed information about a method
|
|
284
|
+
info = device.desc('GetDeviceInformation')
|
|
285
|
+
print(info['doc'])
|
|
286
|
+
print("Required params:", info['required'])
|
|
287
|
+
print("Optional params:", info['optional'])
|
|
288
|
+
|
|
289
|
+
# Explore available methods first
|
|
290
|
+
methods = device.operations()
|
|
291
|
+
for method in methods[:5]: # Show first 5 methods
|
|
292
|
+
info = device.desc(method)
|
|
293
|
+
print(f"{method}: {len(info['required'])} required, {len(info['optional'])} optional")
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
> [!TIP]
|
|
297
|
+
> These helper methods are available on **all** ONVIF services (`devicemgmt()`, `media()`, `ptz()`, `events()`, `imaging()`, `analytics()`, etc.) and provide a consistent API for exploring and using ONVIF capabilities across different device types and manufacturers.
|
|
298
|
+
|
|
196
299
|
> [!IMPORTANT]
|
|
197
300
|
> If you're new to ONVIF and want to learn more, we highly recommend taking the official free online course provided by ONVIF at [Introduction to ONVIF Course](https://www.onvif.org/about/introduction-to-onvif-course). Please note that we are not endorsed or sponsored by ONVIF, see [Legal Notice](#legal-notice) for details.
|
|
198
301
|
|
|
@@ -224,12 +327,12 @@ This library includes a powerful command-line interface (CLI) for interacting wi
|
|
|
224
327
|
<tr>
|
|
225
328
|
<td width="34.2%">
|
|
226
329
|
<a href="https://github.com/nirsimetri/onvif-python">
|
|
227
|
-
<img src="https://raw.githubusercontent.com/nirsimetri/onvif-python/refs/heads/main/assets/onvif_cli.png" />
|
|
330
|
+
<img src="https://raw.githubusercontent.com/nirsimetri/onvif-python/refs/heads/main/assets/images/onvif_cli.png" />
|
|
228
331
|
</a>
|
|
229
332
|
</td>
|
|
230
333
|
<td width="65.8%">
|
|
231
334
|
<a href="https://github.com/nirsimetri/onvif-python">
|
|
232
|
-
<img src="https://raw.githubusercontent.com/nirsimetri/onvif-python/refs/heads/main/assets/onvif_operations.png" />
|
|
335
|
+
<img src="https://raw.githubusercontent.com/nirsimetri/onvif-python/refs/heads/main/assets/images/onvif_operations.png" />
|
|
233
336
|
</a>
|
|
234
337
|
</td>
|
|
235
338
|
</tr>
|
|
@@ -249,12 +352,11 @@ This library includes a powerful command-line interface (CLI) for interacting wi
|
|
|
249
352
|
<summary><b>1. Direct CLI</b></summary>
|
|
250
353
|
|
|
251
354
|
```bash
|
|
252
|
-
usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--search SEARCH] [--timeout TIMEOUT] [--https]
|
|
253
|
-
[--no-verify] [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}]
|
|
254
|
-
[--health-check-interval HEALTH_CHECK_INTERVAL] [--version]
|
|
355
|
+
usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--filter FILTER] [--search SEARCH] [--page PAGE] [--per-page PER_PAGE] [--timeout TIMEOUT] [--https]
|
|
356
|
+
[--no-verify] [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}] [--health-check-interval HEALTH_CHECK_INTERVAL] [--version]
|
|
255
357
|
[service] [method] [params ...]
|
|
256
358
|
|
|
257
|
-
ONVIF Terminal Client — v0.
|
|
359
|
+
ONVIF Terminal Client — v0.2.0
|
|
258
360
|
https://github.com/nirsimetri/onvif-python
|
|
259
361
|
|
|
260
362
|
positional arguments:
|
|
@@ -271,8 +373,12 @@ options:
|
|
|
271
373
|
--password PASSWORD, -p PASSWORD
|
|
272
374
|
Password for authentication
|
|
273
375
|
--discover, -d Discover ONVIF devices on the network using WS-Discovery
|
|
274
|
-
--
|
|
376
|
+
--filter FILTER, -f FILTER
|
|
275
377
|
Filter discovered devices by types or scopes (case-insensitive substring match)
|
|
378
|
+
--search SEARCH, -s SEARCH
|
|
379
|
+
Search ONVIF products database by model or company (e.g., 'c210', 'hikvision')
|
|
380
|
+
--page PAGE Page number for search results (default: 1)
|
|
381
|
+
--per-page PER_PAGE Number of results per page (default: 20)
|
|
276
382
|
--timeout TIMEOUT Connection timeout in seconds (default: 10)
|
|
277
383
|
--https Use HTTPS instead of HTTP
|
|
278
384
|
--no-verify Disable SSL certificate verification
|
|
@@ -287,15 +393,20 @@ options:
|
|
|
287
393
|
--version, -v Show ONVIF CLI version and exit
|
|
288
394
|
|
|
289
395
|
Examples:
|
|
396
|
+
# Product search
|
|
397
|
+
onvif --search c210
|
|
398
|
+
onvif -s "axis camera"
|
|
399
|
+
onvif --search hikvision --page 2 --per-page 5
|
|
400
|
+
|
|
290
401
|
# Discover ONVIF devices on network
|
|
291
402
|
onvif --discover --username admin --password admin123 --interactive
|
|
292
403
|
onvif media GetProfiles --discover --username admin
|
|
293
404
|
onvif -d -i
|
|
294
405
|
|
|
295
406
|
# Discover with filtering
|
|
296
|
-
onvif --discover --
|
|
297
|
-
onvif -d -
|
|
298
|
-
onvif -d -
|
|
407
|
+
onvif --discover --filter ptz --interactive
|
|
408
|
+
onvif -d -f "C210" -i
|
|
409
|
+
onvif -d -f "audio_encoder" -u admin -p admin123 -i
|
|
299
410
|
|
|
300
411
|
# Direct command execution
|
|
301
412
|
onvif devicemgmt GetCapabilities Category=All --host 192.168.1.17 --port 8000 --username admin --password admin123
|
|
@@ -318,7 +429,7 @@ Examples:
|
|
|
318
429
|
<summary><b>2. Interactive Shell</b></summary>
|
|
319
430
|
|
|
320
431
|
```bash
|
|
321
|
-
ONVIF Interactive Shell — v0.
|
|
432
|
+
ONVIF Interactive Shell — v0.2.0
|
|
322
433
|
https://github.com/nirsimetri/onvif-python
|
|
323
434
|
|
|
324
435
|
Basic Commands:
|
|
@@ -441,7 +552,7 @@ This feature is particularly useful for:
|
|
|
441
552
|
|
|
442
553
|
**2. Device Discovery (WS-Discovery)**
|
|
443
554
|
|
|
444
|
-
The CLI includes automatic ONVIF device discovery using the WS-Discovery protocol. This feature allows you to find all ONVIF-compliant devices on your local network without knowing their IP addresses beforehand.
|
|
555
|
+
The CLI includes automatic ONVIF device discovery using the WS-Discovery protocol. This feature allows you to find all ONVIF-compliant devices on your local network without knowing their IP addresses beforehand (applied at [`>=v0.1.2`](https://github.com/nirsimetri/onvif-python/releases/tag/v0.1.2)).
|
|
445
556
|
|
|
446
557
|
**Discover and Connect Interactively:**
|
|
447
558
|
```bash
|
|
@@ -452,8 +563,8 @@ onvif --discover --username admin --password admin123 --interactive
|
|
|
452
563
|
onvif -d -u admin -p admin123 -i
|
|
453
564
|
|
|
454
565
|
# Discover with search filter
|
|
455
|
-
onvif --discover --
|
|
456
|
-
onvif -d -
|
|
566
|
+
onvif --discover --filter "C210" --interactive
|
|
567
|
+
onvif -d -f ptz -u admin -p admin123 -i
|
|
457
568
|
|
|
458
569
|
# Discover and interactive (will prompt for credentials)
|
|
459
570
|
onvif -d -i
|
|
@@ -488,15 +599,15 @@ Timeout: 4s
|
|
|
488
599
|
Found 2 ONVIF device(s):
|
|
489
600
|
|
|
490
601
|
[1] 192.168.1.14:2020
|
|
491
|
-
[id]
|
|
492
|
-
[xaddrs] http://192.168.1.14:2020/onvif/device_service
|
|
493
|
-
[types] tdn:NetworkVideoTransmitter
|
|
602
|
+
[id] 3fa1fe68-b915-4053-a3e1-a8294833fe3c
|
|
603
|
+
[xaddrs] [http://192.168.1.14:2020/onvif/device_service]
|
|
604
|
+
[types] [tdn:NetworkVideoTransmitter]
|
|
494
605
|
[scopes] [name/C210] [hardware/C210] [Profile/Streaming] [location/Hong Kong]
|
|
495
606
|
|
|
496
607
|
[2] 192.168.1.17:8000
|
|
497
|
-
[id]
|
|
498
|
-
[xaddrs] http://192.168.1.17:8000/onvif/device_service
|
|
499
|
-
[types] dn:NetworkVideoTransmitter tds:Device
|
|
608
|
+
[id] 7d04ff31-61e6-11f0-a00c-6056eef47207
|
|
609
|
+
[xaddrs] [http://192.168.1.17:8000/onvif/device_service]
|
|
610
|
+
[types] [dn:NetworkVideoTransmitter] [tds:Device]
|
|
500
611
|
[scopes] [type/NetworkVideoTransmitter] [location/unknown] [name/IPC_123465959]
|
|
501
612
|
|
|
502
613
|
Select device number 1-2 or q to quit: 1
|
|
@@ -529,6 +640,65 @@ onvif devicemgmt GetCapabilities Category=All -H 192.168.1.17 -P 8000 -u admin -
|
|
|
529
640
|
onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity='{"PanTilt": {"x": 0.1}}' -H 192.168.1.17 -P 8000 -u admin -p admin123
|
|
530
641
|
```
|
|
531
642
|
|
|
643
|
+
**4. ONVIF Product Search**
|
|
644
|
+
|
|
645
|
+
The CLI includes a built-in database of ONVIF-compatible products that can be searched to help identify and research devices before connecting (applied at [`>=v0.2.0`](https://github.com/nirsimetri/onvif-python/releases/tag/v0.2.0)).
|
|
646
|
+
|
|
647
|
+
**Basic Search:**
|
|
648
|
+
```bash
|
|
649
|
+
# Search by model name
|
|
650
|
+
onvif --search "C210"
|
|
651
|
+
onvif -s "axis camera"
|
|
652
|
+
|
|
653
|
+
# Search by manufacturer
|
|
654
|
+
onvif --search "hikvision"
|
|
655
|
+
onvif -s "dahua"
|
|
656
|
+
|
|
657
|
+
# Search by any keyword
|
|
658
|
+
onvif --search "ptz"
|
|
659
|
+
onvif -s "thermal"
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
**Paginated Results:**
|
|
663
|
+
```bash
|
|
664
|
+
# Navigate through multiple pages of results
|
|
665
|
+
onvif --search "hikvision" --page 2 --per-page 5
|
|
666
|
+
onvif -s "axis" --page 1 --per-page 10
|
|
667
|
+
|
|
668
|
+
# Adjust results per page (1-100)
|
|
669
|
+
onvif --search "camera" --per-page 20
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
**Search Database Information:**
|
|
673
|
+
|
|
674
|
+
The product database contains comprehensive information about tested ONVIF devices:
|
|
675
|
+
|
|
676
|
+
| Field | Description |
|
|
677
|
+
|-------|-------------|
|
|
678
|
+
| **ID** | Unique product identifier |
|
|
679
|
+
| **Test Date** | When the device was last tested/verified |
|
|
680
|
+
| **Model** | Device model name and number |
|
|
681
|
+
| **Firmware** | Tested firmware version |
|
|
682
|
+
| **Profiles** | Supported ONVIF profiles (S, G, T, C, A, etc.) |
|
|
683
|
+
| **Category** | Device type (Camera, NVR, etc.) |
|
|
684
|
+
| **Type** | Specific device classification |
|
|
685
|
+
| **Company** | Manufacturer name |
|
|
686
|
+
|
|
687
|
+
**Example Output:**
|
|
688
|
+
```
|
|
689
|
+
Found 15 product(s) matching: hikvision
|
|
690
|
+
Showing 1-10 of 15 results
|
|
691
|
+
|
|
692
|
+
ID | Test Date | Model | Firmware | Profiles | Category | Type | Company
|
|
693
|
+
----|---------------------|-------------------|----------|----------|----------|---------|---------
|
|
694
|
+
342 | 2024-08-15 17:53:12 | DS-2CD2143G2-IU | V5.7.3 | S,G,T | Camera | device | Hikvision
|
|
695
|
+
341 | 2024-08-14 14:22:05 | DS-2DE2A404IW-DE3 | V5.6.15 | S,G,T | Camera | device | Hikvision
|
|
696
|
+
...
|
|
697
|
+
|
|
698
|
+
Page 1 of 2
|
|
699
|
+
Navigation: Next: --page 2
|
|
700
|
+
```
|
|
701
|
+
|
|
532
702
|
### CLI Parameters
|
|
533
703
|
|
|
534
704
|
All `ONVIFClient` parameters (like `--timeout`, `--https`, `--cache`, etc.) are available as command-line arguments. Use `onvif --help` to see all available options.
|
|
@@ -863,6 +1033,7 @@ Below is a list of ONVIF services implemented and supported by this library, alo
|
|
|
863
1033
|
| Access Rules | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AccessRules.xml) | [accessrules.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/accessrules/wsdl/accessrules.wsdl) | - | ✅ Complete |
|
|
864
1034
|
| Action Engine | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/ActionEngine.xml) | [actionengine.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/actionengine.wsdl) | - | ✅ Complete |
|
|
865
1035
|
| Analytics | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Analytics.xml) | [analytics.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/wsdl/analytics.wsdl) | [rules.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/rules.xsd) <br> [humanbody.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/humanbody.xsd) <br> [humanface.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/humanface.xsd) | ✅ Complete |
|
|
1036
|
+
| Analytics Device | [Document](https://www.onvif.org/specs/srv/analytics/ONVIF-VideoAnalyticsDevice-Service-Spec-v211.pdf) | [analyticsdevice.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/analyticsdevice.wsdl) | - | ✅ Complete |
|
|
866
1037
|
| Application Management | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AppMgmt.xml) | [appmgmt.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl) | - | ✅ Complete |
|
|
867
1038
|
| Authentication Behavior| [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AuthenticationBehavior.xml) | [authenticationbehavior.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/authenticationbehavior/wsdl/authenticationbehavior.wsdl) | - | ✅ Complete |
|
|
868
1039
|
| Cloud Integration | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/CloudIntegration.xml) | [cloudintegration.yaml](https://developer.onvif.org/pub/specs/branches/development/doc/yaml.php?yaml=cloudintegration.yaml) | - | ❌ Not yet |
|
|
@@ -1023,6 +1194,7 @@ This project is an **independent open-source implementation** of the [ONVIF](htt
|
|
|
1023
1194
|
- Use of the ONVIF trademark in this repository is solely nominative and does not imply any partnership, certification, or official status.
|
|
1024
1195
|
- This project includes WSDL/XSD/HTML files from the official ONVIF specifications.
|
|
1025
1196
|
- These files are © ONVIF and are redistributed here for interoperability purposes.
|
|
1197
|
+
- The WSDL files in the [`wsdl/`](./onvif/wsdl) folder are distributed under the ONVIF Contributor License Agreement and Apache License 2.0. See [`LICENSE.md`](./onvif/wsdl/LICENSE.md) for details.
|
|
1026
1198
|
- All rights to the ONVIF specifications are reserved by ONVIF.
|
|
1027
1199
|
|
|
1028
1200
|
If you require certified ONVIF-compliant devices or clients, please refer to the official [ONVIF conformant product list](https://www.onvif.org/conformant-products/). For authoritative reference and the latest official ONVIF specifications, please consult the [ONVIF Official Specifications](https://www.onvif.org/profiles/specifications/specification-history/).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://app.codacy.com/gh/nirsimetri/onvif-python/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
|
|
6
6
|
[](https://deepwiki.com/nirsimetri/onvif-python)
|
|
7
|
-
[](https://pypi.org/project/onvif-python/)
|
|
8
8
|
[](https://clickpy.clickhouse.com/dashboard/onvif-python)
|
|
9
9
|
<br>
|
|
10
10
|
[](https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml)
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
14
14
|
<h1 align="center">
|
|
15
|
-
<img src="https://raw.githubusercontent.com/nirsimetri/onvif-python/refs/heads/main/assets/carbon_onvif.png" alt="onvif" width="700px">
|
|
15
|
+
<img src="https://raw.githubusercontent.com/nirsimetri/onvif-python/refs/heads/main/assets/images/carbon_onvif.png" alt="onvif" width="700px">
|
|
16
16
|
<br>
|
|
17
17
|
</h1>
|
|
18
18
|
|
|
@@ -150,6 +150,109 @@ print(stream)
|
|
|
150
150
|
|
|
151
151
|
Explore more advanced usage and service-specific operations in the [`examples/`](./examples/) folder.
|
|
152
152
|
|
|
153
|
+
## Helper Methods
|
|
154
|
+
|
|
155
|
+
Every ONVIF service provides three essential helper methods to improve the development experience and make working with ONVIF operations more intuitive:
|
|
156
|
+
|
|
157
|
+
**1. `type(type_name)`**
|
|
158
|
+
|
|
159
|
+
Creates and returns an instance of the specified ONVIF type for building complex request parameters (applied at [`>=v0.1.9`](https://github.com/nirsimetri/onvif-python/releases/tag/v0.1.9)).
|
|
160
|
+
|
|
161
|
+
**Usage:**
|
|
162
|
+
```python
|
|
163
|
+
device = client.devicemgmt()
|
|
164
|
+
|
|
165
|
+
# Create a new user object
|
|
166
|
+
new_user = device.type('CreateUsers')
|
|
167
|
+
new_user.User.append({
|
|
168
|
+
"Username": 'new_user',
|
|
169
|
+
"Password": 'new_password',
|
|
170
|
+
"UserLevel": 'User'
|
|
171
|
+
})
|
|
172
|
+
device.CreateUsers(new_user)
|
|
173
|
+
|
|
174
|
+
# Set hostname
|
|
175
|
+
hostname = device.type('SetHostname')
|
|
176
|
+
hostname.Name = 'NewHostname'
|
|
177
|
+
device.SetHostname(hostname)
|
|
178
|
+
|
|
179
|
+
# Configure system time
|
|
180
|
+
time_params = device.type('SetSystemDateAndTime')
|
|
181
|
+
time_params.DateTimeType = 'NTP'
|
|
182
|
+
time_params.DaylightSavings = True
|
|
183
|
+
time_params.TimeZone.TZ = 'UTC+02:00'
|
|
184
|
+
now = datetime.now()
|
|
185
|
+
time_params.UTCDateTime.Date.Year = now.year
|
|
186
|
+
time_params.UTCDateTime.Date.Month = now.month
|
|
187
|
+
time_params.UTCDateTime.Date.Day = now.day
|
|
188
|
+
time_params.UTCDateTime.Time.Hour = now.hour
|
|
189
|
+
time_params.UTCDateTime.Time.Minute = now.minute
|
|
190
|
+
time_params.UTCDateTime.Time.Second = now.second
|
|
191
|
+
device.SetSystemDateAndTime(time_params)
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**2. `operations()`**
|
|
195
|
+
|
|
196
|
+
Lists all available operations for the current service (applied at [`>=v0.2.0`](https://github.com/nirsimetri/onvif-python/releases/tag/v0.2.0)).
|
|
197
|
+
|
|
198
|
+
**Returns:**
|
|
199
|
+
- List of operation names that can be called on the service
|
|
200
|
+
|
|
201
|
+
**Usage:**
|
|
202
|
+
```python
|
|
203
|
+
device = client.devicemgmt()
|
|
204
|
+
media = client.media()
|
|
205
|
+
ptz = client.ptz()
|
|
206
|
+
|
|
207
|
+
# List all available operations for each service
|
|
208
|
+
print("Device Management Operations:")
|
|
209
|
+
for op in device.operations():
|
|
210
|
+
print(f" - {op}")
|
|
211
|
+
|
|
212
|
+
print("\nMedia Operations:")
|
|
213
|
+
for op in media.operations():
|
|
214
|
+
print(f" - {op}")
|
|
215
|
+
|
|
216
|
+
print("\nPTZ Operations:")
|
|
217
|
+
for op in ptz.operations():
|
|
218
|
+
print(f" - {op}")
|
|
219
|
+
|
|
220
|
+
# Check if specific operation is supported
|
|
221
|
+
if 'ContinuousMove' in ptz.operations():
|
|
222
|
+
print("PTZ continuous movement is supported")
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**3. `desc(method_name)`**
|
|
226
|
+
|
|
227
|
+
Provides comprehensive documentation and parameter information for any ONVIF operation (applied at [`>=v0.2.0`](https://github.com/nirsimetri/onvif-python/releases/tag/v0.2.0)).
|
|
228
|
+
|
|
229
|
+
**Returns:**
|
|
230
|
+
- `doc`: Method documentation from WSDL
|
|
231
|
+
- `required`: List of required parameter names
|
|
232
|
+
- `optional`: List of optional parameter names
|
|
233
|
+
- `method_name`: The method name
|
|
234
|
+
- `service_name`: The service name
|
|
235
|
+
|
|
236
|
+
**Usage:**
|
|
237
|
+
```python
|
|
238
|
+
device = client.devicemgmt()
|
|
239
|
+
|
|
240
|
+
# Get detailed information about a method
|
|
241
|
+
info = device.desc('GetDeviceInformation')
|
|
242
|
+
print(info['doc'])
|
|
243
|
+
print("Required params:", info['required'])
|
|
244
|
+
print("Optional params:", info['optional'])
|
|
245
|
+
|
|
246
|
+
# Explore available methods first
|
|
247
|
+
methods = device.operations()
|
|
248
|
+
for method in methods[:5]: # Show first 5 methods
|
|
249
|
+
info = device.desc(method)
|
|
250
|
+
print(f"{method}: {len(info['required'])} required, {len(info['optional'])} optional")
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
> [!TIP]
|
|
254
|
+
> These helper methods are available on **all** ONVIF services (`devicemgmt()`, `media()`, `ptz()`, `events()`, `imaging()`, `analytics()`, etc.) and provide a consistent API for exploring and using ONVIF capabilities across different device types and manufacturers.
|
|
255
|
+
|
|
153
256
|
> [!IMPORTANT]
|
|
154
257
|
> If you're new to ONVIF and want to learn more, we highly recommend taking the official free online course provided by ONVIF at [Introduction to ONVIF Course](https://www.onvif.org/about/introduction-to-onvif-course). Please note that we are not endorsed or sponsored by ONVIF, see [Legal Notice](#legal-notice) for details.
|
|
155
258
|
|
|
@@ -181,12 +284,12 @@ This library includes a powerful command-line interface (CLI) for interacting wi
|
|
|
181
284
|
<tr>
|
|
182
285
|
<td width="34.2%">
|
|
183
286
|
<a href="https://github.com/nirsimetri/onvif-python">
|
|
184
|
-
<img src="https://raw.githubusercontent.com/nirsimetri/onvif-python/refs/heads/main/assets/onvif_cli.png" />
|
|
287
|
+
<img src="https://raw.githubusercontent.com/nirsimetri/onvif-python/refs/heads/main/assets/images/onvif_cli.png" />
|
|
185
288
|
</a>
|
|
186
289
|
</td>
|
|
187
290
|
<td width="65.8%">
|
|
188
291
|
<a href="https://github.com/nirsimetri/onvif-python">
|
|
189
|
-
<img src="https://raw.githubusercontent.com/nirsimetri/onvif-python/refs/heads/main/assets/onvif_operations.png" />
|
|
292
|
+
<img src="https://raw.githubusercontent.com/nirsimetri/onvif-python/refs/heads/main/assets/images/onvif_operations.png" />
|
|
190
293
|
</a>
|
|
191
294
|
</td>
|
|
192
295
|
</tr>
|
|
@@ -206,12 +309,11 @@ This library includes a powerful command-line interface (CLI) for interacting wi
|
|
|
206
309
|
<summary><b>1. Direct CLI</b></summary>
|
|
207
310
|
|
|
208
311
|
```bash
|
|
209
|
-
usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--search SEARCH] [--timeout TIMEOUT] [--https]
|
|
210
|
-
[--no-verify] [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}]
|
|
211
|
-
[--health-check-interval HEALTH_CHECK_INTERVAL] [--version]
|
|
312
|
+
usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--filter FILTER] [--search SEARCH] [--page PAGE] [--per-page PER_PAGE] [--timeout TIMEOUT] [--https]
|
|
313
|
+
[--no-verify] [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}] [--health-check-interval HEALTH_CHECK_INTERVAL] [--version]
|
|
212
314
|
[service] [method] [params ...]
|
|
213
315
|
|
|
214
|
-
ONVIF Terminal Client — v0.
|
|
316
|
+
ONVIF Terminal Client — v0.2.0
|
|
215
317
|
https://github.com/nirsimetri/onvif-python
|
|
216
318
|
|
|
217
319
|
positional arguments:
|
|
@@ -228,8 +330,12 @@ options:
|
|
|
228
330
|
--password PASSWORD, -p PASSWORD
|
|
229
331
|
Password for authentication
|
|
230
332
|
--discover, -d Discover ONVIF devices on the network using WS-Discovery
|
|
231
|
-
--
|
|
333
|
+
--filter FILTER, -f FILTER
|
|
232
334
|
Filter discovered devices by types or scopes (case-insensitive substring match)
|
|
335
|
+
--search SEARCH, -s SEARCH
|
|
336
|
+
Search ONVIF products database by model or company (e.g., 'c210', 'hikvision')
|
|
337
|
+
--page PAGE Page number for search results (default: 1)
|
|
338
|
+
--per-page PER_PAGE Number of results per page (default: 20)
|
|
233
339
|
--timeout TIMEOUT Connection timeout in seconds (default: 10)
|
|
234
340
|
--https Use HTTPS instead of HTTP
|
|
235
341
|
--no-verify Disable SSL certificate verification
|
|
@@ -244,15 +350,20 @@ options:
|
|
|
244
350
|
--version, -v Show ONVIF CLI version and exit
|
|
245
351
|
|
|
246
352
|
Examples:
|
|
353
|
+
# Product search
|
|
354
|
+
onvif --search c210
|
|
355
|
+
onvif -s "axis camera"
|
|
356
|
+
onvif --search hikvision --page 2 --per-page 5
|
|
357
|
+
|
|
247
358
|
# Discover ONVIF devices on network
|
|
248
359
|
onvif --discover --username admin --password admin123 --interactive
|
|
249
360
|
onvif media GetProfiles --discover --username admin
|
|
250
361
|
onvif -d -i
|
|
251
362
|
|
|
252
363
|
# Discover with filtering
|
|
253
|
-
onvif --discover --
|
|
254
|
-
onvif -d -
|
|
255
|
-
onvif -d -
|
|
364
|
+
onvif --discover --filter ptz --interactive
|
|
365
|
+
onvif -d -f "C210" -i
|
|
366
|
+
onvif -d -f "audio_encoder" -u admin -p admin123 -i
|
|
256
367
|
|
|
257
368
|
# Direct command execution
|
|
258
369
|
onvif devicemgmt GetCapabilities Category=All --host 192.168.1.17 --port 8000 --username admin --password admin123
|
|
@@ -275,7 +386,7 @@ Examples:
|
|
|
275
386
|
<summary><b>2. Interactive Shell</b></summary>
|
|
276
387
|
|
|
277
388
|
```bash
|
|
278
|
-
ONVIF Interactive Shell — v0.
|
|
389
|
+
ONVIF Interactive Shell — v0.2.0
|
|
279
390
|
https://github.com/nirsimetri/onvif-python
|
|
280
391
|
|
|
281
392
|
Basic Commands:
|
|
@@ -398,7 +509,7 @@ This feature is particularly useful for:
|
|
|
398
509
|
|
|
399
510
|
**2. Device Discovery (WS-Discovery)**
|
|
400
511
|
|
|
401
|
-
The CLI includes automatic ONVIF device discovery using the WS-Discovery protocol. This feature allows you to find all ONVIF-compliant devices on your local network without knowing their IP addresses beforehand.
|
|
512
|
+
The CLI includes automatic ONVIF device discovery using the WS-Discovery protocol. This feature allows you to find all ONVIF-compliant devices on your local network without knowing their IP addresses beforehand (applied at [`>=v0.1.2`](https://github.com/nirsimetri/onvif-python/releases/tag/v0.1.2)).
|
|
402
513
|
|
|
403
514
|
**Discover and Connect Interactively:**
|
|
404
515
|
```bash
|
|
@@ -409,8 +520,8 @@ onvif --discover --username admin --password admin123 --interactive
|
|
|
409
520
|
onvif -d -u admin -p admin123 -i
|
|
410
521
|
|
|
411
522
|
# Discover with search filter
|
|
412
|
-
onvif --discover --
|
|
413
|
-
onvif -d -
|
|
523
|
+
onvif --discover --filter "C210" --interactive
|
|
524
|
+
onvif -d -f ptz -u admin -p admin123 -i
|
|
414
525
|
|
|
415
526
|
# Discover and interactive (will prompt for credentials)
|
|
416
527
|
onvif -d -i
|
|
@@ -445,15 +556,15 @@ Timeout: 4s
|
|
|
445
556
|
Found 2 ONVIF device(s):
|
|
446
557
|
|
|
447
558
|
[1] 192.168.1.14:2020
|
|
448
|
-
[id]
|
|
449
|
-
[xaddrs] http://192.168.1.14:2020/onvif/device_service
|
|
450
|
-
[types] tdn:NetworkVideoTransmitter
|
|
559
|
+
[id] 3fa1fe68-b915-4053-a3e1-a8294833fe3c
|
|
560
|
+
[xaddrs] [http://192.168.1.14:2020/onvif/device_service]
|
|
561
|
+
[types] [tdn:NetworkVideoTransmitter]
|
|
451
562
|
[scopes] [name/C210] [hardware/C210] [Profile/Streaming] [location/Hong Kong]
|
|
452
563
|
|
|
453
564
|
[2] 192.168.1.17:8000
|
|
454
|
-
[id]
|
|
455
|
-
[xaddrs] http://192.168.1.17:8000/onvif/device_service
|
|
456
|
-
[types] dn:NetworkVideoTransmitter tds:Device
|
|
565
|
+
[id] 7d04ff31-61e6-11f0-a00c-6056eef47207
|
|
566
|
+
[xaddrs] [http://192.168.1.17:8000/onvif/device_service]
|
|
567
|
+
[types] [dn:NetworkVideoTransmitter] [tds:Device]
|
|
457
568
|
[scopes] [type/NetworkVideoTransmitter] [location/unknown] [name/IPC_123465959]
|
|
458
569
|
|
|
459
570
|
Select device number 1-2 or q to quit: 1
|
|
@@ -486,6 +597,65 @@ onvif devicemgmt GetCapabilities Category=All -H 192.168.1.17 -P 8000 -u admin -
|
|
|
486
597
|
onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity='{"PanTilt": {"x": 0.1}}' -H 192.168.1.17 -P 8000 -u admin -p admin123
|
|
487
598
|
```
|
|
488
599
|
|
|
600
|
+
**4. ONVIF Product Search**
|
|
601
|
+
|
|
602
|
+
The CLI includes a built-in database of ONVIF-compatible products that can be searched to help identify and research devices before connecting (applied at [`>=v0.2.0`](https://github.com/nirsimetri/onvif-python/releases/tag/v0.2.0)).
|
|
603
|
+
|
|
604
|
+
**Basic Search:**
|
|
605
|
+
```bash
|
|
606
|
+
# Search by model name
|
|
607
|
+
onvif --search "C210"
|
|
608
|
+
onvif -s "axis camera"
|
|
609
|
+
|
|
610
|
+
# Search by manufacturer
|
|
611
|
+
onvif --search "hikvision"
|
|
612
|
+
onvif -s "dahua"
|
|
613
|
+
|
|
614
|
+
# Search by any keyword
|
|
615
|
+
onvif --search "ptz"
|
|
616
|
+
onvif -s "thermal"
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
**Paginated Results:**
|
|
620
|
+
```bash
|
|
621
|
+
# Navigate through multiple pages of results
|
|
622
|
+
onvif --search "hikvision" --page 2 --per-page 5
|
|
623
|
+
onvif -s "axis" --page 1 --per-page 10
|
|
624
|
+
|
|
625
|
+
# Adjust results per page (1-100)
|
|
626
|
+
onvif --search "camera" --per-page 20
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
**Search Database Information:**
|
|
630
|
+
|
|
631
|
+
The product database contains comprehensive information about tested ONVIF devices:
|
|
632
|
+
|
|
633
|
+
| Field | Description |
|
|
634
|
+
|-------|-------------|
|
|
635
|
+
| **ID** | Unique product identifier |
|
|
636
|
+
| **Test Date** | When the device was last tested/verified |
|
|
637
|
+
| **Model** | Device model name and number |
|
|
638
|
+
| **Firmware** | Tested firmware version |
|
|
639
|
+
| **Profiles** | Supported ONVIF profiles (S, G, T, C, A, etc.) |
|
|
640
|
+
| **Category** | Device type (Camera, NVR, etc.) |
|
|
641
|
+
| **Type** | Specific device classification |
|
|
642
|
+
| **Company** | Manufacturer name |
|
|
643
|
+
|
|
644
|
+
**Example Output:**
|
|
645
|
+
```
|
|
646
|
+
Found 15 product(s) matching: hikvision
|
|
647
|
+
Showing 1-10 of 15 results
|
|
648
|
+
|
|
649
|
+
ID | Test Date | Model | Firmware | Profiles | Category | Type | Company
|
|
650
|
+
----|---------------------|-------------------|----------|----------|----------|---------|---------
|
|
651
|
+
342 | 2024-08-15 17:53:12 | DS-2CD2143G2-IU | V5.7.3 | S,G,T | Camera | device | Hikvision
|
|
652
|
+
341 | 2024-08-14 14:22:05 | DS-2DE2A404IW-DE3 | V5.6.15 | S,G,T | Camera | device | Hikvision
|
|
653
|
+
...
|
|
654
|
+
|
|
655
|
+
Page 1 of 2
|
|
656
|
+
Navigation: Next: --page 2
|
|
657
|
+
```
|
|
658
|
+
|
|
489
659
|
### CLI Parameters
|
|
490
660
|
|
|
491
661
|
All `ONVIFClient` parameters (like `--timeout`, `--https`, `--cache`, etc.) are available as command-line arguments. Use `onvif --help` to see all available options.
|
|
@@ -820,6 +990,7 @@ Below is a list of ONVIF services implemented and supported by this library, alo
|
|
|
820
990
|
| Access Rules | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AccessRules.xml) | [accessrules.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/accessrules/wsdl/accessrules.wsdl) | - | ✅ Complete |
|
|
821
991
|
| Action Engine | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/ActionEngine.xml) | [actionengine.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/actionengine.wsdl) | - | ✅ Complete |
|
|
822
992
|
| Analytics | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Analytics.xml) | [analytics.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/wsdl/analytics.wsdl) | [rules.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/rules.xsd) <br> [humanbody.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/humanbody.xsd) <br> [humanface.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/humanface.xsd) | ✅ Complete |
|
|
993
|
+
| Analytics Device | [Document](https://www.onvif.org/specs/srv/analytics/ONVIF-VideoAnalyticsDevice-Service-Spec-v211.pdf) | [analyticsdevice.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/analyticsdevice.wsdl) | - | ✅ Complete |
|
|
823
994
|
| Application Management | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AppMgmt.xml) | [appmgmt.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl) | - | ✅ Complete |
|
|
824
995
|
| Authentication Behavior| [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AuthenticationBehavior.xml) | [authenticationbehavior.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/authenticationbehavior/wsdl/authenticationbehavior.wsdl) | - | ✅ Complete |
|
|
825
996
|
| Cloud Integration | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/CloudIntegration.xml) | [cloudintegration.yaml](https://developer.onvif.org/pub/specs/branches/development/doc/yaml.php?yaml=cloudintegration.yaml) | - | ❌ Not yet |
|
|
@@ -980,6 +1151,7 @@ This project is an **independent open-source implementation** of the [ONVIF](htt
|
|
|
980
1151
|
- Use of the ONVIF trademark in this repository is solely nominative and does not imply any partnership, certification, or official status.
|
|
981
1152
|
- This project includes WSDL/XSD/HTML files from the official ONVIF specifications.
|
|
982
1153
|
- These files are © ONVIF and are redistributed here for interoperability purposes.
|
|
1154
|
+
- The WSDL files in the [`wsdl/`](./onvif/wsdl) folder are distributed under the ONVIF Contributor License Agreement and Apache License 2.0. See [`LICENSE.md`](./onvif/wsdl/LICENSE.md) for details.
|
|
983
1155
|
- All rights to the ONVIF specifications are reserved by ONVIF.
|
|
984
1156
|
|
|
985
1157
|
If you require certified ONVIF-compliant devices or clients, please refer to the official [ONVIF conformant product list](https://www.onvif.org/conformant-products/). For authoritative reference and the latest official ONVIF specifications, please consult the [ONVIF Official Specifications](https://www.onvif.org/profiles/specifications/specification-history/).
|