1. Başlamadan önce
Akıllı ev entegrasyonları, Google Asistan'ın kullanıcıların evlerindeki bağlı cihazları kontrol etmesine olanak tanır. Buluttan buluta entegrasyon oluşturmak için akıllı ev intent'lerini işleyebilecek bir bulut webhook uç noktası sağlamanız gerekir. Örneğin, bir kullanıcı "Ok Google, ışıkları aç" dediğinde Asistan, cihazın durumunu güncellemek için komutu buluttan tamamlama hizmetinize gönderir.
Yerel Ev SDK'sı, akıllı ev intent'lerini doğrudan bir Google Home cihazına yönlendirecek yerel bir yol ekleyerek akıllı ev entegrasyonunuzu iyileştirir. Bu sayede güvenilirlik artar ve kullanıcı komutlarının işlenmesindeki gecikme azalır. TypeScript veya JavaScript'te, cihazları tanımlayan ve herhangi bir Google Home akıllı hoparlörde ya da Google Nest akıllı ekranda komutları yürüten yerel bir uygulama yazıp dağıtmanıza olanak tanır. Ardından uygulamanız, komutları yerine getirmek için mevcut standart protokolleri kullanarak yerel alan ağı üzerinden kullanıcıların mevcut akıllı cihazlarıyla doğrudan iletişim kurar.
Ön koşullar
- Buluttan buluta entegrasyon oluşturma geliştirici kılavuzu
- Akıllı Ev Çamaşır Makinesi codelab'i
- Yerel sipariş karşılama geliştirici kılavuzu
Oluşturacağınız uygulama
Bu kod laboratuvarında, daha önce oluşturulmuş bir akıllı ev entegrasyonunu Firebase ile dağıtacak, ardından Geliştirici Konsolu'nda bir tarama yapılandırması uygulayacak ve Node.js'de yazılmış komutları sanal bir çamaşır makinesi cihazına göndermek için TypeScript kullanarak yerel bir uygulama oluşturacaksınız.
Neler öğreneceksiniz?
- Developer Console'da yerel sipariş tamamlamayı etkinleştirme ve yapılandırma.
- Yerel sipariş tamamlama uygulaması yazmak için Local Home SDK'sını kullanma.
- Google Home hoparlöre veya Google Nest akıllı ekrana yüklenen yerel sipariş tamamlama uygulamasında hata ayıklama
Gerekenler
- Google Chrome'un en son sürümü
- Google Home uygulamasının yüklü olduğu bir iOS veya Android cihaz
- Google Home akıllı hoparlör veya Google Nest akıllı ekran
- Node.js 10.16 veya sonraki bir sürüm
- Bir Google Hesabı
- Google Cloud faturalandırma hesabı
2. Başlarken
Etkinlik kontrolleri'ni etkinleştirme
Google Asistan'ı kullanmak için belirli etkinlik verilerini Google ile paylaşmanız gerekir. Google Asistan'ın düzgün çalışması için bu verilere ihtiyacı vardır ancak veri paylaşma şartı SDK'ya özgü değildir. Bu verileri paylaşmak için henüz bir hesabınız yoksa Google Hesabı oluşturun. Geliştirici hesabınızın olması gerekmez. Herhangi bir Google Hesabı kullanabilirsiniz.
Asistan ile kullanmak istediğiniz Google Hesabı'nın Etkinlik Kontrolleri sayfasını açın.
Aşağıdaki açma/kapatma düğmelerinin etkinleştirildiğinden emin olun:
- Web ve Uygulama Etkinliği: Ayrıca, Chrome geçmişini ve Google hizmetlerini kullanan site, uygulama ve cihazlardaki etkinlikleri ekle onay kutusunu işaretlediğinizden emin olun.
- Cihaz Bilgileri
- Konuşma ve Ses Etkinliği
Buluttan buluta entegrasyon projesi oluşturma
- Developer Console'a gidin.
- Proje Oluştur'u tıklayın, proje için bir ad girin ve Proje Oluştur'u tıklayın.
Buluttan buluta entegrasyonu seçin
Geliştirici Konsolu'ndaki Proje Ana Sayfası'nda Buluttan buluta bölümünde Buluttan buluta entegrasyon ekle'yi seçin.
Firebase CLI'yi yükleme
Firebase Komut Satırı Arayüzü (CLI), web uygulamalarınızı yerel olarak yayınlamanıza ve web uygulamanızı Firebase Hosting'e dağıtmanıza olanak tanır.
CLI'yi yüklemek için terminalde aşağıdaki npm komutunu çalıştırın:
npm install -g firebase-tools
CLI'nin doğru şekilde yüklendiğini doğrulamak için şunları çalıştırın:
firebase --version
Aşağıdaki komutu çalıştırarak Firebase CLI'yi Google hesabınızla yetkilendirin:
firebase login
HomeGraph API'yi etkinleştirme
HomeGraph API, cihazların ve durumlarının kullanıcının Home Graph'ında depolanmasını ve sorgulanması sağlar. Bu API'yi kullanmak için önce Google Cloud Console'u açıp HomeGraph API'yi etkinleştirmeniz gerekir.
Google Cloud Console'da, entegrasyonunuzla eşleşen projeyi seçtiğinizden emin olun. <project-id>.
Ardından, HomeGraph API'nin API Kitaplığı ekranında Etkinleştir'i tıklayın.
3. Başlangıç uygulamasını çalıştırma
Geliştirme ortamınızı oluşturduğunuza göre, her şeyin doğru şekilde yapılandırıldığından emin olmak için başlangıç projesini dağıtabilirsiniz.
Kaynak kodunu alma
Bu kod laboratuvarının örneğini geliştirme makinenize indirmek için aşağıdaki bağlantıyı tıklayın:
...veya GitHub deposunu komut satırından kopyalayabilirsiniz:
git clone https://github.com/google-home/smarthome-local.git
Proje hakkında
Başlangıç projesi aşağıdaki alt dizinleri içerir:
public
: Akıllı çamaşır makinesini kontrol etmek ve izlemek için ön uç web kullanıcı arayüzüfunctions
: Buluttan buluta entegrasyon için buluttan sipariş tamamlama işlemini uygulayan Cloud Functions işlevlerilocal
:index.ts
içinde intent işleyicileri stub'lenmiş iskelet yerel uygulama projesi
Sağlanan bulut istek karşılama, index.js
'te aşağıdaki işlevleri içerir:
fakeauth
: Hesap bağlama için yetkilendirme uç noktasıfaketoken
: Hesap bağlama için jeton uç noktasısmarthome
: Akıllı ev intent'i karşılama uç noktasıreportstate
: Cihaz durumunda değişiklik olduğunda HomeGraph API'yi çağırır.updateDevice
: Rapor durumunu tetiklemek için sanal cihaz tarafından kullanılan uç nokta
Firebase'e bağlanma
app-start
dizinine gidin, ardından Firebase CLI'yi buluttan buluta entegrasyon projenizle ayarlayın:
cd app-start firebase use <project-id>
Firebase projesini yapılandırma
Firebase projesini başlatın.
firebase init
CLI özelliklerini, Gerçek Zamanlı Veritabanı'nı, İşlevler'i ve Firebase Hosting'i içeren Barındırma özelliğini seçin.
? Which Firebase CLI features do you want to set up for this directory? Press Space to select features, then Enter to confirm your choices. ❯◉ Realtime Database: Configure a security rules file for Realtime Database and (optionally) provision default instance ◯ Firestore: Configure security rules and indexes files for Firestore ◉ Functions: Configure a Cloud Functions directory and its files ◉ Hosting: Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys ◯ Hosting: Set up GitHub Action deploys ◯ Storage: Configure a security rules file for Cloud Storage ◯ Emulators: Set up local emulators for Firebase products ◯ Remote Config: Configure a template file for Remote Config ◯ Extensions: Set up an empty Extensions manifest
Bu işlem, projeniz için gerekli API'leri ve özellikleri başlatır.
İstendiğinde Realtime Database'i başlatın. Veritabanı örneği için varsayılan konumu kullanabilirsiniz.
? It seems like you haven't initialized Realtime Database in your project yet. Do you want to set it up? Yes ? Please choose the location for your default Realtime Database instance: us-central1
Başlangıç projesi kodunu kullandığınız için güvenlik kuralları için varsayılan dosyayı seçin ve mevcut veritabanı kuralları dosyasının üzerine yazmadığınızdan emin olun.
? File database.rules.json already exists. Do you want to overwrite it with the Realtime Database Security Rules for <project-ID>-default-rtdb from the Firebase Console? No
Projenizi yeniden başlatıyorsanız kod tabanını başlatmak veya üzerine yazmak isteyip istemediğiniz sorulduğunda Üzerine yaz'ı seçin.
? Would you like to initialize a new codebase, or overwrite an existing one? Overwrite
İşlevlerinizi yapılandırırken varsayılan dosyaları kullanmalı ve proje örneğindeki mevcut index.js ve package.json dosyalarının üzerine yazmadığınızdan emin olmalısınız.
? What language would you like to use to write Cloud Functions? JavaScript ? Do you want to use ESLint to catch probable bugs and enforce style? No ? File functions/package.json already exists. Overwrite? No ? File functions/index.js already exists. Overwrite? No
Projenizi yeniden başlatıyorsanız functions/.gitignore dosyasını başlatmak veya üzerine yazmak isteyip istemediğiniz sorulduğunda Hayır'ı seçin.
? File functions/.gitignore already exists. Overwrite? No
? Do you want to install dependencies with npm now? Yes
Son olarak, barındırma ayarlarınızı proje kodundaki public
dizinini ve mevcut index.html dosyasını kullanacak şekilde yapılandırın. ESLint'i kullanmanız istendiğinde Hayır'ı seçin.
? What do you want to use as your public directory? public ? Configure as a single-page app (rewrite all urls to /index.html)? Yes ? Set up automatic builds and deploys with GitHub? No ? File public/index.html already exists. Overwrite? No
ESLint yanlışlıkla etkinleştirildiyse devre dışı bırakmak için iki yöntem vardır:
- GUI'yi kullanarak projenin altındaki
../functions
klasörüne gidin, gizli.eslintrc.js
dosyasını seçin ve silin. Benzer ada sahip.eslintrc.json
ile karıştırmayın. - Komut satırını kullanarak:
cd functions rm .eslintrc.js
Doğru ve eksiksiz bir Firebase yapılandırmanız olduğundan emin olmak için firebase.json
dosyasını washer-done
dizininden washer-start
dizine kopyalayarak washer-start
dizinindeki dosyanın üzerine yazın.
washer-start
dizininde:
cp -vp ../washer-done/firebase.json .
Firebase'e dağıtma
Bağımlılıkları yükleyip projenizi yapılandırdığınıza göre uygulamayı ilk kez çalıştırmaya hazırsınız.
firebase deploy
Göreceğiniz konsol çıkışı şu şekildedir:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<project-id>/overview Hosting URL: https://<project-id>.web.app
Bu komut, birkaç Cloud Functions for Firebase ile birlikte bir web uygulaması dağıtır.
Web uygulamasını görüntülemek için tarayıcınızda (https://<project-id>.web.app
) Barındırma URL'sini açın. Aşağıdaki arayüzü görürsünüz:
Bu web kullanıcı arayüzü, cihaz durumlarını görüntülemek veya değiştirmek için kullanılan bir üçüncü taraf platformunu temsil eder. Veritabanınıza cihaz bilgileri doldurmaya başlamak için GÜNCELLE'yi tıklayın. Sayfada herhangi bir değişiklik görmezsiniz ancak çamaşır makinenizin mevcut durumu veritabanında saklanır.
Şimdi, dağıttığınız bulut hizmetini Geliştirici Konsolu'nu kullanarak Google Asistan'a bağlama zamanı.
Developer Console projenizi yapılandırma
Geliştir sekmesinde, etkileşiminiz için bir Görünen Ad ekleyin. Bu ad, Google Home uygulamasında görünür.
Uygulama markalama bölümünde, uygulama simgesi için 144 x 144 piksel boyutunda ve
adlı bir png
dosyası yükleyin.
Hesap bağlama özelliğini etkinleştirmek için şu hesap bağlama ayarlarını kullanın:
İstemci Kimliği |
|
İstemci gizli anahtarı |
|
Yetkilendirme URL'si |
|
Jeton URL'si |
|
Cloud istek karşılama URL'si bölümüne, akıllı ev intent'leri için istek karşılama sağlayan Cloud Functions işlevinizin URL'sini girin.
https://us-central1-
Proje yapılandırmanızı kaydetmek için Kaydet'i, ardından projenizde testi etkinleştirmek için Sonraki: Test'i tıklayın.
Artık cihaz durumunu Asistan'a bağlamak için gerekli webhook'ları uygulamaya başlayabilirsiniz.
Google Asistan'a bağlanma
Buluttan buluta entegrasyonunuzu test etmek için projenizi bir Google Hesabı'na bağlamanız gerekir. Bu sayede, aynı hesapta oturum açmış Google Asistan yüzeyleri ve Google Home uygulaması üzerinden test yapabilirsiniz.
- Telefonunuzda Google Asistan ayarlarını açın. Konsolda kullandığınız hesapla giriş yapmanız gerektiğini unutmayın.
- Google Asistan > Ayarlar > Ev Kontrolü'ne (Asistan bölümünde) gidin.
- Sağ üstteki arama simgesini tıklayın.
- Belirli bir test uygulamanızı bulmak için [test] ön ekini kullanarak test uygulamanızı arayın.
- İlgili öğeyi seçin. Ardından Google Asistan, hizmetinizle kimlik doğrulaması yapar ve hizmetinizden kullanıcının cihaz listesini sağlamasını isteyen bir
SYNC
isteği gönderir.
Google Home uygulamasını açıp çamaşır makinenizi görebildiğinizi doğrulayın.
Google Home uygulamasında sesli komutları kullanarak çamaşır makinesini kontrol edebildiğinizi doğrulayın. Ayrıca, buluttan sipariş tamamlama işleminizin ön uç web kullanıcı arayüzünde cihaz durumunun değiştiğini göreceksiniz.
Artık entegrasyonunuza yerel sipariş tamamlama eklemeye başlayabilirsiniz.
4. Buluttan sipariş karşılama işlemini güncelleme
Yerel sipariş tamamlamayı desteklemek için bulut SYNC
yanıtına cihaz için benzersiz bir yerel tanımlayıcı içeren otherDeviceIds
adlı yeni bir cihaz başına alan eklemeniz gerekir. Bu alan, söz konusu cihazı yerel olarak kontrol etme olanağını da belirtir.
Aşağıdaki kod snippet'inde gösterildiği gibi otherDeviceIds
alanını SYNC
yanıtına ekleyin:
functions/index.js
app.onSync((body) => {
return {
requestId: body.requestId,
payload: {
agentUserId: '123',
devices: [{
id: 'washer',
type: 'action.devices.types.WASHER',
traits: [ ... ],
name: { ... },
deviceInfo: { ... },
willReportState: true,
attributes: {
pausable: true,
},
otherDeviceIds: [{
deviceId: 'deviceid123',
}],
}],
},
};
});
Güncellenen projeyi Firebase'e dağıtın:
firebase deploy --only functions
Dağıtım tamamlandıktan sonra web kullanıcı arayüzüne gidin ve araç çubuğundaki Yenile düğmesini tıklayın. Bu işlem, Asistan'ın güncellenmiş SYNC
yanıt verilerini alması için bir Senkronizasyon İsteği işlemi tetikler.
5. Yerel sipariş karşılama ayarlarını yapılandırma
Bu bölümde, buluttan buluta entegrasyonunuza yerel sipariş karşılama için gerekli yapılandırma seçeneklerini ekleyeceksiniz. Geliştirme sırasında yerel sipariş tamamlama uygulamasını, Google Home cihazın erişip indirebileceği Firebase Hosting'de yayınlarsınız.
Developer Console'da Geliştir > İşlemler'i seçin ve Yerel ana sayfa SDK'sını yapılandır bölümünü bulun. Test URL'si alanına aşağıdaki URL'yi girin, proje kimliğinizi ekleyin ve Kaydet'i tıklayın:
https://<project-id>.web.app/local-home/index.html
Ardından, Google Home cihazının yerel akıllı cihazları nasıl keşfedeceğini tanımlamamız gerekir. Yerel Ev platformu, mDNS, UPnP ve UDP yayını da dahil olmak üzere cihaz bulma için çeşitli protokolleri destekler. Akıllı çamaşır makinesini keşfetmek için UDP yayınını kullanırsınız.
Yeni bir tarama yapılandırması eklemek için Cihaz tarama yapılandırması bölümünde Yeni tarama yapılandırması'nı tıklayın. Protokol olarak UDP'yi seçin ve aşağıdaki özellikleri doldurun:
Alan | Açıklama | Önerilen değer |
Yayın adresi | UDP yayın adresi |
|
Yayın bağlantı noktası | Google Home'un UDP yayınını gönderdiği bağlantı noktası |
|
Dinleme bağlantı noktası | Google Home'un yanıt dinlediği bağlantı noktası |
|
Keşif paketi | UDP yayın veri yükü |
|
Son olarak, değişikliklerinizi yayınlamak için pencerenin üst kısmındaki Kaydet'i tıklayın.
6. Yerel sipariş karşılama özelliğini uygulama
Yerel sipariş tamamlama uygulamanızı, Yerel Ev SDK'sı tanımlama paketini kullanarak TypeScript'te geliştirirsiniz. Başlangıç projesinde sağlanan iskelete bakın:
local/index.ts
/// <reference types="@google/local-home-sdk" />
import App = smarthome.App;
import Constants = smarthome.Constants;
import DataFlow = smarthome.DataFlow;
import Execute = smarthome.Execute;
import Intents = smarthome.Intents;
import IntentFlow = smarthome.IntentFlow;
...
class LocalExecutionApp {
constructor(private readonly app: App) { }
identifyHandler(request: IntentFlow.IdentifyRequest):
Promise<IntentFlow.IdentifyResponse> {
// TODO: Implement device identification
}
executeHandler(request: IntentFlow.ExecuteRequest):
Promise<IntentFlow.ExecuteResponse> {
// TODO: Implement local fulfillment
}
...
}
const localHomeSdk = new App('1.0.0');
const localApp = new LocalExecutionApp(localHomeSdk);
localHomeSdk
.onIdentify(localApp.identifyHandler.bind(localApp))
.onExecute(localApp.executeHandler.bind(localApp))
.listen()
.then(() => console.log('Ready'))
.catch((e: Error) => console.error(e));
Yerel sipariş tamamlamanın temel bileşeni smarthome.App
sınıfıdır. Başlatıcı proje, IDENTIFY
ve EXECUTE
intent'leri için işleyiciler ekler, ardından Yerel Ev SDK'sını uygulamanın hazır olduğunu bildirmek için listen()
yöntemini çağırır.
IDENTIFY işleyicisini ekleme
Yerel Home SDK'sı, Google Home cihazı Developer Console'da sağlanan tarama yapılandırmasına göre yerel ağda doğrulanmamış cihazlar keşfettiğinde IDENTIFY
işleyicinizi tetikler.
Bu sırada platform, Google eşleşen bir cihaz keşfettiğinde ortaya çıkan tarama verileriyle identifyHandler
'ü çağırır. Uygulamanızda tarama, UDP yayını kullanılarak gerçekleştirilir ve IDENTIFY
işleyicisine sağlanan tarama verileri, yerel cihaz tarafından gönderilen yanıt yükünü içerir.
İşleyici, yerel cihazın benzersiz tanımlayıcısını içeren bir IdentifyResponse
örneği döndürür. Yerel cihazdan gelen UDP yanıtını işlemek ve uygun yerel cihaz kimliğini belirlemek için identifyHandler
yönteminize aşağıdaki kodu ekleyin:
local/index .ts
identifyHandler(request: IntentFlow.IdentifyRequest):
Promise<IntentFlow.IdentifyResponse> {
console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));
const scanData = request.inputs[0].payload.device.udpScanData;
if (!scanData) {
const err = new IntentFlow.HandlerError(request.requestId,
'invalid_request', 'Invalid scan data');
return Promise.reject(err);
}
// In this codelab, the scan data contains only local device id.
const localDeviceId = Buffer.from(scanData.data, 'hex');
const response: IntentFlow.IdentifyResponse = {
intent: Intents.IDENTIFY,
requestId: request.requestId,
payload: {
device: {
id: 'washer',
verificationId: localDeviceId.toString(),
}
}
};
console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));
return Promise.resolve(response);
}
verificationId
alanının, cihazı kullanıcının Home Graph'ında yerel karşılama için kullanılabilir olarak işaretleyen SYNC
yanıtınızdaki otherDeviceIds
değerlerinden biriyle eşleşmesi gerektiğini unutmayın. Google bir eşleşme bulduktan sonra söz konusu cihaz doğrulanmış ve yerel sipariş tamamlamaya hazır olarak kabul edilir.
EXECUTE işleyicisini ekleme
Yerel Ev SDK'sı, yerel yerine getirmeyi destekleyen bir cihaz komut aldığında EXECUTE
işleyicinizi tetikler. Yerel intent'in içeriği, bulut sipariş karşılama hizmetinize gönderilen EXECUTE
intent'e eşdeğerdir. Bu nedenle, intent'i yerel olarak işleme mantığı, bulutta işleme şeklinize benzer.İşlemler
Uygulama, yerel cihazlarla iletişim kurmak için TCP/UDP soketlerini veya HTTP(S) isteklerini kullanabilir. Bu codelab'de, sanal cihazı kontrol etmek için kullanılan protokol HTTP'dir. Bağlantı noktası numarası, index.ts
içinde SERVER_PORT
değişkeni olarak tanımlanır.
Gelen komutları işlemek ve HTTP üzerinden yerel cihaza göndermek için executeHandler
yönteminize aşağıdaki kodu ekleyin:
local/index.ts
executeHandler(request: IntentFlow.ExecuteRequest):
Promise<IntentFlow.ExecuteResponse> {
console.log("EXECUTE intent: " + JSON.stringify(request, null, 2));
const command = request.inputs[0].payload.commands[0];
const execution = command.execution[0];
const response = new Execute.Response.Builder()
.setRequestId(request.requestId);
const promises: Array<Promise<void>> = command.devices.map((device) => {
console.log("Handling EXECUTE intent for device: " + JSON.stringify(device));
// Convert execution params to a string for the local device
const params = execution.params as IWasherParams;
const payload = this.getDataForCommand(execution.command, params);
// Create a command to send over the local network
const radioCommand = new DataFlow.HttpRequestData();
radioCommand.requestId = request.requestId;
radioCommand.deviceId = device.id;
radioCommand.data = JSON.stringify(payload);
radioCommand.dataType = 'application/json';
radioCommand.port = SERVER_PORT;
radioCommand.method = Constants.HttpOperation.POST;
radioCommand.isSecure = false;
console.log("Sending request to the smart home device:", payload);
return this.app.getDeviceManager()
.send(radioCommand)
.then(() => {
const state = {online: true};
response.setSuccessState(device.id, Object.assign(state, params));
console.log(`Command successfully sent to ${device.id}`);
})
.catch((e: IntentFlow.HandlerError) => {
e.errorCode = e.errorCode || 'invalid_request';
response.setErrorState(device.id, e.errorCode);
console.error('An error occurred sending the command', e.errorCode);
});
});
return Promise.all(promises)
.then(() => {
return response.build();
})
.catch((e) => {
const err = new IntentFlow.HandlerError(request.requestId,
'invalid_request', e.message);
return Promise.reject(err);
});
}
TypeScript uygulamasını derleyin.
TypeScript derleyicisini indirip uygulamayı derlemek için local/
dizine gidin ve aşağıdaki komutları çalıştırın:
cd local npm install npm run build
Bu işlem, index.ts
(TypeScript) kaynağını derleyip aşağıdaki içerikleri public/local-home/
dizinine yerleştirir:
bundle.js
: Yerel uygulamayı ve bağımlılıkları içeren derlenmiş JavaScript çıkışı.index.html
: Uygulamayı cihaz üzerinde test etmek için sunmak üzere kullanılan yerel barındırma sayfası.
Test projesini dağıtma
Güncellenen proje dosyalarını Google Home cihazından erişebilmeniz için Firebase Hosting'e dağıtın.
firebase deploy --only hosting
7. Akıllı çamaşır makinesini başlatma
Şimdi yerel sipariş tamamlama uygulamanız ile akıllı çamaşır makinesi arasındaki iletişimi test etme zamanı. Codelab başlangıç projesi, kullanıcıların yerel olarak kontrol edebileceği akıllı bir çamaşır makinesini simüle eden Node.js ile yazılmış bir virtual akıllı çamaşır makinesi içerir.
Cihazı yapılandırma
Sanal cihazı, Geliştirici Konsolu'nda cihaz bulma için tarama yapılandırmasına uyguladığınız UDP parametrelerini kullanacak şekilde yapılandırmanız gerekir. Ayrıca, sanal cihaza hangi yerel cihaz kimliğini raporlayacağını ve cihaz durumu değiştiğinde Durum Raporu etkinlikleri için kullanılacak buluttan buluta entegrasyon projesi kimliğini bildirmeniz gerekir.
Parametre | Önerilen değer |
deviceId |
|
discoveryPortOut |
|
discoveryPacket |
|
projectId | Buluttan buluta entegrasyonunuzun proje kimliği |
Cihazı başlatma
virtual-device/
dizinine gidin ve yapılandırma parametrelerini bağımsız değişken olarak ileterek cihaz komut dosyasını çalıştırın:
cd virtual-device npm install npm start -- \ --deviceId=deviceid123 --projectId=<project-id> \ --discoveryPortOut=3311 --discoveryPacket=HelloLocalHomeSDK
Cihaz komut dosyasının beklenen parametrelerle çalıştığını doğrulayın:
(...): UDP Server listening on 3311 (...): Device listening on port 3388 (...): Report State successful
8. TypeScript uygulamasında hata ayıklama
Aşağıdaki bölümde, Google Home cihazının yerel ağ üzerinden sanal akıllı çamaşır makinesini düzgün şekilde tarayabileceğini, tanımlayabileceğini ve bu cihaza komut gönderebileceğini doğrulayacaksınız. Google Home cihazına bağlanmak, konsol günlüklerini görüntülemek ve TypeScript uygulamasında hata ayıklama yapmak için Google Chrome Geliştirici Araçları'nı kullanabilirsiniz.
Chrome Geliştirici Araçları'nı bağlama
Hata ayıklayıcıyı yerel sipariş tamamlama uygulamanıza bağlamak için aşağıdaki adımları uygulayın:
- Google Home cihazınızı Developer Console projesine erişim iznine sahip bir kullanıcıya bağladığınızdan emin olun.
- Google Home cihazınızı yeniden başlatın. Bu işlem, HTML'nizin URL'sini ve Developer Console'a eklediğiniz tarama yapılandırmasını almasını sağlar.
- Geliştirme makinenizde Chrome'u başlatın.
- Yeni bir Chrome sekmesi açın ve adres alanına
chrome://inspect
yazarak denetleyiciyi başlatın.
Sayfada cihazların listesini görürsünüz ve uygulama URL'niz Google Home cihazınızın adının altında görünür.
Denetleyiciyi başlatma
Chrome Geliştirici Araçları'nı başlatmak için uygulama URL'nizin altındaki İncele'yi tıklayın. Konsol sekmesini seçin ve TypeScript uygulamanız tarafından yazdırılan IDENTIFY
intent içeriğini görebildiğinizi doğrulayın.
Bu çıkış, yerel sipariş tamamlama uygulamanızın sanal cihazı başarıyla bulup tanımladığı anlamına gelir.
Yerel sipariş tamamlamayı test etme
Google Home uygulamasındaki dokunmatik kontrolleri kullanarak veya Google Home cihaza sesli komutlar vererek cihazınıza komut gönderebilirsiniz. Örneğin:
"Ok Google, çamaşır makinemi aç."
"Ok Google, çamaşır makinemi başlat."
"Ok Google, çamaşır makinemi durdur."
Bu işlem, platformun TypeScript uygulamanıza EXECUTE
intent göndermesini tetikler.
Her komutla yerel akıllı çamaşır makinesinin durumunun değiştiğini doğrulayın.
... ***** The washer is RUNNING ***** ... ***** The washer is STOPPED *****
9. Tebrikler
Tebrikler! Yerel sipariş tamamlamayı buluttan buluta entegrasyona dahil etmek için Yerel Ev SDK'sını kullandınız.
Daha fazla bilgi
Deneyebileceğiniz bazı ek yöntemler:
- Tarama yapılandırmasını değiştirip tarama işlemini çalıştırın. Örneğin, farklı bir UDP bağlantı noktası veya keşif paketi kullanmayı deneyin.
- Sanal akıllı cihaz kod tabanını, Raspberry Pi gibi yerleşik bir cihazda çalışacak şekilde değiştirin ve mevcut durumu görselleştirmek için LED'leri veya ekranı kullanın.