Add method to fetch device information

This commit is contained in:
Radhi Fadlillah
2017-05-17 05:19:13 +07:00
parent 2b91fc728f
commit 6415347db0
2 changed files with 59 additions and 0 deletions

View File

@@ -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: "<tds:GetDeviceInformation/>",
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
}

View File

@@ -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
}