package device import ( "fmt" "git.aiterp.net/lucifer3/server/internal/color" "strings" ) type State struct { Power *bool `json:"power"` Temperature *float64 `json:"temperature"` Intensity *float64 `json:"intensity"` Color *color.Color `json:"color"` SensedTemperature *float64 `json:"sensedTemperature"` SensedLightLevel *float64 `json:"sensedLightLevel"` SensedPresence *PresenceState `json:"sensedPresence"` SensedButton *int `json:"sensedButton"` } func (d State) String() string { parts := make([]string, 0, 4) if d.Power != nil { parts = append(parts, fmt.Sprintf("power:%t", *d.Power)) } if d.Temperature != nil { parts = append(parts, fmt.Sprintf("temperature:%f", *d.Temperature)) } if d.Intensity != nil { parts = append(parts, fmt.Sprintf("intensity:%.2f", *d.Intensity)) } if d.Color != nil { parts = append(parts, fmt.Sprintf("color:%s", d.Color.String())) } if d.SensedTemperature != nil { parts = append(parts, fmt.Sprintf("sensedTemperature:%.2f", *d.SensedTemperature)) } if d.SensedLightLevel != nil { parts = append(parts, fmt.Sprintf("sensedLightLevel:%.1f", *d.SensedLightLevel)) } if d.SensedPresence != nil { parts = append(parts, fmt.Sprintf("sensedPresense:(%t,%.1f)", d.SensedPresence.Present, d.SensedPresence.AbsenceSeconds)) } if d.SensedButton != nil { parts = append(parts, fmt.Sprintf("sensedButton:%d", *d.SensedButton)) } return fmt.Sprint("(", strings.Join(parts, ", "), ")") } type PresenceState struct { Present bool `json:"present"` AbsenceSeconds float64 `json:"absenceSeconds,omitempty"` }