aonvif
======
.. start-inclusion-marker-do-not-remove
.. image:: https://github.com/martyanov/aonvif/workflows/CI/badge.svg?event=push
:alt: Build Status
:target: https://github.com/martyanov/aonvif/actions?query=event%3Apush+branch%3Amaster+workflow%3ACI
.. image:: https://img.shields.io/pypi/v/aonvif.svg
:alt: PyPI Version
:target: https://pypi.python.org/pypi/aonvif
.. image:: https://img.shields.io/pypi/pyversions/aonvif.svg
:alt: Supported Python Versions
:target: https://pypi.python.org/pypi/aonvif
.. image:: https://img.shields.io/pypi/l/aonvif.svg
:alt: License
:target: https://pypi.python.org/pypi/aonvif
ONVIF asynchronous client implementation in Python.
Installation
------------
.. code:: bash
$ python -m pip install aonvif
Getting Started
---------------
Initialize an ONVIFCamera instance
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
from aonvif import ONVIFCamera
mycam = ONVIFCamera('192.168.0.2', 80, 'user', 'passwd')
await mycam.update_xaddrs()
Now, an ONVIFCamera instance is available. By default, a devicemgmt service is also available if everything is OK.
So, all operations defined in the WSDL document `devicemgmt.wsdl` are available.
Get information from your camera
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
# Get Hostname
resp = await mycam.devicemgmt.GetHostname()
print 'My camera`s hostname: ' + str(resp.Name)
# Get system date and time
dt = await mycam.devicemgmt.GetSystemDateAndTime()
tz = dt.TimeZone
year = dt.UTCDateTime.Date.Year
hour = dt.UTCDateTime.Time.Hour
Configure (Control) your camera
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To configure your camera, there are two ways to pass parameters to service methods.
**Dict**
This is the simpler way::
params = {'Name': 'NewHostName'}
await device_service.SetHostname(params)
**Type Instance**
This is the recommended way. Type instance will raise an
exception if you set an invalid (or non-existent) parameter.
::
params = mycam.devicemgmt.create_type('SetHostname')
params.Hostname = 'NewHostName'
await mycam.devicemgmt.SetHostname(params)
time_params = mycam.devicemgmt.create_type('SetSystemDateAndTime')
time_params.DateTimeType = 'Manual'
time_params.DaylightSavings = True
time_params.TimeZone.TZ = 'CST-8:00:00'
time_params.UTCDateTime.Date.Year = 2014
time_params.UTCDateTime.Date.Month = 12
time_params.UTCDateTime.Date.Day = 3
time_params.UTCDateTime.Time.Hour = 9
time_params.UTCDateTime.Time.Minute = 36
time_params.UTCDateTime.Time.Second = 11
await mycam.devicemgmt.SetSystemDateAndTime(time_params)
Use other services
~~~~~~~~~~~~~~~~~~
ONVIF protocol has defined many services.
You can find all the services and operations `here <https://www.onvif.org/onvif/ver20/util/operationIndex.html>`_.
ONVIFCamera has support methods to create new services::
# Create ptz service
ptz_service = mycam.create_ptz_service()
# Get ptz configuration
await mycam.ptz.GetConfiguration()
# Another way
# await ptz_service.GetConfiguration()
Or create an unofficial service::
xaddr = 'http://192.168.0.3:8888/onvif/yourservice'
yourservice = mycam.create_onvif_service('service.wsdl', xaddr, 'yourservice')
await yourservice.SomeOperation()
# Another way
# await mycam.yourservice.SomeOperation()
ONVIF CLI
---------
aonvif also provides a command line interactive interface: aonvif-cli, aonvif-cli is installed automatically.
Single command example
~~~~~~~~~~~~~~~~~~~~~~
::
$ aonvif-cli devicemgmt GetHostname --user 'admin' --password '12345' --host '192.168.0.112' --port 80
True: {'FromDHCP': True, 'Name': hision}
$ onvif-cli devicemgmt SetHostname "{'Name': 'NewerHostname'}" --user 'admin' --password '12345' --host '192.168.0.112' --port 80
True: {}
Interactive mode
~~~~~~~~~~~~~~~~
::
$ aonvif-cli -u 'admin' -a '12345' --host '192.168.0.112' --port 80
ONVIF >>> cmd
analytics devicemgmt events imaging media ptz
ONVIF >>> cmd devicemgmt GetWsdlUrl
True: http://www.onvif.org/
ONVIF >>> cmd devicemgmt SetHostname {'Name': 'NewHostname'}
ONVIF >>> cmd devicemgmt GetHostname
True: {'Name': 'NewHostName'}
ONVIF >>> cmd devicemgmt SomeOperation
False: No Operation: SomeOperation
NOTE: Tab completion is supported for interactive mode.
Batch mode
~~~~~~~~~~
::
$ vim batchcmds
$ cat batchcmds
cmd devicemgmt GetWsdlUrl
cmd devicemgmt SetHostname {'Name': 'NewHostname', 'FromDHCP': True}
cmd devicemgmt GetHostname
$ aonvif-cli --host 192.168.0.112 -u admin -a 12345 < batchcmds
ONVIF >>> True: http://www.onvif.org/
ONVIF >>> True: {}
ONVIF >>> True: {'FromDHCP': False, 'Name': NewHostname}
References
----------
* `Operations Index <https://www.onvif.org/onvif/ver20/util/operationIndex.html>`_
* `ONVIF Specifications <https://www.onvif.org/profiles-add-ons-specifications/>`_
Raw data
{
"_id": null,
"home_page": "https://github.com/martyanov/aonvif",
"name": "aonvif",
"maintainer": null,
"docs_url": null,
"requires_python": "<4,>=3.9.1",
"maintainer_email": null,
"keywords": "onvif, client, asyncio",
"author": "Andrey Martyanov",
"author_email": "andrey@martyanov.com",
"download_url": "https://files.pythonhosted.org/packages/51/1b/87e966f114f1af14245b41cbf670b17c8e825481447a158a08e6b3f2401e/aonvif-1.0.0rc8.tar.gz",
"platform": null,
"description": "aonvif\n======\n\n.. start-inclusion-marker-do-not-remove\n\n.. image:: https://github.com/martyanov/aonvif/workflows/CI/badge.svg?event=push\n :alt: Build Status\n :target: https://github.com/martyanov/aonvif/actions?query=event%3Apush+branch%3Amaster+workflow%3ACI\n\n.. image:: https://img.shields.io/pypi/v/aonvif.svg\n :alt: PyPI Version\n :target: https://pypi.python.org/pypi/aonvif\n\n.. image:: https://img.shields.io/pypi/pyversions/aonvif.svg\n :alt: Supported Python Versions\n :target: https://pypi.python.org/pypi/aonvif\n\n.. image:: https://img.shields.io/pypi/l/aonvif.svg\n :alt: License\n :target: https://pypi.python.org/pypi/aonvif\n\nONVIF asynchronous client implementation in Python.\n\nInstallation\n------------\n\n.. code:: bash\n\n $ python -m pip install aonvif\n\nGetting Started\n---------------\n\nInitialize an ONVIFCamera instance\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n from aonvif import ONVIFCamera\n mycam = ONVIFCamera('192.168.0.2', 80, 'user', 'passwd')\n await mycam.update_xaddrs()\n\nNow, an ONVIFCamera instance is available. By default, a devicemgmt service is also available if everything is OK.\n\nSo, all operations defined in the WSDL document `devicemgmt.wsdl` are available.\n\nGet information from your camera\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n::\n\n # Get Hostname\n resp = await mycam.devicemgmt.GetHostname()\n print 'My camera`s hostname: ' + str(resp.Name)\n\n # Get system date and time\n dt = await mycam.devicemgmt.GetSystemDateAndTime()\n tz = dt.TimeZone\n year = dt.UTCDateTime.Date.Year\n hour = dt.UTCDateTime.Time.Hour\n\nConfigure (Control) your camera\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo configure your camera, there are two ways to pass parameters to service methods.\n\n**Dict**\n\nThis is the simpler way::\n\n params = {'Name': 'NewHostName'}\n await device_service.SetHostname(params)\n\n**Type Instance**\n\nThis is the recommended way. Type instance will raise an\nexception if you set an invalid (or non-existent) parameter.\n\n::\n\n params = mycam.devicemgmt.create_type('SetHostname')\n params.Hostname = 'NewHostName'\n await mycam.devicemgmt.SetHostname(params)\n\n time_params = mycam.devicemgmt.create_type('SetSystemDateAndTime')\n time_params.DateTimeType = 'Manual'\n time_params.DaylightSavings = True\n time_params.TimeZone.TZ = 'CST-8:00:00'\n time_params.UTCDateTime.Date.Year = 2014\n time_params.UTCDateTime.Date.Month = 12\n time_params.UTCDateTime.Date.Day = 3\n time_params.UTCDateTime.Time.Hour = 9\n time_params.UTCDateTime.Time.Minute = 36\n time_params.UTCDateTime.Time.Second = 11\n await mycam.devicemgmt.SetSystemDateAndTime(time_params)\n\nUse other services\n~~~~~~~~~~~~~~~~~~\nONVIF protocol has defined many services.\nYou can find all the services and operations `here <https://www.onvif.org/onvif/ver20/util/operationIndex.html>`_.\nONVIFCamera has support methods to create new services::\n\n # Create ptz service\n ptz_service = mycam.create_ptz_service()\n # Get ptz configuration\n await mycam.ptz.GetConfiguration()\n # Another way\n # await ptz_service.GetConfiguration()\n\nOr create an unofficial service::\n\n xaddr = 'http://192.168.0.3:8888/onvif/yourservice'\n yourservice = mycam.create_onvif_service('service.wsdl', xaddr, 'yourservice')\n await yourservice.SomeOperation()\n # Another way\n # await mycam.yourservice.SomeOperation()\n\nONVIF CLI\n---------\n\naonvif also provides a command line interactive interface: aonvif-cli, aonvif-cli is installed automatically.\n\nSingle command example\n~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n $ aonvif-cli devicemgmt GetHostname --user 'admin' --password '12345' --host '192.168.0.112' --port 80\n True: {'FromDHCP': True, 'Name': hision}\n $ onvif-cli devicemgmt SetHostname \"{'Name': 'NewerHostname'}\" --user 'admin' --password '12345' --host '192.168.0.112' --port 80\n True: {}\n\nInteractive mode\n~~~~~~~~~~~~~~~~\n\n::\n\n $ aonvif-cli -u 'admin' -a '12345' --host '192.168.0.112' --port 80\n ONVIF >>> cmd\n analytics devicemgmt events imaging media ptz\n ONVIF >>> cmd devicemgmt GetWsdlUrl\n True: http://www.onvif.org/\n ONVIF >>> cmd devicemgmt SetHostname {'Name': 'NewHostname'}\n ONVIF >>> cmd devicemgmt GetHostname\n True: {'Name': 'NewHostName'}\n ONVIF >>> cmd devicemgmt SomeOperation\n False: No Operation: SomeOperation\n\nNOTE: Tab completion is supported for interactive mode.\n\nBatch mode\n~~~~~~~~~~\n\n::\n\n $ vim batchcmds\n $ cat batchcmds\n cmd devicemgmt GetWsdlUrl\n cmd devicemgmt SetHostname {'Name': 'NewHostname', 'FromDHCP': True}\n cmd devicemgmt GetHostname\n $ aonvif-cli --host 192.168.0.112 -u admin -a 12345 < batchcmds\n ONVIF >>> True: http://www.onvif.org/\n ONVIF >>> True: {}\n ONVIF >>> True: {'FromDHCP': False, 'Name': NewHostname}\n\nReferences\n----------\n\n* `Operations Index <https://www.onvif.org/onvif/ver20/util/operationIndex.html>`_\n\n* `ONVIF Specifications <https://www.onvif.org/profiles-add-ons-specifications/>`_\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "ONVIF asynchronous client implementation in Python",
"version": "1.0.0rc8",
"project_urls": {
"Bug Reports": "https://github.com/martyanov/aonvif/issues",
"Homepage": "https://github.com/martyanov/aonvif",
"Repository": "https://github.com/martyanov/aonvif"
},
"split_keywords": [
"onvif",
" client",
" asyncio"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "7a7991f4b5f5bb7fd1356ccffc2e9a29394a6a9eaab74a4af4c42f4c384d751f",
"md5": "8b7d70118deb5dca89dad9650a465d1f",
"sha256": "800945d2ffb3e3dec79f680f85c4e2e6607f87bf94c09ff088adca85df83eb5d"
},
"downloads": -1,
"filename": "aonvif-1.0.0rc8-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8b7d70118deb5dca89dad9650a465d1f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4,>=3.9.1",
"size": 342454,
"upload_time": "2024-04-16T06:31:22",
"upload_time_iso_8601": "2024-04-16T06:31:22.707464Z",
"url": "https://files.pythonhosted.org/packages/7a/79/91f4b5f5bb7fd1356ccffc2e9a29394a6a9eaab74a4af4c42f4c384d751f/aonvif-1.0.0rc8-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "511b87e966f114f1af14245b41cbf670b17c8e825481447a158a08e6b3f2401e",
"md5": "4381dd3046d77c21dfa321ef4f3be812",
"sha256": "fb1456db92d717046765f55ade5dbf196bba8113838097bec71699c174871ddd"
},
"downloads": -1,
"filename": "aonvif-1.0.0rc8.tar.gz",
"has_sig": false,
"md5_digest": "4381dd3046d77c21dfa321ef4f3be812",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4,>=3.9.1",
"size": 306218,
"upload_time": "2024-04-16T06:31:25",
"upload_time_iso_8601": "2024-04-16T06:31:25.280293Z",
"url": "https://files.pythonhosted.org/packages/51/1b/87e966f114f1af14245b41cbf670b17c8e825481447a158a08e6b3f2401e/aonvif-1.0.0rc8.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-04-16 06:31:25",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "martyanov",
"github_project": "aonvif",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "aonvif"
}