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
soap := SOAP{
Body: "",
XMLNs: deviceXMLNs,
}
// Send SOAP request
response, err := soap.SendRequest(device.XAddr)
if err != nil {
return "", err
}
// Parse response
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
}