Trait Profiles

A trait profile is a named, versioned set of required-to-implement traits and an associated list of required-to-implement properties and methods from those traits. When a thing indicates that it supports a given trait profile, it is promising that it fully supports all of the properties and methods that the trait profile requires.

Trait profiles provide a way for software to quickly classify the functionality of a thing and ensure that certain types of things have the appropriate minimal level of common functionality to ensure they meet user expectations.

For example, a trait profile for a "Dimmable Lamp" might require the Base, OnOff, Level, Energy, and Light traits, additionally requiring some additional subset of the optional properties from those traits to be implemented. The trait profile for a "Full-Color Lamp" would require the exact same traits but also include an expanded list of required-to-implement properties from those traits. A thing can implement more than one trait profile, and some trait profiles require that other specific trait profiles also be supported.