diff --git a/internal/services/services.go b/internal/services/services.go index 23f123c..e8a38b8 100644 --- a/internal/services/services.go +++ b/internal/services/services.go @@ -26,6 +26,7 @@ func BuildService[ Scene | Script | TTS | + Timer | Vacuum | ZWaveJS, ](conn *ws.WebsocketWriter) *T { diff --git a/internal/services/timer.go b/internal/services/timer.go new file mode 100644 index 0000000..561271f --- /dev/null +++ b/internal/services/timer.go @@ -0,0 +1,69 @@ +package services + +import ( + ws "saml.dev/gome-assistant/internal/websocket" +) + +/* Structs */ + +type Timer struct { + conn *ws.WebsocketWriter +} + +/* Public API */ + +// See https://www.home-assistant.io/integrations/timer/#action-timerstart +func (t Timer) Start(entityId string, duration string) error { + req := NewBaseServiceRequest(entityId) + req.Domain = "timer" + req.Service = "start" + req.ServiceData = map[string]any{ + "duration": duration, + } + + return t.conn.WriteMessage(req) +} + +// See https://www.home-assistant.io/integrations/timer/#action-timerstart +func (t Timer) Change(entityId string, duration string) error { + req := NewBaseServiceRequest(entityId) + req.Domain = "timer" + req.Service = "change" + req.ServiceData = map[string]any{ + "duration": duration, + } + + return t.conn.WriteMessage(req) +} + +// See https://www.home-assistant.io/integrations/timer/#action-timerpause +func (t Timer) Pause(entityId string) error { + req := NewBaseServiceRequest(entityId) + req.Domain = "timer" + req.Service = "pause" + return t.conn.WriteMessage(req) +} + +// See https://www.home-assistant.io/integrations/timer/#action-timercancel +func (t Timer) Cancel() error { + req := NewBaseServiceRequest("") + req.Domain = "timer" + req.Service = "cancel" + return t.conn.WriteMessage(req) +} + +// See https://www.home-assistant.io/integrations/timer/#action-timerfinish +func (t Timer) Finish(entityId string) error { + req := NewBaseServiceRequest(entityId) + req.Domain = "timer" + req.Service = "finish" + return t.conn.WriteMessage(req) +} + +// See https://www.home-assistant.io/integrations/timer/#action-timerreload +func (t Timer) Reload() error { + req := NewBaseServiceRequest("") + req.Domain = "timer" + req.Service = "reload" + return t.conn.WriteMessage(req) +} diff --git a/service.go b/service.go index 8224743..bb6721c 100644 --- a/service.go +++ b/service.go @@ -25,6 +25,7 @@ type Service struct { Number *services.Number Scene *services.Scene Script *services.Script + Timer *services.Timer TTS *services.TTS Vacuum *services.Vacuum ZWaveJS *services.ZWaveJS @@ -51,6 +52,7 @@ func newService(conn *ws.WebsocketWriter) *Service { Number: services.BuildService[services.Number](conn), Scene: services.BuildService[services.Scene](conn), Script: services.BuildService[services.Script](conn), + Timer: services.BuildService[services.Timer](conn), TTS: services.BuildService[services.TTS](conn), Vacuum: services.BuildService[services.Vacuum](conn), ZWaveJS: services.BuildService[services.ZWaveJS](conn),