Files
2026-07-16 16:32:44 -04:00

45 lines
1.4 KiB
Go

package econetgrpc
import (
"google.golang.org/protobuf/types/known/timestamppb"
pb "gitea.libretechconsulting.com/rmcguire/econet-exporter/api/econet/v1alpha1"
"gitea.libretechconsulting.com/rmcguire/econet-exporter/pkg/econet/econetclient"
)
func deviceToProto(d *econetclient.Device) *pb.Device {
return &pb.Device{
SerialNumber: d.SerialNumber,
DeviceId: d.DeviceID,
FriendlyName: d.FriendlyName,
Type: d.Type,
GenericType: d.GenericType,
Connected: d.Connected,
WifiSignal: int32(d.WiFiSignal),
Mode: d.Mode,
Enabled: d.Enabled,
Running: d.Running,
RunningState: d.RunningState,
Setpoint: int32(d.Setpoint),
SetpointMin: int32(d.SetpointMin),
SetpointMax: int32(d.SetpointMax),
HotWaterAvailability: int32(d.HotWaterAvailability),
AlertCount: int32(d.AlertCount),
Away: d.Away,
LastUpdated: timestamppb.New(d.LastUpdated),
SupportedModes: supportedModes(d.SupportedModes()),
}
}
// supportedModes maps the device's mode slugs to proto enums, dropping any that
// aren't settable (e.g. "unknown").
func supportedModes(slugs []string) []pb.Mode {
out := make([]pb.Mode, 0, len(slugs))
for _, slug := range slugs {
if m, ok := modeFromSlug(slug); ok {
out = append(out, m)
}
}
return out
}