Files
go-ha/internal/services/services.go
2023-02-24 11:49:26 +01:00

55 lines
1.1 KiB
Go

package services
import (
"context"
"fmt"
"saml.dev/gome-assistant/internal"
ws "saml.dev/gome-assistant/internal/websocket"
)
func BuildService[
T AlarmControlPanel |
Cover |
Light |
HomeAssistant |
Lock |
MediaPlayer |
Switch |
InputBoolean |
InputButton |
InputDatetime |
InputText |
InputNumber |
Notify |
Number |
Scene |
TTS |
Vacuum,
](conn *ws.WebsocketWriter, ctx context.Context) *T {
return &T{conn: conn, ctx: ctx}
}
type BaseServiceRequest struct {
Id string `json:"id"`
RequestType string `json:"type"` // hardcoded "call_service"
Domain string `json:"domain"`
Service string `json:"service"`
ServiceData map[string]any `json:"service_data,omitempty"`
Target struct {
EntityId string `json:"entity_id,omitempty"`
} `json:"target,omitempty"`
}
func NewBaseServiceRequest(entityId string) BaseServiceRequest {
id := internal.GetId()
bsr := BaseServiceRequest{
Id: fmt.Sprint(id),
RequestType: "call_service",
}
if entityId != "" {
bsr.Target.EntityId = entityId
}
return bsr
}