دستگاه‌های خانه هوشمند را به Google Assistant متصل کنید

1. قبل از شروع

به‌عنوان یک توسعه‌دهنده اینترنت اشیا (IoT)، می‌توانید «اقدامات خانه هوشمند» بسازید که به کاربرانتان این امکان را می‌دهد که دستگاه‌های خود را از طریق کنترل‌های لمسی در برنامه Google Home و فرمان‌های صوتی با «دستیار» کنترل کنند.

79266e5f45e6ae20.gif

اقدامات خانه هوشمند برای ارائه داده‌های متنی در مورد خانه و دستگاه‌های آن و ایجاد یک نقشه منطقی از خانه، به Home Graph متکی است. این زمینه به دستیار درک طبیعی تری از درخواست های کاربر نسبت به موقعیت مکانی او در خانه می دهد. برای مثال، Home Graph می‌تواند مفهوم اتاق نشیمن را ذخیره کند که شامل انواع مختلفی از دستگاه‌های سازنده‌های مختلف، مانند ترموستات، لامپ، پنکه و جاروبرقی است.

d009cef0f903d284.jpeg

پیش نیازها

چیزی که خواهی ساخت

در این نرم افزار کد، شما یک سرویس ابری منتشر می کنید که یک ماشین لباسشویی هوشمند مجازی را مدیریت می کند، سپس یک اکشن خانه هوشمند می سازید و آن را به Assistant متصل می کنید.

چیزی که یاد خواهید گرفت

  • نحوه استقرار یک سرویس ابری خانه هوشمند
  • نحوه اتصال سرویس خود به دستیار
  • نحوه انتشار تغییرات وضعیت دستگاه در گوگل

آنچه شما نیاز دارید

2. شروع به کار

فعال کردن کنترل های فعالیت

برای استفاده از Google Assistant، باید داده‌های فعالیت خاصی را با Google به اشتراک بگذارید. دستیار Google برای عملکرد صحیح به این داده ها نیاز دارد. با این حال، نیاز به اشتراک گذاری داده ها مختص SDK نیست. برای اشتراک‌گذاری این داده‌ها، اگر قبلاً ندارید، یک حساب Google ایجاد کنید. می‌توانید از هر حساب Google استفاده کنید—نیازی نیست که حساب توسعه‌دهنده شما باشد.

صفحه Activity Controls را برای حساب Google که می‌خواهید با Assistant استفاده کنید، باز کنید.

اطمینان حاصل کنید که سوئیچ های زیر فعال هستند:

  • فعالیت وب و برنامه - علاوه بر این، حتماً کادر بررسی شامل سابقه و فعالیت Chrome از سایت‌ها، برنامه‌ها و دستگاه‌هایی که از خدمات Google استفاده می‌کنند را انتخاب کنید.
  • اطلاعات دستگاه
  • فعالیت صوتی و صوتی

یک پروژه Actions ایجاد کنید

  1. به Actions on Google Developer Console بروید.
  2. پروژه جدید را کلیک کنید، یک نام برای پروژه وارد کنید و روی ایجاد پروژه کلیک کنید.

3d6b68ca79afd54c.png

برنامه خانه هوشمند را انتخاب کنید

در صفحه نمای کلی در کنسول اقدامات، خانه هوشمند را انتخاب کنید.

2fa4988f44f8914b.png

کارت تجربه خانه هوشمند را انتخاب کنید، روی Start Building کلیک کنید و سپس به کنسول پروژه خود هدایت خواهید شد.

Firebase CLI را نصب کنید

رابط خط فرمان Firebase (CLI) به شما این امکان را می دهد که برنامه های وب خود را به صورت محلی ارائه دهید و برنامه وب خود را در میزبانی Firebase مستقر کنید.

برای نصب CLI، دستور npm زیر را از ترمینال اجرا کنید:

npm install -g firebase-tools

برای تأیید اینکه CLI به درستی نصب شده است، اجرا کنید:

firebase --version

با اجرای موارد زیر، Firebase CLI را با حساب Google خود مجاز کنید:

firebase login

3. برنامه استارتر را اجرا کنید

اکنون که محیط توسعه خود را راه‌اندازی می‌کنید، می‌توانید پروژه راه‌اندازی را اجرا کنید تا تأیید کنید همه چیز به درستی پیکربندی شده است.

