github.com/e154/smart-home@v0.17.2-0.20240311175135-e530a6e5cd45/common/events/entity_state.go (about)

     1  // This file is part of the Smart Home
     2  // Program complex distribution https://github.com/e154/smart-home
     3  // Copyright (C) 2023-2024, Filippov Alex
     4  //
     5  // This library is free software: you can redistribute it and/or
     6  // modify it under the terms of the GNU Lesser General Public
     7  // License as published by the Free Software Foundation; either
     8  // version 3 of the License, or (at your option) any later version.
     9  //
    10  // This library is distributed in the hope that it will be useful,
    11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13  // Library General Public License for more details.
    14  //
    15  // You should have received a copy of the GNU Lesser General Public
    16  // License along with this library.  If not, see
    17  // <https://www.gnu.org/licenses/>.
    18  
    19  package events
    20  
    21  import (
    22  	"time"
    23  
    24  	"github.com/e154/smart-home/common"
    25  	m "github.com/e154/smart-home/models"
    26  )
    27  
    28  // EntityState ...
    29  type EntityState struct {
    30  	Name        string  `json:"name"`
    31  	Description string  `json:"description"`
    32  	ImageUrl    *string `json:"image_url"`
    33  	Icon        *string `json:"icon"`
    34  }
    35  
    36  // EventEntityState ...
    37  type EventEntityState struct {
    38  	EntityId    common.EntityId `json:"entity_id"`
    39  	Value       interface{}     `json:"value"`
    40  	State       *EntityState    `json:"state"`
    41  	Attributes  m.Attributes    `json:"attributes"`
    42  	Settings    m.Attributes    `json:"settings"`
    43  	LastChanged *time.Time      `json:"last_changed"`
    44  	LastUpdated *time.Time      `json:"last_updated"`
    45  }
    46  
    47  // Compare ...
    48  func (e1 EventEntityState) Compare(e2 EventEntityState) (ident bool) {
    49  
    50  	if e1.State == nil || e2.State == nil {
    51  		return
    52  	}
    53  
    54  	if e1.State.Name != e2.State.Name {
    55  		return
    56  	}
    57  
    58  	for k1, v1 := range e1.Attributes {
    59  		if !e2.Attributes[k1].Compare(v1) {
    60  			return false
    61  		}
    62  	}
    63  
    64  	ident = true
    65  
    66  	return
    67  }