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  }