1
0
Fork 0

Timer fixes

main v0.6.1
Jordan Hotmann 2023-10-18 12:49:54 -06:00
parent ddf56ec6aa
commit 06d87ea689
No known key found for this signature in database
GPG Key ID: 01B504170C2A2EA3
2 changed files with 10 additions and 11 deletions

View File

@ -2,6 +2,7 @@ package nats
import (
"fmt"
"strings"
"time"
"code.jhot.me/jhot/hats/pkg/config"
@ -26,13 +27,12 @@ type HatsTimer struct {
FinishTime time.Time
}
func (t *HatsTimer) getEntityId() string {
return fmt.Sprintf("timer.%s", t.Name)
}
func GetTimer(name string) (*HatsTimer, error) {
initHomeAssistantClient()
state, err := haClient.GetState(fmt.Sprintf("timer.%s", name))
if !strings.HasPrefix(name, "timer.") {
name = fmt.Sprintf("timer.%s", name)
}
state, err := haClient.GetState(name)
if err != nil {
return nil, err
}
@ -66,7 +66,7 @@ func (t *HatsTimer) Activate(durationOverride string) {
}
}
logger.Error("Starting timer", "duration", int(d.Seconds()))
err := haClient.CallService(t.getEntityId(), homeassistant.Services.Start, map[string]any{
err := haClient.CallService(t.Name, homeassistant.Services.Start, map[string]any{
homeassistant.ExtraProps.Duration: int(d.Seconds()),
})
if err != nil {
@ -75,18 +75,17 @@ func (t *HatsTimer) Activate(durationOverride string) {
}
func (t *HatsTimer) ActivateIfNotAlready(durationOverride string) {
state, err := haClient.GetState(t.getEntityId())
if err != nil || state.State != "active" {
if state, err := haClient.GetState(t.Name); err == nil && !homeassistant.StateToBool(state.State) {
t.Activate(durationOverride)
}
}
func (t *HatsTimer) Cancel() {
haClient.CallService(t.getEntityId(), homeassistant.Services.Cancel)
haClient.CallService(t.Name, homeassistant.Services.Cancel)
}
func (t *HatsTimer) ToString() string {
if t.State == "active" {
if homeassistant.StateToBool(t.State) {
time, _ := t.FinishTime.MarshalText()
return string(time)
}

View File

@ -12,7 +12,7 @@ import (
// States that return true: "on", "home", "open", "playing", non-zero numbers, etc.
// All others return false
func StateToBool(state string) bool {
trueRegex := regexp.MustCompile(`^(on|home|open(ing)?|unlocked|playing|good|walking|charging|alive|heat|cool|heat_cool|[1-9][\d\.]*|0\.0*[1-9]\d*)$`)
trueRegex := regexp.MustCompile(`^(on|home|open(ing)?|unlocked|playing|active|good|walking|charging|alive|heat|cool|heat_cool|[1-9][\d\.]*|0\.0*[1-9]\d*)$`)
return trueRegex.MatchString(state)
}