github.com/dim13/unifi@v0.0.0-20230308161331-9b04946f5e93/alarm.go (about) 1 // Copyright (c) 2014 The unifi Authors. 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 package unifi 6 7 import ( 8 "encoding/json" 9 "fmt" 10 ) 11 12 type AlarmFilter struct { 13 Limit int `json:"_limit"` 14 Start int `json:"_start"` 15 Withcount bool `json:"withcount"` 16 Archived bool `json:"archived"` 17 } 18 19 type RawAlarm struct { 20 Data json.RawMessage 21 Key string 22 } 23 24 // Returns a slice of json RawDevices as received by the controller 25 func (u *Unifi) RawAlarms(site *Site, filter any) ([]RawAlarm, error) { 26 27 var rawAlarms []RawAlarm 28 29 // Response from controller 30 var response struct { 31 Data []json.RawMessage 32 Meta meta 33 } 34 35 err := u.parse(site, "stat/alarm", filter, &response) 36 if err != nil { 37 return nil, err 38 } 39 40 for _, d := range response.Data { 41 42 // unmarshal into a map to check the "type" field 43 var obj map[string]any 44 err := json.Unmarshal(d, &obj) 45 if err != nil { 46 return nil, err 47 } 48 49 alarmKey, ok := obj["key"].(string) 50 if !ok { 51 return nil, fmt.Errorf("error on retrieving object type from raw json") 52 } 53 54 var ra RawAlarm 55 ra.Key = alarmKey 56 ra.Data = d 57 rawAlarms = append(rawAlarms, ra) 58 } 59 return rawAlarms, err 60 } 61 62 // Returns a slice of json RawDevices as received by the controller 63 func (u *Unifi) BasicAlarms(site *Site, filter any) ([]BasicEvent, error) { 64 65 var basicAlarms []BasicEvent 66 67 rawAlarms, err := u.RawAlarms(site, filter) 68 69 for _, ra := range rawAlarms { 70 71 var ba BasicEvent 72 err := json.Unmarshal(ra.Data, &ba) 73 if err != nil { 74 return nil, err 75 } 76 77 basicAlarms = append(basicAlarms, ba) 78 } 79 80 return basicAlarms, err 81 }