کد منبع را دریافت کنید

برای دانلود نمونه این کد لبه روی دستگاه توسعه خود، روی لینک زیر کلیک کنید:

یا می توانید مخزن GitHub را از خط فرمان کلون کنید:

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

در مورد پروژه

پروژه شروع کننده شامل زیر شاخه های زیر است:

  • public: رابط کاربری frontend برای کنترل و نظارت آسان بر وضعیت واشر هوشمند.
  • functions: یک سرویس ابری کاملاً پیاده‌سازی شده که واشر هوشمند را با توابع Cloud برای پایگاه داده بیدرنگ Firebase و Firebase مدیریت می‌کند.

به Firebase متصل شوید

به فهرست راهنمای washer-start بروید، سپس Firebase CLI را با پروژه Actions خود راه اندازی کنید:

cd washer-start
firebase use <project-id>

پیکربندی پروژه Firebase

یک پروژه Firebase را راه اندازی کنید.

firebase init

ویژگی های CLI، پایگاه داده بیدرنگ ، توابع ، و ویژگی میزبانی که شامل میزبانی Firebase است را انتخاب کنید.

? 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

با این کار API ها و ویژگی های لازم برای پروژه شما مقداردهی اولیه می شود.

هنگامی که از شما خواسته شد، پایگاه داده Realtime را مقداردهی اولیه کنید. می توانید از مکان پیش فرض برای نمونه پایگاه داده استفاده کنید.

? 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

از آنجایی که از کد پروژه شروع کننده استفاده می کنید، فایل پیش فرض را برای قوانین امنیتی انتخاب کنید و مطمئن شوید که فایل قوانین پایگاه داده موجود را بازنویسی نمی کنید.

? 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

اگر پروژه خود را مجدداً مقداردهی اولیه می کنید، وقتی از شما پرسیده شد که آیا می خواهید یک پایگاه کد را مقداردهی اولیه یا بازنویسی کنید، گزینه Overwrite را انتخاب کنید.

? Would you like to initialize a new codebase, or overwrite an existing one?
Overwrite

هنگام پیکربندی توابع خود، باید از فایل‌های پیش‌فرض استفاده کنید و مطمئن شوید که فایل‌های index.js و package.json موجود را در نمونه پروژه بازنویسی نمی‌کنید.

? 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

اگر پروژه خود را مجدداً راه اندازی می کنید، وقتی از شما پرسیده شد که آیا می خواهید توابع/.gitignore را مقداردهی اولیه یا بازنویسی کنید، گزینه No را انتخاب کنید.

? File functions/.gitignore already exists. Overwrite?
No
? Do you want to install dependencies with npm now?
Yes

در نهایت، تنظیمات میزبانی خود را برای استفاده از دایرکتوری public در کد پروژه پیکربندی کنید و از فایل index.html موجود استفاده کنید. هنگامی که از ESLint خواسته شد گزینه No را انتخاب کنید.

? 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 به طور تصادفی فعال شد، دو روش برای غیرفعال کردن آن وجود دارد:

  1. با استفاده از رابط کاربری گرافیکی، به پوشه ../functions زیر پروژه رفته، فایل مخفی .eslintrc.js را انتخاب کرده و آن را حذف کنید. آن را با نام مشابه .eslintrc.json اشتباه نکنید.
  2. با استفاده از خط فرمان:
    cd functions
    rm .eslintrc.js
    

برای اطمینان از اینکه پیکربندی Firebase صحیح و کاملی دارید، فایل firebase.json را از پوشه app-done در فهرست app-start کپی کنید و فایل را در app-start بازنویسی کنید.

در فهرست app-start :

cp -vp ../app-done/firebase.json .

در Firebase مستقر شوید

اکنون که وابستگی ها را نصب کرده اید و پروژه خود را پیکربندی کرده اید، برای اولین بار آماده اجرای برنامه هستید.

firebase deploy

این خروجی کنسولی است که باید ببینید:

...

✔ Deploy complete!

Project Console: https://console.firebase.google.com/project/<project-id>/overview
Hosting URL: https://<project-id>.web.app

این دستور یک برنامه وب را به همراه چندین تابع Cloud برای Firebase مستقر می کند.

