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

1. قبل از شروع

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

79266e5f45e6ae20.gif

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

d009cef0f903d284.jpeg

پیش نیازها

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

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

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

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

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

2. شروع به کار

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

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

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

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

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

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

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

نام پروژه

Cloud-to-cloud Integration را انتخاب کنید

در Project Home در Developer Console، Add cloud-to-cloud integration را در Cloud-to-cloud انتخاب کنید.

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

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

  1. به Firebase بروید.
  2. روی ایجاد پروژه کلیک کنید و نام پروژه خود را وارد کنید.
  3. چک باکس توافقنامه را علامت بزنید و روی Continue کلیک کنید. اگر کادر تأیید توافق وجود ندارد، می‌توانید این مرحله را رد کنید.
    پروژه Firebase را ایجاد کنید
  4. پس از ایجاد پروژه Firebase، شناسه پروژه را پیدا کنید. به نمای کلی پروژه بروید و روی نماد تنظیمات > تنظیمات پروژه کلیک کنید.
    تنظیمات پروژه را باز کنید
  5. پروژه شما در زیر تب General فهرست شده است.
    تنظیمات کلی پروژه

به Firebase متصل شوید

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

cd washer-start
firebase use <firebase-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
    

در فایل washer-done/firebase.json ، کد را با عبارت زیر تکمیل کنید:

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  },
    "headers": [{
      "source" : "**/*.@(js|html)",
      "headers" : [ {
        "key" : "Cache-Control",
        "value" : "max-age=0"
      } ]
    }],
  "functions": [
    {
      "source": "functions",
      "codebase": "default",
      "ignore": [
        "node_modules",
        ".git",
        "firebase-debug.log",
        "firebase-debug.*.log",
        "*.local"
      ]
    }
  ]
}

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

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

firebase deploy

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

...

✔ Deploy complete!

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

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

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

5845443e94705557.png

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

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

پروژه Developer Console خود را پیکربندی کنید

در تب Develop ، یک نام نمایشی برای تعامل خود اضافه کنید. این نام در برنامه Google Home ظاهر می شود.

یک نام نمایشی اضافه کنید

در زیر نام تجاری برنامه ، یک فایل png برای نماد برنامه با اندازه 144 x 144 پیکسل و با نام آپلود کنید .png .

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

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

شناسه مشتری

ABC123

راز مشتری

DEF456

URL مجوز

https://us-central1-
.cloudfunctions.net/fakeauth

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

https://us-central1-
.cloudfunctions.net/faketoken

URL های پیوند دهنده حساب را به روز کنید

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

https://us-central1- -cloudfunctions.net/smarthome https://us-central1- -cloudfunctions.net/smarthome

URL تابع ابری را اضافه کنید

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

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

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

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

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

  • هدف 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

برای آزمایش ادغام Cloud-to-Cloud خود، باید پروژه خود را با یک حساب 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 = params.start
      ? {isRunning: true, isPaused: false}
      : {isRunning: false, isPaused: false};
      ref = firebaseRef.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 = firebaseRef.child(deviceId).child('StartStop');
      break;
  }

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

6. یکپارچگی خود را آزمایش کنید

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

در 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، مطمئن شوید که پروژه ای را انتخاب کنید که با ادغام شما مطابقت دارد <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

تبریک می گویم! با استفاده از ادغام‌های Cloud-to-cloud، دستیار را با موفقیت با یک سرویس ابری دستگاه ادغام کردید.

بیشتر بدانید

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

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