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

۱. قبل از شروع

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

79266e5f45e6ae20.gif

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

d009cef0f903d284.jpeg

پیش‌نیازها

آنچه خواهید ساخت

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

آنچه یاد خواهید گرفت

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

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

۲. شروع کار

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

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

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

مطمئن شوید که کلیدهای تغییر وضعیت زیر فعال هستند:

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

ایجاد یک پروژه ادغام ابر به ابر

  1. به کنسول توسعه‌دهندگان بروید.
  2. روی «ایجاد پروژه» کلیک کنید، یک نام برای پروژه وارد کنید و روی «ایجاد پروژه» کلیک کنید.

نام پروژه

ادغام ابر به ابر را انتخاب کنید

در صفحه اصلی پروژه در کنسول توسعه‌دهندگان، گزینه «افزودن ادغام ابر به ابر» را در زیر «ابر به ابر» انتخاب کنید.

ادغام ابر به ابر را اضافه کنید

نصب رابط خط فرمان فایربیس

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

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

npm install -g firebase-tools

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

firebase --version

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

firebase login

۳. برنامه‌ی آغازین را اجرا کنید

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

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

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

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

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

درباره پروژه

پروژه اولیه شامل زیرشاخه‌های زیر است:

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

فایربیس را به پروژه کنسول توسعه‌دهندگان گوگل هوم خود اضافه کنید

روش اول: از طریق کنسول فایربیس

  1. به فایربیس بروید.
  2. روی ایجاد یک پروژه Firebase کلیک کنید.
    ایجاد پروژه فایربیس
  3. در صفحه ایجاد پروژه ، روی افزودن Firebase به پروژه Google Cloud کلیک کنید.
    اضافه کردن فایربیس به پروژه گوگل کلود
  4. در صفحه شروع ، پروژه Google Cloud که اخیراً در کنسول توسعه‌دهنده Google Home ایجاد کرده‌اید را انتخاب کنید و سپس روی ادامه کلیک کنید.
    پروژه Google Cloud را انتخاب کنید

روش دوم: از طریق رابط خط فرمان فایربیس

firebase projects:addfirebase

پروژه کنسول توسعه‌دهندگان گوگل هوم که برای افزودن فایربیس ایجاد کرده‌اید را انتخاب کنید.

وقتی Firebase به پروژه Google Home Developer Console شما اضافه می‌شود، در Firebase Console ظاهر می‌شود. شناسه پروژه Firebase با شناسه پروژه Google Home Developer Console شما هماهنگ خواهد شد.

پروژه ابری اضافه شد

اتصال به فایربیس

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

cd washer-start
firebase use <project-id>

پیکربندی پروژه فایربیس

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

firebase init

ویژگی‌های CLI، پایگاه داده بلادرنگ و ویژگی توابع را انتخاب کنید.

? Which Firebase features do you want to set up for this directory? Press Space to select features, then Enter
 to confirm your choices. (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to
 proceed)
>( ) Data Connect: Set up a Firebase Data Connect service
 ( ) Firestore: Configure security rules and indexes files for Firestore
 ( ) Genkit: Setup a new Genkit project with Firebase
 (*) Functions: Configure a Cloud Functions directory and its files
 ( ) App Hosting: Configure an apphosting.yaml file for App Hosting
 ( ) Hosting: Configure files for Firebase Hosting and (optionally) 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
 (*) Realtime Database: Configure a security rules file for Realtime Database and (optionally) provision
default instance
 ( ) Data Connect: Set up a Firebase Data Connect service
 ( ) Firestore: Configure security rules and indexes files for Firestore

این کار 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

اگر در حال مقداردهی مجدد پروژه خود هستید، وقتی از شما پرسیده شد که آیا می‌خواهید functions/.gitignore را مقداردهی اولیه کنید یا بازنویسی کنید، گزینه خیر (No) را انتخاب کنید.

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

اگر ESLint به طور تصادفی فعال شده باشد، دو روش برای غیرفعال کردن آن وجود دارد:

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

استقرار در فایربیس

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

firebase deploy

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

...

✔ Deploy complete!

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

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

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

5845443e94705557.png

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

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

پروژه کنسول توسعه‌دهنده خود را پیکربندی کنید

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

افزودن نام نمایشی

در قسمت App branding ، یک فایل png برای آیکون برنامه، با اندازه ۱۴۴ در ۱۴۴ پیکسل و نام دلخواه آپلود کنید. .png .

افزودن آیکون برنامه

برای فعال کردن پیوند حساب، از این تنظیمات پیوند حساب استفاده کنید:

شناسه مشتری

ABC123

راز مشتری

DEF456

آدرس اینترنتی مجوز

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

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

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

به‌روزرسانی آدرس‌های اینترنتی (URL) لینک‌دهنده حساب کاربری

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

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

افزودن آدرس اینترنتی تابع ابری

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

