hikvision/iot/group-cloud.go

157 lines
4.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package cloud
import (
"encoding/json"
"fmt"
"myschools.me/suguo/hikvision/model"
)
/*
基础服务能力 > 设备管理 > 设备分组管理
*/
const (
/*设备分组管理*/
GROUP_BASE = "https://api2.hik-cloud.com/api/v1/open/basic/groups"
GROUP_ADD = GROUP_BASE + "/create"
GROUP_REMOVE = GROUP_BASE + "/delete"
GROUP_UPDATE = GROUP_BASE + "/update"
GROUP_DETAIL = GROUP_BASE + "/get"
GROUP_LISTALL = GROUP_BASE + "/actions/listAll"
GROUP_CHILD_LIST = GROUP_BASE + "/actions/childrenList"
)
type GroupAddReq struct {
GroupName string `json:"groupName"` //组名称
GroupNo string `json:"groupNo"` //组编号
ParentNo string `json:"parentNo"` //父节点组编号
}
// 该接口用于通过编号来新增组。最多支持3000个组最多支持5层嵌套。
func GroupAdd(access_token *string, req *GroupAddReq) (*model.BaseOperationRes, error) {
resp, err := hikvisionRequest(access_token, "POST", GROUP_ADD, req)
if err != nil {
return nil, err
}
var result *model.BaseOperationRes
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
if result.Code != 200 {
return nil, fmt.Errorf("result errcode:%d errmsg:%s", result.Code, result.Message)
}
return result, nil
}
type GroupUpdateReq struct {
GroupName string `json:"groupName"` //组名称
GroupNo string `json:"groupNo"` //组编号
}
// 该接口用于通过组编号来删除组。组下面挂有下级节点或者设备的不可以删除,需清空后进行删除。
func GroupUpdate(access_token *string, req *GroupUpdateReq) (*model.BaseOperationRes, error) {
resp, err := hikvisionRequest(access_token, "POST", GROUP_UPDATE, req)
if err != nil {
return nil, err
}
var result *model.BaseOperationRes
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
if result.Code != 200 {
return nil, fmt.Errorf("result errcode:%d errmsg:%s", result.Code, result.Message)
}
return result, nil
}
// 该接口用于通过组编号来删除组。组下面挂有下级节点或者设备的不可以删除,需清空后进行删除。
func GroupRemove(access_token *string, groupNo string) (*model.BaseOperationRes, error) {
resp, err := hikvisionRequest(access_token, "POST", fmt.Sprintf("%s?groupNo=%s", GROUP_REMOVE, groupNo), nil)
if err != nil {
return nil, err
}
var result *model.BaseOperationRes
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
if result.Code != 200 {
return nil, fmt.Errorf("result errcode:%d errmsg:%s", result.Code, result.Message)
}
return result, nil
}
type GroupGetRes struct {
Code int `json:"code"`
Data Group `json:"data"`
Message string `json:"message"`
}
type Group struct {
GroupId string `json:"groupId"` //组ID
GroupName string `json:"groupName"` //组名称
GroupNo string `json:"groupNo"` //组编号
ParentId string `json:"parentId"` //父ID
}
// 该接口用于通过组编号获取组的详细信息
func CloudGetGroup(access_token *string, groupNo string) (*Group, error) {
resp, err := hikvisionRequest(access_token, "GET", fmt.Sprintf("%s?groupNo=%s", GROUP_DETAIL, groupNo), nil)
if err != nil {
return nil, err
}
var result *GroupGetRes
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
if result.Code != 200 {
return nil, fmt.Errorf("result errcode:%d errmsg:%s", result.Code, result.Message)
}
return &result.Data, nil
}
type Groups struct {
Code int `json:"code"`
Data []Group `json:"data"`
Message string `json:"message"`
}
// 该接口用于获取所有组。
func GroupGetAll(access_token *string) ([]Group, error) {
resp, err := hikvisionRequest(access_token, "GET", GROUP_LISTALL, nil)
if err != nil {
return nil, err
}
var result *Groups
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
if result.Code != 200 {
return nil, fmt.Errorf("result errcode:%d errmsg:%s", result.Code, result.Message)
}
return result.Data, nil
}
// 该接口用于通过组编号查找某组的下级节点。如果父节点为空,则查询根节点。
func GroupChildList(access_token *string, groupNo string) ([]Group, error) {
resp, err := hikvisionRequest(access_token, "GET", fmt.Sprintf("%s?parentNo=%s", GROUP_CHILD_LIST, groupNo), nil)
if err != nil {
return nil, err
}
var result *Groups
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
if result.Code != 200 {
return nil, fmt.Errorf("result errcode:%d errmsg:%s", result.Code, result.Message)
}
return result.Data, nil
}