1 总览
ONVIF设备管理标准分为如下子标准,其中前5个是ONVIF设备必须实现的,后面2个是可选操作
Capabilities | ONVIF设备能力集相关API |
Network | 网络相关API |
System | 系统配置相关API |
Security | 安全相关API |
Input/Output(I/O) |
|
Auxiliary operation |
|
Storage Configuration |
|
2 Capabilities API
2.1 wsdl获取API
GetWsdlUrl # 获取设计wsdl, API不开放权限给用户
2.2 Capabilities exchange API
一系列获取设备能力的API
GetServices #获取dev支持的服务,可附加服务能力集+设备能力集
例子:如下报文描述了设备若干能力集,可以包括tds作用域下的能力也包括其他作用域能力集
| ||||||||||||
GetServiceCapabilities #获取网络服务能力集,注:必须实现,若实现GetServices
| ||||||||||||
GetCapabilities # 获取设备能力集,注:必须实现,若实现GetServices
|
3 Network API
GetHostname #返回主机域名,注:域名可以是从DHCP获取的 |
SetHostname #设置主机域名,注:主机域名可以从DHCP获取,若设备具有HostnameFromDHCP能力,此时只需要提交空的 Name 字段 |
SetHostnameFromDHCP #设置设备是否从DHCP获取域名功能 |
GetDNS #获取DNS设置,获取包括DHCP开关、搜索域(不明)、DHCP获取的DNS服务IP列表(要求DHCP开关必须开启)、手动DNS服务IP列表 |
SetDNS #设置DNS,包括开启DHCP开关、设置搜索域、手动设置DNS服务。错误码(忽略常规错误码):sender(指收到错误码的位请求发送方)-无效参数-IP地址无效(应该是指手动配置的DNS服务IP无效) |
GetNTP #获取NTP(网络时间协议) 配置,获取包括NTP服务IP的DHCP开关、DHCP NTP IP列表、手动NTP IP列表 |
SetNTP #配置NTP,包括DHCP开关、手动NTP服务IP列表,错误码:sender-无效参数-设备的当前时间格式要求配置NTP服务 |
GetDynamicDNS #获取动态DNS配置(要求Dev支持DynDNS能力),包括更新规则、DNS名(当DNS主动更新)、DNS保活时间(当DNS主动更新,原理类似UDP P2P保活) |
SetDynamicDNS #设置上述属性,要求设备支持 [RFC 2136] and [RFC 4702]标准,即DynDNS能力 |
GetNetworkInterfaces #获取API属性(比如API是否启用、连接设置、MTU分包策略、IPv4/IPv6设置)列表,参考:tt:NetworkInterfaceInfo |
SetNetworkInterfaces #配置设备支持的API属性,配置成功后,如果返回属性RebootNeeded为true,则表明配置需要重启设备后生效(比如IP地址),这时候需要向设备发送SystemReboot请求;若属性为false,则表明配置立即生效。 |
GetNetworkProtocols #获取应用层网络协议(ONVIF18.12支持HTTP\HTTPS\RTP) |
SetNetworkProtocols #配置应用层协议,与上述协议成对 |
GetNetworkDefaultGateway #返回手动配置的默认网关IP |
SetNetworkDefaultGateway #设置默认网关 |
GetZeroConfiguration #从设备获取zero-configuration(设备自动配置)相关参数,设备如果支持RFC3927标准, 请求返回 IPv4 zero configuration address 和 status(应该指 InterfaceToken 字段) 参考:[RFC3927]简介 |
SetZeroConfiguration #配置设备zero-configuration相关参数,要求设备支持RFC3927标准,且支持ZeroConfiguration 能力 |
GetIPAddressFilter #获取设备IP过滤规则(要求设置支持 IPFilter 能力) |
AddIPAddressFilter #增加设备IP过滤规则,禁止那些IP访问、允许那些IP访问 |
RemoveIPAddressFilter #删除设备IP过滤规则 |
IEEE 802.11 configuration #IEEE 802.11系列配置项(要求设备支持IEEE 802.11标准(wifi)具有Dot11Configuration 能力) ONVIF要求能够对设备进行如下配置:(具体方式ONVIF不做限制)
GetDot11Capabilities #获取设备支持的Dot11能力,IEEE 802.11定义了TKIP、ScanAvailableNetworks 、MultipleConfiguration 、AdHocStationMode 、WEP 5种能力 GetDot11Status #获取无线网状态,如下 ScanAvailableDot11Networks #扫描可用Dot11局域网,就是手机wifi网络扫描功能 |
4 System API
GetDeviceInformation #获取设备的制造商、软件模型、固件版本、序列号、硬件id |
GetSystemUris #获取从Dev提取日志、诊断信息、系统备份信息的url |
GetSystemBackup #从Dev获取系统备份(要求Dev具备SystemBackup能力,API已被弃用 ,替代API参考GetSystemUris 和 StartSystemRestore)系统备份可以用于回复设备的配置,注恢复设备的IP配置可能不同。 系统备份文件的传输协议 为[MTOM] |
RestoreSystem #恢复系统备份(要求Dev具备SystemBackup能力,API已被弃用,替代API参考GetSystemUris 和 StartSystemRestore) 系统备份文件的传输协议 为[MTOM] |
StartSystemRestore #恢复系统备份,Dev返回上传备份数据的URL及上传有效时间(避免客户端恶意占用上传网络资源) 上传并恢复备份步骤:
|
GetSystemDateAndTime #获取系统时间,会表明时间来自手动设置或NTP(此时要求SetNTP、GetNTP有效)、夏至时开关、时区、UTC时间、Dev本地时间。注:虽然UTC时间格式为可选但是为了向后兼容,设备shall提供UTC时间。 |
SetSystemDateAndTime #设置系统时间,GetSystemDateAndTime成对 |
SetSystemFactoryDefault #恢复出厂设置,设备必须支持软、硬件初上设置。注:ONVIF对软件出厂设置未做定义,要是要求设备软出厂恢复后之前的IP仍能可达。这表明软出厂恢复时要求网络设置:IP地址、子网及网关设置、DHCP设置被保持。防止操作后设备丢失! |
UpgradeSystemFirmware #固件升级(API已遗弃),升级包通过MTOM协议传输,同样要求网络设置:IP地址、子网及网关设置、DHCP设置被保持 |
StartFirmwareUpgrade #固件升级,具体的固件数据格式ONVIF不做定义,若上传的固件数据无效,Dev返回Http状态码"415 Unsupported Media Type",若升级失败适应为Dev故障则返回Http状态码"500 Internal Server Error"。POST数据时,Content-Type字段要求"application/octet stream"。同样要求升级后网络配置不变。 上传文件及升级操作步骤:
|
GetSystemLog #获取日志(可选系统日志、客户端访问日志),传输遵守[MTOM],具体日志格式ONVIF不做规定。获取日志的url从GetSystemUris 取得 |
GetSystemSupportInformation #获取系统诊断信息,设备可选传回二进制数据或文本数据,传输遵守[MTOM],具体日志格式ONVIF不做规定。获取日志的url从GetSystemUris 取得 |
SystemReboot #设备重启 |
GetScopes #获取scope相关参数(scope用于匹配设备发现probe message),返回固定scope和可配置scope |
SetScopes #重置可配scope,注:会覆盖现有的所有可配scope!,支持多个scope,用列表下标作为索引号 |
AddScopes #为已有可配scope增加scope url参数,用列表下标作为scope索引 |
RemoveScopes #为已有可配scope删除scope url参数,用列表下标作为scope索引 |
GetDiscoveryMode #获取设备发现模式(可发现、不可发现) |
SetDiscoveryMode #设置设备发现模式 |
GetGeoLocation #获取地理信息,(要求设备支持 GeoLocationEntities 能力,若设备支持AutoGeo能力AutoGeo条目有效) 地理信息条目包括(设备不一定要支持全部地理信息条目):
|
SetGeoLocation #改变地理信息条目配置,成功设置后,会影响GetGeoLocation 返回信息 |
DeleteGeoLocation #删除地理信息条目,删除后GetGeoLocation 不再显示 |
5 Security API
GetAccessPolicy #获取设备访问规则(二进制数据),包括用户级别、服务访问权限信息,若设备支持 SetAccessPolicy ,则必须实现本API。 |
SetAccessPolicy #设置访问规则 |
GetUsers #获取用户信息列表(不包含证据或密码) |
CreateUsers #新建用户,需要输入用户名、密码、用户级别 |
DeleteUsers #删除用户,根据用户名 |
SetUser #改变用户设置,(用户名不能变,密码、级别可以变),重置密码时如果密码太简单设备返回ter:PasswordTooWeak错误码 |
GetRemoteUser #获取远程用户(远程用户是什么用户?和普通用户有什么区别?)列表,(要求设备支持RemoteUserHandling 能力) |
SetRemoteUser #设置远程用户(The user is only valid for the WS-UserToken profile or as a HTTP / RTSP user) |
GetEndpointReference #获取设备服务端引用属性(服务的GUID),从文档中描述看,这个GUID可以用于计算远程用户操作的密码。 |
6 I/O API
本节I/O相关的接口,主要用于保证后端兼容性。控制、获取IO端口的状态。更广泛的IO接口参考ONVIF Device IO Specification。
GetRelayOutputs #获取可用relay(什么是relay输出?可能是类似NVR通道的概念)输出列表 |
SetRelayOutputSettings #设置relay输出 |
7 辅助外设
SendAuxiliaryCommand #发送设备辅助外设控制指令,比如控制红外线照明灯、加热器、雨刮器、温度计等 请求报文类型tt:AuxiliaryData实际是一个xsd字符串,onvif不规定指令的风格,但必须复合格式"tt:command|parameter",如:
|
8 存储配置
以下接口允许客户端对设备数据存储进行设置,可以参考 DAS, NAS, 和CDMI Server的存储配置。要求设备具有Storage Configuration能力
GetStorageConfigurations #获取所有存储配置项(不太明白这个存储配置指什么?) |
CreateStorageConfiguration #新建存储配置 |
GetStorageConfiguration #通过tt:ReferenceTokentt:ReferenceToken获取存储配置 |
SetStorageConfiguration #重置已有的配置 |
DeleteStorageConfiguration #删除配置 |
9 设备监控事件
设备主动上报运行状态的事件
tns1:Monitoring/ProcessorUsage // 上报设备处理器实时信息,Source应该是用来描述Data是什么 |
tns1:Monitoring/LinkStatus //上报设备的连接状态 |
tns1:Monitoring/UploadStatus // 当设备正在升级固件或系统时,上报升级状态,进度 |
注:设备上报时时间格式复合UTC的格林尼治标准 tns1:Monitoring/OperatingTime/DefinedLimitReached // 到达操作时限时上报 tns1:Monitoring/OperatingTime/MeanTimeBetweenFailuresDefaultLimitReached //MTBF(平均故障间隔时间)时限时上报,设备故障状态,用于计算设备无故障运行时间 tns1:Monitoring/OperatingTime/LastReset //恢复出厂前上报 tns1:Monitoring/OperatingTime/LastReboot //reboot前上报 tns1:Monitoring/OperatingTime/LastClockSynchronization //时钟同步后上报,由 NTP message或SetSystemDateAndTime call引发 tns1:Monitoring/Maintenance/Last //设备上报最后保持激活状态的时间(设备之后应该是休眠) tns1:Monitoring/Maintenance/NextScheduled //上报下次激活的时间 tns1:Monitoring/Backup/Last //设备恢复备份后上报 tns1:Monitoring/AreaOfOperation/OutsideCertifiedArea //当设备被认证为不因为外界原因而松动时上报(没明白啥意思) tns1:Monitoring/AreaOfOperation/OutsideConfiguredArea //当设备被配置为不因为外界原因而松动时上报 |
tns1:Monitoring/EnvironmentalConditions/RelativeHumidity //上报湿度信息,要求设备支持环境监测能力 tns1:Monitoring/EnvironmentalConditions/Temperature //上报温度信息,上报策略可以是6s/次或温差大于5%时,防止引发“事件洪水” |
tns1:Monitoring/BatteryCapacity //上报剩余电池量,recommended to use a 2% change |
tns1:Monitoring/AsynchronousOperationStatus //上报异步操作的进度。Token 字段用标识异步操作,区分同一类型一步操作的不同会话; OperationName 操作名; ServiceName 异步操作的服务名;OperationName 和ServiceName 可用于区别不同的异步操作; Progress 字段展示操作执行进度[0.0, 1.0]; Error 字段展示操作错误,错误码标准要求符合soapenv:Fault |
tns1:Device/OperationMode/ShutdownInitiated //关机前发送 tns1:Device/OperationMode/UploadInitiated //升级开始前发送 |
tns1:Monitoring/Washer/LiquidLow //上报水箱液体等级 |
tns1:Device/HardwareFailure/FanFailure //散热风扇故障 tns1:Device/HardwareFailure/PowerSupplyFailure //供电故障 tns1:Device/HardwareFailure/StorageFailure //存储设备故障 tns1:Device/HardwareFailure/TemperatureCritical //设备温度过载报警 |
tns1:Monitoring/GeoLocation //上报地理位置(针对便携式设备) |
10 事件通知
"设备事件"是设备的主动活动或者检测到有事发生时产生,当客户端定于某种类型的事件后,当事件产生时设备以某种形式推送消息给客户端。事件的处理,在[WS-BaseNotification]和[WS-Topics] 规范基础上扩展
事件订阅/通知方式:
10.1 Pull-Point Notification(拉模式通知)
从时序图可以看出,事件通知并不是设备主动上报而是需要客户端发送PullMessages拉取。这种方式无需在客户端和设备间维护链路,但要求客户端能够主动连接设备,当设备IP不固定的时候(比如Iot场景下),拉模式通知往往需要在设备主动建立交互之后才能进行,这导致这种场景下通知不够实时
<1> client通过CreatePullPointSubscriptionRequest向device申请PullPointSubscription(拉订阅点)。这个request包含了此订阅的详细描述信息。并且与the Basic Notification Interface不同之处就是此处需要省略consumerReference。
<2>当subscribe被接受的时候device评估此订阅后返回CreatePullPointSubscriptionResponse 或者返回一个错误代码。
<3>订阅被接受后,反馈的response需要包含SubscriptionManager的WS-EndpointReference. WS-Endpoint必须提供PullMessage操作,Pullmessage用于客户端检索通知信息,以及由订阅管理manager接口去描述WS-BaseeNotification。Base Subscription Manager 接口包含PullMessage,Renew,Unsubscribe 等操作。交互序列如上图。PullMessage包含Timeout以及MessageLimit 参数
<4>一旦有来自client的查询通知则device必须立即响应,如果没有则device一直保持等待client所订阅的通知到来或者等待超时发生。一般情况下至少包括response,且通知个数是被指定的。client在发出的一个PullMessagesRequest并收到PullMessagesResponse后既可以实时轮询通知接口(类似于一问一答式的服务)
<5>如果在CreatePullPointSubscriptionRequest中未指定结束或者相关结束时间,则每个PullMessagesRequest理解为保持激活状态等待相应的PullPointSubscription.并且结束时间会根据相关联的结束时间或者装置内置数值进行再计算。为了通知client去更新结束时PullMessageResponse必须包含CurrentTime以及terminalTime选项。当PullMessagesRequest处于激活状态并等待相应的PullPointSubscription,此时由WS-BaseNotification定义的RenewRequest不能被Client,因此device需要支持PullPointSubscription。(在没有订阅的前提下发送PullMessagesRequest,需要等待PullPointSubscription去创建订阅完成才能继续运行)
<6>如果device支持通知持续保存,则WS-Endpoint必须支持Seek操作,其支持将pull指针重新拉回原位置。为防止将指针的放置位置超出了buffer的起始位置,第一次调用PullMessage要从buffer的起始位置开始。(9.12.9)SeekRequest包含了UtcTime参数,UtcTime参数必须NotificationMessage中的属性相匹配。当使用seek,则pull指针要放置在包含NotificationMessage的且其UtcTime少于等于seek参数的buffer中。SeekRequest包含一个可选的对立参数,这个参数可以将PullMessageResquest的pull方向反向。
接口:
CreatePullPointSubscription //创建订阅,请求中可以指定要订阅的事件类型,订阅持续事件 |
PullMessages //拉取事件 |
Renew //要求设备支持MaxNotificationProducers能力,可能是重置订阅,具体用法不清楚 |
Unsubscribe //取消所有订阅 |
Seek //如果设备支持时间存储,则应该支持事件检索 |
10.2 Basic Notification(WS-BaseNotification通知)
从时序图即可看出,这种消息通知方式,是设备主动的,要求设备能够主动连接设备。或者TCP长连接,或者通过UDP链路保活,或者client IP固定。