Cihaz Erişimi Web Uygulaması Oluşturma

1. Giriş

Cihaz Erişimi programı, geliştiricilerin Google Nest cihazlarını uygulamalarından kontrol edebilmeleri için bir REST API olan Smart Device Management API'yi sağlar. Kullanıcıların, Nest cihazlarına üçüncü taraf erişimi için izin vermesi gerekir.

52f77aa38cda13a6.png

Cihaz Erişimi entegrasyonunun başarılı olması için üç temel adım vardır:

  1. Proje Oluşturma: Google Cloud Platform'da bir proje oluşturun ve Cihaz Erişim Konsolu'nda geliştirici olarak kaydolun.
  2. Hesap Bağlama: Kullanıcıları hesap bağlama akışı aracılığıyla sağlayın ve erişim kodu alın. Kodu bir erişim jetonuyla değiştirin.
  3. Cihaz Kontrolü: Erişim jetonuyla komut göndererek cihazları kontrol etmek için Smart Device Management API istekleri yapın.

Bu Codelab'de, kimlik doğrulama amaçlı bir web uygulaması derleyerek ve Smart Device Management API çağrıları yaparak Cihaz Erişimi'nin nasıl çalıştığını ayrıntılı olarak inceleyeceğiz. Ayrıca, Cihaz Erişimi isteklerini yönlendirmek için Node.js ve Express'i kullanarak basit bir proxy sunucu dağıtmayı keşfedeceğiz.

Başlamadan önce, bu Codelab'de kullanacağımız OAuth 2.0 ile kimlik doğrulama veya Node.js ile web uygulaması oluşturma gibi yaygın web teknolojileriyle ilgili bilgilerinizi tazelemenizi rica ediyorum.

İhtiyacınız Olanlar

  • Node.js 8 veya üzeri
  • Bağlı bir Nest Thermostat ile Google Hesabı

Neler Öğreneceksiniz?

  • Statik web sayfaları ve Cloud Functions işlevleri barındıran bir Firebase projesi oluşturma
  • Tarayıcı tabanlı bir web uygulaması aracılığıyla cihaz erişim istekleri gönderme
  • İsteklerinizi yönlendirmek için Node.js ve Express ile proxy sunucu oluşturma

2. Proje Oluşturma

Geliştiricilerin, Cihaz Erişimi entegrasyonunu ayarlamak için bir Google Cloud Platform (GCP) projesi oluşturması gerekir. GCP projesinde oluşturulan bir İstemci Kimliği ve İstemci Gizli Anahtarı, geliştiricinin uygulaması ile Google Cloud arasındaki OAuth akışının bir parçası olarak kullanılacaktır. Geliştiricilerin ayrıca Cihaz Erişim Konsolu'nu ziyaret ederek Smart Device Management API'ye erişecek bir proje oluşturmaları gerekir.

Google Cloud Platform

