mirror of
https://github.com/Xevion/go-ha.git
synced 2025-12-07 07:15:12 -06:00
Add a way to fire Home Assistant events
This commit is contained in:
39
internal/services/event.go
Normal file
39
internal/services/event.go
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
package services
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"saml.dev/gome-assistant/internal"
|
||||||
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Event struct {
|
||||||
|
conn *ws.WebsocketWriter
|
||||||
|
ctx context.Context
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fire an event
|
||||||
|
type FireEventRequest struct {
|
||||||
|
Id int64 `json:"id"`
|
||||||
|
Type string `json:"type"` // always set to "fire_event"
|
||||||
|
EventType string `json:"event_type"`
|
||||||
|
EventData map[string]any `json:"event_data,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Public API */
|
||||||
|
|
||||||
|
// Fire an event. Takes an event type and an optional map that is sent
|
||||||
|
// as `event_data`.
|
||||||
|
func (e Event) Fire(eventType string, eventData ...map[string]any) {
|
||||||
|
req := FireEventRequest{
|
||||||
|
Id: internal.GetId(),
|
||||||
|
Type: "fire_event",
|
||||||
|
}
|
||||||
|
|
||||||
|
req.EventType = eventType
|
||||||
|
if len(eventData) != 0 {
|
||||||
|
req.EventData = eventData[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
e.conn.WriteMessage(req, e.ctx)
|
||||||
|
}
|
||||||
@@ -21,6 +21,7 @@ func BuildService[
|
|||||||
InputDatetime |
|
InputDatetime |
|
||||||
InputText |
|
InputText |
|
||||||
InputNumber |
|
InputNumber |
|
||||||
|
Event |
|
||||||
Notify |
|
Notify |
|
||||||
Number |
|
Number |
|
||||||
Scene |
|
Scene |
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ type Service struct {
|
|||||||
InputText *services.InputText
|
InputText *services.InputText
|
||||||
InputDatetime *services.InputDatetime
|
InputDatetime *services.InputDatetime
|
||||||
InputNumber *services.InputNumber
|
InputNumber *services.InputNumber
|
||||||
|
Event *services.Event
|
||||||
Notify *services.Notify
|
Notify *services.Notify
|
||||||
Number *services.Number
|
Number *services.Number
|
||||||
Scene *services.Scene
|
Scene *services.Scene
|
||||||
@@ -46,6 +47,7 @@ func newService(conn *ws.WebsocketWriter, ctx context.Context, httpClient *http.
|
|||||||
InputText: services.BuildService[services.InputText](conn, ctx),
|
InputText: services.BuildService[services.InputText](conn, ctx),
|
||||||
InputDatetime: services.BuildService[services.InputDatetime](conn, ctx),
|
InputDatetime: services.BuildService[services.InputDatetime](conn, ctx),
|
||||||
InputNumber: services.BuildService[services.InputNumber](conn, ctx),
|
InputNumber: services.BuildService[services.InputNumber](conn, ctx),
|
||||||
|
Event: services.BuildService[services.Event](conn, ctx),
|
||||||
Notify: services.BuildService[services.Notify](conn, ctx),
|
Notify: services.BuildService[services.Notify](conn, ctx),
|
||||||
Number: services.BuildService[services.Number](conn, ctx),
|
Number: services.BuildService[services.Number](conn, ctx),
|
||||||
Scene: services.BuildService[services.Scene](conn, ctx),
|
Scene: services.BuildService[services.Scene](conn, ctx),
|
||||||
|
|||||||
Reference in New Issue
Block a user