hikvision/iot/device-iot.go

304 lines
8.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 iot
import (
"encoding/json"
"fmt"
"myschools.me/suguo/hikvision/iot/model"
)
/*
基础服务能力 > 设备管理 > 设备接入管理
*/
// 注册设备到对应分组内。
//
// 注册设备时首先会将设备添加到平台,然后异步同步设备通道。如果设备添加成功而同步设备通道失败,则可以先获取设备列表信息,再手动调用通道同步接口同步设备下的通道。\
func DeviceRegister(deviceserial, groupno, validatecode string) (*model.DeviceData, error) {
req := &struct {
DeviceSerial string `json:"deviceSerial"` //设备序列号
GroupNo string `json:"groupNo"` //组编号
ValidateCode string `json:"validateCode"` //验证码
}{
DeviceSerial: deviceserial,
GroupNo: groupno,
ValidateCode: validatecode,
}
resp, err := hikvisionRequest("POST", "/api/v1/open/basic/devices/create", req)
if err != nil {
return nil, err
}
result := &model.DeviceData{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 从某一分组内删除设备
func DeviceDelete(deviceSerial string) (*model.Hikvision, error) {
resp, err := hikvisionRequest("POST", fmt.Sprintf("/api/v1/open/basic/devices/delete?deviceSerial=%s", deviceSerial), nil)
if err != nil {
return nil, err
}
var result *model.Hikvision
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 该接口用于修改设备名称
func DeviceUpdate(deviceserial, devicename string) (*model.Hikvision, error) {
req := &struct {
DeviceSerial string `json:"deviceSerial"` //设备序列号
DeviceName string `json:"deviceName"` //设备名称
}{
DeviceSerial: deviceserial,
DeviceName: devicename,
}
resp, err := hikvisionRequest("POST", `/api/v1/open/basic/devices/update`, req)
if err != nil {
return nil, err
}
var result *model.Hikvision
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 该接口用于根据设备序列号获取单个设备详细信息
func DeviceDetail(deviceSerial string) (*model.DeviceData, error) {
resp, err := hikvisionRequest("GET", fmt.Sprintf("/api/v1/open/basic/devices/get?deviceSerial=%s", deviceSerial), nil)
if err != nil {
return nil, err
}
var result = &model.DeviceData{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 该接口用于查询某组下设备列表信息 ,组编号,页数,页行数
func DeviceList(groupno string, pageno, pagesize int) (*model.DeviceListData, error) {
url := fmt.Sprintf("/api/v1/open/basic/devices/list?groupNo=%s&pageNo=%d&pageSize=%d", groupno, pageno, pagesize)
resp, err := hikvisionRequest("GET", url, nil)
if err != nil {
return nil, err
}
var result = &model.DeviceListData{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 该接口用于获取用户接入的设备总数
func DeviceNum() (*int, error) {
resp, err := hikvisionRequest("GET", "/api/v1/open/basic/devices/actions/deviceCount", nil)
if err != nil {
return nil, err
}
var result = &model.DeviceNum{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return &result.Data.TotalCount, nil
}
// 该接口用于查询设备的状态信息,目前仅支持萤石设备 /*测试未通过*/
func DeviceStatus(deviceserial string) (*model.DeviceStatusData, error) {
resp, err := hikvisionRequest("GET", fmt.Sprintf("/api/v1/open/basic/devices/api/v1/ezviz/devices/queryDeviceStatus?deviceSerial=%s", deviceserial), nil)
if err != nil {
return nil, err
}
var result = &model.DeviceStatusData{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 该接口用于重启设备,请谨慎操作
func DeviceReboot(deviceserial string) (*model.Hikvision, error) {
params := &struct {
DeviceSerial string `json:"deviceSerial"`
}{
DeviceSerial: deviceserial,
}
resp, err := hikvisionRequest("POST", "/api/v1/open/basic/devices/actions/system/reboot", params)
if err != nil {
return nil, err
}
var result *model.Hikvision
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
/*
确权流程说明
设备接入政策进行了如下调整:
1设备首次激活需要在规定的时间72小时内上线平台否则上线时需要走确权流程
2设备重新注册平台删除设备并重新添加设备超过规定时间72小时需要走确权流程
什么时候需要进行确权
注册设备接口返回内容code=60058时需要进行设备确权操作。
*/
// 下线确认 errcode:20002003 errmsg:离线失败
func DeviceOffline(deviceserial string) (*model.Hikvision, error) {
resp, err := hikvisionRequest("GET", fmt.Sprintf("https://api2.hik-cloud.com/v1/carrier/wing/endpoint/confirm/right/offlineconfirm?deviceSerial=%s", deviceserial), nil)
if err != nil {
return nil, err
}
var result *model.Hikvision
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 上线线确认
func DeviceOnline(deviceserial string) (*model.Hikvision, error) {
resp, err := hikvisionRequest("GET", fmt.Sprintf("https://api2.hik-cloud.com/v1/carrier/wing/endpoint/confirm/right/onlineconfirm?deviceSerial=%s", deviceserial), nil)
if err != nil {
return nil, err
}
var result *model.Hikvision
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 该接口用于获取设备当前校时配置
func DeviceTimeGeMode(deviceserial string) (*string, error) {
resp, err := hikvisionRequest("GET", fmt.Sprintf("/api/v1/device/isapi/system/time?deviceSerial=%s", deviceserial), nil)
if err != nil {
return nil, err
}
var result = &struct {
model.Hikvision
Data struct {
TimeMode string `json:"timeMode"`
} `json:"data"`
}{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return &result.Data.TimeMode, nil
}
// 该接口用于配置设备校时模式
func DeviceTimeSetMode(deviceSerial, timeMode string) (*model.Hikvision, error) {
req := &struct {
DeviceSerial string `json:"deviceSerial"`
TimeMode string `json:"timeMode"`
}{
DeviceSerial: deviceSerial,
TimeMode: timeMode,
}
resp, err := hikvisionRequest("POST", "/api/v1/device/isapi/system/time", req)
if err != nil {
return nil, err
}
var result *model.Hikvision
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 该接口用于获取设备当前NTP服务器配置
func DeviceTimeGetNTPCfg(deviceserial string) (*model.DeviceSetNTPCfgServerRes, error) {
resp, err := hikvisionRequest("GET", fmt.Sprintf("/api/v1/device/isapi/system/time/ntpServers?deviceSerial=%s", deviceserial), nil)
if err != nil {
return nil, err
}
var result = &model.DeviceSetNTPCfgServerRes{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 该接口用于配置设备NTP服务器参数
func DeviceTimeSetNTPCfg(deviceSerial string, ntpserver *model.DeviceSetNTPCfgServerChild) (*model.Hikvision, error) {
req := &struct {
DeviceSerial string `json:"deviceSerial"`
NtpServer model.DeviceSetNTPCfgServerChild `json:"ntpServer"`
}{
DeviceSerial: deviceSerial,
NtpServer: *ntpserver,
}
resp, err := hikvisionRequest("POST", "/api/v1/device/isapi/system/time/ntpServers", req)
if err != nil {
return nil, err
}
var result *model.Hikvision
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 该接口用于获取设备指定NTP服务器配置
func DeviceTimeGetNTPServerCfg(deviceserial string, ntpserverid int) (*model.DeviceSetNTPCfgServerRes, error) {
resp, err := hikvisionRequest("GET", fmt.Sprintf("/api/v1/device/isapi/system/time/ntpServers/config?deviceSerial=%s&ntpServerId=%d", deviceserial, ntpserverid), nil)
if err != nil {
return nil, err
}
var result = &model.DeviceSetNTPCfgServerRes{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 该接口用于配置设备指定NTP服务器参数
func DeviceTimeSetNTPServerCfg(req *model.DeviceSetNTPServerCfgReq) (*model.Hikvision, error) {
resp, err := hikvisionRequest("POST", "/api/v1/device/isapi/system/time/ntpServers/config", req)
if err != nil {
return nil, err
}
var result *model.Hikvision
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}