برای مشاهده برنامه وب ، URL میزبانی را در مرورگر خود باز کنید ( https://<project-id>.web.app ). رابط زیر را خواهید دید:

5845443e94705557.png

این رابط کاربری وب نشان دهنده یک پلت فرم شخص ثالث برای مشاهده یا تغییر وضعیت دستگاه است. برای شروع پر کردن پایگاه داده خود با اطلاعات دستگاه، روی UPDATE کلیک کنید. هیچ تغییری در صفحه مشاهده نمی کنید، اما وضعیت فعلی ماشین لباسشویی شما در پایگاه داده ذخیره می شود.

اکنون زمان آن رسیده است که سرویس ابری را با استفاده از کنسول Actions به Google Assistant متصل کنید.

پروژه کنسول Actions خود را پیکربندی کنید

در قسمت نمای کلی > Build your Action ، Add Action(s) را انتخاب کنید. URL را برای عملکرد ابری خود وارد کنید که اهداف خانه هوشمند را برآورده می کند و روی ذخیره کلیک کنید.

https://us-central1-<project-id>.cloudfunctions.net/smarthome

9d7b223427f587ca.png

در برگه Develop > Invocation ، یک نام نمایشی برای Action خود اضافه کنید و روی Save کلیک کنید. این نام در برنامه Google Home ظاهر می شود.

774d0c40c351c7da.png

a8c4673eb11d76ee.png

برای فعال کردن پیوند حساب، گزینه Develop > Account linking را در ناوبری سمت چپ انتخاب کنید. از این تنظیمات پیوند حساب استفاده کنید:

شناسه مشتری

ABC123

راز مشتری

DEF456

URL مجوز

https://us-central1-<project-id>.cloudfunctions.net/fakeauth

نشانی اینترنتی رمز

https://us-central1-<project-id>.cloudfunctions.net/faketoken

9730d20b90bcc038.png

روی Save کلیک کنید تا پیکربندی پیوند حساب خود را ذخیره کنید، سپس روی Test کلیک کنید تا آزمایش روی پروژه شما فعال شود.

ee0547f05b5efd98.png

شما به شبیه ساز هدایت خواهید شد. اگر « Test now enabled » را نمی‌بینید، روی Reset Test کلیک کنید تا تأیید شود که آزمایش فعال است.

d0495810dbadf059.png

اکنون می توانید اجرای وبکهک های لازم برای اتصال وضعیت دستگاه به دستیار را شروع کنید.

4. یک واشر ایجاد کنید

اکنون که Action خود را پیکربندی کردید، می‌توانید دستگاه‌ها را اضافه کرده و داده ارسال کنید. سرویس ابری شما باید اهداف زیر را مدیریت کند:

  • هدف SYNC زمانی رخ می‌دهد که دستیار بخواهد بداند کاربر چه دستگاه‌هایی را متصل کرده است. زمانی که کاربر یک حساب کاربری را پیوند می دهد، به سرویس شما ارسال می شود. شما باید با یک بار JSON از همه دستگاه‌های کاربر و قابلیت‌های آنها پاسخ دهید.
  • یک هدف QUERY زمانی رخ می‌دهد که دستیار بخواهد از وضعیت یا وضعیت فعلی دستگاه مطلع شود. شما باید با یک بار JSON با وضعیت هر دستگاه درخواستی پاسخ دهید.
  • یک هدف EXECUTE زمانی رخ می دهد که دستیار بخواهد دستگاهی را از طرف یک کاربر کنترل کند. شما باید با یک بار JSON با وضعیت اجرای هر دستگاه درخواستی پاسخ دهید.
  • هدف DISCONNECT زمانی رخ می‌دهد که کاربر حساب خود را از دستیار جدا کند. باید ارسال رویدادهای دستگاه‌های این کاربر به «دستیار» را متوقف کنید.

توابعی را که قبلاً برای مدیریت این مقاصد به کار گرفته‌اید در بخش‌های زیر به‌روزرسانی خواهید کرد.

به روز رسانی پاسخ SYNC

functions/index.js باز کنید که حاوی کد پاسخ به درخواست‌های دستیار است.

شما باید با برگرداندن متادیتا و قابلیت‌های دستگاه، یک هدف SYNC را مدیریت کنید. JSON را در آرایه onSync به‌روزرسانی کنید تا اطلاعات دستگاه و ویژگی‌های توصیه‌شده برای لباسشویی را در بر بگیرد.

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 مستقر شوید

اجرای ابر به روز شده را با استفاده از Firebase CLI اجرا کنید:

firebase deploy --only functions

برای آزمایش اکشن خانه هوشمند خود، باید پروژه خود را با یک حساب Google مرتبط کنید. این امکان آزمایش از طریق سطوح دستیار Google و برنامه Google Home را فراهم می کند که به سیستم یک حساب وارد شده اند.

  1. در تلفن خود، تنظیمات دستیار Google را باز کنید. توجه داشته باشید که باید با همان حساب کاربری در کنسول وارد شوید.
  2. به Google Assistant > Settings > Home Control (در زیر Assistant) بروید.
  3. روی نماد جستجو در بالا سمت راست کلیک کنید.
  4. برنامه آزمایشی خود را با استفاده از پیشوند [test] جستجو کنید تا برنامه آزمایشی خاص خود را پیدا کنید.
  5. آن مورد را انتخاب کنید. سپس Google Assistant با سرویس شما احراز هویت می‌کند و یک درخواست SYNC ارسال می‌کند و از سرویس شما می‌خواهد فهرستی از دستگاه‌ها را برای کاربر ارائه دهد.

برنامه Google Home را باز کنید و بررسی کنید که می‌توانید دستگاه لباسشویی خود را ببینید.

ae252220753726f6.png

5. دستورات و پرس و جوها را مدیریت کنید

اکنون که سرویس ابری شما به درستی دستگاه شستشو را به Google گزارش می دهد، باید قابلیت درخواست وضعیت دستگاه و ارسال دستورات را اضافه کنید.

هدف QUERY را مدیریت کنید

یک هدف QUERY شامل مجموعه‌ای از دستگاه‌ها است. برای هر دستگاه، باید با وضعیت فعلی آن پاسخ دهید.

در functions/index.js ، کنترل‌کننده QUERY ویرایش کنید تا فهرست دستگاه‌های هدف موجود در درخواست intent را پردازش کند.

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,
  };
});

