All checks were successful
CI / changes (push) Successful in 19s
CI / test (push) Successful in 24s
CI / build-ai-gateway (push) Successful in 1m6s
CI / build-ha-gateway (push) Successful in 1m3s
CI / build-discord-bot (push) Successful in 1m4s
CI / build-alexa-bridge (push) Successful in 1m15s
CI / build-tts-gateway (push) Successful in 1m5s
CI / build-tts-sidecar (push) Has been skipped
CI / build-tts-model (push) Has been skipped
- Implemented SetTemperature in ClimateService for setting an absolute target temperature. - Updated ClimateServiceClient and ClimateServiceServer interfaces to include SetTemperature. - Added corresponding handler and tests for SetTemperature in ClimateGRPC. - Modified ClimateApp to handle SetTemperature requests without clamping. - Updated climate.proto to define SetTemperatureRequest message. - Adjusted Dockerfiles to include alexa-bridge dependencies.
87 lines
3.2 KiB
Go
87 lines
3.2 KiB
Go
package grpc
|
|
|
|
import (
|
|
"context"
|
|
|
|
hav1 "gitea.nik4nao.com/nik/home-services/gen/ha/v1"
|
|
"gitea.nik4nao.com/nik/home-services/ha-gateway/internal/core/domain"
|
|
"gitea.nik4nao.com/nik/home-services/ha-gateway/internal/core/ports/driving"
|
|
)
|
|
|
|
type ClimateGRPC struct {
|
|
hav1.UnimplementedClimateServiceServer
|
|
svc driving.ClimateService
|
|
}
|
|
|
|
// NewClimateGRPC constructs the gRPC adapter for ClimateService.
|
|
func NewClimateGRPC(svc driving.ClimateService) *ClimateGRPC {
|
|
return &ClimateGRPC{svc: svc}
|
|
}
|
|
|
|
// ListClimates returns discovery-oriented climate metadata for clients.
|
|
func (h *ClimateGRPC) ListClimates(ctx context.Context, req *hav1.ListClimatesRequest) (*hav1.ListClimatesResponse, error) {
|
|
climates, err := h.svc.ListClimates(ctx)
|
|
if err != nil {
|
|
return nil, grpcError(err)
|
|
}
|
|
out := make([]*hav1.ClimateEntity, 0, len(climates))
|
|
for _, c := range climates {
|
|
out = append(out, domainClimateToProto(c))
|
|
}
|
|
return &hav1.ListClimatesResponse{Climates: out}, nil
|
|
}
|
|
|
|
// TurnOn maps a protobuf turn-on request into a domain entity ID.
|
|
func (h *ClimateGRPC) TurnOn(ctx context.Context, req *hav1.ClimateRequest) (*hav1.ClimateResponse, error) {
|
|
s, err := h.svc.TurnOn(ctx, domain.EntityID(req.EntityId))
|
|
if err != nil {
|
|
return nil, grpcError(err)
|
|
}
|
|
return &hav1.ClimateResponse{State: domainStateToProto(s)}, nil
|
|
}
|
|
|
|
// TurnOff maps a protobuf turn-off request into a domain entity ID.
|
|
func (h *ClimateGRPC) TurnOff(ctx context.Context, req *hav1.ClimateRequest) (*hav1.ClimateResponse, error) {
|
|
s, err := h.svc.TurnOff(ctx, domain.EntityID(req.EntityId))
|
|
if err != nil {
|
|
return nil, grpcError(err)
|
|
}
|
|
return &hav1.ClimateResponse{State: domainStateToProto(s)}, nil
|
|
}
|
|
|
|
// IncreaseTemperature forwards a temperature step-up request to the domain service.
|
|
func (h *ClimateGRPC) IncreaseTemperature(ctx context.Context, req *hav1.ClimateRequest) (*hav1.ClimateResponse, error) {
|
|
s, err := h.svc.IncreaseTemperature(ctx, domain.EntityID(req.EntityId))
|
|
if err != nil {
|
|
return nil, grpcError(err)
|
|
}
|
|
return &hav1.ClimateResponse{State: domainStateToProto(s)}, nil
|
|
}
|
|
|
|
// DecreaseTemperature forwards a temperature step-down request to the domain service.
|
|
func (h *ClimateGRPC) DecreaseTemperature(ctx context.Context, req *hav1.ClimateRequest) (*hav1.ClimateResponse, error) {
|
|
s, err := h.svc.DecreaseTemperature(ctx, domain.EntityID(req.EntityId))
|
|
if err != nil {
|
|
return nil, grpcError(err)
|
|
}
|
|
return &hav1.ClimateResponse{State: domainStateToProto(s)}, nil
|
|
}
|
|
|
|
// SetTemperature forwards an absolute target-temperature request to the domain service.
|
|
func (h *ClimateGRPC) SetTemperature(ctx context.Context, req *hav1.SetTemperatureRequest) (*hav1.ClimateResponse, error) {
|
|
s, err := h.svc.SetTemperature(ctx, domain.EntityID(req.EntityId), req.TargetTemperature)
|
|
if err != nil {
|
|
return nil, grpcError(err)
|
|
}
|
|
return &hav1.ClimateResponse{State: domainStateToProto(s)}, nil
|
|
}
|
|
|
|
// SetHVACMode forwards an HVAC mode change request to the domain service.
|
|
func (h *ClimateGRPC) SetHVACMode(ctx context.Context, req *hav1.SetHVACModeRequest) (*hav1.ClimateResponse, error) {
|
|
s, err := h.svc.SetHVACMode(ctx, domain.EntityID(req.EntityId), req.HvacMode)
|
|
if err != nil {
|
|
return nil, grpcError(err)
|
|
}
|
|
return &hav1.ClimateResponse{State: domainStateToProto(s)}, nil
|
|
}
|