103 lines
2.4 KiB
Go
103 lines
2.4 KiB
Go
package unifi
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
)
|
|
|
|
//go:generate go run golang.org/x/tools/cmd/stringer -trimprefix DeviceState -type DeviceState
|
|
type DeviceState int
|
|
|
|
const (
|
|
DeviceStateUnknown DeviceState = 0
|
|
DeviceStateConnected DeviceState = 1
|
|
DeviceStatePending DeviceState = 2
|
|
DeviceStateFirmwareMismatch DeviceState = 3
|
|
DeviceStateUpgrading DeviceState = 4
|
|
DeviceStateProvisioning DeviceState = 5
|
|
DeviceStateHeartbeatMissed DeviceState = 6
|
|
DeviceStateAdopting DeviceState = 7
|
|
DeviceStateDeleting DeviceState = 8
|
|
DeviceStateInformError DeviceState = 9
|
|
DeviceStateAdoptFailed DeviceState = 10
|
|
DeviceStateIsolated DeviceState = 11
|
|
)
|
|
|
|
func (c *Client) ListDevice(ctx context.Context, site string) ([]Device, error) {
|
|
return c.listDevice(ctx, site)
|
|
}
|
|
|
|
func (c *Client) GetDeviceByMAC(ctx context.Context, site, mac string) (*Device, error) {
|
|
return c.getDevice(ctx, site, mac)
|
|
}
|
|
|
|
func (c *Client) DeleteDevice(ctx context.Context, site, id string) error {
|
|
return c.deleteDevice(ctx, site, id)
|
|
}
|
|
|
|
func (c *Client) CreateDevice(ctx context.Context, site string, d *Device) (*Device, error) {
|
|
return c.createDevice(ctx, site, d)
|
|
}
|
|
|
|
func (c *Client) UpdateDevice(ctx context.Context, site string, d *Device) (*Device, error) {
|
|
return c.updateDevice(ctx, site, d)
|
|
}
|
|
|
|
func (c *Client) GetDevice(ctx context.Context, site, id string) (*Device, error) {
|
|
devices, err := c.ListDevice(ctx, site)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, d := range devices {
|
|
if d.ID == id {
|
|
return &d, nil
|
|
}
|
|
}
|
|
|
|
return nil, &NotFoundError{}
|
|
}
|
|
|
|
func (c *Client) AdoptDevice(ctx context.Context, site, mac string) error {
|
|
reqBody := struct {
|
|
Cmd string `json:"cmd"`
|
|
MAC string `json:"mac"`
|
|
}{
|
|
Cmd: "adopt",
|
|
MAC: mac,
|
|
}
|
|
|
|
var respBody struct {
|
|
Meta meta `json:"meta"`
|
|
}
|
|
|
|
err := c.do(ctx, "POST", fmt.Sprintf("s/%s/cmd/devmgr", site), reqBody, &respBody)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *Client) ForgetDevice(ctx context.Context, site, mac string) error {
|
|
reqBody := struct {
|
|
Cmd string `json:"cmd"`
|
|
MACs []string `json:"macs"`
|
|
}{
|
|
Cmd: "delete-device",
|
|
MACs: []string{mac},
|
|
}
|
|
|
|
var respBody struct {
|
|
Meta meta `json:"meta"`
|
|
Data []Device `json:"data"`
|
|
}
|
|
|
|
err := c.do(ctx, "POST", fmt.Sprintf("s/%s/cmd/sitemgr", site), reqBody, &respBody)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|