На сайте Onvif.org вы найдете множество официальных документов, большинство написано формальным языком и не содержит примеры фактического использования. Тем не менее, опираться на что-то надо, хотя бы на этот документ:
Список функций, разобранный по сервисам даёт представление о том, что можно запросить у устройства. Но прежде нужно понять, как их посылать, об этом читайте в примерах.
Подключение к устройству из командной строки
Из того же примера можем взять команду подключения к камере из консоли, не заходя в Python:
onvif-cli -u 'admin' -a 'password' --host '192.168.0.14' --port 80 --wsdl /etc/onvif/wsdl/В итоге вы увидите такое приглашение:
ONVIF >>> Вернемся к командной строке. Команды имеют вид:
cmd <service> <function> [{'parameter': 'value'[, 'parameter2': 'value2'...]}]То есть, параметров и их значений у функций может и не быть — это нужно смотреть в описании к конкретным функциям.
Функции набираются в CamelCase (слитно, слова начинаются с прописных букв), при этом “cmd” и названия сервисов — строчными буквами.
Подключение к устройству из Python
Зайдите в оболочку python и введите следующие команды (значения поправьте на актуальные вам):
from onvif import ONVIFCameramycam = ONVIFCamera('192.168.0.2', 80, 'user', 'passwd', '/etc/onvif/wsdl/')Далее вы можете вызывать функции ONVIF для данного устройства и использовать их там, где они вам понадобятся. В простейшем случае можно выводить их на экран. Например, для рассматриваемой в примере камеры команда
print mycam.devicemgmt.GetDeviceInformation()даст ответ:
(reply){ Manufacturer = "HIKVISION" Model = "DS-2DC2204IW-DE3/W" FirmwareVersion = "V5.4.0 build 160613" SerialNumber = "DS-2DC2204IW-DE3/W20160726CCCH629386524" HardwareId = "1" }Если смотреть ответы в оболочке, то print можно не писать.
Не все сервисы так просто достижимы. Например, для обращения к сервису PTZ сперва нужно “создать” этот сервис:
# Create ptz serviceptz_service = mycam.create_ptz_service()# Get ptz configurationmycam.ptz.GetConfiguration()# Another way# ptz_service.GetConfiguration()Далее, независимо от того, откуда вы запускаете команды, для большинства из них понадобится ещё один магический элемент — токены.
Больше примеров рассмотрено на странице библиотеки onvif на GitHub.
Там же приведены примеры скриптов, они многое объясняют. Например:
Чтобы обратиться к функциям того или иного сервиса, его, как мы видели выше, нужно “создать”. Это относится ко всем поддерживаемым данным устройством сервисам.
Для работы большинства команд требуются токены — это ключевое слово, отправляемое в параметрах команды, чтобы идентифицировать объект управления (к чему прикладывать эту команду).
Получить токены можно из media.GetProfiles.
Если вы ещё не подключились к камере, то не забудьте это сделать:
mycam = ONVIFCamera('192.168.0.112', 80, 'admin', '12345')Создайте сервис media:
media_service = mycam.create_media_service()Запросите параметры профилей:
profiles = media_service.GetProfiles()Теперь в переменной profiles лежит длинный ответ камеры, из которого предстоит выловить имена нужных токенов. На рисунке ниже видно начало ответа и жёлтым выделены токены:
Если токены нужны в “ручном режиме”, то, чтобы не исследовать длинные непонятные тексты, можно обратиться к программе ONVIF Device Manager (она вам всё равно пригодится при работе с устройствами ONVIF) и в разделе Profiles посмотреть примерно то же самое, но в более удобном виде: