Device Attribute Registry

Each Afero device will have a number of attributes associated with it. Attributes are identified by a 2-byte ID and can contain a variable amount of information based on the type of attribute. Attributes can come in many types and have specific ID ranges.

ID Description Data Type Usage Notes
1-1023 Afero Cloud, Device MCU An attribute residing on an external MCU defined by the third-party developer. The size and meaning of these attributes are defined by the developer using the Afero Profile Editor. To get the default value of one of these attributes, the MCU must call af_lib_get_attribute.
1024 I/O 0 Value Attribute Modulo LED:
  • 0 = On
  • 1 = Off
1026 I/O 1 Value Attribute Configurable
1028 I/O 2 Value Attribute Configurable
1030 I/O 3 Value Attribute Modulo button
1201 UTC Time SINT32 Local UTC time on ASR should the MCU need/want it. If present in the profile, ASR will deliver it to the MCU periodically.
1202 Device ID Bytes If the MCU requires the ASR Device ID, the MCU can do a GET on this attribute to retrieve the ID.
1203 Association ID Bytes Should the MCU require the Association ID of the ASR it can do a GET on this attribute to retrieve it.
1204 Company Code SINT8 Should the MCU require the Company Code of the ASR it can do a GET on this attribute to retrieve it.
1205 Online Status Bytes This three-byte array describes the online status of the device according to the following formula:
  • First byte: 0 = Offline, 1 = Online
  • Second byte: 1 = BLE, 2 = Wi-Fi
  • Third byte: Number of Wi-Fi bars (if second byte is 2)
1206 Device Capabilities Bytes A bit field in which the device states to the MCU what capabilities it supports. Bits are indexed from left to right, allowing additional bytes to be appended to support additional capabilities. The bits are:
  • Bit 0: MCU OTA Support
1207 afLib Capabilities Bytes A bit field in which afLib states to ASR what capabilities it supports. Bits are indexed from left to right, allowing additional bytes to be appended to support additional capabilities.
1301 OTA MCU Info Bytes N-byte array used to hold state and other information related to the OTA.
1302 OTA MCU Transfer Bytes N-byte array used for transmitting the image data to the MCU. By default this will be 255 bytes but the MCU can limit the amount of data it receives each time by lowering the size of this attribute.
2001 Bootloader Version SINT64 The bootloader is always the first thing to be upgraded as it is responsible for installing firmware images. This firmware type is used for the Afero Secure Hub and Afero Secure Radios.
2002 BLE Stack Version SINT64 This is the Bluetooth stack for the radio module. This will likely never be updated, but is included here for completeness. If the stack is updated, the application must always be updated at the same time, before the device is rebooted.
2003 FW Application Version SINT64 This is the radio module application responsible for reading the device description and handling attributes. This firmware type is used for the Afero Secure Hub and Afero Secure Radios.
2004 Device Description SINT64 The description of the attributes for a particular Afero application.
2006 Wi-Fi SINT64 This is the version for the Wi-Fi chip (e.g., WINC3400).
65001 UTC offset data BYTES Contains the current UTC offset in minutes, the next timestamp to change the UTC offset, and the new UTC offset to apply at the previous timestamp, in that order (2-bytes signed short, 4-bytes int, 2-bytes signed short).
65004 Configured SSID UTF8S The SSID the Afero Secure Hub is currently configured to use.
65005 Wi-Fi Bars SINT8 Integer, read-only attribute for Wi-Fi signal strength, for UI purposes.
65006 Wi-Fi Steady State SINT8 Wi-Fi steady state:
  • 0 = Not connected
  • 1 = Pending
  • 2 = Connected
  • 3 = Unknown failure
  • 4 = Association failed
  • 5 = Handshake failed
  • 6 = Echo failed
  • 7 = SSID (Network Name) Not found
  • 8 = NTP (Network Time Protocol) failed

This value is used to communicate the Wi-Fi state to the apps outside the Wi-Fi setup.

65012 Command BYTES

This value will have a one-byte command followed by parameters, if any. The format of the last three bytes are dictated by the first byte. The device will return a two-byte array indicating the result of the command to the server. The first byte will be the command and the second byte will be the result:

  • NO_ERROR = 0
  • COMMAND_FAILED = 0xFF
  • NOT_SUPPORTED = 0xFE, PARSE_ERROR = 0xFD

