// Package sensor reads Tasmota ENERGY.Power measurements in watts. package sensor import ( "encoding/json" "errors" "fmt" ) // ParsePower accepts numeric ENERGY.Power, including zero. Missing, null, or // malformed measurements return an error so callers can preserve the last value. func ParsePower(payload []byte) (float64, error) { var message struct { Energy *struct { Power *float64 `json:"Power"` } `json:"ENERGY"` } if err := json.Unmarshal(payload, &message); err != nil { return 0, fmt.Errorf("decode sensor payload: %w", err) } if message.Energy == nil || message.Energy.Power == nil { return 0, errors.New("sensor payload has no numeric ENERGY.Power") } return *message.Energy.Power, nil }