מצב דוח

Report State היא תכונה חשובה שמאפשרת Home הפעולה מדווחת באופן יזום על הסטטוס העדכני ביותר של המכשיר של המשתמש חזרה אל Google Home Graph במקום להמתין Intent מסוג QUERY.

Report State מדווח ל-Google על המצבים של מכשירי המשתמשים עם agentUserId שצוין המשויך אליהם (נשלח במקור בקשת SYNC). כשGoogle Assistant רוצה לבצע פעולה שדורש הבנה של המצב הנוכחי של המכשיר, הוא יכול פשוט לחפש להעלות את פרטי המדינה בקובץ Home Graph להנפקת הכוונה מסוג QUERY לעננים שונים של צד שלישי לפני הנפקת Intent מסוג EXECUTE.

בלי Report State, בהינתן נורות מכמה ספקים במדינות בסלון, הפקודה Ok Google, lighten my living room (הבהרה לסלון) דורשת. פתרון של כמה קובצי Intent של QUERY שנשלחים למספר עננים, בניגוד פשוט לחפש את ערכי הבהירות הנוכחיים על סמך שדווחו בעבר. כדי ליהנות מחוויית המשתמש הטובה ביותר, האפליקציה Assistant צריכה להיות במצב הנוכחי של המכשיר, ללא צורך בנסיעה הלוך ושוב למכשיר.

לאחר ה-SYNC הראשוני של מכשיר, הפלטפורמה שולחת Intent מסוג QUERY שאוסף את מצב המכשיר כדי לאכלס את Home Graph. לאחר מכן, Home Graph שומר רק את המצב נשלח עם Report State.

כשמתקשרים אל Report State, חשוב לציין את כל הפרטים על התכונה של מאפיין נתון. Home Graph מעדכנת מצבים לכל תכונה ומחליפה את כל הנתונים של אותה תכונה כאשר מתבצעת שיחת Report State. לדוגמה, אם אתם מדווחים של ה-method StartStop, של המטען הייעודי (payload) צריך לכלול ערכים גם ל-isRunning וגם ל-isPaused.

שנתחיל?

כדי להטמיע את Report State צריך לבצע את השלבים הבאים:

הפעלת Google Home Graph API

  1. ברכיב Google Cloud Console, עוברים לדף Home Graph API.

    לדף Home Graph API
  2. צריך לבחור את הפרויקט שתואם למזהה הפרויקט ב-smart home.
  3. לוחצים על הפעלה.

יצירת מפתח לחשבון שירות

כדי ליצור מפתח לחשבון שירות מ-Google Cloud Console, פועלים לפי ההוראות הבאות:

הערה: חשוב לוודא שאתם משתמשים בפרויקט GCP הנכון בזמן ביצוע את השלבים הבאים. זהו הפרויקט שתואם למזהה הפרויקט ב-smart home.
  1. באפליקציית Google Cloud Console, עוברים לדף Create service account key.

    כניסה לדף Create Service Account Key
  2. מהרשימה Service Account, בוחרים חשבון שירות חדש.
  3. כותבים שם בשדה Service account name.
  4. מזינים מזהה בשדה Service account ID.
  5. ברשימה Role בוחרים באפשרות Service Accounts > יצירת אסימונים בחשבון שירות.

  6. בשדה Key type, בוחרים באפשרות JSON.

  7. לוחצים על יצירה. קובץ JSON שמכיל את המפתח שלכם הורדות למחשב שלך.

שליחת קריאה ל-API

בוחרים אפשרות מהכרטיסיות הבאות:

HTTP

השדה Home Graph מספק נקודת קצה (endpoint) של HTTP

  1. משתמשים בקובץ JSON של חשבון השירות שהורדתם כדי ליצור קובץ JSON Web אסימון (JWT). מידע נוסף זמין במאמר הבא: אימות באמצעות חשבון שירות.
  2. קבלת אסימון גישה מסוג OAuth 2.0 עם היקף הרשאות אחד (https://www.googleapis.com/auth/homegraph) באמצעות oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. יוצרים את בקשת ה-JSON עם התג agentUserId. הנה דוגמה לבקשת JSON למצב הדוח ולהתראה:
  5. {
      "requestId": "123ABC",
      "agentUserId": "user-123",
      "payload": {
        "devices": {
          "states": {
            "light-123": {
              "on": true
            }
          }
        }
      }
    }
    
  6. לשלב את מצב הדוח ואת קובץ ה-JSON של ההתראה עם האסימון ב-HTTP POST בקשה לנקודת הקצה של Google Home Graph. לפניכם דוגמה לאופן שבו לבצע את הבקשה בשורת הפקודה באמצעות curl, כמו בדיקה:
  7. curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \
      -H "Content-Type: application/json" \
      -d @request-body.json \
      "https://homegraph.googleapis.com/v1/devices:reportStateAndNotification"
    

gRPC

השדה Home Graph מספק נקודת קצה של gRPC

  1. מורידים את ההגדרה של שירות מאגר נתונים זמני של פרוטוקולים ל-Home Graph API.
  2. יש לעיין במסמכי התיעוד למפתחים בנושא gRPC כדי ליצור מודלים של לקוחות (stubs) עבור אחת מהשפות הנתמכות.
  3. קוראים ל-method ReportStateAndNotification.

Node.js

לקוח Google APIs Node.js מספק קישורים עבור ה-API של Home Graph.

  1. מפעילים את השירות google.homegraph באמצעות Application Default Credentials.
  2. מפעילים את השיטה reportStateAndNotification באמצעות ReportStateAndNotificationRequest. היא מחזירה Promise עם ReportStateAndNotificationResponse.
const homegraphClient = homegraph({
  version: 'v1',
  auth: new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/homegraph'
  })
});

