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.
Cihaz Erişimi entegrasyonunun başarılı olması için üç temel adım vardır:
- Proje Oluşturma: Google Cloud Platform'da bir proje oluşturun ve Cihaz Erişim Konsolu'nda geliştirici olarak kaydolun.
- 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.
- 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.)
İ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.
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.
İ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.
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.
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.
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:
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:
- Lütfen bir seçenek belirleyin: Mevcut bir projeyi kullan
- Bu dizin için varsayılan bir Firebase projesi seçin: ***[GCP-Project-Id]*** seçeneğini belirleyin
- Herkese açık dizininiz olarak neyi kullanmak istiyorsunuz? — Herkese açık
- Tek sayfalık uygulama olarak yapılandırılsın mı? — Evet
- 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.
Hosting URL'sini bir tarayıcıda açtığınızda az önce dağıttığınız sayfayı görürsünüz:
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:
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.
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:
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.
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.
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.
Bu uygulama sahte olduğu için Google, yönlendirme yayınlamadan önce bir uyarı verir.
"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.
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
veyaPOST)
) - ç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:
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:
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:
- Cloud Functions'ı yazmak için hangi dili kullanmak istersiniz? - JavaScript
- Olası hataları yakalamak ve stili uygulamak için ESLint'i kullanmak ister misiniz? — Hayır
- 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.
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:
İ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:
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.