Go语言实现Onvif客户端:10、获取网关地址及设置网关地址
1. 前言
之前第4节配置网络信息中开源库中通过device的能力可以配置ip地址(https://blog.csdn.net/weixin_39510813/article/details/115332392),但是没有设置网关地址,实际配置过程中往往是ip地址和网关一起配置的,所以算是漏掉了这部分内容,这里补充一下,顺便说一下我们如何查看onvif标准设备提供的设备能力。
2. 确认onvif设备提供的能力
http://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl
通过上述的wsdl文件(相当于c/c++中的接口库头文件,我们通过头文件可以知道该库提供哪些接口)我们可以确认标准onvif设备提供的设备控制能力,通过关键词搜索是否有我们需要的能力,比如我们这里需要的配置网关地址的能力:
获取网关地址:
设置网关地址:
3. 部分代码
那么增加接口进行网关地址获取和设置即可:
func (client *GoOnvifClient) getGateWayAddress() ReturnInfo {
getGateWayAddressReq := device.GetNetworkDefaultGateway{}
res := client.sendReqGetResp(GetGateWayAddressErr, getGateWayAddressReq)
return res
}
func (client *GoOnvifClient) setGateWayAddress() ReturnInfo {
setGateWayAddressReq := device.SetNetworkDefaultGateway{
IPv4Address: onvif.IPv4Address(client.netWorkConfigInfo.IPV4GateWayAddress),
IPv6Address: onvif.IPv6Address(client.netWorkConfigInfo.IPV6GateWayAddress),
}
res := client.sendReqGetResp(ConfigGateWayAddressErr, setGateWayAddressReq)
return res
}
res, err = client.GetGateWayAddress()
fmt.Println(res)
//设置网络信息
networkInfo := &onvifClient.NetWorkConfigInfo{
EnableIPV4NetworkConfig: true,
IPV4Address: "40.40.40.101",
IPV4PrefixLen: 24,
EnableIPV6NetworkConfig: false,
IPV6Address: "",
IPV6PrefixLen: 120,
IPV4GateWayAddress: "40.40.40.100",
}
res, err = client.ConfigNetWork(networkInfo)
if err != nil {
logger.Error(res)
} else {
fmt.Println(networkInfo.IPV4Address)
}
4. 最后
实际上我感觉onvif论坛应该更新一下现有的web services框架,不要再使用soap协议了,这个协议框架太麻烦了而且基本被淘汰了,这导致我们通过onvif对接设备时由于这个框架变的比较麻烦;实际原理并不复杂,设备作为一个web server,通过soap协议提供设备能力接口,客户端通过soap协议发送对应的请求实现对应功能,但是soap框架让这个简单的请求过程变得复杂了,如果能使用更简单的协议方式恐怕onvif会更加普及。
协议的复杂性也很影响产品的推广和普及,因此好的协议设计和接口文档也是开发非常重要的一环。