Akıllı ev cihazlarını Google Asistan'a bağlama

1. Başlamadan önce

Nesnelerin İnterneti (IoT) geliştiricisi olarak, kullanıcılarınıza Google Home uygulamasındaki dokunmatik kontroller ve Asistan'daki sesli komutlar aracılığıyla cihazlarını kontrol etme olanağı tanıyan buluttan buluta entegrasyonlar oluşturabilirsiniz.

79266e5f45e6ae20.gif

Buluttan buluta entegrasyonlar, ev ve cihazlarıyla ilgili bağlamsal veriler sağlamak için Home Graph'ı kullanır. Böylece evin mantıksal bir haritasını oluşturur. Bu bağlam, Asistan'ın kullanıcının evdeki konumuna göre isteklerini daha doğal bir şekilde anlamasına olanak tanır. Örneğin, Ev Grafiği; termostat, lamba, vantilatör ve elektrikli süpürge gibi farklı üreticilerin birden fazla cihaz türünü içeren bir salon konseptini saklayabilir.

d009cef0f903d284.jpeg

Ön koşullar

Ne oluşturacaksınız?

Bu codelab'de, sanal bir akıllı çamaşır makinesini yöneten bir bulut hizmeti yayınlayacaksınız. Ardından buluttan buluta entegrasyon oluşturacak ve bunu Asistan'a bağlayacaksınız.

Neler öğreneceksiniz?

  • Akıllı ev bulut hizmeti dağıtma
  • Hizmetinizi Asistan'a bağlama
  • Cihaz durumu değişikliklerini Google'da yayınlama

İhtiyacınız olanlar

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

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:

GitHub deposunu komut satırından da klonlayabilirsiniz:

git clone https://github.com/google-home/smarthome-washer.git

Proje hakkında

Başlangıç projesi aşağıdaki alt dizinleri içerir:

  • public: Akıllı çamaşır makinesinin durumunu kolayca kontrol edip izlemek için ön uç kullanıcı arayüzü.
  • functions: Firebase için Cloud Functions ve Firebase Realtime Database ile akıllı çamaşır makinesini yöneten, tamamen uygulanmış bir bulut hizmeti.

Firebase projesi oluşturma

  1. Firebase'e gidin.
  2. Proje oluştur'u tıklayın ve projenizin adını girin.
  3. Sözleşme onay kutusunu işaretleyin ve Devam'ı tıklayın. Sözleşme onay kutusu yoksa bu adımı atlayabilirsiniz.
    Firebase projesi oluşturun
  4. Firebase projeniz oluşturulduktan sonra proje kimliğini bulun. Projeye Genel Bakış'a gidin ve ayarlar simgesini > Proje Ayarları'nı tıklayın.
    Proje ayarlarını açma
  5. Projeniz Genel sekmesinde listelenir.
    Genel proje ayarları

Firebase'e bağlanma

washer-start dizinine gidin, ardından Firebase CLI'yi entegrasyon projenizle ayarlayın:

cd washer-start
firebase use <firebase-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
    

washer-done/firebase.json dosyasında kodu şu şekilde tamamlayın:

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  },
    "headers": [{
      "source" : "**/*.@(js|html)",
      "headers" : [ {
        "key" : "Cache-Control",
        "value" : "max-age=0"
      } ]
    }],
  "functions": [
    {
      "source": "functions",
      "codebase": "default",
      "ignore": [
        "node_modules",
        ".git",
        "firebase-debug.log",
        "firebase-debug.*.log",
        "*.local"
      ]
    }
  ]
}

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/<firebase-project-id>/overview
Hosting URL: https://<firebase-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://.web.app) Barındırma URL'sini açın. Aşağıdaki arayüzü görürsünüz:

5845443e94705557.png

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 Google Home Developer Console'u 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.

4. Yıkayıcı oluşturma

