package main import ( "fmt" "io/ioutil" "log" "net/http" goonvif "github.com/kerberos-io/onvif" "github.com/kerberos-io/onvif/device" "github.com/kerberos-io/onvif/gosoap" "github.com/kerberos-io/onvif/xsd/onvif" ) const ( login = "admin" password = "Supervisor" ) func readResponse(resp *http.Response) string { b, err := ioutil.ReadAll(resp.Body) if err != nil { panic(err) } return string(b) } func main() { //Getting an camera instance dev, err := goonvif.NewDevice(goonvif.DeviceParams{ Xaddr: "192.168.13.14:80", Username: login, Password: password, HttpClient: new(http.Client), }) if err != nil { panic(err) } //Preparing commands UserLevel := onvif.UserLevel("User") systemDateAndTyme := device.GetSystemDateAndTime{} createUser := device.CreateUsers{ User: []onvif.UserRequest{ { Username: "TestUser", Password: "TestPassword", UserLevel: &UserLevel, }, }, } //Commands execution systemDateAndTymeResponse, err := dev.CallMethod(systemDateAndTyme) if err != nil { log.Println(err) } else { fmt.Println(readResponse(systemDateAndTymeResponse)) } getCapabilities := device.GetCapabilities{Category: []onvif.CapabilityCategory{"All"}} getCapabilitiesResponse, err := dev.CallMethod(getCapabilities) if err != nil { log.Println(err) } else { fmt.Println(readResponse(getCapabilitiesResponse)) } createUserResponse, err := dev.CallMethod(createUser) if err != nil { log.Println(err) } else { /* You could use https://github.com/kerberos-io/onvif/gosoap for pretty printing response */ fmt.Println(gosoap.SoapMessage(readResponse(createUserResponse)).StringIndent()) } }