The Hub Activation API lets you programmatically discover and activate
a Google Home hub. It is especially useful when the user has no other
way to activate a hub, as in the case of a hub that lacks a screen.

> [!WARNING]
> **Warning:** The [`HubManagementTrait`](https://developers.home.google.com/reference/kotlin/com/google/home/google/HubManagementTrait.md.txt) is restricted and isn't available for general use.

Using the Hub Activation API, you can build an app that can discover and
activate hubs. To do this:

1. Get a reference to the
   [`HubManagementTrait`](https://developers.home.google.com/reference/kotlin/com/google/home/google/HubManagementTrait.md.txt) in
   the structure:

   ```kotlin
   val hubManagementTrait =
     hubManagementTraitFlow.firstOrNull {
       it.metadata.sourceConnectivity?.connectivityState == ConnectivityState.ONLINE
     }
   if (hubManagementTrait == null) {
     errorsEmitter.emit(HomeException.notFound("HubManagement trait isn't online"))
   }
   ```
2. Identify any hub-capable devices on the Wi-Fi network:

   ```kotlin
   try {
     val unused = hubManagementTrait.discoverAvailableHubs()
   } catch (e: Exception) {
     Log.d(TAG_HUB_DISCOVERY, "Error discovering hubs $e")
     errorsEmitter.emit(e)
   }

   val hubManagementTraitFlow = structureFlow.flatMapLatest { it.trait(HubManagement) }

   val discoveredHubs =
     hubManagementTraitFlow
       .map { it.discoveredHubsList }
       .handleErrors()
       .flowOn(ioDispatcher)
       .stateIn(
         scope = CoroutineScope(viewModelScope.coroutineContext + ioDispatcher),
         started = SharingStarted.WhileSubscribed(),
         listOf(),
       )
   ```
3. Activate a hub-capable device:

   ```kotlin
   try {
     val unused = hubManagementTrait.activateHub(hub)
   } catch (e: Exception) {
     Log.d("Hub Activation", "Error activating hub $e")
   }
   ```

   > [!NOTE]
   > **Note** : Once a hub-capable device becomes an active hub, it is no longer returned by the `discoverAvailableHubs()` method.