Entegrasyonunuzu yapılandırdığınıza göre cihaz ekleyebilir ve veri gönderebilirsiniz. Bulut hizmetinizin aşağıdaki amaçları işlemesi gerekir:

  • Asistan, kullanıcının hangi cihazları bağladığını öğrenmek istediğinde SYNC intent'i gerçekleşir. Bu, kullanıcı bir hesap bağladığında hizmetinize gönderilir. Kullanıcının tüm cihazlarını ve bunların özelliklerini içeren bir JSON yükü ile yanıt vermeniz gerekir.
  • Asistan bir cihazın mevcut durumunu veya durumunu öğrenmek istediğinde QUERY intent'i gerçekleşir. İstekte bulunulan her cihazın durumunu içeren bir JSON yükü ile yanıt vermeniz gerekir.
  • Asistan, bir cihazı kullanıcı adına kontrol etmek istediğinde EXECUTE intent'i gerçekleşir. İstekte bulunulan her cihazın yürütme durumunu içeren bir JSON yükü ile yanıt vermeniz gerekir.
  • Kullanıcı, hesabının Asistan'la bağlantısını kaldırdığında DISCONNECT intent'i gerçekleşir. Bu kullanıcının cihazlarıyla ilgili etkinlikleri Asistan'a göndermeyi durdurmanız gerekir.

Aşağıdaki bölümlerde, bu amaçları işlemek için daha önce dağıttığınız işlevleri güncelleyeceksiniz.

Senkronizasyon yanıtını güncelleme

Asistan'dan gelen isteklere yanıt verecek kodu içeren functions/index.js dosyasını açın.

Cihaz meta verilerini ve özelliklerini döndürerek bir SYNC intent işlemeniz gerekir. onSync dizisindeki JSON'u, çamaşır makinesinin cihaz bilgilerini ve önerilen özelliklerini içerecek şekilde güncelleyin.

index.js

app.onSync((body) => {
  return {
    requestId: body.requestId,
    payload: {
      agentUserId: USER_ID,
      devices: [{
        id: 'washer',
        type: 'action.devices.types.WASHER',
        traits: [
          'action.devices.traits.OnOff',
          'action.devices.traits.StartStop',
          'action.devices.traits.RunCycle',
        ],
        name: {
          defaultNames: ['My Washer'],
          name: 'Washer',
          nicknames: ['Washer'],
        },
        deviceInfo: {
          manufacturer: 'Acme Co',
          model: 'acme-washer',
          hwVersion: '1.0',
          swVersion: '1.0.1',
        },
        willReportState: true,
        attributes: {
          pausable: true,
        },
      }],
    },
  };
});

Firebase'e dağıtma

Güncellenen bulut karşılama hizmetini Firebase CLI'yi kullanarak dağıtın:

firebase deploy --only functions

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.

ae252220753726f6.png

5. Komutları ve sorguları işleme

Bulut hizmetiniz çamaşır makinesini Google'a düzgün bir şekilde bildirmeye başladı. Şimdi cihaz durumunu isteme ve komut gönderme özelliğini eklemeniz gerekiyor.

QUERY amacını işleme

QUERY intent'i bir cihaz grubu içerir. Her cihaz için mevcut durumunu belirterek yanıt vermeniz gerekir.

functions/index.js içinde, intent isteğinde bulunan hedef cihazların listesini işlemek için QUERY işleyicisini düzenleyin.

index.js

app.onQuery(async (body) => {
  const {requestId} = body;
  const payload = {
    devices: {},
  };
  const queryPromises = [];
  const intent = body.inputs[0];
  for (const device of intent.payload.devices) {
    const deviceId = device.id;
    queryPromises.push(queryDevice(deviceId)
        .then((data) => {
        // Add response to device payload
          payload.devices[deviceId] = data;
        }
        ));
  }
  // Wait for all promises to resolve
  await Promise.all(queryPromises);
  return {
    requestId: requestId,
    payload: payload,
  };
});

İstekte bulunan her cihaz için Gerçek Zamanlı Veritabanı'nda depolanan mevcut durumu döndürün. queryFirebase ve queryDevice işlevlerini, çamaşır makinesinin durum verilerini döndürecek şekilde güncelleyin.

index.js

const queryFirebase = async (deviceId) => {
  const snapshot = await firebaseRef.child(deviceId).once('value');
  const snapshotVal = snapshot.val();
  return {
    on: snapshotVal.OnOff.on,
    isPaused: snapshotVal.StartStop.isPaused,
    isRunning: snapshotVal.StartStop.isRunning,
  };
};