ادغام ابر به ابر خود را آزمایش کنید

اکنون می‌توانید پیاده‌سازی وب‌هوک‌های لازم برای اتصال وضعیت دستگاه به دستیار را آغاز کنید.

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

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

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

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

به‌روزرسانی پاسخ همگام‌سازی

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

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

ایندکس.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 CLI، سرویس ابری به‌روزرسانی‌شده را مستقر کنید:

firebase deploy --only functions

برای آزمایش ادغام ابر به ابر، باید پروژه خود را به یک حساب گوگل متصل کنید. این کار امکان آزمایش از طریق سطوح دستیار گوگل و برنامه گوگل هوم را که به یک حساب کاربری یکسان وارد شده‌اند، فراهم می‌کند.

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

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

ae252220753726f6.png

۵. مدیریت دستورات و کوئری‌ها

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

مدیریت قصد QUERY

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

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

ایندکس.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,
  };
});

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

ایندکس.js

const queryFirebase = async (deviceId) => {
  const snapshot = await getFirebaseRef().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 دستوراتی را برای به‌روزرسانی وضعیت دستگاه مدیریت می‌کند. پاسخ، وضعیت هر دستور - مثلاً SUCCESS ، ERROR یا PENDING - و وضعیت جدید دستگاه را برمی‌گرداند.

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

ایندکس.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 مناسب را به‌روزرسانی کرده و وضعیت دستگاه به‌روزرسانی‌شده را برگرداند.

ایندکس.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 = getFirebaseRef().child(deviceId).child('OnOff');
      break;
    case 'action.devices.commands.StartStop':
      state = params.start
      ? {isRunning: true, isPaused: false}
      : {isRunning: false, isPaused: false};
      ref = getFirebaseRef().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 = getFirebaseRef().child(deviceId).child('StartStop');
      break;
  }

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

۶. یکپارچه‌سازی خود را آزمایش کنید

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

استقرار در فایربیس

با استفاده از Firebase CLI، سرویس ابری به‌روزرسانی‌شده را مستقر کنید:

firebase deploy --only functions

واشر را آزمایش کنید

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

«هی گوگل، ماشین لباسشویی من را روشن کن.»

«هی گوگل، ماشین لباسشویی من را متوقف کن.»

«هی گوگل، ماشین لباسشویی من را خاموش کن.»

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

«هی گوگل، ماشین لباسشویی من روشنه؟»

«هی گوگل، ماشین لباسشویی من روشنه؟»

«هی گوگل، ماشین لباسشویی من روی چه چرخه‌ای است؟»

شما می‌توانید این کوئری‌ها و دستورات را در لاگ‌هایی که در زیر تابع شما در بخش Functions کنسول Firebase ظاهر می‌شوند، مشاهده کنید. برای کسب اطلاعات بیشتر در مورد لاگ‌های Firebase به بخش Write and view logs مراجعه کنید.

همچنین می‌توانید این کوئری‌ها و دستورات را در کنسول گوگل کلود با رفتن به مسیر Logging > Logs Explorer پیدا کنید. برای کسب اطلاعات بیشتر در مورد ثبت وقایع در گوگل کلود، به بخش Access event logs with Cloud Logging مراجعه کنید.

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

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

با درخواست همگام‌سازی ، می‌توانید وقتی کاربران دستگاه‌ها را اضافه یا حذف می‌کنند یا وقتی قابلیت‌های دستگاه آنها تغییر می‌کند، یک درخواست همگام‌سازی جدید ایجاد کنید. با گزارش وضعیت ، سرویس ابری شما می‌تواند به صورت پیشگیرانه وضعیت دستگاه را به نمودار خانه ارسال کند، زمانی که کاربران به صورت فیزیکی وضعیت دستگاه را تغییر می‌دهند - به عنوان مثال، روشن کردن کلید برق - یا با استفاده از سرویس دیگری وضعیت را تغییر می‌دهند.

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

فعال کردن HomeGraph API

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

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

ee198858a6eac112.png

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

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

ایندکس.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);
    });

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

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

ایندکس.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 CLI مستقر کنید:

firebase deploy --only functions

پیاده‌سازی خود را آزمایش کنید

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

در مرحله بعد، ویژگی‌های دستگاه ماشین لباسشویی را در رابط کاربری وب frontend تنظیم کرده و روی به‌روزرسانی کلیک کنید. تأیید کنید که می‌توانید تغییر وضعیت گزارش شده به گوگل را در گزارش‌های کنسول Firebase خود مشاهده کنید.

۸. تبریک

674c4f4392e98c1.png

تبریک! شما با موفقیت دستیار را با استفاده از ادغام‌های ابر به ابر با سرویس ابری دستگاه ادغام کردید.

بیشتر بدانید

در اینجا چند ایده وجود دارد که می‌توانید برای عمیق‌تر شدن به کار بگیرید:

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