Buluttan buluta entegrasyonlar için yerel sipariş tamamlamayı etkinleştirme

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.

72ffb320986092c.png

Ön koşullar

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

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

  1. Developer Console'a gidin.
  2. Proje Oluştur'u tıklayın, proje için bir ad girin ve Proje Oluştur'u tıklayın.

Projeyi Adlandırı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.

Buluttan buluta entegrasyon ekleme

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.

5SVCzM8IZLi_9DV8M0nEklv16NXkpvM0bIzQK2hSyKyvnFHBxPOz90rbr72ayxzmxd5aNROOqC_Cp4outbdlwJdObDs0DIE_8vYzw6dovoVrP9IZWlWsZxDS7UHOi1jiRbDMG8MqUA

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şlevleri
  • local: 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:

  1. 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.
  2. 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:

L60eA7MOnPmbBMl2XMipT9MdnP-RaVjyjf0Y93Y1b7mEyIsqZrrwczE7D3RQISRs-iusL1g4XbNmGhuA6-5sLcWefnczwNJEPfNLtwBsO4Tb9YvcAZBI6_rX19z8rxbik9Vq8F2fwg

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.

Görünen ad ekleme

Uygulama markalama bölümünde, uygulama simgesi için 144 x 144 piksel boyutunda ve .png adlı bir png dosyası yükleyin.

Uygulama simgesi ekleme

Hesap bağlama özelliğini etkinleştirmek için şu hesap bağlama ayarlarını kullanın:

İstemci Kimliği

ABC123

İstemci gizli anahtarı

DEF456

Yetkilendirme URL'si

https://us-central1-
.cloudfunctions.net/fakeauth

Jeton URL'si

https://us-central1-
.cloudfunctions.net/faketoken

Hesap bağlama URL&#39;lerini güncelleme

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--cloudfunctions.net/smarthome

Cloud Functions işlevi URL&#39;si ekleme

Proje yapılandırmanızı kaydetmek için Kaydet'i, ardından projenizde testi etkinleştirmek için Sonraki: Test'i tıklayın.

Buluttan buluta entegrasyonunuzu test etme

Artık cihaz durumunu Asistan'a bağlamak için gerekli webhook'ları uygulamaya başlayabilirsiniz.

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.

  1. Telefonunuzda Google Asistan ayarlarını açın. Konsolda kullandığınız hesapla giriş yapmanız gerektiğini unutmayın.
  2. Google Asistan > Ayarlar > Ev Kontrolü'ne (Asistan bölümünde) gidin.
  3. Sağ üstteki arama simgesini tıklayın.
  4. Belirli bir test uygulamanızı bulmak için [test] ön ekini kullanarak test uygulamanızı arayın.
  5. İ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.

XcWmBVamBZtPfOFqtsr5I38stPWTqDcMfQwbBjetBgxt0FCjEs285pa9K3QXSASptw0KYN2G8yfkT0-xg664V4PjqMreDDs-HPegHjOc4EVtReYPu-WKZyygq9Xmkf8X8z9177nBjQ

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 ae8d3b25777a5e30.png 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.

bf4f6a866160a982.png

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

7d59b31f8d2a988.png

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

255.255.255.255

Yayın bağlantı noktası

Google Home'un UDP yayınını gönderdiği bağlantı noktası

3311

Dinleme bağlantı noktası

Google Home'un yanıt dinlediği bağlantı noktası

3312

Keşif paketi

UDP yayın veri yükü

48656c6c6f4c6f63616c486f6d6553444b

4777bf63c53b6858.png

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

deviceid123

discoveryPortOut

3311

discoveryPacket

HelloLocalHomeSDK

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:

  1. Google Home cihazınızı Developer Console projesine erişim iznine sahip bir kullanıcıya bağladığınızdan emin olun.
  2. 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.
  3. Geliştirme makinenizde Chrome'u başlatın.
  4. 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.

567f97789a7d8846.png

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.

6b67ded470a4c8be.png

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.

bc030517dacc3ac9.png

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

764dbc83b95782a.png

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.