const queryDevice = async (deviceId) => {
  const data = await queryFirebase(deviceId);
  return {
    on: data.on,
    isPaused: data.isPaused,
    isRunning: data.isRunning,
    currentRunCycle: [{
      currentCycle: 'rinse',
      nextCycle: 'spin',
      lang: 'en',
    }],
    currentTotalRemainingTime: 1212,
    currentCycleRemainingTime: 301,
  };
};

EXECUTE amacını işleme

EXECUTE intent, cihaz durumunu güncelleme komutlarını işler. Yanıt, her komutun durumunu (ör. SUCCESS, ERROR veya PENDING) ve yeni cihaz durumunu döndürür.

functions/index.js'te, güncellenmesi gereken özelliklerin listesini ve her komut için hedef cihaz grubunu işlemek üzere EXECUTE işleyicisini düzenleyin:

index.js

app.onExecute(async (body) => {
  const {requestId} = body;
  // Execution results are grouped by status
  const result = {
    ids: [],
    status: 'SUCCESS',
    states: {
      online: true,
    },
  };

  const executePromises = [];
  const intent = body.inputs[0];
  for (const command of intent.payload.commands) {
    for (const device of command.devices) {
      for (const execution of command.execution) {
        executePromises.push(
            updateDevice(execution, device.id)
                .then((data) => {
                  result.ids.push(device.id);
                  Object.assign(result.states, data);
                })
                .catch(() => functions.logger.error('EXECUTE', device.id)));
      }
    }
  }

  await Promise.all(executePromises);
  return {
    requestId: requestId,
    payload: {
      commands: [result],
    },
  };
});

Her komut ve hedef cihaz için, istenen özelliğe karşılık gelen değerleri Gerçek Zamanlı Veritabanı'nda güncelleyin. Uygun Firebase referansını güncellemek ve güncellenmiş cihaz durumunu döndürmek için updateDevice işlevini değiştirin.

index.js

const updateDevice = async (execution, deviceId) => {
  const {params, command} = execution;
  let state; let ref;
  switch (command) {
    case 'action.devices.commands.OnOff':
      state = {on: params.on};
      ref = firebaseRef.child(deviceId).child('OnOff');
      break;
    case 'action.devices.commands.StartStop':
      state = params.start
      ? {isRunning: true, isPaused: false}
      : {isRunning: false, isPaused: false};
      ref = firebaseRef.child(deviceId).child('StartStop');
      break;
    case 'action.devices.commands.PauseUnpause':
      const data = await queryDevice(deviceId);
      state = (data.isPaused === false && data.isRunning === false)
        ? {isRunning: false, isPaused: false}
        : {isRunning: !params.pause, isPaused: params.pause};
      ref = firebaseRef.child(deviceId).child('StartStop');
      break;
  }

  return ref.update(state)
      .then(() => state);
};

6. Entegrasyonunuzu test etme

Üç intent'i de uyguladıktan sonra entegrasyonunuzun çamaşır makinesini kontrol edip etmediğini test edebilirsiniz.

Firebase'e dağıtma

Güncellenen bulut karşılama hizmetini Firebase CLI'yi kullanarak dağıtın:

firebase deploy --only functions

Yıkayıcıyı test etme

Artık telefonunuzda aşağıdaki sesli komutlardan herhangi birini denediğinizde değer değişikliğini görebilirsiniz:

"Ok Google, çamaşır makinemi aç."

"Ok Google, çamaşır makinemi duraklat."

"Ok Google, çamaşır makinemi durdur."

Soru sorarak çamaşır makinenizin mevcut durumunu da görebilirsiniz.

"Ok Google, çamaşır makinem açık mı?"

"Ok Google, çamaşır makinem çalışıyor mu?"

"Ok Google, çamaşır makinem hangi programda?"

Bu sorguları ve komutları, Firebase Console'un İşlevler bölümünde işlevinizin altında görünen günlüklerde görüntüleyebilirsiniz. Günlük yazma ve görüntüleme başlıklı makalede Firebase günlükleri hakkında daha fazla bilgi edinin.

Bu sorguları ve komutları Google Cloud Console'da Günlük > Günlük Gezgini'ne giderek de bulabilirsiniz. Cloud Logging ile etkinlik günlüklerine erişme başlıklı makalede Google Cloud günlük kaydı hakkında daha fazla bilgi edinin.

7. Güncellemeleri Google'a bildirme

