Is the compass on the smartphone "smart enough" when traveling indoors?

It's all matter of degrees.

The iOS compass (magnometer) is not a precision instrument and, when indoors, is exposed to sub-ideal environments.  Many external elements can affect the reading of a compass including the use of metal in the buildings, high tension power, metal "containers" such as elevators, that tend to isolate the device from natural magnetic fields.

iPhone compass image

Degree of error, is it consistent across devices?

There seems to be negative history with series 5 iPhones.  iPhone 5s forums are filled with members reporting exactly the same problem "lack of agreement, where north lies".

Be aware

When aware of the propensity for compass errors, design decisions can be made to:

  • Not use heading based information.  Revert to the use of record types without heading values whatsoever.  "Omnidirectional" messaging is the result, where messaging will result when entering the beacon cloud, from any direction.
  • Using larger heading ranges.  By default, when a single integer value is provided for a heading (ie, "0" for North) BlindSquare BPS will automatically convert this to the 90 degree range, 315-45.  If the compass reading variance, within the beacon radius, is within 315-45 degrees BlindSquare will respond correctly.  If the variance is greater, say periodic readings of 300 degrees, when travelling North within those times BlindSquare will NOT respond, as the sensed direction is outside of bounds.  One correction would be to increase the range manually by providing 300-45.  
    • Take care to manage the overlap of heading ranges.
  • Avoid use of range values that are less than 90 degrees unless the site survey indicates a consistent and accurate reading.  
    • example, a range of 0-30 may be accurate on a plan, but difficult to reproduce in the hand-held device
  • Replacing the use of compass by connecting Beacons using the "Static/Moving" feature "static:2ends". This, discussed in another article, provides the option to report an exit message from a current beacon cloud, when entering a subsequent beacon cloud.  
    • Example,  3 beacons in a hallway.  Beacons 1, 2 and 3.  
      • Beacon 1 provides the message "Grand Hallway, continue to elevator, cafeteria and stairway".  
      • When entering Beacon 2, Beacon 1's EXIT MESSAGE is "Grand Hallway, continue forward to cafeteria", thereafter Beacon 2 message can say "Elevators are on right, water fountain on left".  
      • When entering Beacon 3, Beacon 2's  EXIT MESSAGE can say "continue forward to stairway ascending to floor 2". Then the Beacon 3 message can say "cafeteria, turn left".
      • Opposite information would be made available when travelling from Beacon 3, then Beacon 2, then Beacon 1.  In this simple example.
Screen image illustrating "static:2ends"