Go语言实现Onvif客户端:10、获取网关地址及设置网关地址

348 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1. 前言

之前第4节配置网络信息中开源库中通过device的能力可以配置ip地址(blog.csdn.net/weixin_3951…),但是没有设置网关地址,实际配置过程中往往是ip地址和网关一起配置的,所以算是漏掉了这部分内容,这里补充一下,顺便说一下我们如何查看onvif标准设备提供的设备能力。

2. 确认onvif设备提供的能力

www.onvif.org/ver10/devic…

通过上述的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会更加普及。

协议的复杂性也很影响产品的推广和普及,因此好的协议设计和接口文档也是开发非常重要的一环。