mirror of
https://github.com/cedricve/go-onvif.git
synced 2025-09-27 04:45:54 +08:00
Add method to fetch device information
This commit is contained in:
50
device.go
50
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: "<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
|
||||
}
|
||||
|
Reference in New Issue
Block a user