add climate service

This commit is contained in:
Sam Lewis
2023-05-01 00:53:52 -04:00
parent eb6718a796
commit 1dd8eaa58d
4 changed files with 62 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
package services
import (
"context"
ws "saml.dev/gome-assistant/internal/websocket"
"saml.dev/gome-assistant/types"
)
/* Structs */
type Climate struct {
conn *ws.WebsocketWriter
ctx context.Context
}
/* Public API */
func (c Climate) SetFanMode(entityId string, fanMode string) {
req := NewBaseServiceRequest(entityId)
req.Domain = "climate"
req.Service = "set_fan_mode"
req.ServiceData = map[string]any{"fan_mode": fanMode}
c.conn.WriteMessage(req, c.ctx)
}
func (c Climate) SetTemperature(entityId string, serviceData types.SetTemperatureRequest) {
req := NewBaseServiceRequest(entityId)
req.Domain = "climate"
req.Service = "set_temperature"
req.ServiceData = serviceData.ToJSON()
c.conn.WriteMessage(req, c.ctx)
}

View File

@@ -10,6 +10,7 @@ import (
func BuildService[ func BuildService[
T AlarmControlPanel | T AlarmControlPanel |
Climate |
Cover | Cover |
Light | Light |
HomeAssistant | HomeAssistant |

View File

@@ -10,6 +10,7 @@ import (
type Service struct { type Service struct {
AlarmControlPanel *services.AlarmControlPanel AlarmControlPanel *services.AlarmControlPanel
Climate *services.Climate
Cover *services.Cover Cover *services.Cover
HomeAssistant *services.HomeAssistant HomeAssistant *services.HomeAssistant
Light *services.Light Light *services.Light
@@ -31,6 +32,7 @@ type Service struct {
func newService(conn *ws.WebsocketWriter, ctx context.Context, httpClient *http.HttpClient) *Service { func newService(conn *ws.WebsocketWriter, ctx context.Context, httpClient *http.HttpClient) *Service {
return &Service{ return &Service{
AlarmControlPanel: services.BuildService[services.AlarmControlPanel](conn, ctx), AlarmControlPanel: services.BuildService[services.AlarmControlPanel](conn, ctx),
Climate: services.BuildService[services.Climate](conn, ctx),
Cover: services.BuildService[services.Cover](conn, ctx), Cover: services.BuildService[services.Cover](conn, ctx),
Light: services.BuildService[services.Light](conn, ctx), Light: services.BuildService[services.Light](conn, ctx),
HomeAssistant: services.BuildService[services.HomeAssistant](conn, ctx), HomeAssistant: services.BuildService[services.HomeAssistant](conn, ctx),

View File

@@ -7,3 +7,27 @@ type NotifyRequest struct {
Title string Title string
Data map[string]any Data map[string]any
} }
type SetTemperatureRequest struct {
Temperature float32
TargetTempHigh float32
TargetTempLow float32
HvacMode string
}
func (r *SetTemperatureRequest) ToJSON() map[string]any {
m := map[string]any{}
if r.Temperature != 0 {
m["temperature"] = r.Temperature
}
if r.TargetTempHigh != 0 {
m["target_temp_high"] = r.TargetTempHigh
}
if r.TargetTempLow != 0 {
m["target_temp_low"] = r.TargetTempLow
}
if r.HvacMode != "" {
m["hvac_mode"] = r.HvacMode
}
return m
}