Bulut hizmetinizi akıllı ev intent'leriyle tamamen entegre ederek kullanıcıların cihazlarının mevcut durumunu kontrol etmesine ve sorgulamasına olanak tanıdınız. Ancak uygulamada, hizmetinizin cihaz varlığı veya durumundaki değişiklikler gibi etkinlik bilgilerini Asistan'a proaktif olarak göndermesi için henüz bir yöntem bulunmuyor.

Senkronizasyon iste özelliğini kullanarak, kullanıcılar cihaz eklediğinde veya kaldırdığında ya da cihaz özellikleri değiştiğinde yeni bir senkronizasyon isteği tetikleyebilirsiniz. Durum Raporu ile bulut hizmetiniz, kullanıcılar bir cihazın durumunu fiziksel olarak değiştirdiğinde (ör. ışık anahtarını açarak) veya başka bir hizmeti kullanarak değiştirdiğinde cihazın durumunu Home Graph'a proaktif olarak gönderebilir.

Bu bölümde, bu yöntemleri ön uç web uygulamasından çağıracak kod ekleyeceğiz.

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.

ee198858a6eac112.png

Rapor durumunu etkinleştirme

Gerçek Zamanlı Veritabanı'na yapılan yazma işlemleri, başlangıç projesindeki reportstate işlevini tetikler. Veritabanına yazılan verileri yakalamak ve Rapor Durumu aracılığıyla Ana Sayfa Grafiği'ne göndermek için functions/index.js içindeki reportstate işlevini güncelleyin.

index.js

exports.reportstate = functions.database.ref('{deviceId}').onWrite(
    async (change, context) => {
      functions.logger.info('Firebase write event triggered Report State');
      const snapshot = change.after.val();

      const requestBody = {
        requestId: 'ff36a3cc', /* Any unique ID */
        agentUserId: USER_ID,
        payload: {
          devices: {
            states: {
              /* Report the current state of our washer */
              [context.params.deviceId]: {
                on: snapshot.OnOff.on,
                isPaused: snapshot.StartStop.isPaused,
                isRunning: snapshot.StartStop.isRunning,
              },
            },
          },
        },
      };

      const res = await homegraph.devices.reportStateAndNotification({
        requestBody,
      });
      functions.logger.info('Report state response:', res.status, res.data);
    });

İstek Senkronizasyonunu Etkinleştirme

Ön uç web kullanıcı arayüzündeki simge yenilendiğinde başlangıç projesindeki requestsync işlevi tetiklenir. HomeGraph API'yi çağırmak için functions/index.js işlevini functions/index.js içinde uygulayın.requestsync

index.js

exports.requestsync = functions.https.onRequest(async (request, response) => {
  response.set('Access-Control-Allow-Origin', '*');
  functions.logger.info(`Request SYNC for user ${USER_ID}`);
  try {
    const res = await homegraph.devices.requestSync({
      requestBody: {
        agentUserId: USER_ID,
      },
    });
    functions.logger.info('Request sync response:', res.status, res.data);
    response.json(res.data);
  } catch (err) {
    functions.logger.error(err);
    response.status(500).send(`Error requesting sync: ${err}`);
  }
});

Firebase'e dağıtma

Güncellenen kodu Firebase CLI'yi kullanarak dağıtın:

firebase deploy --only functions

Uygulamanızı test etme

Web kullanıcı arayüzünde Yenile ae8d3b25777a5e30.png düğmesini tıklayın ve Firebase konsol günlüğünde bir senkronizasyon isteği gördüğünüzü doğrulayın.

Ardından, ön uç web kullanıcı arayüzünde çamaşır makinesinin özelliklerini ayarlayın ve Güncelle'yi tıklayın. Google'a bildirilen durum değişikliğini Firebase konsolu günlüklerinizde görebildiğinizi doğrulayın.

8. Tebrikler

674c4f4392e98c1.png

Tebrikler! Buluttan buluta entegrasyonlar kullanarak Asistan'ı bir cihaz bulut hizmetiyle başarıyla entegre ettiniz.

Daha fazla bilgi

Daha ayrıntılı bilgi edinmek için uygulayabileceğiniz bazı fikirler:

Ayrıca, entegrasyonunuzu kullanıcılara yayınlamak için sertifika süreci de dahil olmak üzere bir entegrasyonu test etme ve incelemeye gönderme hakkında daha fazla bilgi edinebilirsiniz.