diff --git a/internal/app/app.go b/internal/app/app.go index 9e038d1..1dc9505 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -132,15 +132,29 @@ func (app *App) Resume() error { URL: app.config.Server, HAAuthToken: app.config.APIKey, }) - if err != nil { app.logger.Error("failed to create Home Assistant app", "error", err) return err } - app.ha.Cleanup() + app.ha.RegisterEntityListeners(ga.NewEntityListener().EntityIds("binary_sensor.bedroom_door_opening").Call(app.onEntityStateChange).Build()) - app.tray.SetIcon(IconUnknown) + go app.ha.Start() + + time.Sleep(2 * time.Second) + state, err := app.ha.GetState().Get("binary_sensor.bedroom_door_opening") + if err != nil { + app.logger.Error("failed to get entity", "error", err) + return err + } + + app.logger.Info("state", "state", state.State) + + if state.State == "on" { + app.tray.SetIcon(IconOpen) + } else { + app.tray.SetIcon(IconClosed) + } app.state = StateRunning app.lastStarted = internal.Ptr(time.Now()) @@ -152,6 +166,21 @@ func (app *App) Resume() error { return nil } +func (a *App) onEntityStateChange(se *ga.Service, st ga.State, e ga.EntityData) { + entity, err := st.Get(e.TriggerEntityId) + if err != nil { + a.logger.Error("failed to get entity", "error", err) + return + } + a.logger.Info("sensor.test state changed", "entity", e.TriggerEntityId, "state", entity.State) + + if entity.State == "on" { + a.tray.SetIcon(IconOpen) + } else { + a.tray.SetIcon(IconClosed) + } +} + // Reload pauses the application, re-reads configuration files, then resumes func (a *App) Reload() error { a.mu.Lock()