برای هر دستگاه موجود در درخواست، وضعیت فعلی ذخیره شده در پایگاه داده بیدرنگ را برگردانید. توابع queryFirebase و queryDevice را برای برگرداندن داده های وضعیت واشر به روز کنید.

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 intent

هدف EXECUTE دستورات را برای به‌روزرسانی وضعیت دستگاه کنترل می‌کند. پاسخ وضعیت هر فرمان - به عنوان مثال، SUCCESS ، ERROR یا PENDING - و وضعیت دستگاه جدید را برمی‌گرداند.

در functions/index.js ، کنترل‌کننده EXECUTE را ویرایش کنید تا فهرست ویژگی‌هایی که نیاز به به‌روزرسانی دارند و مجموعه دستگاه‌های هدف برای هر دستور پردازش شود:

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],
    },
  };
});

برای هر فرمان و دستگاه هدف، مقادیر موجود در پایگاه داده Realtime را که با ویژگی درخواستی مطابقت دارد، به روز کنید. تابع updateDevice را تغییر دهید تا مرجع Firebase مناسب به روز شود و وضعیت دستگاه به روز شده برگردد.

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 = {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;
  }

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

6. عمل خود را آزمایش کنید

پس از اجرای هر سه هدف، می توانید آزمایش کنید که Action شما واشر را کنترل می کند.

در Firebase مستقر شوید

اجرای ابر به روز شده را با استفاده از Firebase CLI اجرا کنید:

firebase deploy --only functions

واشر را تست کنید

اکنون می‌توانید وقتی هر یک از دستورات صوتی زیر را از طریق تلفن خود امتحان می‌کنید، تغییر مقدار را مشاهده کنید:

"Hey Google، ماشین لباسشویی من را روشن کن."

"Hey Google، واشر من را متوقف کن."

"Hey Google، ماشین لباسشویی من را متوقف کن."

همچنین می توانید با پرسیدن سوال وضعیت فعلی ماشین لباسشویی خود را مشاهده کنید.

"Hey Google، ماشین لباسشویی من روشن است؟"

"Hey Google، آیا ماشین لباسشویی من کار می کند؟"

"Hey Google، ماشین لباسشویی من در چه چرخه ای است؟"

