diff --git a/internal/hass/client.go b/internal/hass/client.go index 28fc3ea19..ea2c11631 100644 --- a/internal/hass/client.go +++ b/internal/hass/client.go @@ -18,6 +18,7 @@ import ( "github.com/go-resty/resty/v2" + "github.com/joshuar/go-hass-agent/internal/hass/event" "github.com/joshuar/go-hass-agent/internal/hass/sensor" "github.com/joshuar/go-hass-agent/internal/hass/sensor/registry" "github.com/joshuar/go-hass-agent/internal/logging" @@ -124,6 +125,21 @@ func (c *Client) HassVersion(ctx context.Context) string { return config.Version } +func (c *Client) ProcessEvent(ctx context.Context, details event.Event) error { + req := &request{Data: details, RequestType: requestTypeEvent} + + if err := req.Validate(); err != nil { + return fmt.Errorf("validation failed: %w", err) + } + + _, err := send[eventResponse](ctx, c, req) + if err != nil { + return fmt.Errorf("failed to send event request: %w", err) + } + + return nil +} + func (c *Client) ProcessSensor(ctx context.Context, details sensor.Entity) error { if c.isDisabled(ctx, details) { logging.FromContext(ctx). diff --git a/internal/hass/event/event.go b/internal/hass/event/event.go new file mode 100644 index 000000000..fd2d76e91 --- /dev/null +++ b/internal/hass/event/event.go @@ -0,0 +1,11 @@ +// Copyright (c) 2024 Joshua Rich +// +// This software is released under the MIT License. +// https://opensource.org/licenses/MIT + +package event + +type Event struct { + EventData any `json:"event_data" validate:"required"` + EventType string `json:"event_type" validate:"required"` +} diff --git a/internal/hass/request.go b/internal/hass/request.go index 93e4b9aa5..e29166085 100644 --- a/internal/hass/request.go +++ b/internal/hass/request.go @@ -18,6 +18,7 @@ const ( requestTypeRegister = "register_sensor" requestTypeUpdate = "update_sensor_states" requestTypeLocation = "update_location" + requestTypeEvent = "fire_event" ) var ( diff --git a/internal/hass/response.go b/internal/hass/response.go index 1d62d80de..ef4f705c6 100644 --- a/internal/hass/response.go +++ b/internal/hass/response.go @@ -74,3 +74,5 @@ type locationResponse struct { func (r *locationResponse) updated() error { return r } + +type eventResponse struct{}