     }
     
     
-    init(device: ParticleDevice)
+    required init(device: ParticleDevice)
     {
         particleDevice  = device
         publish         = "uninitialized"
     }
 
-    func refresh(method: String = #function) -> Promise<Void>
+    /**
+     * Refresh is expected to be called once after init
+     * or in the unlikely event that the Photon reboots.
+     */
+    func refresh() -> Promise<Void>
     {
         return Promise { fulfill, reject in
             firstly {

typealias CompletionPassingSet = (Set<String>) -> Void
typealias CompletionPassingDict = ([String: String]) -> Void


enum PhotonError : Error
{

}


// Public interface
class Photon: HwController
{
    var devices: Set<String>?           // Cached list of device names exposed by Photon
    var supported: Set<String>?         // Cached list of supported activities
    var activities: [String: String]?   // Optional list of current activities and state
    var publish: String                 // Publish event name that this device monitors

    internal let particleDevice: ParticleDevice! // Reference to Particle-SDK device object
    
    
    var name: String
    {
        get {
