Skip to content
/ unifi Public

Go Library (w/ structures) to grab data from a Ubiquiti UniFi Controller

License

Notifications You must be signed in to change notification settings

unpoller/unifi

Folders and files

NameName
Last commit message
Last commit date
Dec 31, 2024
Apr 19, 2024
Jan 2, 2025
Dec 31, 2024
Jul 27, 2023
Jun 13, 2024
Dec 29, 2019
Dec 31, 2024
Apr 19, 2024
Dec 31, 2024
Dec 31, 2024
Jan 2, 2025
Jan 2, 2025
Dec 31, 2024
Jul 31, 2023
Apr 19, 2024
Dec 31, 2024
Feb 10, 2025
Feb 10, 2025
Dec 31, 2024
Dec 31, 2024
Dec 31, 2024
Dec 31, 2024
Dec 31, 2024
Jan 10, 2025
Dec 31, 2024
Dec 31, 2024
Dec 23, 2022
Jan 2, 2025
Jan 2, 2025
Jan 2, 2025
Jan 2, 2025
Jul 31, 2023
Jan 10, 2025
Jan 10, 2025
Jul 31, 2023
Apr 3, 2024
Dec 23, 2022
Dec 31, 2024
Dec 23, 2022
Dec 31, 2024

Repository files navigation

Go Library: unifi

It connects to a Unifi Controller, given a url, username and password. Returns an authenticated http Client you may use to query the device for data. Also contains some built-in methods for de-serializing common client and device data. The data is provided in a large struct you can consume in your application.

This library is designed to PULL data FROM the controller. It has no methods that update settings or change things on the controller. Someone expressed interest in adding methods to update data, and I'm okay with that. I'll even help add them. Tell me what you want to do, and we'll make it happen.

Pull requests, feature requests, code reviews and feedback are welcomed!

Here's a working example:

package main

import "log"
import "github.com/unpoller/unifi/v5"

func main() {
	c := *unifi.Config{
		User: "admin",
		Pass: "superSecret1234",
		URL:  "https://127.0.0.1:8443/",
		// Log with log.Printf or make your own interface that accepts (msg, fmt)
		ErrorLog: log.Printf,
		DebugLog: log.Printf,
	}
	uni, err := unifi.NewUnifi(c)
	if err != nil {
		log.Fatalln("Error:", err)
	}

	sites, err := uni.GetSites()
	if err != nil {
		log.Fatalln("Error:", err)
	}
	clients, err := uni.GetClients(sites)
	if err != nil {
		log.Fatalln("Error:", err)
	}
	devices, err := uni.GetDevices(sites)
	if err != nil {
		log.Fatalln("Error:", err)
	}

	log.Println(len(sites), "Unifi Sites Found: ", sites)
	log.Println(len(clients), "Clients connected:")
	for i, client := range clients {
		log.Println(i+1, client.ID, client.Hostname, client.IP, client.Name, client.LastSeen)
	}

	log.Println(len(devices.USWs), "Unifi Switches Found")
	log.Println(len(devices.USGs), "Unifi Gateways Found")

	log.Println(len(devices.UAPs), "Unifi Wireless APs Found:")
	for i, uap := range devices.UAPs {
		log.Println(i+1, uap.Name, uap.IP)
	}
}