github.com/dim13/unifi@v0.0.0-20230308161331-9b04946f5e93/cmd/list-rawdevices/main.go (about) 1 // Copyright (c) 2014 Dimitri Sokolyuk. All rights reserved. 2 // Use of this source code is governed by ISC-style license 3 // that can be found in the LICENSE file. 4 5 // Example command list-rawdevices 6 // Generates a json file with a list of devices as received by the controller api. 7 // Optionally devices can be filtered by device type 8 package main 9 10 import ( 11 "encoding/json" 12 "flag" 13 "log" 14 "os" 15 "text/tabwriter" 16 17 "github.com/dim13/unifi" 18 ) 19 20 var ( 21 host = flag.String("host", "unifi", "Controller hostname") 22 user = flag.String("user", "admin", "Controller username") 23 pass = flag.String("pass", "unifi", "Controller password") 24 port = flag.String("port", "8443", "Controller port") 25 version = flag.Int("version", 5, "Controller base version") 26 siteid = flag.String("siteid", "default", "Sitename or description") 27 28 filter = flag.String("filter", "", "Filter by device type [uap|usw|ugw]") 29 path = flag.String("path", "./rawDevices.json", "The path and filename of the output") 30 ) 31 32 func main() { 33 flag.Parse() 34 35 w := new(tabwriter.Writer) 36 w.Init(os.Stdout, 0, 8, 3, ' ', 0) 37 defer w.Flush() 38 39 u, err := unifi.Login(*user, *pass, *host, *port, *siteid, *version) 40 if err != nil { 41 log.Fatalln("Login returned error: ", err) 42 } 43 defer u.Logout() 44 45 site, err := u.Site(*siteid) 46 if err != nil { 47 log.Fatal(err) 48 } 49 50 rawDevices, err := u.RawDevices(site, *filter) 51 if err != nil { 52 log.Fatalln(err) 53 } 54 55 var devices []json.RawMessage 56 57 for _, v := range rawDevices { 58 devices = append(devices, v.Data) 59 } 60 61 json, _ := json.MarshalIndent(devices, "", " ") 62 err = os.WriteFile(*path, json, 0644) 63 if err != nil { 64 log.Fatalln(err) 65 66 } 67 }