می‌توانید این پرسش‌ها و دستورات را در گزارش‌هایی که در زیر تابع شما در بخش توابع کنسول Firebase ظاهر می‌شوند، مشاهده کنید. درباره گزارش‌های Firebase در نوشتن و مشاهده گزارش‌ها بیشتر بیاموزید.

همچنین می‌توانید با رفتن به Logging > Logs Explorer، این پرسش‌ها و دستورات را در Google Cloud Console پیدا کنید. درباره ورود به سیستم Google Cloud در گزارش رویدادها با Cloud Logging دسترسی پیدا کنید.

7. به روز رسانی ها را به گوگل گزارش دهید

شما به طور کامل سرویس ابری خود را با اهداف خانه هوشمند ادغام کرده اید و به کاربران امکان می دهد وضعیت فعلی دستگاه های خود را کنترل و پرس و جو کنند. با این حال، پیاده سازی هنوز راهی برای سرویس شما برای ارسال فعالانه اطلاعات رویداد - مانند تغییرات در حضور یا وضعیت دستگاه - به دستیار ندارد.

با درخواست همگام‌سازی ، می‌توانید زمانی که کاربران دستگاه‌هایی را اضافه یا حذف می‌کنند یا زمانی که قابلیت‌های دستگاهشان تغییر می‌کند، درخواست همگام‌سازی جدیدی را راه‌اندازی کنید. با گزارش وضعیت ، سرویس ابری شما می‌تواند به طور فعال وضعیت یک دستگاه را به Home Graph ارسال کند، زمانی که کاربران به صورت فیزیکی وضعیت دستگاه را تغییر می‌دهند (مثلاً کلید چراغ را روشن می‌کنند) یا با استفاده از سرویس دیگری وضعیت را تغییر می‌دهند.

در این بخش، کدی را برای فراخوانی این متدها از اپلیکیشن وب frontend اضافه خواهید کرد.

HomeGraph API را فعال کنید

HomeGraph API ذخیره و پرس و جو از دستگاه ها و وضعیت آنها را در نمودار اصلی کاربر فعال می کند. برای استفاده از این API، ابتدا باید کنسول Google Cloud را باز کرده و HomeGraph API را فعال کنید .

در کنسول Google Cloud، مطمئن شوید که پروژه‌ای را انتخاب کنید که با Actions <project-id>. سپس، در صفحه کتابخانه API برای HomeGraph API، روی فعال کردن کلیک کنید.

ee198858a6eac112.png

وضعیت گزارش را فعال کنید

می‌نویسد در پایگاه داده بیدرنگ، تابع reportstate را در پروژه شروع کننده فعال می‌کند. تابع reportstate را در functions/index.js به‌روزرسانی کنید تا داده‌های نوشته شده در پایگاه داده را جمع‌آوری کنید و از طریق Report State به Home Graph ارسال کنید.

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);
    });

درخواست همگام سازی را فعال کنید

تازه کردن نماد در رابط کاربری وب جلویی، تابع requestsync را در پروژه شروع کننده فعال می کند. برای فراخوانی HomeGraph API تابع requestsync را در functions/index.js پیاده سازی کنید.

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 مستقر شوید

کد به روز شده را با استفاده از Firebase CLI اجرا کنید:

firebase deploy --only functions

اجرای خود را تست کنید

روی Refresh کلیک کنید ae8d3b25777a5e30.png را در رابط کاربری وب فشار دهید و تأیید کنید که درخواست همگام‌سازی را در گزارش کنسول Firebase مشاهده می‌کنید.

سپس، ویژگی‌های دستگاه شستشو را در رابط کاربری وب جلویی تنظیم کنید و روی Update کلیک کنید. بررسی کنید که می‌توانید تغییر وضعیت گزارش شده به Google را در گزارش‌های کنسول Firebase خود مشاهده کنید.

8. تبریک می گویم

674c4f4392e98c1.png

تبریک می گویم! شما با موفقیت «دستیار» را با یک سرویس ابری دستگاه با استفاده از «اقدامات خانه هوشمند» ادغام کردید.

بیشتر بدانید

در اینجا چند ایده وجود دارد که می توانید برای عمیق تر شدن آنها پیاده سازی کنید:

همچنین می‌توانید درباره آزمایش و ارسال یک Action برای بررسی، از جمله فرآیند صدور گواهی برای انتشار Action خود برای کاربران، اطلاعات بیشتری کسب کنید.