From 6415347db0eece4e1de4987648f4ee4837848c0b Mon Sep 17 00:00:00 2001 From: Radhi Fadlillah Date: Wed, 17 May 2017 05:19:13 +0700 Subject: [PATCH] Add method to fetch device information --- device.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ model.go | 9 +++++++++ 2 files changed, 59 insertions(+) diff --git a/device.go b/device.go index 7249f55..45a7031 100644 --- a/device.go +++ b/device.go @@ -1,10 +1,46 @@ package onvif +import ( + "encoding/json" +) + var deviceXMLNs = []string{ `xmlns:tds="http://www.onvif.org/ver10/device/wsdl"`, `xmlns:tt="http://www.onvif.org/ver10/schema"`, } +// GetDeviceInformation fetch information of ONVIF camera +func (device Device) GetDeviceInformation() (DeviceInformation, error) { + // Create initial result + result := DeviceInformation{} + + // Create SOAP + soap := SOAP{ + Body: "", + XMLNs: deviceXMLNs, + } + + // Send SOAP request + response, err := soap.SendRequest(device.XAddr) + if err != nil { + return result, err + } + + // Parse response to interface + deviceInfo, err := response.ValueForPath("Envelope.Body.GetDeviceInformationResponse") + if err != nil { + return result, err + } + + // Parse interface to struct + err = device.interfaceToStruct(&deviceInfo, &result) + if err != nil { + return result, err + } + + return result, nil +} + // GetSystemDateAndTime fetch date and time from ONVIF camera func (device Device) GetSystemDateAndTime() (string, error) { // Create SOAP @@ -23,3 +59,17 @@ func (device Device) GetSystemDateAndTime() (string, error) { dateTime, _ := response.ValueForPathString("Envelope.Body.GetSystemDateAndTimeResponse.SystemDateAndTime") return dateTime, nil } + +func (device Device) interfaceToStruct(src, dst interface{}) error { + bt, err := json.Marshal(&src) + if err != nil { + return err + } + + err = json.Unmarshal(bt, &dst) + if err != nil { + return err + } + + return nil +} diff --git a/model.go b/model.go index 832f0e8..dc88f0d 100644 --- a/model.go +++ b/model.go @@ -8,3 +8,12 @@ type Device struct { User string Password string } + +// DeviceInformation contains information of ONVIF camera +type DeviceInformation struct { + FirmwareVersion string + HardwareID string + Manufacturer string + Model string + SerialNumber string +}