mirror of
https://github.com/Xevion/go-ha.git
synced 2025-12-06 01:15:10 -06:00
Return Service errors
Additionally, removed the context that gets passed into the Services but isn't used in one of them. The websockets APIs also don't have any use for context.
This commit is contained in:
2
app.go
2
app.go
@@ -125,7 +125,7 @@ func NewApp(request NewAppRequest) (*App, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
wsWriter := &ws.WebsocketWriter{Conn: conn}
|
wsWriter := &ws.WebsocketWriter{Conn: conn}
|
||||||
service := newService(wsWriter, ctx, httpClient)
|
service := newService(wsWriter)
|
||||||
state, err := newState(httpClient, request.HomeZoneEntityId)
|
state, err := newState(httpClient, request.HomeZoneEntityId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,7 +8,6 @@ import (
|
|||||||
|
|
||||||
type AlarmControlPanel struct {
|
type AlarmControlPanel struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
@@ -18,7 +15,7 @@ type AlarmControlPanel struct {
|
|||||||
// Send the alarm the command for arm away.
|
// Send the alarm the command for arm away.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (acp AlarmControlPanel) ArmAway(entityId string, serviceData ...map[string]any) {
|
func (acp AlarmControlPanel) ArmAway(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "alarm_control_panel"
|
req.Domain = "alarm_control_panel"
|
||||||
req.Service = "alarm_arm_away"
|
req.Service = "alarm_arm_away"
|
||||||
@@ -26,13 +23,13 @@ func (acp AlarmControlPanel) ArmAway(entityId string, serviceData ...map[string]
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
acp.conn.WriteMessage(req, acp.ctx)
|
return acp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the alarm the command for arm away.
|
// Send the alarm the command for arm away.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (acp AlarmControlPanel) ArmWithCustomBypass(entityId string, serviceData ...map[string]any) {
|
func (acp AlarmControlPanel) ArmWithCustomBypass(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "alarm_control_panel"
|
req.Domain = "alarm_control_panel"
|
||||||
req.Service = "alarm_arm_custom_bypass"
|
req.Service = "alarm_arm_custom_bypass"
|
||||||
@@ -40,13 +37,13 @@ func (acp AlarmControlPanel) ArmWithCustomBypass(entityId string, serviceData ..
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
acp.conn.WriteMessage(req, acp.ctx)
|
return acp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the alarm the command for arm home.
|
// Send the alarm the command for arm home.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (acp AlarmControlPanel) ArmHome(entityId string, serviceData ...map[string]any) {
|
func (acp AlarmControlPanel) ArmHome(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "alarm_control_panel"
|
req.Domain = "alarm_control_panel"
|
||||||
req.Service = "alarm_arm_home"
|
req.Service = "alarm_arm_home"
|
||||||
@@ -54,13 +51,13 @@ func (acp AlarmControlPanel) ArmHome(entityId string, serviceData ...map[string]
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
acp.conn.WriteMessage(req, acp.ctx)
|
return acp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the alarm the command for arm night.
|
// Send the alarm the command for arm night.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (acp AlarmControlPanel) ArmNight(entityId string, serviceData ...map[string]any) {
|
func (acp AlarmControlPanel) ArmNight(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "alarm_control_panel"
|
req.Domain = "alarm_control_panel"
|
||||||
req.Service = "alarm_arm_night"
|
req.Service = "alarm_arm_night"
|
||||||
@@ -68,13 +65,13 @@ func (acp AlarmControlPanel) ArmNight(entityId string, serviceData ...map[string
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
acp.conn.WriteMessage(req, acp.ctx)
|
return acp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the alarm the command for arm vacation.
|
// Send the alarm the command for arm vacation.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (acp AlarmControlPanel) ArmVacation(entityId string, serviceData ...map[string]any) {
|
func (acp AlarmControlPanel) ArmVacation(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "alarm_control_panel"
|
req.Domain = "alarm_control_panel"
|
||||||
req.Service = "alarm_arm_vacation"
|
req.Service = "alarm_arm_vacation"
|
||||||
@@ -82,13 +79,13 @@ func (acp AlarmControlPanel) ArmVacation(entityId string, serviceData ...map[str
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
acp.conn.WriteMessage(req, acp.ctx)
|
return acp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the alarm the command for disarm.
|
// Send the alarm the command for disarm.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (acp AlarmControlPanel) Disarm(entityId string, serviceData ...map[string]any) {
|
func (acp AlarmControlPanel) Disarm(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "alarm_control_panel"
|
req.Domain = "alarm_control_panel"
|
||||||
req.Service = "alarm_disarm"
|
req.Service = "alarm_disarm"
|
||||||
@@ -96,13 +93,13 @@ func (acp AlarmControlPanel) Disarm(entityId string, serviceData ...map[string]a
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
acp.conn.WriteMessage(req, acp.ctx)
|
return acp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the alarm the command for trigger.
|
// Send the alarm the command for trigger.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (acp AlarmControlPanel) Trigger(entityId string, serviceData ...map[string]any) {
|
func (acp AlarmControlPanel) Trigger(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "alarm_control_panel"
|
req.Domain = "alarm_control_panel"
|
||||||
req.Service = "alarm_trigger"
|
req.Service = "alarm_trigger"
|
||||||
@@ -110,5 +107,5 @@ func (acp AlarmControlPanel) Trigger(entityId string, serviceData ...map[string]
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
acp.conn.WriteMessage(req, acp.ctx)
|
return acp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
"saml.dev/gome-assistant/types"
|
"saml.dev/gome-assistant/types"
|
||||||
)
|
)
|
||||||
@@ -11,25 +9,24 @@ import (
|
|||||||
|
|
||||||
type Climate struct {
|
type Climate struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
func (c Climate) SetFanMode(entityId string, fanMode string) {
|
func (c Climate) SetFanMode(entityId string, fanMode string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "climate"
|
req.Domain = "climate"
|
||||||
req.Service = "set_fan_mode"
|
req.Service = "set_fan_mode"
|
||||||
req.ServiceData = map[string]any{"fan_mode": fanMode}
|
req.ServiceData = map[string]any{"fan_mode": fanMode}
|
||||||
|
|
||||||
c.conn.WriteMessage(req, c.ctx)
|
return c.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c Climate) SetTemperature(entityId string, serviceData types.SetTemperatureRequest) {
|
func (c Climate) SetTemperature(entityId string, serviceData types.SetTemperatureRequest) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "climate"
|
req.Domain = "climate"
|
||||||
req.Service = "set_temperature"
|
req.Service = "set_temperature"
|
||||||
req.ServiceData = serviceData.ToJSON()
|
req.ServiceData = serviceData.ToJSON()
|
||||||
|
|
||||||
c.conn.WriteMessage(req, c.ctx)
|
return c.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,50 +8,49 @@ import (
|
|||||||
|
|
||||||
type Cover struct {
|
type Cover struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
// Close all or specified cover. Takes an entityId.
|
// Close all or specified cover. Takes an entityId.
|
||||||
func (c Cover) Close(entityId string) {
|
func (c Cover) Close(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "cover"
|
req.Domain = "cover"
|
||||||
req.Service = "close_cover"
|
req.Service = "close_cover"
|
||||||
|
|
||||||
c.conn.WriteMessage(req, c.ctx)
|
return c.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close all or specified cover tilt. Takes an entityId.
|
// Close all or specified cover tilt. Takes an entityId.
|
||||||
func (c Cover) CloseTilt(entityId string) {
|
func (c Cover) CloseTilt(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "cover"
|
req.Domain = "cover"
|
||||||
req.Service = "close_cover_tilt"
|
req.Service = "close_cover_tilt"
|
||||||
|
|
||||||
c.conn.WriteMessage(req, c.ctx)
|
return c.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Open all or specified cover. Takes an entityId.
|
// Open all or specified cover. Takes an entityId.
|
||||||
func (c Cover) Open(entityId string) {
|
func (c Cover) Open(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "cover"
|
req.Domain = "cover"
|
||||||
req.Service = "open_cover"
|
req.Service = "open_cover"
|
||||||
|
|
||||||
c.conn.WriteMessage(req, c.ctx)
|
return c.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Open all or specified cover tilt. Takes an entityId.
|
// Open all or specified cover tilt. Takes an entityId.
|
||||||
func (c Cover) OpenTilt(entityId string) {
|
func (c Cover) OpenTilt(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "cover"
|
req.Domain = "cover"
|
||||||
req.Service = "open_cover_tilt"
|
req.Service = "open_cover_tilt"
|
||||||
|
|
||||||
c.conn.WriteMessage(req, c.ctx)
|
return c.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move to specific position all or specified cover. Takes an entityId and an optional
|
// Move to specific position all or specified cover. Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (c Cover) SetPosition(entityId string, serviceData ...map[string]any) {
|
func (c Cover) SetPosition(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "cover"
|
req.Domain = "cover"
|
||||||
req.Service = "set_cover_position"
|
req.Service = "set_cover_position"
|
||||||
@@ -61,12 +58,12 @@ func (c Cover) SetPosition(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
c.conn.WriteMessage(req, c.ctx)
|
return c.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move to specific position all or specified cover tilt. Takes an entityId and an optional
|
// Move to specific position all or specified cover tilt. Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (c Cover) SetTiltPosition(entityId string, serviceData ...map[string]any) {
|
func (c Cover) SetTiltPosition(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "cover"
|
req.Domain = "cover"
|
||||||
req.Service = "set_cover_tilt_position"
|
req.Service = "set_cover_tilt_position"
|
||||||
@@ -74,41 +71,41 @@ func (c Cover) SetTiltPosition(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
c.conn.WriteMessage(req, c.ctx)
|
return c.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop a cover entity. Takes an entityId.
|
// Stop a cover entity. Takes an entityId.
|
||||||
func (c Cover) Stop(entityId string) {
|
func (c Cover) Stop(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "cover"
|
req.Domain = "cover"
|
||||||
req.Service = "stop_cover"
|
req.Service = "stop_cover"
|
||||||
|
|
||||||
c.conn.WriteMessage(req, c.ctx)
|
return c.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop a cover entity tilt. Takes an entityId.
|
// Stop a cover entity tilt. Takes an entityId.
|
||||||
func (c Cover) StopTilt(entityId string) {
|
func (c Cover) StopTilt(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "cover"
|
req.Domain = "cover"
|
||||||
req.Service = "stop_cover_tilt"
|
req.Service = "stop_cover_tilt"
|
||||||
|
|
||||||
c.conn.WriteMessage(req, c.ctx)
|
return c.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle a cover open/closed. Takes an entityId.
|
// Toggle a cover open/closed. Takes an entityId.
|
||||||
func (c Cover) Toggle(entityId string) {
|
func (c Cover) Toggle(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "cover"
|
req.Domain = "cover"
|
||||||
req.Service = "toggle"
|
req.Service = "toggle"
|
||||||
|
|
||||||
c.conn.WriteMessage(req, c.ctx)
|
return c.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle a cover tilt open/closed. Takes an entityId.
|
// Toggle a cover tilt open/closed. Takes an entityId.
|
||||||
func (c Cover) ToggleTilt(entityId string) {
|
func (c Cover) ToggleTilt(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "cover"
|
req.Domain = "cover"
|
||||||
req.Service = "toggle_cover_tilt"
|
req.Service = "toggle_cover_tilt"
|
||||||
|
|
||||||
c.conn.WriteMessage(req, c.ctx)
|
return c.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,12 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
"saml.dev/gome-assistant/internal"
|
"saml.dev/gome-assistant/internal"
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Event struct {
|
type Event struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fire an event
|
// Fire an event
|
||||||
@@ -24,7 +21,7 @@ type FireEventRequest struct {
|
|||||||
|
|
||||||
// Fire an event. Takes an event type and an optional map that is sent
|
// Fire an event. Takes an event type and an optional map that is sent
|
||||||
// as `event_data`.
|
// as `event_data`.
|
||||||
func (e Event) Fire(eventType string, eventData ...map[string]any) {
|
func (e Event) Fire(eventType string, eventData ...map[string]any) error {
|
||||||
req := FireEventRequest{
|
req := FireEventRequest{
|
||||||
Id: internal.GetId(),
|
Id: internal.GetId(),
|
||||||
Type: "fire_event",
|
Type: "fire_event",
|
||||||
@@ -35,5 +32,5 @@ func (e Event) Fire(eventType string, eventData ...map[string]any) {
|
|||||||
req.EventData = eventData[0]
|
req.EventData = eventData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
e.conn.WriteMessage(req, e.ctx)
|
return e.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,16 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
type HomeAssistant struct {
|
type HomeAssistant struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TurnOn a Home Assistant entity. Takes an entityId and an optional
|
// TurnOn a Home Assistant entity. Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (ha *HomeAssistant) TurnOn(entityId string, serviceData ...map[string]any) {
|
func (ha *HomeAssistant) TurnOn(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "homeassistant"
|
req.Domain = "homeassistant"
|
||||||
req.Service = "turn_on"
|
req.Service = "turn_on"
|
||||||
@@ -21,12 +18,12 @@ func (ha *HomeAssistant) TurnOn(entityId string, serviceData ...map[string]any)
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
ha.conn.WriteMessage(req, ha.ctx)
|
return ha.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle a Home Assistant entity. Takes an entityId and an optional
|
// Toggle a Home Assistant entity. Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (ha *HomeAssistant) Toggle(entityId string, serviceData ...map[string]any) {
|
func (ha *HomeAssistant) Toggle(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "homeassistant"
|
req.Domain = "homeassistant"
|
||||||
req.Service = "toggle"
|
req.Service = "toggle"
|
||||||
@@ -34,13 +31,13 @@ func (ha *HomeAssistant) Toggle(entityId string, serviceData ...map[string]any)
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
ha.conn.WriteMessage(req, ha.ctx)
|
return ha.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ha *HomeAssistant) TurnOff(entityId string) {
|
func (ha *HomeAssistant) TurnOff(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "homeassistant"
|
req.Domain = "homeassistant"
|
||||||
req.Service = "turn_off"
|
req.Service = "turn_off"
|
||||||
|
|
||||||
ha.conn.WriteMessage(req, ha.ctx)
|
return ha.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,37 +8,36 @@ import (
|
|||||||
|
|
||||||
type InputBoolean struct {
|
type InputBoolean struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
func (ib InputBoolean) TurnOn(entityId string) {
|
func (ib InputBoolean) TurnOn(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "input_boolean"
|
req.Domain = "input_boolean"
|
||||||
req.Service = "turn_on"
|
req.Service = "turn_on"
|
||||||
|
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ib InputBoolean) Toggle(entityId string) {
|
func (ib InputBoolean) Toggle(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "input_boolean"
|
req.Domain = "input_boolean"
|
||||||
req.Service = "toggle"
|
req.Service = "toggle"
|
||||||
|
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ib InputBoolean) TurnOff(entityId string) {
|
func (ib InputBoolean) TurnOff(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "input_boolean"
|
req.Domain = "input_boolean"
|
||||||
req.Service = "turn_off"
|
req.Service = "turn_off"
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ib InputBoolean) Reload() {
|
func (ib InputBoolean) Reload() error {
|
||||||
req := NewBaseServiceRequest("")
|
req := NewBaseServiceRequest("")
|
||||||
req.Domain = "input_boolean"
|
req.Domain = "input_boolean"
|
||||||
req.Service = "reload"
|
req.Service = "reload"
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,22 +8,21 @@ import (
|
|||||||
|
|
||||||
type InputButton struct {
|
type InputButton struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
func (ib InputButton) Press(entityId string) {
|
func (ib InputButton) Press(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "input_button"
|
req.Domain = "input_button"
|
||||||
req.Service = "press"
|
req.Service = "press"
|
||||||
|
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ib InputButton) Reload() {
|
func (ib InputButton) Reload() error {
|
||||||
req := NewBaseServiceRequest("")
|
req := NewBaseServiceRequest("")
|
||||||
req.Domain = "input_button"
|
req.Domain = "input_button"
|
||||||
req.Service = "reload"
|
req.Service = "reload"
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -12,12 +11,11 @@ import (
|
|||||||
|
|
||||||
type InputDatetime struct {
|
type InputDatetime struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
func (ib InputDatetime) Set(entityId string, value time.Time) {
|
func (ib InputDatetime) Set(entityId string, value time.Time) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "input_datetime"
|
req.Domain = "input_datetime"
|
||||||
req.Service = "set_datetime"
|
req.Service = "set_datetime"
|
||||||
@@ -25,12 +23,12 @@ func (ib InputDatetime) Set(entityId string, value time.Time) {
|
|||||||
"timestamp": fmt.Sprint(value.Unix()),
|
"timestamp": fmt.Sprint(value.Unix()),
|
||||||
}
|
}
|
||||||
|
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ib InputDatetime) Reload() {
|
func (ib InputDatetime) Reload() error {
|
||||||
req := NewBaseServiceRequest("")
|
req := NewBaseServiceRequest("")
|
||||||
req.Domain = "input_datetime"
|
req.Domain = "input_datetime"
|
||||||
req.Service = "reload"
|
req.Service = "reload"
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,39 +8,38 @@ import (
|
|||||||
|
|
||||||
type InputNumber struct {
|
type InputNumber struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
func (ib InputNumber) Set(entityId string, value float32) {
|
func (ib InputNumber) Set(entityId string, value float32) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "input_number"
|
req.Domain = "input_number"
|
||||||
req.Service = "set_value"
|
req.Service = "set_value"
|
||||||
req.ServiceData = map[string]any{"value": value}
|
req.ServiceData = map[string]any{"value": value}
|
||||||
|
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ib InputNumber) Increment(entityId string) {
|
func (ib InputNumber) Increment(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "input_number"
|
req.Domain = "input_number"
|
||||||
req.Service = "increment"
|
req.Service = "increment"
|
||||||
|
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ib InputNumber) Decrement(entityId string) {
|
func (ib InputNumber) Decrement(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "input_number"
|
req.Domain = "input_number"
|
||||||
req.Service = "decrement"
|
req.Service = "decrement"
|
||||||
|
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ib InputNumber) Reload() {
|
func (ib InputNumber) Reload() error {
|
||||||
req := NewBaseServiceRequest("")
|
req := NewBaseServiceRequest("")
|
||||||
req.Domain = "input_number"
|
req.Domain = "input_number"
|
||||||
req.Service = "reload"
|
req.Service = "reload"
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,12 +8,11 @@ import (
|
|||||||
|
|
||||||
type InputText struct {
|
type InputText struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
func (ib InputText) Set(entityId string, value string) {
|
func (ib InputText) Set(entityId string, value string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "input_text"
|
req.Domain = "input_text"
|
||||||
req.Service = "set_value"
|
req.Service = "set_value"
|
||||||
@@ -23,12 +20,12 @@ func (ib InputText) Set(entityId string, value string) {
|
|||||||
"value": value,
|
"value": value,
|
||||||
}
|
}
|
||||||
|
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ib InputText) Reload() {
|
func (ib InputText) Reload() error {
|
||||||
req := NewBaseServiceRequest("")
|
req := NewBaseServiceRequest("")
|
||||||
req.Domain = "input_text"
|
req.Domain = "input_text"
|
||||||
req.Service = "reload"
|
req.Service = "reload"
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,14 +8,13 @@ import (
|
|||||||
|
|
||||||
type Light struct {
|
type Light struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
// TurnOn a light entity. Takes an entityId and an optional
|
// TurnOn a light entity. Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (l Light) TurnOn(entityId string, serviceData ...map[string]any) {
|
func (l Light) TurnOn(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "light"
|
req.Domain = "light"
|
||||||
req.Service = "turn_on"
|
req.Service = "turn_on"
|
||||||
@@ -25,12 +22,12 @@ func (l Light) TurnOn(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
l.conn.WriteMessage(req, l.ctx)
|
return l.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle a light entity. Takes an entityId and an optional
|
// Toggle a light entity. Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (l Light) Toggle(entityId string, serviceData ...map[string]any) {
|
func (l Light) Toggle(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "light"
|
req.Domain = "light"
|
||||||
req.Service = "toggle"
|
req.Service = "toggle"
|
||||||
@@ -38,12 +35,12 @@ func (l Light) Toggle(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
l.conn.WriteMessage(req, l.ctx)
|
return l.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l Light) TurnOff(entityId string) {
|
func (l Light) TurnOff(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "light"
|
req.Domain = "light"
|
||||||
req.Service = "turn_off"
|
req.Service = "turn_off"
|
||||||
l.conn.WriteMessage(req, l.ctx)
|
return l.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,14 +8,13 @@ import (
|
|||||||
|
|
||||||
type Lock struct {
|
type Lock struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
// Lock a lock entity. Takes an entityId and an optional
|
// Lock a lock entity. Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (l Lock) Lock(entityId string, serviceData ...map[string]any) {
|
func (l Lock) Lock(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "lock"
|
req.Domain = "lock"
|
||||||
req.Service = "lock"
|
req.Service = "lock"
|
||||||
@@ -25,12 +22,12 @@ func (l Lock) Lock(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
l.conn.WriteMessage(req, l.ctx)
|
return l.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unlock a lock entity. Takes an entityId and an optional
|
// Unlock a lock entity. Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (l Lock) Unlock(entityId string, serviceData ...map[string]any) {
|
func (l Lock) Unlock(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "lock"
|
req.Domain = "lock"
|
||||||
req.Service = "unlock"
|
req.Service = "unlock"
|
||||||
@@ -38,5 +35,5 @@ func (l Lock) Unlock(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
l.conn.WriteMessage(req, l.ctx)
|
return l.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,25 +8,24 @@ import (
|
|||||||
|
|
||||||
type MediaPlayer struct {
|
type MediaPlayer struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
// Send the media player the command to clear players playlist.
|
// Send the media player the command to clear players playlist.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (mp MediaPlayer) ClearPlaylist(entityId string) {
|
func (mp MediaPlayer) ClearPlaylist(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "clear_playlist"
|
req.Service = "clear_playlist"
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Group players together. Only works on platforms with support for player groups.
|
// Group players together. Only works on platforms with support for player groups.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (mp MediaPlayer) Join(entityId string, serviceData ...map[string]any) {
|
func (mp MediaPlayer) Join(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "join"
|
req.Service = "join"
|
||||||
@@ -36,63 +33,63 @@ func (mp MediaPlayer) Join(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the media player the command for next track.
|
// Send the media player the command for next track.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (mp MediaPlayer) Next(entityId string) {
|
func (mp MediaPlayer) Next(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "media_next_track"
|
req.Service = "media_next_track"
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the media player the command for pause.
|
// Send the media player the command for pause.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (mp MediaPlayer) Pause(entityId string) {
|
func (mp MediaPlayer) Pause(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "media_pause"
|
req.Service = "media_pause"
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the media player the command for play.
|
// Send the media player the command for play.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (mp MediaPlayer) Play(entityId string) {
|
func (mp MediaPlayer) Play(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "media_play"
|
req.Service = "media_play"
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle media player play/pause state.
|
// Toggle media player play/pause state.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (mp MediaPlayer) PlayPause(entityId string) {
|
func (mp MediaPlayer) PlayPause(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "media_play_pause"
|
req.Service = "media_play_pause"
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the media player the command for previous track.
|
// Send the media player the command for previous track.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (mp MediaPlayer) Previous(entityId string) {
|
func (mp MediaPlayer) Previous(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "media_previous_track"
|
req.Service = "media_previous_track"
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the media player the command to seek in current playing media.
|
// Send the media player the command to seek in current playing media.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (mp MediaPlayer) Seek(entityId string, serviceData ...map[string]any) {
|
func (mp MediaPlayer) Seek(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "media_seek"
|
req.Service = "media_seek"
|
||||||
@@ -100,23 +97,23 @@ func (mp MediaPlayer) Seek(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the media player the stop command.
|
// Send the media player the stop command.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (mp MediaPlayer) Stop(entityId string) {
|
func (mp MediaPlayer) Stop(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "media_stop"
|
req.Service = "media_stop"
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the media player the command for playing media.
|
// Send the media player the command for playing media.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (mp MediaPlayer) PlayMedia(entityId string, serviceData ...map[string]any) {
|
func (mp MediaPlayer) PlayMedia(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "play_media"
|
req.Service = "play_media"
|
||||||
@@ -124,12 +121,12 @@ func (mp MediaPlayer) PlayMedia(entityId string, serviceData ...map[string]any)
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set repeat mode. Takes an entityId and an optional
|
// Set repeat mode. Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (mp MediaPlayer) RepeatSet(entityId string, serviceData ...map[string]any) {
|
func (mp MediaPlayer) RepeatSet(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "repeat_set"
|
req.Service = "repeat_set"
|
||||||
@@ -137,13 +134,13 @@ func (mp MediaPlayer) RepeatSet(entityId string, serviceData ...map[string]any)
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the media player the command to change sound mode.
|
// Send the media player the command to change sound mode.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (mp MediaPlayer) SelectSoundMode(entityId string, serviceData ...map[string]any) {
|
func (mp MediaPlayer) SelectSoundMode(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "select_sound_mode"
|
req.Service = "select_sound_mode"
|
||||||
@@ -151,13 +148,13 @@ func (mp MediaPlayer) SelectSoundMode(entityId string, serviceData ...map[string
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the media player the command to change input source.
|
// Send the media player the command to change input source.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (mp MediaPlayer) SelectSource(entityId string, serviceData ...map[string]any) {
|
func (mp MediaPlayer) SelectSource(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "select_source"
|
req.Service = "select_source"
|
||||||
@@ -165,13 +162,13 @@ func (mp MediaPlayer) SelectSource(entityId string, serviceData ...map[string]an
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set shuffling state.
|
// Set shuffling state.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (mp MediaPlayer) Shuffle(entityId string, serviceData ...map[string]any) {
|
func (mp MediaPlayer) Shuffle(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "shuffle_set"
|
req.Service = "shuffle_set"
|
||||||
@@ -179,64 +176,64 @@ func (mp MediaPlayer) Shuffle(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggles a media player power state.
|
// Toggles a media player power state.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (mp MediaPlayer) Toggle(entityId string) {
|
func (mp MediaPlayer) Toggle(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "toggle"
|
req.Service = "toggle"
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turn a media player power off.
|
// Turn a media player power off.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (mp MediaPlayer) TurnOff(entityId string) {
|
func (mp MediaPlayer) TurnOff(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "turn_off"
|
req.Service = "turn_off"
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turn a media player power on.
|
// Turn a media player power on.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (mp MediaPlayer) TurnOn(entityId string) {
|
func (mp MediaPlayer) TurnOn(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "turn_on"
|
req.Service = "turn_on"
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unjoin the player from a group. Only works on
|
// Unjoin the player from a group. Only works on
|
||||||
// platforms with support for player groups.
|
// platforms with support for player groups.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (mp MediaPlayer) Unjoin(entityId string) {
|
func (mp MediaPlayer) Unjoin(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "unjoin"
|
req.Service = "unjoin"
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turn a media player volume down.
|
// Turn a media player volume down.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (mp MediaPlayer) VolumeDown(entityId string) {
|
func (mp MediaPlayer) VolumeDown(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "volume_down"
|
req.Service = "volume_down"
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mute a media player's volume.
|
// Mute a media player's volume.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (mp MediaPlayer) VolumeMute(entityId string, serviceData ...map[string]any) {
|
func (mp MediaPlayer) VolumeMute(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "volume_mute"
|
req.Service = "volume_mute"
|
||||||
@@ -244,13 +241,13 @@ func (mp MediaPlayer) VolumeMute(entityId string, serviceData ...map[string]any)
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set a media player's volume level.
|
// Set a media player's volume level.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (mp MediaPlayer) VolumeSet(entityId string, serviceData ...map[string]any) {
|
func (mp MediaPlayer) VolumeSet(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "volume_set"
|
req.Service = "volume_set"
|
||||||
@@ -258,15 +255,15 @@ func (mp MediaPlayer) VolumeSet(entityId string, serviceData ...map[string]any)
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turn a media player volume up.
|
// Turn a media player volume up.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (mp MediaPlayer) VolumeUp(entityId string) {
|
func (mp MediaPlayer) VolumeUp(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "media_player"
|
req.Domain = "media_player"
|
||||||
req.Service = "volume_up"
|
req.Service = "volume_up"
|
||||||
|
|
||||||
mp.conn.WriteMessage(req, mp.ctx)
|
return mp.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,16 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
"saml.dev/gome-assistant/types"
|
"saml.dev/gome-assistant/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Notify struct {
|
type Notify struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send a notification. Takes a types.NotifyRequest.
|
// Notify sends a notification. Takes a types.NotifyRequest.
|
||||||
func (ha *Notify) Notify(reqData types.NotifyRequest) {
|
func (ha *Notify) Notify(reqData types.NotifyRequest) error {
|
||||||
req := NewBaseServiceRequest("")
|
req := NewBaseServiceRequest("")
|
||||||
req.Domain = "notify"
|
req.Domain = "notify"
|
||||||
req.Service = reqData.ServiceName
|
req.Service = reqData.ServiceName
|
||||||
@@ -26,5 +23,5 @@ func (ha *Notify) Notify(reqData types.NotifyRequest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
req.ServiceData = serviceData
|
req.ServiceData = serviceData
|
||||||
ha.conn.WriteMessage(req, ha.ctx)
|
return ha.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,25 +1,24 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
/* Structs */
|
|
||||||
|
|
||||||
type Number struct {
|
type Number struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
func (ib Number) SetValue(entityId string, value float32) error {
|
||||||
|
|
||||||
func (ib Number) SetValue(entityId string, value float32) {
|
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "number"
|
req.Domain = "number"
|
||||||
req.Service = "set_value"
|
req.Service = "set_value"
|
||||||
req.ServiceData = map[string]any{"value": value}
|
req.ServiceData = map[string]any{"value": value}
|
||||||
|
|
||||||
ib.conn.WriteMessage(req, ib.ctx)
|
return ib.conn.WriteMessage(req)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ib Number) MustSetValue(entityId string, value float32) {
|
||||||
|
if err := ib.SetValue(entityId, value); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,13 +8,12 @@ import (
|
|||||||
|
|
||||||
type Scene struct {
|
type Scene struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
// Apply a scene. Takes map that is translated into service_data.
|
// Apply a scene. Takes map that is translated into service_data.
|
||||||
func (s Scene) Apply(serviceData ...map[string]any) {
|
func (s Scene) Apply(serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest("")
|
req := NewBaseServiceRequest("")
|
||||||
req.Domain = "scene"
|
req.Domain = "scene"
|
||||||
req.Service = "apply"
|
req.Service = "apply"
|
||||||
@@ -24,12 +21,12 @@ func (s Scene) Apply(serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
s.conn.WriteMessage(req, s.ctx)
|
return s.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a scene entity. Takes an entityId and an optional
|
// Create a scene entity. Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (s Scene) Create(entityId string, serviceData ...map[string]any) {
|
func (s Scene) Create(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "scene"
|
req.Domain = "scene"
|
||||||
req.Service = "create"
|
req.Service = "create"
|
||||||
@@ -37,21 +34,21 @@ func (s Scene) Create(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
s.conn.WriteMessage(req, s.ctx)
|
return s.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reload the scenes.
|
// Reload the scenes.
|
||||||
func (s Scene) Reload() {
|
func (s Scene) Reload() error {
|
||||||
req := NewBaseServiceRequest("")
|
req := NewBaseServiceRequest("")
|
||||||
req.Domain = "scene"
|
req.Domain = "scene"
|
||||||
req.Service = "reload"
|
req.Service = "reload"
|
||||||
|
|
||||||
s.conn.WriteMessage(req, s.ctx)
|
return s.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TurnOn a scene entity. Takes an entityId and an optional
|
// TurnOn a scene entity. Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (s Scene) TurnOn(entityId string, serviceData ...map[string]any) {
|
func (s Scene) TurnOn(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "scene"
|
req.Domain = "scene"
|
||||||
req.Service = "turn_on"
|
req.Service = "turn_on"
|
||||||
@@ -59,5 +56,5 @@ func (s Scene) TurnOn(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
s.conn.WriteMessage(req, s.ctx)
|
return s.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,43 +8,42 @@ import (
|
|||||||
|
|
||||||
type Script struct {
|
type Script struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
// Reload a script that was created in the HA UI.
|
// Reload a script that was created in the HA UI.
|
||||||
func (s Script) Reload(entityId string) {
|
func (s Script) Reload(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "script"
|
req.Domain = "script"
|
||||||
req.Service = "reload"
|
req.Service = "reload"
|
||||||
|
|
||||||
s.conn.WriteMessage(req, s.ctx)
|
return s.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle a script that was created in the HA UI.
|
// Toggle a script that was created in the HA UI.
|
||||||
func (s Script) Toggle(entityId string) {
|
func (s Script) Toggle(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "script"
|
req.Domain = "script"
|
||||||
req.Service = "toggle"
|
req.Service = "toggle"
|
||||||
|
|
||||||
s.conn.WriteMessage(req, s.ctx)
|
return s.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turn off a script that was created in the HA UI.
|
// TurnOff a script that was created in the HA UI.
|
||||||
func (s Script) TurnOff() {
|
func (s Script) TurnOff() error {
|
||||||
req := NewBaseServiceRequest("")
|
req := NewBaseServiceRequest("")
|
||||||
req.Domain = "script"
|
req.Domain = "script"
|
||||||
req.Service = "turn_off"
|
req.Service = "turn_off"
|
||||||
|
|
||||||
s.conn.WriteMessage(req, s.ctx)
|
return s.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turn on a script that was created in the HA UI.
|
// TurnOn a script that was created in the HA UI.
|
||||||
func (s Script) TurnOn(entityId string) {
|
func (s Script) TurnOn(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "script"
|
req.Domain = "script"
|
||||||
req.Service = "turn_on"
|
req.Service = "turn_on"
|
||||||
|
|
||||||
s.conn.WriteMessage(req, s.ctx)
|
return s.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
"saml.dev/gome-assistant/internal"
|
"saml.dev/gome-assistant/internal"
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
@@ -29,8 +27,8 @@ func BuildService[
|
|||||||
TTS |
|
TTS |
|
||||||
Vacuum |
|
Vacuum |
|
||||||
ZWaveJS,
|
ZWaveJS,
|
||||||
](conn *ws.WebsocketWriter, ctx context.Context) *T {
|
](conn *ws.WebsocketWriter) *T {
|
||||||
return &T{conn: conn, ctx: ctx}
|
return &T{conn: conn}
|
||||||
}
|
}
|
||||||
|
|
||||||
type BaseServiceRequest struct {
|
type BaseServiceRequest struct {
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,30 +8,30 @@ import (
|
|||||||
|
|
||||||
type Switch struct {
|
type Switch struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
func (s Switch) TurnOn(entityId string) {
|
func (s Switch) TurnOn(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "switch"
|
req.Domain = "switch"
|
||||||
req.Service = "turn_on"
|
req.Service = "turn_on"
|
||||||
|
|
||||||
s.conn.WriteMessage(req, s.ctx)
|
return s.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Switch) Toggle(entityId string) {
|
func (s Switch) Toggle(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "switch"
|
req.Domain = "switch"
|
||||||
req.Service = "toggle"
|
req.Service = "toggle"
|
||||||
|
|
||||||
s.conn.WriteMessage(req, s.ctx)
|
return s.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Switch) TurnOff(entityId string) {
|
func (s Switch) TurnOff(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "switch"
|
req.Domain = "switch"
|
||||||
req.Service = "turn_off"
|
req.Service = "turn_off"
|
||||||
s.conn.WriteMessage(req, s.ctx)
|
|
||||||
|
return s.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,24 +8,23 @@ import (
|
|||||||
|
|
||||||
type TTS struct {
|
type TTS struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
// Remove all text-to-speech cache files and RAM cache.
|
// Remove all text-to-speech cache files and RAM cache.
|
||||||
func (tts TTS) ClearCache() {
|
func (tts TTS) ClearCache() error {
|
||||||
req := NewBaseServiceRequest("")
|
req := NewBaseServiceRequest("")
|
||||||
req.Domain = "tts"
|
req.Domain = "tts"
|
||||||
req.Service = "clear_cache"
|
req.Service = "clear_cache"
|
||||||
|
|
||||||
tts.conn.WriteMessage(req, tts.ctx)
|
return tts.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Say something using text-to-speech on a media player with cloud.
|
// Say something using text-to-speech on a media player with cloud.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (tts TTS) CloudSay(entityId string, serviceData ...map[string]any) {
|
func (tts TTS) CloudSay(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "tts"
|
req.Domain = "tts"
|
||||||
req.Service = "cloud_say"
|
req.Service = "cloud_say"
|
||||||
@@ -35,13 +32,13 @@ func (tts TTS) CloudSay(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
tts.conn.WriteMessage(req, tts.ctx)
|
return tts.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Say something using text-to-speech on a media player with google_translate.
|
// Say something using text-to-speech on a media player with google_translate.
|
||||||
// Takes an entityId and an optional
|
// Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (tts TTS) GoogleTranslateSay(entityId string, serviceData ...map[string]any) {
|
func (tts TTS) GoogleTranslateSay(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "tts"
|
req.Domain = "tts"
|
||||||
req.Service = "google_translate_say"
|
req.Service = "google_translate_say"
|
||||||
@@ -49,5 +46,5 @@ func (tts TTS) GoogleTranslateSay(entityId string, serviceData ...map[string]any
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
tts.conn.WriteMessage(req, tts.ctx)
|
return tts.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,54 +8,53 @@ import (
|
|||||||
|
|
||||||
type Vacuum struct {
|
type Vacuum struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
// Tell the vacuum cleaner to do a spot clean-up.
|
// Tell the vacuum cleaner to do a spot clean-up.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (v Vacuum) CleanSpot(entityId string) {
|
func (v Vacuum) CleanSpot(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "vacuum"
|
req.Domain = "vacuum"
|
||||||
req.Service = "clean_spot"
|
req.Service = "clean_spot"
|
||||||
|
|
||||||
v.conn.WriteMessage(req, v.ctx)
|
return v.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Locate the vacuum cleaner robot.
|
// Locate the vacuum cleaner robot.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (v Vacuum) Locate(entityId string) {
|
func (v Vacuum) Locate(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "vacuum"
|
req.Domain = "vacuum"
|
||||||
req.Service = "locate"
|
req.Service = "locate"
|
||||||
|
|
||||||
v.conn.WriteMessage(req, v.ctx)
|
return v.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pause the cleaning task.
|
// Pause the cleaning task.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (v Vacuum) Pause(entityId string) {
|
func (v Vacuum) Pause(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "vacuum"
|
req.Domain = "vacuum"
|
||||||
req.Service = "pause"
|
req.Service = "pause"
|
||||||
|
|
||||||
v.conn.WriteMessage(req, v.ctx)
|
return v.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tell the vacuum cleaner to return to its dock.
|
// Tell the vacuum cleaner to return to its dock.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (v Vacuum) ReturnToBase(entityId string) {
|
func (v Vacuum) ReturnToBase(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "vacuum"
|
req.Domain = "vacuum"
|
||||||
req.Service = "return_to_base"
|
req.Service = "return_to_base"
|
||||||
|
|
||||||
v.conn.WriteMessage(req, v.ctx)
|
return v.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send a raw command to the vacuum cleaner. Takes an entityId and an optional
|
// Send a raw command to the vacuum cleaner. Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (v Vacuum) SendCommand(entityId string, serviceData ...map[string]any) {
|
func (v Vacuum) SendCommand(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "vacuum"
|
req.Domain = "vacuum"
|
||||||
req.Service = "send_command"
|
req.Service = "send_command"
|
||||||
@@ -65,12 +62,12 @@ func (v Vacuum) SendCommand(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
v.conn.WriteMessage(req, v.ctx)
|
return v.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the fan speed of the vacuum cleaner. Takes an entityId and an optional
|
// Set the fan speed of the vacuum cleaner. Takes an entityId and an optional
|
||||||
// map that is translated into service_data.
|
// map that is translated into service_data.
|
||||||
func (v Vacuum) SetFanSpeed(entityId string, serviceData ...map[string]any) {
|
func (v Vacuum) SetFanSpeed(entityId string, serviceData ...map[string]any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "vacuum"
|
req.Domain = "vacuum"
|
||||||
req.Service = "set_fan_speed"
|
req.Service = "set_fan_speed"
|
||||||
@@ -79,55 +76,55 @@ func (v Vacuum) SetFanSpeed(entityId string, serviceData ...map[string]any) {
|
|||||||
req.ServiceData = serviceData[0]
|
req.ServiceData = serviceData[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
v.conn.WriteMessage(req, v.ctx)
|
return v.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start or resume the cleaning task.
|
// Start or resume the cleaning task.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (v Vacuum) Start(entityId string) {
|
func (v Vacuum) Start(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "vacuum"
|
req.Domain = "vacuum"
|
||||||
req.Service = "start"
|
req.Service = "start"
|
||||||
|
|
||||||
v.conn.WriteMessage(req, v.ctx)
|
return v.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start, pause, or resume the cleaning task.
|
// Start, pause, or resume the cleaning task.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (v Vacuum) StartPause(entityId string) {
|
func (v Vacuum) StartPause(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "vacuum"
|
req.Domain = "vacuum"
|
||||||
req.Service = "start_pause"
|
req.Service = "start_pause"
|
||||||
|
|
||||||
v.conn.WriteMessage(req, v.ctx)
|
return v.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop the current cleaning task.
|
// Stop the current cleaning task.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (v Vacuum) Stop(entityId string) {
|
func (v Vacuum) Stop(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "vacuum"
|
req.Domain = "vacuum"
|
||||||
req.Service = "stop"
|
req.Service = "stop"
|
||||||
|
|
||||||
v.conn.WriteMessage(req, v.ctx)
|
return v.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop the current cleaning task and return to home.
|
// Stop the current cleaning task and return to home.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (v Vacuum) TurnOff(entityId string) {
|
func (v Vacuum) TurnOff(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "vacuum"
|
req.Domain = "vacuum"
|
||||||
req.Service = "turn_off"
|
req.Service = "turn_off"
|
||||||
|
|
||||||
v.conn.WriteMessage(req, v.ctx)
|
return v.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start a new cleaning task.
|
// Start a new cleaning task.
|
||||||
// Takes an entityId.
|
// Takes an entityId.
|
||||||
func (v Vacuum) TurnOn(entityId string) {
|
func (v Vacuum) TurnOn(entityId string) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "vacuum"
|
req.Domain = "vacuum"
|
||||||
req.Service = "turn_on"
|
req.Service = "turn_on"
|
||||||
|
|
||||||
v.conn.WriteMessage(req, v.ctx)
|
return v.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,13 +8,12 @@ import (
|
|||||||
|
|
||||||
type ZWaveJS struct {
|
type ZWaveJS struct {
|
||||||
conn *ws.WebsocketWriter
|
conn *ws.WebsocketWriter
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
||||||
// ZWaveJS bulk_set_partial_config_parameters service.
|
// ZWaveJS bulk_set_partial_config_parameters service.
|
||||||
func (zw ZWaveJS) BulkSetPartialConfigParam(entityId string, parameter int, value any) {
|
func (zw ZWaveJS) BulkSetPartialConfigParam(entityId string, parameter int, value any) error {
|
||||||
req := NewBaseServiceRequest(entityId)
|
req := NewBaseServiceRequest(entityId)
|
||||||
req.Domain = "zwave_js"
|
req.Domain = "zwave_js"
|
||||||
req.Service = "bulk_set_partial_config_parameters"
|
req.Service = "bulk_set_partial_config_parameters"
|
||||||
@@ -25,5 +22,5 @@ func (zw ZWaveJS) BulkSetPartialConfigParam(entityId string, parameter int, valu
|
|||||||
"value": value,
|
"value": value,
|
||||||
}
|
}
|
||||||
|
|
||||||
zw.conn.WriteMessage(req, zw.ctx)
|
return zw.conn.WriteMessage(req)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ type ChanMsg struct {
|
|||||||
|
|
||||||
func ListenWebsocket(conn *websocket.Conn, ctx context.Context, c chan ChanMsg) {
|
func ListenWebsocket(conn *websocket.Conn, ctx context.Context, c chan ChanMsg) {
|
||||||
for {
|
for {
|
||||||
bytes, err := ReadMessage(conn, ctx)
|
bytes, err := ReadMessage(conn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("Error reading from websocket:", err)
|
slog.Error("Error reading from websocket", "err", err)
|
||||||
close(c)
|
close(c)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
|
|
||||||
i "saml.dev/gome-assistant/internal"
|
i "saml.dev/gome-assistant/internal"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -29,19 +30,14 @@ type WebsocketWriter struct {
|
|||||||
mutex sync.Mutex
|
mutex sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *WebsocketWriter) WriteMessage(msg interface{}, ctx context.Context) error {
|
func (w *WebsocketWriter) WriteMessage(msg any) error {
|
||||||
w.mutex.Lock()
|
w.mutex.Lock()
|
||||||
defer w.mutex.Unlock()
|
defer w.mutex.Unlock()
|
||||||
|
|
||||||
err := w.Conn.WriteJSON(msg)
|
return w.Conn.WriteJSON(msg)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReadMessage(conn *websocket.Conn, ctx context.Context) ([]byte, error) {
|
func ReadMessage(conn *websocket.Conn) ([]byte, error) {
|
||||||
_, msg, err := conn.ReadMessage()
|
_, msg, err := conn.ReadMessage()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte{}, err
|
return []byte{}, err
|
||||||
@@ -72,7 +68,7 @@ func ConnectionFromUri(uri, authToken string) (*websocket.Conn, context.Context,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Read auth_required message
|
// Read auth_required message
|
||||||
_, err = ReadMessage(conn, ctx)
|
_, err = ReadMessage(conn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctxCancel()
|
ctxCancel()
|
||||||
slog.Error("Unknown error creating websocket client\n")
|
slog.Error("Unknown error creating websocket client\n")
|
||||||
@@ -112,7 +108,7 @@ type authResponse struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func VerifyAuthResponse(conn *websocket.Conn, ctx context.Context) error {
|
func VerifyAuthResponse(conn *websocket.Conn, ctx context.Context) error {
|
||||||
msg, err := ReadMessage(conn, ctx)
|
msg, err := ReadMessage(conn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -149,7 +145,7 @@ func SubscribeToEventType(eventType string, conn *WebsocketWriter, ctx context.C
|
|||||||
Type: "subscribe_events",
|
Type: "subscribe_events",
|
||||||
EventType: eventType,
|
EventType: eventType,
|
||||||
}
|
}
|
||||||
err := conn.WriteMessage(e, ctx)
|
err := conn.WriteMessage(e)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wrappedErr := fmt.Errorf("error writing to websocket: %w", err)
|
wrappedErr := fmt.Errorf("error writing to websocket: %w", err)
|
||||||
slog.Error(wrappedErr.Error())
|
slog.Error(wrappedErr.Error())
|
||||||
|
|||||||
47
service.go
47
service.go
@@ -1,9 +1,6 @@
|
|||||||
package gomeassistant
|
package gomeassistant
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
"saml.dev/gome-assistant/internal/http"
|
|
||||||
"saml.dev/gome-assistant/internal/services"
|
"saml.dev/gome-assistant/internal/services"
|
||||||
ws "saml.dev/gome-assistant/internal/websocket"
|
ws "saml.dev/gome-assistant/internal/websocket"
|
||||||
)
|
)
|
||||||
@@ -32,28 +29,28 @@ type Service struct {
|
|||||||
ZWaveJS *services.ZWaveJS
|
ZWaveJS *services.ZWaveJS
|
||||||
}
|
}
|
||||||
|
|
||||||
func newService(conn *ws.WebsocketWriter, ctx context.Context, httpClient *http.HttpClient) *Service {
|
func newService(conn *ws.WebsocketWriter) *Service {
|
||||||
return &Service{
|
return &Service{
|
||||||
AlarmControlPanel: services.BuildService[services.AlarmControlPanel](conn, ctx),
|
AlarmControlPanel: services.BuildService[services.AlarmControlPanel](conn),
|
||||||
Climate: services.BuildService[services.Climate](conn, ctx),
|
Climate: services.BuildService[services.Climate](conn),
|
||||||
Cover: services.BuildService[services.Cover](conn, ctx),
|
Cover: services.BuildService[services.Cover](conn),
|
||||||
Light: services.BuildService[services.Light](conn, ctx),
|
Light: services.BuildService[services.Light](conn),
|
||||||
HomeAssistant: services.BuildService[services.HomeAssistant](conn, ctx),
|
HomeAssistant: services.BuildService[services.HomeAssistant](conn),
|
||||||
Lock: services.BuildService[services.Lock](conn, ctx),
|
Lock: services.BuildService[services.Lock](conn),
|
||||||
MediaPlayer: services.BuildService[services.MediaPlayer](conn, ctx),
|
MediaPlayer: services.BuildService[services.MediaPlayer](conn),
|
||||||
Switch: services.BuildService[services.Switch](conn, ctx),
|
Switch: services.BuildService[services.Switch](conn),
|
||||||
InputBoolean: services.BuildService[services.InputBoolean](conn, ctx),
|
InputBoolean: services.BuildService[services.InputBoolean](conn),
|
||||||
InputButton: services.BuildService[services.InputButton](conn, ctx),
|
InputButton: services.BuildService[services.InputButton](conn),
|
||||||
InputText: services.BuildService[services.InputText](conn, ctx),
|
InputText: services.BuildService[services.InputText](conn),
|
||||||
InputDatetime: services.BuildService[services.InputDatetime](conn, ctx),
|
InputDatetime: services.BuildService[services.InputDatetime](conn),
|
||||||
InputNumber: services.BuildService[services.InputNumber](conn, ctx),
|
InputNumber: services.BuildService[services.InputNumber](conn),
|
||||||
Event: services.BuildService[services.Event](conn, ctx),
|
Event: services.BuildService[services.Event](conn),
|
||||||
Notify: services.BuildService[services.Notify](conn, ctx),
|
Notify: services.BuildService[services.Notify](conn),
|
||||||
Number: services.BuildService[services.Number](conn, ctx),
|
Number: services.BuildService[services.Number](conn),
|
||||||
Scene: services.BuildService[services.Scene](conn, ctx),
|
Scene: services.BuildService[services.Scene](conn),
|
||||||
Script: services.BuildService[services.Script](conn, ctx),
|
Script: services.BuildService[services.Script](conn),
|
||||||
TTS: services.BuildService[services.TTS](conn, ctx),
|
TTS: services.BuildService[services.TTS](conn),
|
||||||
Vacuum: services.BuildService[services.Vacuum](conn, ctx),
|
Vacuum: services.BuildService[services.Vacuum](conn),
|
||||||
ZWaveJS: services.BuildService[services.ZWaveJS](conn, ctx),
|
ZWaveJS: services.BuildService[services.ZWaveJS](conn),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user