const res = await homegraphClient.devices.reportStateAndNotification({
  requestBody: {
    agentUserId: 'PLACEHOLDER-USER-ID',
    requestId: 'PLACEHOLDER-REQUEST-ID',
    payload: {
      devices: {
        states: {
          "PLACEHOLDER-DEVICE-ID": {
            on: true
          }
        }
      }
    }
  }
});
    

Java

ספריית הלקוח של Home Graph API ל-Java מספקת קישורים ל-Home Graph API.

  1. מאתחלים את HomeGraphApiService באמצעות Application Default Credentials.
  2. מפעילים את השיטה reportStateAndNotification עם ReportStateAndNotificationRequest. הפונקציה מחזירה את הערך ReportStateAndNotificationResponse.
  // Get Application Default credentials.
  GoogleCredentials credentials =
      GoogleCredentials.getApplicationDefault()
          .createScoped(List.of("https://www.googleapis.com/auth/homegraph"));

  // Create Home Graph service client.
  HomeGraphService homegraphService =
      new HomeGraphService.Builder(
              GoogleNetHttpTransport.newTrustedTransport(),
              GsonFactory.getDefaultInstance(),
              new HttpCredentialsAdapter(credentials))
          .setApplicationName("HomeGraphExample/1.0")
          .build();

  // Build device state payload.
  Map<?, ?> states = Map.of("on", true);

  // Report device state.
  ReportStateAndNotificationRequest request =
      new ReportStateAndNotificationRequest()
          .setRequestId("PLACEHOLDER-REQUEST-ID")
          .setAgentUserId("PLACEHOLDER-USER-ID")
          .setPayload(
              new StateAndNotificationPayload()
                  .setDevices(
                      new ReportStateAndNotificationDevice()
                          .setStates(Map.of("PLACEHOLDER-DEVICE-ID", states))));
  homegraphService.devices().reportStateAndNotification(request);
}
    

מצב דוח הבדיקה

כלים מומלצים למשימה הזו

כדי להתכונן לפעולה לקבלת אישור, חשוב להתנסות Report State

מומלץ להשתמש בכלי 'צפייה' ב-Home Graph, שהיא אפליקציית אינטרנט עצמאית שלא מחייבת הורדה או פריסה.

לוח הבקרה של Report State עדיין זמין, אבל הוצא משימוש ולא נתמך יותר.

מרכז הבקרה של מצב הדיווח

דרישות מוקדמות

כדי לבדוק את הפעולה, צריך חשבון שירות המקש וה-agentUserId. אם כבר יש לכם את המפתח לחשבון השירות, agentUserId למידע נוסף, ניתן לעיין במאמר פריסת Report State מרכז הבקרה.

פריסת מרכז הבקרה של מצב הדוח

לאחר קבלת המפתח של חשבון השירות ו-Agent User ID לפרויקט, להוריד ולפרוס את הגרסה האחרונה מ- Report State מרכז הבקרה לאחר הורדת הגרסה העדכנית ביותר, יש לפעול לפי ההוראות של כלל קובץ README.MD.

אחרי שפורסים את מרכז הבקרה של Report State, את מרכז השליטה מכתובת האתר הבאה (יש להחליף את your_project_id עם מזהה פרויקט):

http://<your-project-id>.appspot.com

במרכז השליטה, מבצעים את הפעולות הבאות:

  • בחירת קובץ המפתח של החשבון
  • הוספת ה-AgentUserId

לאחר מכן לוחצים על רשימה.

כל המכשירים שלך רשומים. אחרי שהרשימה תאוכלס, תוכלו להשתמש לחצן רענון לעדכון מצבי המכשיר. אם מתבצע שינוי במצב המכשיר, השורה מודגשת בירוק.

תשובות לשגיאות

יכול להיות שכשתתקשר, ייתכן שתופיע אחת מתגובות השגיאה הבאות Report State התגובות האלה מגיעות בצורת סטטוס HTTP קודים.

  • 400 Bad Request – השרת לא הצליח לעבד הבקשה שנשלחה על ידי הלקוח בגלל תחביר לא חוקי. סיבות נפוצות כוללים JSON שגוי או משתמשים ב-null במקום ב-"" למחרוזת.
  • 404 Not Found – לא ניתן לבצע את המשאב המבוקש נמצא, אבל עשוי להיות זמין בעתיד. בדרך כלל, המשמעות היא לא ניתן למצוא את המכשיר המבוקש. יכול להיות גם שחשבון המשתמש אינו מקושר ל-Google או שקיבלנו agentUserId לא חוקי. ודאו שה-agentUserId תואם לערך שצוין תגובה SYNC, ותקין בטיפול בכוונות ניתוק.