API'leri yapılandırın

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.