Custom Device Attributes and Commands: Subtleties

Thanks, but just to confirm, Duncan:

  1. If you want to use an local use, as well as for sharing (i.e., via Event), you can “declare” the Attribute name as a local variable with “def reportASAP”, right? Are these actually the same storage object, or two distinct namespaces (i.e., a local variable, and an Attribute are not really interchangeable but can have overlapping names?)

  2. A SmartApp can read the latest value of an a Device’s Attribute (as set by an Event) in a variety of ways, including:

  • State device.currentState(attributeName) (returns an Attribute State Object, includes properties such as <state>.value, etc.).
  • Object device.currentValue(attributeName) (returns the value of the Attribute in its datatype)
  • latest and range variations of State (latestState, statesBetween(...)).
  • State device.<attribute name>State (a magic property name)
  • Object device.current<Uppercase attribute name>
  • maybe: The Attribute can be fished out of the Event object (ummm… evt.name, evt.value, …)?

Any other obvious ones I’m missing? The above are all from Doc Reference page: https://graph.api.smartthings.com/ide/doc/device


Not saying @Mike_Maxwell is mistaken, but I’d like if @duncan could clarify my confusion:

Confirm or deny syntax, please: Mike mentions that an Attribute can be updated with an implied Device Command made up of the name of the Attribute; I’ve never tried that syntax: device.AttributeName(1).

Also, he says in the metadata{}, the datatype for Attribute is a List. Again, I’ve never seen list syntax needed or used: Attribute myNumber, "number" works fine, not Attribute myNumber, ["number"].

Thanks!!! :smiley: