天天看點

ONVIF專題--Onvif标準解讀(3)--Core Spec::Device Management(1)1 總覽2 Capabilities API3 Network API 4 System API5 Security API6 I/O API7 輔助外設8 存儲配置9 裝置監控事件10 事件通知

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支援的服務,可附加服務能力集+裝置能力集

GetServices  -> GetServiceCapabilities

                      -> GetCapabilities

例子:如下封包描述了裝置若幹能力集,可以包括tds作用域下的能力也包括其他作用域能力集
ONVIF專題--Onvif标準解讀(3)--Core Spec::Device Management(1)1 總覽2 Capabilities API3 Network API 4 System API5 Security API6 I/O API7 輔助外設8 存儲配置9 裝置監控事件10 事件通知

GetServiceCapabilities #擷取網絡服務能力集,注:必須實作,若實作GetServices

注:ONVIF網絡服務能力集分類如下:

NetworkCapabilities 網絡能力
SecurityCapabilities 安全能力
SystemCapabilities 系統能力
MiscCapabilities 其他能力

GetCapabilities # 擷取裝置能力集,注:必須實作,若實作GetServices

注:ONVIF能力分類如下:

Analytics
Device
Events
Imaging
Media
PTZ

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 能力)

參考:[IEEE 802.11]簡介

ONVIF要求能夠對裝置進行如下配置:(具體方式ONVIF不做限制)

  • SSID
  • Station mode
  • Multiple wireless network configuration
  • Security configuration

GetDot11Capabilities #擷取裝置支援的Dot11能力,IEEE 802.11定義了TKIP、ScanAvailableNetworks 、MultipleConfiguration 、AdHocStationMode 、WEP 5種能力

GetDot11Status #擷取無線網狀态,如下

ONVIF專題--Onvif标準解讀(3)--Core Spec::Device Management(1)1 總覽2 Capabilities API3 Network API 4 System API5 Security API6 I/O API7 輔助外設8 存儲配置9 裝置監控事件10 事件通知
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及上傳有效時間(避免用戶端惡意占用上傳網絡資源)

上傳并恢複備份步驟:

ONVIF專題--Onvif标準解讀(3)--Core Spec::Device Management(1)1 總覽2 Capabilities API3 Network API 4 System API5 Security API6 I/O API7 輔助外設8 存儲配置9 裝置監控事件10 事件通知
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"。同樣要求更新後網絡配置不變。

上傳檔案及更新操作步驟:

ONVIF專題--Onvif标準解讀(3)--Core Spec::Device Management(1)1 總覽2 Capabilities API3 Network API 4 System API5 Security API6 I/O API7 輔助外設8 存儲配置9 裝置監控事件10 事件通知
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條目有效)

地理資訊條目包括(裝置不一定要支援全部地理資訊條目):

ONVIF專題--Onvif标準解讀(3)--Core Spec::Device Management(1)1 總覽2 Capabilities API3 Network API 4 System API5 Security API6 I/O API7 輔助外設8 存儲配置9 裝置監控事件10 事件通知
ONVIF專題--Onvif标準解讀(3)--Core Spec::Device Management(1)1 總覽2 Capabilities API3 Network API 4 System API5 Security API6 I/O API7 輔助外設8 存儲配置9 裝置監控事件10 事件通知
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",如:

ONVIF專題--Onvif标準解讀(3)--Core Spec::Device Management(1)1 總覽2 Capabilities API3 Network API 4 System API5 Security API6 I/O API7 輔助外設8 存儲配置9 裝置監控事件10 事件通知

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/MeanTimeBetweenFailuresOperationLimitReached //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場景下),拉模式通知往往需要在裝置主動建立互動之後才能進行,這導緻這種場景下通知不夠實時

ONVIF專題--Onvif标準解讀(3)--Core Spec::Device Management(1)1 總覽2 Capabilities API3 Network API 4 System API5 Security API6 I/O API7 輔助外設8 存儲配置9 裝置監控事件10 事件通知

<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固定。

ONVIF專題--Onvif标準解讀(3)--Core Spec::Device Management(1)1 總覽2 Capabilities API3 Network API 4 System API5 Security API6 I/O API7 輔助外設8 存儲配置9 裝置監控事件10 事件通知

繼續閱讀