Yapı API'lerine Home API'leri üzerinden erişilebilir. Aşağıdaki paketleri uygulamanıza aktarın:
import com.google.home.Home
import com.google.home.Id
import com.google.home.Structure
Hata işleme
Home API'lerindeki tüm yöntemler HomeException
oluşturabileceğinden, tüm çağrılarda HomeException
yakalamak için bir try-catch
bloğu kullanmanızı öneririz.
HomeException
ile çalışırken neyin yanlış gittiğini öğrenmek için code
ve message
alanlarını kontrol edin.
İşlenmemiş istisnalar, uygulamanızın kilitlenmesine neden olur.
Daha fazla bilgi için Hata işleme bölümüne bakın.
Örnek aramalar
Yapıların listesini alma
structures()
çağrısı başlatıldıktan sonra, erişebileceğiniz bir yapı akışı döndürür:
// 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()
structures()
API, geçerli bir yapı listesi hemen döndürmeyebilebilecek bir akıştır. Uygulamanız reaktifse ve kullanıcı arayüzünü yönlendirmek için bu akışa abone oluyorsa sonunda geçerli bir yapı listesi döndürülür.
Boş bir yapı listesinin döndürülebileceği başka durumlar da vardır. Örneğin, kullanıcının telefonu bağlantıyı kaybederse veya kullanıcı uygulamanıza yönelik izinleri iptal ederse boş bir yapı listesi döndürülebilir. Bu durumları uygulamanızda ele almanız gerekir.
Alternatif olarak, reaktif programlama yerine zorunlu programlama gerekiyorsa terminal akış operatörü kullanılabilir:
val everyStructure = withTimeout(5000) { home.structures().first { it.isNotEmpty() } }
Bu çağrı, geçerli bir yapı listesinin akıştan gelmesini bekler ve liste uygulama tarafından belirlenen zaman aşımı içinde alınmazsa zaman aşımı olur.
Yapı özelliklerini alma
Elinizdeki yapıların listesini kullanarak bu yapıların özelliklerine erişebilirsiniz:
// 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}")
Bir yapıyı ada göre bulma
Bir yapının adını biliyorsanız name
özelliğini kullanarak da yapıya erişebilirsiniz:
val myHome = home.structures().list().first { it.name == "My home" }
Buradan her yapının mülkleri, odaları ve cihazlarına erişebilirsiniz.
Birden fazla yapıyla çalışma
Birden fazla yapı kullanmak için her yapıya ayrı bir referans alın:
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 }
Oda listesini alma
Bir yapıyla ilgili oda listesini alabilir ve bu odalara ait tesislere erişebilirsiniz:
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}")
Oda oluştur
Yeni bir oda oluşturmak için:
val testName = "Test Room Name" val newRoom: Room = structure.createRoom(testName)
Oda silme
Alternatif olarak, bir odayı silebilir:
val roomToDelete = structure.rooms().list().filter { it.name == "room_id1" }.firstOrNull() structure.deleteRoom(roomToDelete!!)
Odaları yalnızca kimlikleriyle de silebilirsiniz:
val roomToDelete1 = allRooms.filter { it.id == testRoomId }.firstOrNull() structure.deleteRoom(roomToDelete1!!)
Cihaz içeren bir oda silinirse cihazlar yapıda kalır ancak artık bir odaya atanmaz.
Cihazları farklı bir odaya taşıma
Bir yapı oluşturduktan sonra cihazları bu yapıdaki farklı bir odaya taşıyabilirsiniz:
val room2 = structure.rooms().get(Id("room_id_other_structure")) val device1 = structure.devices().get(Id("device_id1")) structure.moveDevicesToRoom(room2!!, listOf(device1!!))
Yalnızca cihaz ve oda kimlikleriniz varsa cihazları da taşıyabilirsiniz:
structure.moveDevicesToRoom(Id("room_id_other_structure"), listOf(Id("device_id1")))
Otomasyonlar
Automation API'ye giriş noktası bir yapıdır. Home API'lerindeki otomasyonlar hakkında daha fazla bilgi edinmek için Otomasyon tasarlama başlıklı makaleyi inceleyin.
API listesi
Home
örneği oluşturulduktan sonra aşağıdaki yapı API'lerine bu örnek üzerinden erişilebilir:
API | Açıklama |
---|---|
structures() |
Google Hesabı'ndaki tüm yapıları alın. Daha fazla getirme ve filtreleme seçeneği sunan bir HomeObjectsFlow döndürür. |
Structure
aldıktan sonra aşağıdaki API'lere erişebilirsiniz:
API | Açıklama |
---|---|
automations() |
Yapıya ait tüm otomasyonları listeleyin. Yalnızca Home API'leri aracılığıyla oluşturulan otomasyonlar döndürülür. |
createAutomation(automation) |
Bir yapı için otomasyon örneği oluşturun. |
createRoom(name) |
Kullanıcının verdiği adla bir oda oluşturun. |
deleteAutomation(automationId) |
Bir otomasyon örneğini kimliğine göre silme. |
deleteRoom(roomId) |
Oda kimliğiyle bir odayı silin. |
devices() |
Yapıdaki tüm cihazları alın. Bir HomeObjectsFlow döndürür. |
getAutomation(automationId) |
Kimliğine göre bir otomasyon örneği alın. |
getSourceConnectivity(trait) |
Belirli bir özelliğin meta verilerini alma Bir SourceConnectivity döndürür. |
has(trait) |
Şu anda istenen özelliğin cihaz tarafından desteklenip desteklenmediğini kontrol edin. |
id |
Yapının benzersiz sistem kimliği. |
moveDevicesToRoom(roomId, deviceIds) |
Cihazları yapıdaki farklı bir oda kimliğine taşıyın. |
name |
Yapının kullanıcı tarafından sağlanan adı. |
rooms() |
Yapıdaki tüm odaları alın. Bir HomeObjectsFlow döndürür. |
trait(trait) |
Özellik özelliklerinin güncel anlık görüntüsünü alın. |
Bazı yaygın API'ler (devices()
, id
ve name
gibi) Room
için de kullanılabilir.