Current commands are:

  • 1 = Reboot - Last three bytes are ignored.
  • 2 = Clear user data - Factory reset; last three bytes are ignored.
  • 3 = Enter factory test mode (i.e., softAP).
  • 4 = Enter factory mode (i.e., profiprogo).
  • 5 = Peripheral list change - The list of peripherals on the account has changed. The format of the parameters is [modification][device id length][device id], where:
    • [modification] (1 byte): 1 for added, 0 for removed
    • [device id length] (1 byte): Length of device ID
    • [device id] (device id length bytes): Device ID
  • 6 = Device view state change - Somebody has either started/stopped viewing a device. The format of the parameters is [viewing refresh time][viewer id length][viewer id][device id length][device id], where:
    • [viewing refresh time] (2 bytes): 0 for not viewing; otherwise, the time in seconds that viewing should be true
    • [viewer id length] (1 byte): Length of viewer ID
    • [viewer id] (viewer id length bytes): Viewer ID
    • [device id length] (1 byte): Length of device ID
    • [device id] (device id length bytes): Device ID
  • 7 = Claim state change - Somebody has either started/stopped claiming a device. The format of the parameters is [claim refresh time][claimant id length][claimant id][device id length][device id], where:
    • [claim refresh time] (2 bytes): 0 for disclaim; otherwise, the time in seconds that the claim should be true
    • [claimant id length] (1 byte): Length of claimant ID
    • [claimant id] (claimant id length bytes): Claimant ID
    • [device id length] (1 byte): Length of device ID
    • [device id] (device id length bytes): Device ID
  • 8 = Start/stop peripheral mode: Either start/stop advertising over BLE. The format of the parameters is [mode], where:
    • [mode] (1 byte): 1 to start advertising, 0 to stop advertising
  • 9 = Enable/disable Wi-Fi: Either enable/disable the use of Wi-Fi on a device. The format of the parameters is [mode], where:
    • [mode] (1 byte): 1 to enable, 0 to disable
65013 ASR State (AF_SYSTEM_ASR_STATE) SINT8 This byte will hold ASR state information, including:
  • 0 = Rebooted (AF_MODULE_STATE_REBOOTED)
  • 1 = Linked (AF_MODULE_STATE_LINKED)
  • 2 = Updating (AF_MODULE_STATE_UPDATING)
  • 3 = Update ready to apply (reboot requested) (AF_MODULE_STATE_UPDATE_READY)
  • 4 = Initialized (AF_MODULE_STATE_INITIALIZED)
  • 5 = Re-linked (AF_MODULE_STATE_RELINKED)
65014 Low Battery Warning SINT8

Applies to ASR-1 Only

This value will be updated by ASR-1 when the battery gets low. It will track the battery level as:

  • 0: voltage >2.7V
  • 1: 2.5V <voltage> 2.7V
  • 2: 2.3V <voltage> 2.5V
  • 3: 2.3V <voltage> 2.1V

At 2.1 volts, the ASR-1 will power down to avoid problems such as flash corruption.

65015 Linked Timestamp SINT32 The timestamp when the peripheral linked with the Cloud (as set by the Cloud upon successful linking). This is a Unix Epoch timestamp, which is the number of seconds since 1/1/1970.
65018 Attribute ACK SINT16 Reserved
65019 Reboot Reason

A variable-length string of bytes in which the first two bytes represent a specific reason for the most recent boot by ASR, and the remainder provides context-dependent data used internally. The data is provided as ASCII. The reasons represented are shown below.

  • 00 = Power on
  • 01 = Watchdog reset
  • 02 = Software reset
  • 03 = Reset pin asserted
  • 04 = Crystal failure
  • F0 = Other
  • FF = Unknown
65020 BLE Comms BYTES Reserved
65021 MCU Interface SINT8 This attribute is required in the profile. The default value for this attribute is set by the Afero Profile Editor and any changes to the value at runtime are ignored. The following values are valid:
  • 0 = No MCU
  • 1 = SPI SLAVE
  • 2 = UART