Etkinlikler eşzamansız olup Google Cloud Pub/Sub tarafından her kullanıcı için tek bir konuda yönetilir ProjectEtkinlikler tüm cihazlar ve yapılar için güncelleme sağlar ve etkinliklerin alımı erişim jetonu kullanıcı tarafından iptal edilmediği ve etkinlik mesajları kullanıcı tarafından iptal edilmediği sürece süresi doldu.
Etkinlikleri etkinleştir
Etkinlikler, SDM API'nin isteğe bağlı bir özelliğidir. Görüntüleyin . Etkinlikleri etkinleştirme bunu nasıl etkinleştireceğinizi öğrenin Project.
Google Cloud Pub/Sub
Öğrenmek için Google Cloud Pub/Sub belgelerine bakın daha fazla bilgi edineceksiniz. Özellikle:
- Firebase için Pub/Sub hakkındaki temel bilgileri "Nasıl Yapılır?" kılavuzları.
- Kimlik Doğrulama'nın işleyiş şeklini öğrenin.
- Sağlanan bir İstemci Kitaplığı seçin veya kendi mesajınızı yazın ve REST/HTTP veya gRPC API yüzeyleri.
Etkinlik aboneliği
Projectcihazınız için etkinlikler etkinleştirildiğinde buna özel bir konu sağlanır Project Kimlik:
projects/sdm-prod/topics/enterprise-project-id
Etkinlikleri almak için bir pull veya bağlı olarak, söz konusu konuya aktarma bir şablon görevi görür. SDM konusu için birden fazla abonelik desteklenir. Görüntüleyin Daha fazlası için abonelikleri yönetin ekleyebilirsiniz.
Etkinlik başlatma
Pub/Sub aboneliği oluşturulduktan sonra etkinlikleri ilk kez başlatmak için
devices.list
Tek seferlik bir tetikleyici olarak API çağrısı. Tüm yapı ve cihazlarla ilgili etkinlikler bu tarihten sonra yayınlanacak
arayın.
Örnek için Hızlı Başlangıç'taki Yetkilendir sayfası Rehber.
Etkinlik sırası
Pub/Sub, etkinliklerin siparişle teslim edileceğini garanti etmez ve etkinliklerin makbuz sırası,
etkinliklerin gerçekleştiği sıraya karşılık gelir. timestamp
kullanın
alanının belirlenmesine yardımcı olur. Etkinlikler ayrı ayrı veya birlikte de gelebilir
tek bir etkinlik iletisine dönüştürmenizi sağlar.
Daha fazla bilgi için bkz. Mesajları sıralama.
User ID'ler
Uygulamanız (yapı veya cihaz yerine) kullanıcıları temel alıyorsa
userID
alanını etkinlik yükünden kaldırın. Bu alan
belirli bir kullanıcıyı temsil eden kod karartılmış bir kimlik.
userID
, her API çağrısının HTTP yanıt başlığında da bulunur.
İlişki etkinlikleri
İlişki etkinlikleri, bir kaynak için yapılan ilişkisel güncellemeyi temsil eder. Örneğin, bir cihaz cihaz bir yapıya eklendiğinde veya cihaz bir yapıdan silindiğinde.
Üç tür ilişki etkinliği vardır:
- OLUŞTURULMA ZAMANI:
- SİLİNDİ
- GÜNCELLENDİ
Bu ilişki etkinliğinin yükü aşağıdaki gibidir:
Yük
{ "eventId" : "06f4651c-8fc0-4525-9138-1662ffe268b3", "timestamp" : "2019-01-01T00:00:01Z", "relationUpdate" : { "type" : "CREATED", "subject" : "enterprises/project-id/structures/structure-id", "object" : "enterprises/project-id/devices/device-id" }, "userId": "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi" }
Bir ilişki etkinliğinde object
, etkinliği tetikleyen kaynak ve
subject
, object
öğesinin şu anda ilişkili olduğu kaynaktır.
Yukarıdaki örnekte, a user bir kullanıcıya bu cihaza erişim izni vermiştir
developerve useradlı kullanıcının yetkili cihazı artık kendi yetkilisiyle ilişkili
yapısı hakkında bilgi edindiniz.
subject
yalnızca bir oda veya yapı olabilir. a developer
useryapısını görüntüleme izni olmadan, subject
her zaman
boştur.
Alanlar
Alan | Açıklama | Veri Türü |
---|---|---|
eventId |
Etkinliğin benzersiz tanımlayıcısıdır. | string Örnek: "6c0031ac-b979-4622-858b-e2a4e38655ef" |
timestamp |
Etkinliğin gerçekleştiği zaman. | string Örnek: "2019-01-01T00:00:01Z" |
relationUpdate |
İlişki güncellemesiyle ilgili bilgileri ayrıntılandıran bir nesne. | object |
userId |
Kullanıcıyı temsil eden benzersiz ve kodu karartılmış bir tanımlayıcı. | string Örnek: "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi" |
Daha fazla bilgi için Etkinlikler'e ve bunların işleyiş şekline bakacağız.
Örnekler
Etkinlik yükleri her ilişki etkinliği türü için farklılık gösterir:
OLUŞTURULMA ZAMANI:
Yapı oluşturuldu
"relationUpdate" : { "type" : "CREATED", "subject" : "", "object" : "enterprises/project-id/structures/structure-id" }
Cihaz oluşturuldu
"relationUpdate" : { "type" : "CREATED", "subject" : "enterprises/project-id/structures/structure-id", "object" : "enterprises/project-id/devices/device-id" }
Cihaz oluşturuldu
"relationUpdate" : { "type" : "CREATED", "subject" : "enterprises/project-id/structures/structure-id/rooms/room-id", "object" : "enterprises/project-id/devices/device-id" }
GÜNCELLENDİ
Cihaz taşındı
"relationUpdate" : { "type" : "UPDATED", "subject" : "enterprises/project-id/structures/structure-id/rooms/room-id", "object" : "enterprises/project-id/devices/device-id" }
SİLİNDİ
Yapı silindi
"relationUpdate" : { "type" : "DELETED", "subject" : "", "object" : "enterprises/project-id/structures/structure-id" }
Cihaz silindi
"relationUpdate" : { "type" : "DELETED", "subject" : "enterprises/project-id/structures/structure-id", "object" : "enterprises/project-id/devices/device-id" }
Cihaz silindi
"relationUpdate" : { "type" : "DELETED", "subject" : "enterprises/project-id/structures/structure-id/rooms/room-id", "object" : "enterprises/project-id/devices/device-id" }
Şu durumlarda ilişki etkinlikleri gönderilmez:
- Bir oda silindi
Kaynak etkinlikleri
Kaynak etkinliği, bir kaynağa özel güncellemeyi temsil eder. Bir değişikliğe göre olabilir özellik alanının değerini değiştirin (ör. termostatın modunu değiştirmek). Ayrıca, gerçekleşebilecek bir cihaz işlemini özellik alanını değiştirmez (ör. cihazın düğmesine basma).
Özellik alanının değerinde yapılan bir değişikliğe yanıt olarak oluşturulan etkinlik,
Cihaz GET çağrısına benzer traits
nesnesi:
Yük
{
"eventId" : "172f8070-f7c7-42f7-9110-760c6049fc30",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : {
"name" : "enterprises/project-id/devices/device-id",
"traits" : {
"sdm.devices.traits.ThermostatMode
" : {
"mode" : "COOL"
}
}
},
"userId": "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"resourceGroup" : [
"enterprises/project-id/devices/device-id"
]
}
Şunu kullanın: bireysel özellik alanı değişiklik kaynaklarının yük biçimini anlamayı sağlayan özellik dokümanları unutmayın.
Özellik alanını değiştirmeyen bir cihaz işlemine yanıt olarak oluşturulan etkinliğin ayrıca
resourceUpdate
nesnesi olan ancak events
nesnesine sahip yük
yerine traits
nesnesini çağırın:
Yük
{ "eventId" : "dccde63e-29b8-49d7-ae64-198450bae2bf",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion
" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "Bw3CN4TTI2FtYtTsvRypvsfSXu...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"eventThreadId" : "d67cd3f7-86a7-425e-8bb3-462f92ec9f59",
"eventThreadState" : "STARTED",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }
Bu kaynak etkinliği türleri belirli özelliklerle tanımlanır. Örneğin, Hareket etkinliği CameraMotion trait. Her özellikle ilgili belgeleri göster .
Alanlar
Alan | Açıklama | Veri Türü |
---|---|---|
eventId |
Etkinliğin benzersiz tanımlayıcısıdır. | string Örnek: "dccde63e-29b8-49d7-ae64-198450bae2bf" |
timestamp |
Etkinliğin gerçekleştiği zaman. | string Örnek: "2019-01-01T00:00:01Z" |
resourceUpdate |
Kaynak güncellemesiyle ilgili bilgileri ayrıntılandıran bir nesne. | object |
userId |
Kullanıcıyı temsil eden benzersiz ve kodu karartılmış bir tanımlayıcı. | string Örnek: "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi" |
eventThreadId |
Etkinlik ileti dizisinin benzersiz tanımlayıcısı. | string Örnek: "d67cd3f7-86a7-425e-8bb3-462f92ec9f59" |
eventThreadState |
Etkinlik ileti dizisinin durumu. | string Değerler: "STARTED", "UPDATED", "ENDED" |
resourceGroup |
Bu etkinliğe benzer güncellemelere sahip olabilecek kaynakları gösteren nesne. Etkinliğin kaynağı (resourceUpdate nesnesinden) her zaman bu nesnede bulunur. |
object |
Daha fazla bilgi için Etkinlikler'e ve bunların işleyiş şekline bakacağız.
Güncellenebilir bildirimler
Kaynak etkinliklerine dayalı bildirimler, bir uygulamaya uygulanabilir. Örneğin: Android veya iOS. Gönderilen bildirim sayısını azaltmak için Mevcut bildirimlerle birlikte güncellenebilir bildirimler de uygulanabilir. Aynı etkinlikte sonraki etkinliklere dayalı yeni bilgilerle güncellenir ileti dizisi.Güncellenebilir bildirimler için belirli etkinlikler özelliği desteği ve şu şekilde etiketlenir:
Güncellenebilir eventThreadId
adlı ek bir alan bulunur. Bunu kullan
Mevcut bir etkinliği güncellemek amacıyla tek tek etkinlikleri birbirine bağlamak için
kullanıcıya gösterilen bildirimdir.
Etkinlik ileti dizisi, etkinlik oturumundan farklıdır. Etkinlik ileti dizisi aynı ileti dizisinde önceki bir etkinliğin güncel durumunu tanımlar. İlgili içeriği oluşturmak için kullanılan etkinlik oturumu, birbiriyle ilişkili ayrı etkinlikleri tanımlar ve belirli bir etkinlik oturumu için birden fazla etkinlik ileti dizisi olabilir.
Bildirim amacıyla, farklı etkinlik türleri farklı gruplar halinde gruplandırılır. ileti dizileri.
Bu ileti dizisi gruplaması ve zamanlama mantığı, Google tarafından işlenir ve şunlara tabidir: istediğiniz zaman değiştirebilirsiniz. developer , bildirimleri SDM API tarafından sağlanan etkinlik ileti dizileri ve oturumlar.
İleti dizisi durumu
Güncellenebilir bildirimleri destekleyen etkinliklerde de eventThreadState
bulunur
alanı, etkinlik ileti dizisinin o anki durumunu belirtir. Bu
alanı aşağıdaki değerlere sahiptir:
- BAŞLATILDI: Bir etkinlik ileti dizisindeki ilk etkinlik.
- GÜNCELLENDİ: Devam eden bir ileti dizisindeki etkinlik. Tek bir ileti dizisinde bu duruma sahip sıfır veya daha fazla etkinlik olabilir.
- SONA ERDİ: Bir etkinlik ileti dizisindeki son etkinlik. İleti dizisi türüne bağlı olarak, son GÜNCELLENEN etkinliğin kopyası olabilir.
Bu alan, bir etkinlik ileti dizisinin ilerlemesini izlemek için kullanılabilir. sona erdi.
Etkinlik filtreleme
Bazı durumlarda, bir cihaz tarafından algılanan etkinlikler filtrelenerek yayınlanmayabilir konusundan bahsetmek istiyorum. Bu davranış etkinlik filtreleme adı verilir. Etkinlik filtrelemenin amacı, kısa süre içinde çok sayıda benzer etkinlik mesajı yayınlamaktan kaçının.
Örneğin, bir mesaj bir SDM konusunda yayınlanabilir. etkinliği oluşturun. Diğer Ardından Hareket için mesajlar otomatik olarak Belirli bir süre boyunca filtrelenerek yayından çıkarılır. Bu dönemden söz konusu etkinlik türü için bir etkinlik mesajı tekrar yayınlanabilir.
Google Home uygulamasında (GHA), geçmişte filtrelenenler useröğesinin etkinlik geçmişinde gösterilmeye devam edecek. Ancak, etkinlikler uygulama bildirimi oluşturmaz (bu bildirim türü etkin).
Her etkinlik türünün, aşağıdaki ölçütlere göre tanımlanan ve kendine özgü etkinlik filtreleme mantığı vardır: Google'a aittir ve herhangi bir zamanda değiştirilebilir. Bu etkinlik filtreleme mantığı ve oturum mantığından bağımsızdır.
Hizmet hesapları
SDM API'yi yönetmek için hizmet hesapları önerilir ve etkinlik mesajları gösterilebilir. Hizmet hesabı, bir uygulama veya kendi benzersiz hesap anahtarı vardır. Bunun yerine gerçek bir sanal makine kullanılır.
Pub/Sub API kullanımları için hizmet hesabı yetkilendirmesi İki aşamalı OAuth (2LO).
2LO yetkilendirme akışında:
- developer , hizmet anahtarı kullanarak erişim jetonu ister.
- developer , erişim jetonunu API'ye yapılan çağrılarda kullanır.
Google 2LO ve nasıl kurulacağı hakkında daha fazla bilgi edinmek için Sunucudan sunucuya OAuth 2.0 kullanma Uygulamalar.
Yetkilendirme
Hizmet hesabına Pub/Sub API'si:
- Cloud Pub/Sub'ı etkinleştirme API Cloud'da geliştiricilerin karşılaştığı yaygın sorunları çözmenize ve kullanım alanlarını öğrenmenize yardımcı olacak teknik belgeleri ve videoları keşfedin.
- Şu sayfada açıklandığı gibi bir hizmet hesabı ve hizmet hesabı anahtarı oluşturun: Hizmet hesabı oluşturma. Sadece Pub/Sub Abonesi rolü vermenizi öneririz. Şunları yaptığınızdan emin olun: hizmet hesabı anahtarını Pub/Sub API'ye gidin.
- Kimlik doğrulama kimlik bilgilerinizi (hizmet hesabı anahtarı)
aşağıdaki adımları izleyin:
adımına geçin veya
oauth2l
kullanarak manuel olarak bir erişim jetonu alın. API erişimini hızlı bir şekilde test etmek istediğinizi varsayalım. - Hizmet hesabı kimlik bilgilerini veya erişim jetonunu
Pub/Sub
project.subscriptions
API kullanabilirsiniz.
oauth2l
Google oauth2l
, Go'da yazılan OAuth için bir komut satırı aracıdır. Şunun için yükleyin:
Mac veya Linux'ta Go.
- Sisteminizde Go uygulaması yoksa önce uygulamayı indirip yükleyin.
- Go yüklendikten sonra
oauth2l
uygulamasını yükleyin ve konumunuPATH
cihazınıza ekleyin ortam değişkeni:go install github.com/google/oauth2l@latest
export PATH=$PATH:~/go/bin
oauth2l
öğesini kullanarak API için erişim jetonu almak üzere OAuth kapsamları:
Örneğin, hizmet anahtarınızoauth2l fetch --credentials path-to-service-key.json --scope https://www.googleapis.com/auth/pubsub https://www.googleapis.com/auth/cloud-platform
~/myServiceKey-eb0a5f900ee3.json
:oauth2l fetch --credentials ~/myServiceKey-eb0a5f900ee3.json --scope https://www.googleapis.com/auth/pubsub https://www.googleapis.com/auth/cloud-platform
ya29.c.Elo4BmHXK5...
Daha fazla kullanım için oauth2l
BENİ OKU'yu inceleyin
ekleyebilirsiniz.
Google API İstemci Kitaplıkları
Google API'leri için OAuth kullanan çeşitli istemci kitaplıkları mevcuttur 2.0. Şu konuda daha fazla bilgi için Google API İstemci Kitaplıkları'na bakın: dili seçin.
Bu kitaplıkları Pub/Sub APIile kullanırken aşağıdaki kapsam dizeleri:
https://www.googleapis.com/auth/pubsub https://www.googleapis.com/auth/cloud-platform
Hatalar
Bu kılavuzla ilgili olarak aşağıdaki hata kodları döndürülebilir:
Hata Mesajı | TBG | Sorun giderme |
---|---|---|
Kamera görseli artık indirilemiyor. | DEADLINE_EXCEEDED |
Etkinlik resimlerinin süresi, etkinlik yayınlandıktan 30 saniye sonra dolar. Resmi, süresi dolmadan önce indirmeyi unutmayın. |
Etkinlik kimliği kameraya ait değil. | FAILED_PRECONDITION |
Kamera etkinliğinin döndürdüğü doğru eventID değerini kullanın. |
Aşağıdakiler için API Hata Kodu Referansı'na bakın: API hata kodlarının tam listesini inceleyin.