Google Cloud Platform'a gidin. Yeni proje oluştur'u tıklayın ve bir proje adı girin. Google Cloud için bir proje kimliği de [GCP-Project-Id] gösterilir. Firebase kurulumu sırasında kullanacağımız için lütfen bu kimliği kaydedin. (Bu Codelab'de bu kimlikten [GCP-Project-Id] olarak bahsedeceğiz.)

585e926b21994ac9.png

İlk adım, projemizde gerekli API Kitaplığı'nı etkinleştirmektir. API'ler ve Hizmetler > Kitaplık'a gidip Smart Device Management API'yi arayın. Projenizi Device Access API çağrılarına istek göndermek üzere yetkilendirmek için bu API'yi etkinleştirmeniz gerekir.

14e7eabc422c7fda.png

OAuth kimlik bilgilerini oluşturmaya geçmeden önce projemiz için OAuth izin ekranını yapılandırmamız gerekiyor. API'ler ve Hizmetler > OAuth izin ekranı'na gidin. Kullanıcı Türü olarak harici'yi seçin. İlk ekranı tamamlamak için uygulamanız için bir ad ve destek e-posta adresinin yanı sıra geliştirici iletişim bilgilerini sağlayın. Test Kullanıcıları sorulduğunda, bu adımda bağlı cihazların e-posta adresini sağladığınızdan emin olun.

OAuth izin ekranınızı yapılandırdıktan sonra API'ler ve Hizmetler > Kimlik Bilgileri'ne gidin. +Kimlik Bilgileri Oluştur'u tıklayın ve OAuth istemci kimliği'ni seçin. Uygulama türü olarak Web uygulaması'nı seçin.

5de534212d44fce7.png

İstemcinize bir ad verin ve OLUŞTUR'u tıklayın. Daha sonra Yetkilendirilmiş JavaScript kaynağı ve Yetkilendirilmiş yönlendirme URI'si ekleyeceğiz. Bu işlem tamamlandığında bu OAuth 2.0 İstemcisi ile ilişkili [Client-Id] ve [Client-Secret] bilgileri gösterilir.

e6a670da18952f08.png

Cihaz Erişim Konsolu

Cihaz Erişim Konsolu'na gidin. Cihaz Erişim Konsolu'nu daha önce kullanmadıysanız Hizmet Şartları sözleşmesi ve 5 ABD doları kayıt ücreti alırsınız.

Yeni bir proje oluşturun ve ona bir proje adı verin. Bir sonraki pencerede, önceki adımda GCP'den aldığınız [Client-Id] değerini sağlayın.

f8a3f27354bc2625.png

Etkinlikleri etkinleştirmek ve proje oluşturma adımlarını tamamlamak sizi projenizin ana sayfasına yönlendirir. [Project-Id], projenize verdiğiniz adın altında listelenir.

db7ba33d8b707148.png

Smart Device Management API'ye istek gönderirken kullanacağımız için [Project-Id] bilginizi not edin.

3. Firebase Kurulumu

Firebase, geliştiricilere web uygulamalarını dağıtmak için hızlı ve kolay bir yol sağlar. Cihaz Erişimi entegrasyonumuz için Firebase kullanarak bir istemci tarafı web uygulaması geliştireceğiz.

Firebase Projesi oluşturun

Firebase Konsolu'na gidin. Proje Ekle'yi tıklayın ve ardından Proje Oluşturma adımında oluşturduğunuz projeyi seçin. Bu işlem, GCP projenize ([GCP-Project-Id]) bağlanacak bir Firebase projesi oluşturur.

Firebase projesi başarıyla oluşturulduktan sonra aşağıdaki ekranı görürsünüz:

dbb02bbacac093f5.png

Firebase Araçları'nı yükleyin

Firebase, uygulamanızı derlemeniz ve dağıtmanız için bir dizi CLI aracı sağlar. Bu araçları yüklemek için yeni bir terminal penceresi açın ve aşağıdaki komutu çalıştırın. Bu işlem, Firebase araçlarını tüm dünyada yükler.

$ npm i -g firebase-tools

Firebase araçlarının düzgün şekilde yüklendiğini doğrulamak için sürüm bilgisini kontrol edin.

$ firebase --version

Giriş komutunu kullanarak Firebase CLI araçlarına Google Hesabınızla giriş yapabilirsiniz.

$ firebase login

Barındırma Projesini Başlatın

Giriş yapabildiğinizde sonraki adım, web uygulamanız için bir barındırma projesi başlatmaktır. Terminalden projenizi oluşturmak istediğiniz klasöre gidin ve aşağıdaki komutu çalıştırın:

$ firebase init hosting

Firebase, bir barındırma projesine başlamanız için size bazı sorular sorar:

  1. Lütfen bir seçenek belirleyin: Mevcut bir projeyi kullan
  2. Bu dizin için varsayılan bir Firebase projesi seçin: ***[GCP-Project-Id]*** seçeneğini belirleyin
  3. Herkese açık dizininiz olarak neyi kullanmak istiyorsunuz? — Herkese açık
  4. Tek sayfalık uygulama olarak yapılandırılsın mı? — Evet
  5. GitHub ile otomatik derleme ve dağıtımlar ayarlansın mı? — Hayır

Projeniz başlatıldıktan sonra aşağıdaki komutla Firebase'e dağıtabilirsiniz:

$ firebase deploy

Firebase, projenizi tarar ve gerekli dosyaları bulut barındırma hizmetine dağıtır.

fe15cf75e985e9a1.png

Hosting URL'sini bir tarayıcıda açtığınızda az önce dağıttığınız sayfayı görürsünüz:

e40871238c22ebe2.png

Artık Firebase ile web sayfası dağıtmayla ilgili temel bilgileri öğrendiğinize göre Codelab örneğimizi dağıtmaya başlayalım.

4. Codelab Örneği

Aşağıdaki komutu kullanarak GitHub'da barındırılan codelab deposunu klonlayabilirsiniz:

$ git clone https://github.com/google/device-access-codelab-web-app.git

Bu kod deposunda, iki ayrı klasörde örnekler sağlıyoruz. codelab-start klasörü, bu Codelab'deki geçerli noktadan başlamanız için gerekli dosyaları içerir. codelab-done klasörü, bu Codelab'in tam işlevsel istemci ve Node.js sunucusuyla birlikte eksiksiz bir sürümünü içerir.

Bu codelab boyunca codelab-start klasöründeki dosyaları kullanacağız ancak herhangi bir noktada zorluk yaşarsanız codelab-done sürümüne de başvurmaktan çekinmeyin.

Codelab Örnek Dosyaları

Codelab-start klasörünün dosya yapısı aşağıdaki gibidir:

public
├───index.html
├───scripts.js
├───style.css
firebase.json

Ortak klasör, uygulamamızın statik sayfalarını içerir. firebase.json, web isteklerinin uygulamamıza yönlendirilmesinden sorumludur. codelab-done sürümünde, Google Cloud işlevlerine dağıtılacak proxy sunucumuz (express) için mantığı içeren bir functions dizini de bulunur.

Codelab Örneği Dağıtma

codelab-start klasöründeki dosyaları projenizin dizinine kopyalayın.

$ firebase deploy

Firebase dağıtımı tamamladıktan sonra Codelab uygulamasını görebilirsiniz:

e84c1049eb4cca92.png

Yetkilendirme akışını başlatmak için iş ortağı kimlik bilgileri gerekir. Bu kimlik bilgilerini bir sonraki bölümde ele alacağız.

5. OAuth'u işleme

OAuth, erişim yetkisi için kullanılan bir web standardıdır ve genellikle kullanıcıların üçüncü taraf uygulamalarının, şifreleri paylaşmadan hesap bilgilerine erişmesine izin vermeleri için kullanılır. OAuth 2.0'ı, geliştiricilerin, kullanıcı cihazlarına Cihaz Erişimi aracılığıyla erişmelerini sağlamak için kullanıyoruz.

7ee31f5d9c37f699.png

Yönlendirme URI'si Belirtin

OAuth akışının ilk adımı, Google OAuth 2.0 uç noktasına bir dizi parametrenin iletilmesini içerir. Google OAuth sunucuları, kullanıcının iznini aldıktan sonra Yönlendirme URI'nıza yetkilendirme kodu içeren bir istek gönderir.

scripts.js içinde SERVER_URI sabitini (satır 19) kendi Hosting URL'nizle güncelleyin:

const SERVER_URI = "https://[GCP-Project-Id].web.app";

Uygulamayı bu değişiklikle yeniden dağıtırsanız projeniz için kullanılan Yönlendirme URI'nız güncellenir.

$ firebase deploy

Yönlendirme URI'sini etkinleştir

Komut dosyaları dosyasındaki Yönlendirme URI'sını güncelledikten sonra, projeniz için oluşturduğunuz İstemci Kimliği için izin verilen Yönlendirme URI'leri listesine de eklemeniz gerekir. Google Cloud Platform'da Kimlik Bilgileri Sayfası'na gidin. Bu sayfada, projeniz için oluşturulan tüm kimlik bilgileri listelenir:

1a07b624b5e548da.png

OAuth 2.0 İstemci Kimlikleri listesinde, Proje Oluşturma adımında oluşturduğunuz İstemci Kimliği'ni seçin. Uygulamanızın yönlendirme URI'sini, projeniz için Yetkilendirilmiş Yönlendirme URI'leri listesine ekleyin.

6d65b298e1f005e2.png

Oturum Açmayı Deneyin!

Firebase ile ayarladığınız Hosting URL'sine gidin, iş ortağı kimlik bilgilerinizi girin ve OTURUM AÇ düğmesini tıklayın. İstemci Kimliği ve İstemci Sırrı, Google Cloud Platform'dan aldığınız kimlik bilgileridir. Proje Kimliği, Cihaz Erişim Konsolu'ndan alınır.

78b48906a2dd7c05.png

OTURUM AÇ düğmesi, giriş ekranından başlayarak kullanıcılarınızı, kuruluşunuzun OAuth akışına yönlendirir. Giriş yaptıktan sonra, kullanıcılardan projenizle Nest cihazlarına erişim izni vermeleri istenir.

e9b7887c4ca420.png

Bu uygulama sahte olduğu için Google, yönlendirme yayınlamadan önce bir uyarı verir.

b227d510cb1df073.png

"Gelişmiş"i tıklayın, ardından uygulamanıza yönlendirmeyi tamamlamak için "web.app'e git (güvenli değil)" seçeneğini belirleyin.

673a4fd217e24dad.png

Bu işlem, gelen GET isteği kapsamında bir OAuth Kodu sağlar ve uygulama bu kodu daha sonra bir Erişim Jetonu ve Yenileme Jetonu ile değiştirir.

6. Cihaz Kontrolü

Cihaz Erişimi örnek uygulaması, Google Nest cihazlarını kontrol etmek için Akıllı Cihaz Yönetimi REST API çağrılarını kullanır. Bu çağrılar, belirli komutlar için gereken bir yük ile birlikte, GET veya POST isteğinin başlığındaki erişim jetonunun iletilmesini içerir.

Bu çağrıları işlemek için genel bir erişim isteği işlevi yazdık. Ancak bu işlev için doğru uç noktayı ve gerektiğinde yük nesnesini sağlamanız gerekir.

function deviceAccessRequest(method, call, localpath, payload = null) {...}
  • yöntem: HTTP isteğinin türü (GET veya POST))
  • çağrısı — Yanıtları yönlendirmek için kullanılan, API çağrımızı temsil eden bir dize (listDevices, thermostatMode, temperatureSetpoint)
  • localpath - İsteğin yapıldığı, Proje Kimliği ve Cihaz Kimliğini içeren uç nokta (https://smartdevicemanagement.googleapis.com/v1 sonrasına eklenir)
  • yük (*): API çağrısı için gerekli ek veriler (örneğin, bir set noktası için sıcaklığı temsil eden sayısal değer)

Nest Thermostat\'ı kontrol etmek için örnek kullanıcı arayüzü kontrolleri (Cihazları Listeleme, Mod Ayarlama, Sıcaklık Ayarlama) oluşturacağız:

86f8a193aa397421.png

Bu kullanıcı arayüzü kontrolleri scripts.js öğesinden ilgili işlevleri (listDevices(), postThermostatMode(), postTemperatureSetpoint()) çağırır. Bunları uygulamanız için boş bırakılırlar. Amaç, doğru yöntemi/yolu seçmek ve yükü deviceAccessRequest(...) işlevine iletmektir.

Cihazları Listeleme

En basit Cihaz Erişimi çağrısı: listDevices. Bu özellik, GET isteği kullanır ve yük gerektirmez. Uç nokta, projectId kullanılarak yapılandırılmalıdır. listDevices() fonksiyonunuzu aşağıdaki gibi tamamlayın:

function listDevices() {
  var endpoint = "/enterprises/" + projectId + "/devices";
  deviceAccessRequest('GET', 'listDevices', endpoint);
}

Değişikliklerinizi kaydedin ve aşağıdaki komutla Firebase projenizi tekrar dağıtın:

$ firebase deploy

Uygulamanın yeni sürümü dağıtıldıktan sonra sayfayı yeniden yüklemeyi deneyin ve CİHAZLARI LİSTELE'yi tıklayın. Bunu yaptığınızda Cihaz Kontrolü altındaki liste doldurulur ve termostatınızın kimliğini görürsünüz:

b64a198673ed289f.png

Listeden cihaz seçildiğinde scripts.js dosyasındaki deviceId alanı güncellenir. Sonraki iki kontrolde, kontrol etmek istediğimiz belirli cihaz için deviceId belirtmemiz gerekecek.

Termostat Kontrolü

Smart Device Management API'de Nest Thermostat\'ın temel kontrolü için iki özellik vardır. ThermostatMode ve TemperatureSetpoint. Termostat Modu, Nest Thermostat'ınızın modunu olası dört farklı moddan birine ayarlar: {Kapalı, Isıtma, Soğutma, Isıtma Soğutma}. Daha sonra, seçilen modu yükün bir parçası olarak sağlamamız gerekir.

scripts.js nesnesindeki postThermostatMode() fonksiyonunuzu aşağıdakiyle değiştirin:

function postThermostatMode() {
  var endpoint = "/enterprises/" + projectId + "/devices/" + deviceId + ":executeCommand";
  var tempMode = id("tempMode").value;
  var payload = {
    "command": "sdm.devices.commands.ThermostatMode.SetMode",
    "params": {
      "mode": tempMode
    }
  };
  deviceAccessRequest('POST', 'thermostatMode', endpoint, payload);
}

Bir sonraki işlev (postTemperatureSetpoint()), Nest Thermostat'ınız için sıcaklığı (Santigrat cinsinden) ayarlamayı işler. Seçilen termostat moduna bağlı olarak yükte ayarlanabilecek iki parametre vardır: heatCelsius ve coolCelsius.

function postTemperatureSetpoint() {
  var endpoint = "/enterprises/" + projectId + "/devices/" + deviceId + ":executeCommand";
  var heatCelsius = parseFloat(id("heatCelsius").value);
  var coolCelsius = parseFloat(id("coolCelsius").value);

  var payload = {
    "command": "",
    "params": {}
  };
  
  if ("HEAT" === id("tempMode").value) {
    payload.command = "sdm.devices.commands.ThermostatTemperatureSetpoint.SetHeat";
    payload.params["heatCelsius"] = heatCelsius;
  }
  else if ("COOL" === id("tempMode").value) {
    payload.command = "sdm.devices.commands.ThermostatTemperatureSetpoint.SetCool";
    payload.params["coolCelsius"] = coolCelsius;
  }
  else if ("HEATCOOL" === id("tempMode").value) {
    payload.command = "sdm.devices.commands.ThermostatTemperatureSetpoint.SetRange";
    payload.params["heatCelsius"] = heatCelsius;
    payload.params["coolCelsius"] = coolCelsius;
  } else {
    console.log("Off and Eco mode don't allow this function");
    return;
  }
  deviceAccessRequest('POST', 'temperatureSetpoint', endpoint, payload);
}

7. Node.js Sunucusu (İsteğe bağlı)

Tebrikler! Tarayıcıdan Smart Device Management API isteği gönderebilen bir istemci tarafı web uygulaması oluşturdunuz. Sunucu tarafında geliştirme yapmak isteyenler için, isteklerinizi tarayıcıdan yeniden yönlendirebilecek bir proxy sunucuyla çalışmalarınıza hemen başlamak istiyoruz.

Bu proxy sunucu için Firebase Cloud Functions, Node.js ve Express'i kullanacağız.

Cloud Functions'ı Başlatma

Yeni bir terminal penceresi açın, proje dizininize gidin ve aşağıdaki komutu çalıştırın:

$ firebase init functions

Firebase, Cloud Functions'ı başlatmanız için size bir dizi soru sorar:

  1. Cloud Functions'ı yazmak için hangi dili kullanmak istersiniz? - JavaScript
  2. Olası hataları yakalamak ve stili uygulamak için ESLint'i kullanmak ister misiniz? — Hayır
  3. npm ile bağımlılıkları şimdi yüklemek istiyor musunuz? — Evet

Bu işlem, projenizde bir functions klasörünü başlatır ve gerekli bağımlılıkları yükler. Proje klasörünüzde bir işlev dizininin yanı sıra bulut işlevlerimizi tanımlamak için bir index.js dosyası, ayarları tanımlamak için package.json dosyasını ve bağımlılıkları içeren bir node_modules dizinini görürsünüz.

Sunucu tarafı işlevini oluşturmak için iki npm kitaplığı kullanacağız: express ve xmlhttprequest. Bundle.json dosyasındaki bağımlılıklar listesine aşağıdaki girişleri eklemeniz gerekir:

"xmlhttprequest": "^1.8.0",
"express": "^4.17.0"

Ardından, işlevler dizininden npm yükleme işlemini çalıştırmak, projeniz için bağımlılıkları yükler:

$ npm install

npm paket indirmeyle ilgili bir sorun yaşarsa aşağıdaki komutla xmlhttprequest dosyasını kaydetmeyi ve açık bir şekilde ifade etmeyi deneyebilirsiniz:

$ npm install express xmlhttprequest --save

Blaze Planı'na geç

firebase deploy komutunu kullandığınızda Blaze planına geçmeniz gerekir. Bunun için hesabınıza bir ödeme yöntemi eklemeniz gerekir. Projeye Genel Bakış > Kullanım ve faturalandırma'ya gidin ve projeniz için Blaze planını seçtiğinizden emin olun.

c6a5e5a21397bef6.png

Ekspres Sunucu Oluşturun

Express sunucuları, gelen GET ve POST isteklerine yanıt vermek için basit bir çerçeve izler. POST isteklerini dinleyen, bunları yükte belirtilen bir hedef URL'ye aktaran ve aktarımdan alınan yanıtla yanıt veren bir servlet oluşturduk.

İşlevler dizinindeki index.js dosyanızı aşağıdaki gibi değiştirin:

const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
const functions = require('firebase-functions');
const express = require('express');
const http = require('http');

const app = express();
app.use(express.json());


//***** Device Access - Proxy Server *****//

// Serving Get Requests (Not used) 
app.get('*', (request, response) => {
  response.status(200).send("Hello World!");
});
// Serving Post Requests
app.post('*', (request, response) => {
  
  setTimeout(() => {
    // Read the destination address from payload:
    var destination = request.body.address;
    
    // Create a new proxy post request:
    var xhr = new XMLHttpRequest();
    xhr.open('POST', destination);
    
    // Add original headers to proxy request:
    for (var key in request.headers) {
            var value = request.headers[key];
      xhr.setRequestHeader(key, value);
    }
    
    // Add command/parameters to proxy request:
    var newBody = {};
    newBody.command = request.body.command;
    newBody.params = request.body.params;
    
    // Respond to original request with the response coming
    // back from proxy request (to Device Access Endpoint)
    xhr.onload = function () {
      response.status(200).send(xhr.responseText);
    };
    
    // Send the proxy request!
    xhr.send(JSON.stringify(newBody));
  }, 1000);
});

// Export our app to firebase functions:
exports.app = functions.https.onRequest(app);

İstekleri sunucumuza yönlendirmek için firebase.json kaynaklı yeniden yazma işlemlerini aşağıdaki şekilde düzenlememiz gerekir:

{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [{
        "source": "/proxy**",
        "function": "app"
      },{
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

Bu işlem, /proxy ile başlayan URL'leri Express sunucumuza yönlendirecek, kalan kısmı ise index.html sunucumuza yönlendirecektir.

Proxy API Çağrıları

Artık sunucumuz hazır olduğuna göre, tarayıcımızın istekleri şu adrese göndermesi için scripts.js bölgesinde bir proxy URI'sı tanımlayalım:

const PROXY_URI = SERVER_URI + "/proxy";

Ardından, dolaylı Cihaz Erişimi çağrıları için deviceAccessRequest(...) işleviyle aynı imzaya sahip olan scripts.js adlı bir proxyRequest işlevi ekleyin.

function proxyRequest(method, call, localpath, payload = null) {
    var xhr = new XMLHttpRequest();
    
    // We are doing our post request to our proxy server:
    xhr.open(method, PROXY_URI);
    xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
    xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
    xhr.onload = function () {
      // Response is passed to deviceAccessResponse function:
      deviceAccessResponse(call, xhr.response);
    };
    
    // We are passing the device access endpoint in address field of the payload:
    payload.address = "https://smartdevicemanagement.googleapis.com/v1" + localpath;
    if ('POST' === method && payload)
        xhr.send(JSON.stringify(payload));
    else
        xhr.send();
}

Son adım, scripts.js içindeki postThermostatMode() ve postTemperatureSetpoint() işlevlerindeki deviceAccessRequest(...) çağrılarını proxyRequest(...) işleviyle değiştirmektir.

Uygulamayı güncellemek için firebase deploy komutunu çalıştırın.

$ firebase deploy

Böylece, Cloud Functions'ta Express'i kullanan, çalışan bir Node.js proxy sunucunuz olur.

Cloud Functions İşlevi İzinlerini Sağlama

Son adım, bulut işlevlerinizin erişim izinlerini gözden geçirmek ve istemci tarafı uygulamanızın bunları çağırabileceğinden emin olmaktır.

Google Cloud Platform'daki menüden Cloud Functions sekmesine gidin, ardından bulut işlevinizi seçin:

461e9bae74227fc1.png

İzinler'i ve ardından Üye Ekle'yi tıklayın. Yeni üye alanına allUsers yazın ve rol olarak Cloud Functions > Cloud Functions Çağırıcısı'nı seçin. Kaydet 'i tıkladığınızda bir uyarı mesajı görüntülenir:

3adb01644217578c.png

Herkese Açık Erişime İzin Ver'i seçtiğinizde istemci tarafı uygulamanız, bulut işlevinizi kullanabilir.

Tebrikler, tüm adımları tamamladınız. Artık web uygulamanıza gidip proxy sunucunuz aracılığıyla yönlendirilen cihaz denetimlerini kullanabilirsiniz.

Sonraki adımlar

Cihaz Erişimi konusundaki uzmanlığınızı geliştirmenin yollarını mı arıyorsunuz? Diğer Nest cihazlarını kontrol etme hakkında daha fazla bilgi edinmek için özellikler belgelerine göz atın. Ürününüzü piyasaya sunma adımlarını öğrenmek için de sertifika sürecini inceleyin.

Cihaz Erişimi web uygulaması örnek uygulaması ile becerilerinizi daha da ileri taşıyın. Burada, Codelab deneyiminizi geliştirecek ve Nest kameraları, kapı zillerini ve termostatları kontrol etmek için çalışan bir web uygulaması dağıtacaksınız.