Action Smart Home menggunakan jenis perangkat untuk memberi tahu Asisten Google tentang tata bahasa apa yang harus digunakan dengan perangkat. Fitur perangkat menentukan kemampuan jenis perangkat. Perangkat mewarisi status setiap fitur perangkat yang ditambahkan ke Action.
Anda dapat menghubungkan setiap fitur yang didukung ke jenis perangkat yang dipilih untuk menyesuaikan fungsi perangkat pengguna. Jika Anda ingin menerapkan fitur kustom di Action yang saat ini tidak tersedia di skema perangkat, maka fitur Mode dan Tombol Beralih memungkinkan kontrol setelan tertentu dengan nama kustom yang Anda tentukan.
Selain kemampuan kontrol dasar yang disediakan oleh jenis dan fitur, Smart Home API memiliki fitur tambahan untuk meningkatkan pengalaman pengguna. Respons kesalahan memberikan masukan pengguna yang terperinci ketika intent tidak berhasil. Autentikasi 2 langkah (2FA) memperluas respons tersebut dan memberikan keamanan tambahan pada fitur perangkat pilihan Anda. Dengan mengirim respons error spesifik ke blok tantangan yang dikeluarkan dari Asisten, Action smart home Anda dapat memerlukan otorisasi tambahan untuk menyelesaikan perintah.
Prasyarat
- Panduan developer untuk membuat Action smart home
- Codelab Mesin Cuci Smart Home
- Panduan developer Jenis dan fitur perangkat
Yang akan** Anda buat**
Dalam codelab ini, Anda akan men-deploy integrasi smart home siap pakai dengan Firebase, lalu mempelajari cara menambahkan fitur non-standar ke mesin cuci smart home untuk ukuran muatan dan mode turbo. Anda juga akan menerapkan pelaporan error dan pengecualian, serta mempelajari cara menerapkan konfirmasi lisan untuk mengaktifkan mesin cuci menggunakan 2FA.
Yang akan Anda pelajari
- Cara menambahkan fitur Mode dan Tombol Beralih ke Action Anda
- Cara melaporkan error dan pengecualian
- Cara menerapkan 2FA
Yang akan Anda butuhkan
- Browser web, seperti Google Chrome
- Perangkat iOS atau Android yang telah menginstal aplikasi Google Home
- Node.js versi 10.16 atau yang lebih baru
- Akun Google
- Akun penagihan Google Cloud
Mengaktifkan Kontrol aktivitas
Aktifkan Kontrol aktivitas berikut di Akun Google yang akan Anda gunakan dengan Asisten:
- Aktivitas Web & Aplikasi
- Informasi Perangkat
- Aktivitas Suara & Audio
Membuat project Actions
- Buka Actions di Google Developers Console.
- Klik New Project, masukkan nama untuk project, dan klik CREATE PROJECT.
Memilih Aplikasi Smart Home
Pada layar Overview di Konsol Actions, pilih Smart home.
Pilih kartu pengalaman Smart home, lalu Anda akan diarahkan ke konsol project.
Menginstal Firebase CLI
Antarmuka Command Line (CLI) Firebase akan memungkinkan Anda menyalurkan aplikasi web secara lokal dan men-deploy aplikasi web ke Firebase hosting.
Untuk menginstal CLI, jalankan perintah npm berikut dari terminal:
npm install -g firebase-tools
Untuk memverifikasi bahwa CLI telah diinstal dengan benar, jalankan:
firebase --version
Otorisasikan Firebase CLI dengan Akun Google Anda dengan menjalankan:
firebase login
Mengaktifkan HomeGraph API
HomeGraph API memungkinkan penyimpanan dan pembuatan kueri perangkat dan statusnya dalam Home Graph pengguna. Untuk menggunakan API ini, Anda harus membuka Google Cloud Console dan mengaktifkan HomeGraph API terlebih dulu.
Di Google Cloud Console, pastikan memilih project yang cocok dengan Action Anda <project-id>.
Lalu, di layar API Library untuk HomeGraph API, klik Enable.
Kini, setelah lingkungan pengembangan disiapkan, Anda dapat men-deploy project pemicu untuk memverifikasi bahwa semuanya telah dikonfigurasi dengan benar.
Mendapatkan kode sumber
Klik link berikut untuk mendownload contoh codelab ini di mesin pengembangan Anda:
...atau Anda dapat meng-clone repositori GitHub dari command line:
git clone https://github.com/googlecodelabs/smarthome-traits.git
Mengekstrak file zip yang didownload.
Tentang project
Project pemicu berisi subdirektori berikut:
public:
UI frontend untuk mengontrol dan memantau status mesin cuci smart dengan mudah.functions:
Layanan cloud yang diterapkan sepenuhnya untuk mengelola mesin cuci smart dengan Cloud Functions for Firebase dan Firebase Realtime Database.
Fulfillment cloud yang disediakan mencakup fungsi berikut dalam index.js
:
fakeauth
**:** Endpoint otorisasi untuk penautan akunfaketoken
**:** Endpoint token untuk penautan akunsmarthome
**:** Endpoint fulfillment intent smart homereportstate
**:** Memanggil HomeGraph API pada perubahan status perangkatrequestsync
**:** Memungkinkan update perangkat pengguna tanpa perlu menautkan ulang akun
Menghubungkan ke Firebase
Buka direktori washer-start
, lalu siapkan Firebase CLI dengan project Actions Anda:
cd washer-start firebase use <project-id>
Men-deploy ke Firebase
Buka folder functions
dan instal semua dependensi yang dibutuhkan menggunakan npm.
cd functions npm install
Kini, setelah menginstal dependensi dan mengonfigurasi project, Anda siap menjalankan aplikasi untuk pertama kali.
firebase deploy
Ini adalah output konsol yang akan Anda lihat:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<project-id>/overview Hosting URL: https://<project-id>.firebaseapp.com
Perintah ini men-deploy aplikasi web, bersama dengan beberapa Cloud Functions for Firebase.
Buka URL Hosting di browser Anda (https://<project-id>.firebaseapp.com
) untuk melihat aplikasi web. Anda akan melihat antarmuka berikut:
UI web ini mewakili platform pihak ketiga untuk melihat atau mengubah status perangkat. Untuk mulai mengisi database Anda dengan informasi perangkat, klik UPDATE. Anda tidak akan melihat perubahan apa pun di halaman ini, tapi status mesin cuci saat ini akan disimpan dalam database.
Sekarang saatnya menghubungkan layanan cloud yang telah Anda deploy ke Asisten Google menggunakan Konsol Actions.
Mengonfigurasi project Konsol Action Anda
Di bagian Overview > Build your Action, pilih Add Action(s). Masukkan URL untuk Cloud Function Anda yang menyediakan fulfillment untuk intent smart home, lalu klik Save.
https://us-central1-<project-id>.cloudfunctions.net/smarthome
Di tab Develop > Invocation, tambahkan Display Name untuk Action Anda, lalu klik Save. Nama ini akan muncul di aplikasi Google Home.
Untuk mengaktifkan penautan Akun, pilih opsi Develop > Account linking di navigasi sebelah kiri. Gunakan setelan penautan akun berikut:
Client ID |
|
Rahasia klien |
|
URL otorisasi |
|
URL token |
|
Klik Save untuk menyimpan konfigurasi penautan akun Anda, lalu klik Test untuk mengaktifkan pengujian project Anda.
Anda akan dialihkan ke Simulator. Verifikasikan bahwa pengujian telah diaktifkan untuk project Anda dengan mengarahkan mouse ke ikon Testing on Device ( ).
Menautkan ke Asisten Google
Untuk menguji Action smart home, Anda harus menautkan project dengan Akun Google. Hal ini memungkinkan pengujian melalui platform Asisten Google dan aplikasi Google Home yang login ke akun yang sama.
- Di ponsel, buka aplikasi Asisten Google. Perhatikan bahwa Anda harus login sebagai akun yang sama seperti di konsol.
- Buka Google Assistant > Settings > Home Control (di bagian Asisten).
- Klik ikon (+) di sudut kanan bawah
- Anda akan melihat aplikasi pengujian dengan awalan [test] dan nama tampilan yang Anda tetapkan.
- Pilih item tersebut. Kemudian, Asisten Google akan mengautentikasi dengan layanan Anda dan mengirimkan permintaan
SYNC
, meminta layanan Anda untuk memberikan daftar perangkat bagi pengguna.
Buka aplikasi Google Home dan verifikasikan bahwa Anda dapat melihat perangkat mesin cucinya.
Verifikasikan Anda dapat mengontrol mesin cuci dengan menggunakan perintah suara di aplikasi Google Home. Anda juga akan melihat perubahan status perangkat di UI web frontend dari fulfillment cloud Anda.
Setelah mesin dasar dideploy, Anda dapat menyesuaikan mode yang tersedia di perangkat Anda.
Fitur a``ction.devices.traits.Modes
memungkinkan perangkat memiliki jumlah setelan acak untuk suatu mode, yang hanya dapat ditetapkan satu saja pada satu waktu. Anda akan menambahkan mode ke mesin cuci untuk menentukan ukuran muatan laundry: kecil, sedang, atau besar.
Memperbarui respons SYNC
Anda perlu menambahkan informasi tentang fitur baru ke respons SYNC
di functions/index.js
. Data ini muncul di array traits
dan objek attributes
seperti yang ditunjukkan dalam cuplikan kode berikut.
index.js
app.onSync(body => {
return {
requestId: 'ff36a3cc-ec34-11e6-b1a0-64510650abcf',
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',
// Add Modes trait
'action.devices.traits.Modes',
],
name: { ... },
deviceInfo: { ... },
attributes: {
pausable: true,
//Add availableModes
availableModes: [{
name: 'load',
name_values: [{
name_synonym: ['load'],
lang: 'en',
}],
settings: [{
setting_name: 'small',
setting_values: [{
setting_synonym: ['small'],
lang: 'en',
}]
}, {
setting_name: 'medium',
setting_values: [{
setting_synonym: ['medium'],
lang: 'en',
}]
}, {
setting_name: 'large',
setting_values: [{
setting_synonym: ['large'],
lang: 'en',
}]
}],
ordered: true,
}],
},
}],
},
};
});
Menambahkan perintah intent EXECUTE baru
Di intent EXECUTE
Anda, tambahkan perintah action.devices.commands.SetModes
seperti yang ditunjukkan dalam cuplikan kode berikut.
index.js
const updateDevice = async (execution,deviceId) => {
const {params,command} = execution;
let state, 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 = {isRunning: params.start};
ref = firebaseRef.child(deviceId).child('StartStop');
break;
case 'action.devices.commands.PauseUnpause':
state = {isPaused: params.pause};
ref = firebaseRef.child(deviceId).child('StartStop');
Break;
// Add SetModes command
case 'action.devices.commands.SetModes':
state = {load: params.updateModeSettings.load};
ref = firebaseRef.child(deviceId).child('Modes');
break;
}
Memperbarui respons QUERY
Selanjutnya, perbarui respons QUERY
Anda untuk melaporkan status mesin cuci saat ini.
Tambahkan perubahan yang telah diupdate ke fungsi queryFirebase
dan queryDevice
untuk mendapatkan status seperti yang tersimpan dalam Realtime Database.
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,
// Add Modes snapshot
load: snapshotVal.Modes.load,
};
}
const queryDevice = async (deviceId) => {
const data = await queryFirebase(deviceId);
return {
on: data.on,
isPaused: data.isPaused,
isRunning: data.isRunning,
currentRunCycle: [{ ... }],
currentTotalRemainingTime: 1212,
currentCycleRemainingTime: 301,
// Add currentModeSettings
currentModeSettings: {
load: data.load,
},
};
};
Memperbarui Report State
Terakhir, update fungsi reportstate
Anda untuk melaporkan setelan muatan mesin cuci saat ini ke Home Graph.
index.js
const requestBody = {
requestId: 'ff36a3cc', /* Any unique ID */
agentUserId: USER_ID,
payload: {
devices: {
states: {
/* Report the current state of your washer */
[context.params.deviceId]: {
on: snapshot.OnOff.on,
isPaused: snapshot.StartStop.isPaused,
isRunning: snapshot.StartStop.isRunning,
// Add currentModeSettings
currentModeSettings: {
load: snapshot.Modes.load,
},
},
},
},
},
};
Men-deploy ke Firebase
Jalankan perintah berikut untuk men-deploy action yang telah diupdate:
firebase deploy --only functions
Setelah deployment selesai, buka UI web dan klik tombol Refresh di toolbar. Tindakan tersebut akan memicu Permintaan Sinkronisasi sehingga Asisten menerima data respons
SYNC
yang telah diupdate.
Sekarang Anda dapat memberikan perintah untuk menyetel mode mesin cuci, misalnya:
"Ok Google, setel muatan mesin cuci ke besar".
Selain itu, Anda dapat mengajukan pertanyaan tentang mesin cuci, misalnya:
"Ok Google, apa muatan mesin cucinya?"
Fitur action.devices.traits.Toggles
mewakili aspek yang disebutkan dari perangkat yang memiliki status benar atau salah, seperti apakah mesin cuci sedang dalam mode turbo.
Memperbarui respons SYNC
Dalam respons SYNC
, Anda perlu menambahkan informasi tentang fitur perangkat baru. Ini akan muncul dalam array traits
dan objek attributes
seperti yang ditunjukkan dalam cuplikan kode berikut.
index.js
app.onSync(body => {
return {
requestId: 'ff36a3cc-ec34-11e6-b1a0-64510650abcf',
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',
'action.devices.traits.Modes',
// Add Toggles trait
'action.devices.traits.Toggles',
],
name: { ... },
deviceInfo: { ... },
attributes: {
pausable: true,
availableModes: [{
name: 'load',
name_values: [{
name_synonym: ['load'],
lang: 'en'
}],
settings: [{ ... }],
ordered: true,
}],
//Add availableToggles
availableToggles: [{
name: 'Turbo',
name_values: [{
name_synonym: ['turbo'],
lang: 'en',
}],
}],
},
}],
},
};
});
Menambahkan perintah intent EXECUTE baru
Di intent EXECUTE
Anda, tambahkan perintah action.devices.commands.SetToggles
seperti yang ditunjukkan dalam cuplikan kode berikut.
index.js
const updateDevice = async (execution,deviceId) => {
const {params,command} = execution;
let state, 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 = {isRunning: params.start};
ref = firebaseRef.child(deviceId).child('StartStop');
break;
case 'action.devices.commands.PauseUnpause':
state = {isPaused: params.pause};
ref = firebaseRef.child(deviceId).child('StartStop');
break;
case 'action.devices.commands.SetModes':
state = {load: params.updateModeSettings.load};
ref = firebaseRef.child(deviceId).child('Modes');
break;
// Add SetToggles command
case 'action.devices.commands.SetToggles':
state = {Turbo: params.updateToggleSettings.Turbo};
ref = firebaseRef.child(deviceId).child('Toggles');
break;
}
Memperbarui respons QUERY
Terakhir, Anda harus mengupdate respons QUERY
untuk melaporkan mode turbo mesin cuci. Tambahkan perubahan yang telah diupdate ke fungsi queryFirebase
dan queryDevice
untuk mendapatkan status pengalihan seperti yang tersimpan di Realtime Database.
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,
load: snapshotVal.Modes.load,
// Add Toggles snapshot
Turbo: snapshotVal.Toggles.Turbo,
};
}
const queryDevice = async (deviceId) => {
const data = queryFirebase(deviceId);
return {
on: data.on,
isPaused: data.isPaused,
isRunning: data.isRunning,
currentRunCycle: [{ ... }],
currentTotalRemainingTime: 1212,
currentCycleRemainingTime: 301,
currentModeSettings: {
load: data.load,
},
// Add currentToggleSettings
currentToggleSettings: {
Turbo: data.Turbo,
},
};
};
Memperbarui Report State
Terakhir, update fungsi reportstate
Anda untuk melaporkan ke Home Graph apakah mesin cuci disetel ke turbo.
index.js
const requestBody = {
requestId: 'ff36a3cc', /* Any unique ID */
agentUserId: USER_ID,
payload: {
devices: {
states: {
/* Report the current state of your washer */
[context.params.deviceId]: {
on: snapshot.OnOff.on,
isPaused: snapshot.StartStop.isPaused,
isRunning: snapshot.StartStop.isRunning,
currentModeSettings: {
load: snapshot.Modes.load,
},
// Add currentToggleSettings
currentToggleSettings: {
Turbo: snapshot.Toggles.Turbo,
},
},
},
},
},
};
Men-deploy ke Firebase
Jalankan perintah berikut untuk men-deploy fungsi yang telah diupdate:
firebase deploy --only functions
Klik tombol Segarkan di UI web untuk memicu Sinkronisasi Permintaan setelah deployment selesai.
Anda sekarang dapat memberikan perintah untuk menyetel mesin cuci ke mode turbo dengan mengucapkan:
"Ok Google, aktifkan turbo untuk mesin cuci".
Anda juga dapat memeriksa apakah mesin cuci sudah dalam mode turbo dengan bertanya:
"Ok Google, apakah mesin cuci saya dalam mode turbo?"
Penanganan error di Action smart home memungkinkan Anda melaporkan kepada pengguna saat masalah menyebabkan respons EXECUTE
dan QUERY
gagal. Notifikasi tersebut memberikan pengalaman pengguna yang lebih positif saat mereka berinteraksi dengan perangkat smart dan Action Anda.
Setiap kali permintaan EXECUTE
atau QUERY
gagal, Action Anda harus menampilkan kode error. Jika, misalnya, Anda ingin menampilkan error ketika pengguna mencoba memulai mesin cuci dengan penutup yang terbuka, maka respons EXECUTE
akan terlihat seperti cuplikan kode berikut:
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"payload": {
"commands": [
{
"ids": [
"456"
],
"status": "ERROR",
"errorCode": "deviceLidOpen"
}
]
}
}
Sekarang, ketika pengguna meminta untuk memulai mesin cuci, Asisten akan merespons dengan mengucapkan:
"Penutup mesin cuci terbuka. Tutup lalu coba lagi".
Pengecualian mirip dengan error, tetapi menunjukkan ketika notifikasi dikaitkan dengan perintah, yang mungkin memblokir tidak memblokir eksekusi yang berhasil. Pengecualian dapat memberikan informasi terkait menggunakan fitur StatusReport
, seperti tingkat baterai atau perubahan status terkini. Kode pengecualian non-pemblokiran ditampilkan bersama dengan status SUCCESS
, sementara kode pengecualian pemblokiran dikembalikan dengan status EXCEPTIONS
.
Contoh respons dengan pengecualian ada dalam cuplikan kode berikut:
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"payload": {
"commands": [{
"ids": ["123"],
"status": "SUCCESS",
"states": {
"online": true,
"isPaused": false,
"isRunning": false,
"exceptionCode": "runCycleFinished"
}
}]
}
}
Asisten merespons dengan mengucapkan:
"Pengering telah selesai berputar."
Untuk menambahkan pelaporan error untuk mesin cuci Anda, buka functions/index.js
lalu tambahkan definisi kelas error seperti yang tampak dalam cuplikan kode berikut:
index.js
app.onQuery(async (body) => {...});
// Add SmartHome error handling
class SmartHomeError extends Error {
constructor(errorCode, message) {
super(message);
this.name = this.constructor.name;
this.errorCode = errorCode;
}
}
Update respons execute untuk menampilkan kode error dan status error:
index.js
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( ... )
//Add error response handling
.catch((error) => {
functions.logger.error('EXECUTE', device.id, error);
result.ids.push(device.id);
if(error instanceof SmartHomeError) {
result.status = 'ERROR';
result.errorCode = error.errorCode;
}
})
);
}
}
}
Asisten kini dapat memberi tahu pengguna tentang kode error yang Anda laporkan. Anda akan melihat contoh spesifik di bagian berikutnya.
Anda harus menerapkan autentikasi 2 langkah (2FA) dalam Action jika perangkat Anda memiliki mode yang perlu diamankan atau harus dibatasi untuk grup pengguna tertentu yang diotorisasi, seperti update software atau pelepasan kunci.
Anda dapat menerapkan 2FA pada semua jenis dan fitur perangkat, menyesuaikan apakah tantangan keamanan terjadi setiap kali atau kriteria tertentu perlu dipenuhi.
Ada tiga jenis tantangan yang didukung:
No
challenge
—Permintaan dan respons yang tidak menggunakan tantangan autentikasi (ini adalah perilaku default)ackNeeded
—2FA yang memerlukan konfirmasi eksplisit (ya atau tidak)pinNeeded
—2FA yang memerlukan nomor pengenal pribadi (PIN)
Untuk codelab ini, tambahkan tantangan ackNeeded
ke perintah untuk mengaktifkan mesin cuci dan fungsionalitas untuk menampilkan error jika tantangan 2FA gagal.
Buka functions/index.js
, lalu tambahkan definisi kelas error yang menampilkan kode error dan jenis tantangan seperti yang terlihat di cuplikan kode berikut:
index.js
class SmartHomeError extends Error { ... }
// Add 2FA error handling
class ChallengeNeededError extends SmartHomeError {
constructor(tfaType) {
super('challengeNeeded', tfaType);
this.tfaType = tfaType;
}
}
Anda juga perlu mengupdate respons eksekusi untuk menampilkan error challengeNeeded
sebagai berikut:
index.js
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( ... )
.catch((error) => {
functions.logger.error('EXECUTE', device.id, error);
result.ids.push(device.id);
if(error instanceof SmartHomeError) {
result.status = 'ERROR';
result.errorCode = error.errorCode;
//Add 2FA error handling
if(error instanceof ChallengeNeededError) {
result.challengeNeeded = {
type: error.tfaType
};
}
}
})
);
}
}
}
Terakhir, modifikasi updateDevice
untuk meminta konfirmasi eksplisit untuk mengaktifkan atau menonaktifkan mesin cuci.
index.js
const updateDevice = async (execution,deviceId) => {
const {challenge,params,command} = execution; //Add 2FA challenge
let state, ref;
switch (command) {
case 'action.devices.commands.OnOff':
//Add 2FA challenge
if (!challenge || !challenge.ack) {
throw new ChallengeNeededError('ackNeeded');
}
state = {on: params.on};
ref = firebaseRef.child(deviceId).child('OnOff');
break;
...
}
return ref.update(state)
.then(() => state);
};
Men-deploy ke Firebase
Jalankan perintah berikut untuk men-deploy fungsi yang diupdate:
firebase deploy --only functions
Setelah men-deploy kode yang telah diupdate, Anda harus mengonfirmasi action tersebut secara verbal saat meminta Asisten untuk mengaktifkan atau menonaktifkan mesin cuci, misalnya:
Anda: "Ok Google, nyalakan mesin cuci".
Asisten: "Yakin ingin menyalakan mesin cuci?"
Anda: "Ya".
Anda juga dapat melihat respons terperinci untuk setiap langkah alur 2FA dengan membuka log Firebase.
Selamat! Anda telah memperluas fitur Action smart home melalui fitur Modes
dan Toggles
, serta mengamankan eksekusinya melalui 2FA.
Pelajari selengkapnya
Berikut adalah beberapa ide yang dapat Anda lakukan untuk penerapan lebih dalam:
- Tambahkan kemampuan eksekusi lokal ke perangkat Anda.
- Gunakan jenis verifikasi 2FA yang berbeda untuk mengubah status perangkat.
- Update respons QUERY karakteristik
RunCycle
untuk mengupdate secara dinamis. - Jelajahi sampel GitHub ini.