Les API Structure sont accessibles via les API Home pour Android. Importez ces packages dans votre application :
import com.google.home.Home
import com.google.home.Id
import com.google.home.Structure
Gestion des exceptions
Toute méthode des API Home peut générer une HomeException
. Nous vous recommandons donc d'utiliser un bloc try-catch
pour intercepter HomeException
sur tous les appels.
Lorsque vous gérez HomeException
, vérifiez ses champs code
et message
pour savoir ce qui s'est mal passé.
Toute exception non gérée entraînera le plantage de votre application.
Pour en savoir plus, consultez Gestion des erreurs.
Exemples d'appels
Obtenir la liste des structures
Une fois initialisé, un appel structures()
renvoie un flux de structures auquel vous pouvez accéder :
// Get a flow of all structures accessible to the user val allStructuresFlow: HomeObjectsFlow<Structure> = home.structures() // Calling list() on a HomeObjectsFlow returns the first Set of elements. val allStructures: Set<Structure> = allStructuresFlow.list()
L'API structures()
est un flux qui peut ne pas renvoyer immédiatement une liste valide de structures. Si votre application est réactive et s'abonne à ce flux pour piloter l'UI, une liste valide de structures devrait être renvoyée.
Il existe d'autres situations dans lesquelles une liste de structures vide peut être renvoyée, par exemple si le téléphone de l'utilisateur perd la connectivité ou si l'utilisateur a révoqué les autorisations accordées à votre application. Vous devez vous assurer de gérer ces cas dans votre application.
Si la programmation impérative est fortement requise au lieu de la programmation réactive, un opérateur de flux terminal peut être utilisé :
val everyStructure = withTimeout(5000) { home.structures().first { it.isNotEmpty() } }
Cet appel attend qu'une liste de structures valide soit transmise dans le flux et expire si la liste n'est pas reçue dans le délai d'expiration désigné par l'application.
Obtenir les propriétés de la structure
Une fois la liste des structures en votre possession, vous pouvez accéder à leurs propriétés :
// Get a flow on a structure. Flow emits new values on structure metadata changes: name. val structureFlow: Flow<Structure> = home.structures().itemFlow(myStructureId) // Get a snapshot of the structure. val structure: Structure = structureFlow.first() // Get structure properties println("id ${structure.id}") println("name ${structure.name}")
Rechercher une structure par son nom
Si vous connaissez le nom d'une structure, vous pouvez également y accéder à l'aide de la propriété name
:
val myHome = home.structures().list().first { it.name == "My home" }
Vous pouvez ensuite accéder aux propriétés, aux pièces et aux appareils de chaque structure.
Travailler avec plusieurs structures
Pour utiliser plusieurs structures, obtenez une référence distincte pour chacune d'elles :
var structure1: Structure? = null var structure2: Structure? = null try { structure1 = home.structures().list().firstOrNull { it.name == "Main House" } } catch (e: HomeException) { // Code for handling the exception } try { structure2 = home.structures().list().firstOrNull { it.name == "Guest Cottage" } } catch (e: HomeException) { // Code for handling the exception }
Obtenir la liste des salles
Une fois la structure en place, vous pouvez obtenir la liste des pièces et accéder à leurs propriétés :
val allRoomsFlow: HomeObjectsFlow<Room> = structure.rooms() val allRooms: Set<Room> = allRoomsFlow.list() val room: Room = allRooms.first() println("id ${room.id}") println("name ${room.name}")
Créer un salon
Pour créer un salon :
val testName = "Test Room Name" val newRoom: Room = structure.createRoom(testName)
Supprimer une pièce
Vous pouvez également supprimer un salon :
val roomToDelete = structure.rooms().list().filter { it.name == "room_id1" }.firstOrNull() structure.deleteRoom(roomToDelete!!)
Vous pouvez également supprimer une pièce avec un simple ID :
val roomToDelete1 = allRooms.filter { it.id == testRoomId }.firstOrNull() structure.deleteRoom(roomToDelete1!!)
Si une pièce contenant des appareils est supprimée, les appareils resteront dans la structure, mais ne seront plus associés à une pièce.
Déplacer des appareils dans une autre pièce
Une fois que vous avez créé une structure, vous pouvez déplacer des appareils vers une autre pièce de cette structure :
val room2 = structure.rooms().get(Id("room_id_other_structure")) val device1 = structure.devices().get(Id("device_id1")) structure.moveDevicesToRoom(room2!!, listOf(device1!!))
Si vous ne disposez que des ID d'appareil et de pièce, vous pouvez également déplacer des appareils :
structure.moveDevicesToRoom(Id("room_id_other_structure"), listOf(Id("device_id1")))
Modifier le nom d'une pièce
Appelez la méthode setName()
pour modifier le nom d'une pièce :
livingRoom.setName("Living Room")
Les noms seront tronqués s'ils dépassent la limite de 60 points de code Unicode (caractères), et aucune erreur ne sera générée. Les développeurs sont responsables de la gestion des noms longs et peuvent, par exemple, décider d'informer les utilisateurs que les noms seront tronqués.
Automatisations
Le point d'entrée de l'API Automation se fait par le biais d'une structure. Pour en savoir plus sur les automatisations dans les API Home, consultez Présentation de l'API Automation sur Android.
Liste des API
Une fois une instance de Home
créée, les API Structure suivantes sont accessibles via celle-ci :
API | Description |
---|---|
structures() |
Obtenez toutes les structures du compte Google. Renvoie un HomeObjectsFlow qui fournit d'autres options de récupération et de filtrage. |
Une fois que vous disposez d'un Structure
, les API suivantes sont accessibles par son intermédiaire :
API | Description |
---|---|
automations() |
Répertorie toutes les automatisations appartenant à la structure. Seules les automatisations créées à l'aide des API Home sont renvoyées. |
createAutomation(automation) |
Créez une instance d'automatisation pour une structure. |
createRoom(name) |
Crée une pièce avec le nom donné par l'utilisateur. |
deleteAutomation(automationId) |
Supprimez une instance d'automatisation par son ID. |
deleteRoom(roomId) |
Supprimez une pièce à l'aide de son ID. |
devices() |
Obtenez tous les appareils de la structure. Renvoie un objet HomeObjectsFlow . |
getAutomation(automationId) |
Obtenez une instance d'automatisation par son ID. |
getSourceConnectivity(trait) |
Obtenez les métadonnées d'un trait spécifique. Renvoie un objet SourceConnectivity . |
has(trait) |
Vérifiez si le trait demandé est pris en charge par l'appareil. |
id |
ID système unique de la structure. |
moveDevicesToRoom(roomId, deviceIds) |
Déplacez les appareils vers un autre ID de pièce dans la structure. |
name |
Nom de la structure fourni par l'utilisateur. |
rooms() |
Obtenez toutes les pièces de la structure. Renvoie un objet HomeObjectsFlow . |
trait(trait) |
Obtenez un instantané actuel des attributs du trait. |
Certaines API courantes (telles que devices()
, id
et name
) sont également disponibles pour un Room
.