ยินดีต้อนรับสู่ Google Home Developer Center แหล่งใหม่เรียนรู้วิธีพัฒนาการดําเนินการในบ้านอัจฉริยะ หมายเหตุ: คุณจะสร้างการดําเนินการต่างๆ ต่อไปในคอนโซลการดําเนินการ

สถานะรายงาน

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
อาแม้จะควรโดยอิงจากโดยอิงจากนี้จะแม้จะแม้จะแม้จะแม้จะแม้จะแม้จะแม้จะหน้าแม้จะหน้าแม้จะหน้า คุณก็แม้จะ คุณก็หน้าแม้จะ คุณก็หน้า “อาจ “มีสิทธิ์ “มีสิทธิ์ “มีสิทธิ์ “ คุณก็ “ คุณก็ “ “ “ คุณก็ “ “ “ “อาหารเช้า

Report State เป็นฟีเจอร์สําคัญที่ช่วยให้การดําเนินการ "Home" รายงานสถานะล่าสุดของอุปกรณ์ของผู้ใช้กลับไปเป็น Google Home Graph ได้โดยไม่ต้องรอความตั้งใจ QUERY

Report State รายงานสถานะของอุปกรณ์ของผู้ใช้ให้กับ Google ด้วยคําขอ agentUserId ที่ระบุ (โดยใช้คําขอ SYNC เดิม) เมื่อ Google Assistant ต้องการการดําเนินการที่ต้องอาศัยการทําความเข้าใจสถานะปัจจุบันของอุปกรณ์ ก็เพียงแค่ค้นหาข้อมูลสถานะใน Home Graph แทนการออก Intent ของ QUERY ไปยังระบบคลาวด์ต่างๆ ของบุคคลที่สามก่อนจะออก Intent ของ EXECUTE

หากไม่ใช้ Report State หลอดไฟจากผู้ให้บริการหลายรายในห้องนั่งเล่น คําสั่ง Ok Google เพิ่มความสว่างให้ห้องนั่งเล่นของฉันจะต้องแก้ปัญหาความตั้งใจหลายรายการ QUERY ที่ส่งไปยังระบบคลาวด์หลายชนิดแทนที่จะแค่ค้นหาค่าความสว่างปัจจุบันตามสิ่งที่รายงานไว้ก่อนหน้านี้ เพื่อประสบการณ์ของผู้ใช้ที่ดีที่สุด Assistant จะต้องมีสถานะปัจจุบันของอุปกรณ์ โดยไม่จําเป็นต้องมีการส่งไป-กลับอุปกรณ์

หลังจาก SYNC เริ่มต้นสําหรับอุปกรณ์ แพลตฟอร์มจะส่ง Intent ของ QUERY ที่รวบรวมสถานะของอุปกรณ์เพื่อป้อนข้อมูล Home Graph หลังจากนั้น Home Graph จะจัดเก็บสถานะที่ส่งด้วย Report State เท่านั้น

เมื่อโทรหา Report State โปรดระบุข้อมูลรัฐที่สมบูรณ์สําหรับลักษณะเฉพาะ Home Graph จะอัปเดตสถานะสําหรับแต่ละลักษณะ และเขียนทับข้อมูลทั้งหมดสําหรับลักษณะนั้นเมื่อเรียกใช้ Report State ตัวอย่างเช่น หากคุณรายงานสถานะสําหรับลักษณะเฉพาะของ StartStop เพย์โหลดจะต้องมีค่าสําหรับทั้ง isRunning และ isPaused

เริ่มต้นใช้งาน

หากต้องการใช้งาน Report State ให้ทําตามขั้นตอนต่อไปนี้

เปิดใช้ Google HomeGraph API

  1. ใน Google Cloud Platform Console ให้ไปที่หน้า HomeGraph API

    ไปที่หน้า HomeGraph API
  2. เลือกโปรเจ็กต์ที่ตรงกับรหัสโปรเจ็กต์ smart home
  3. คลิกเปิดใช้

สร้างคีย์บัญชีบริการ

ทําตามวิธีการต่อไปนี้เพื่อสร้างคีย์บัญชีบริการจาก GCP Console

หมายเหตุ: ตรวจสอบว่าคุณใช้โปรเจ็กต์ GCP ที่ถูกต้องขณะทําตามขั้นตอนเหล่านี้ นี่คือโปรเจ็กต์ที่ตรงกับรหัสโปรเจ็กต์ smart home ของคุณ
  1. ในGCP Console ให้ไปที่หน้าสร้างคีย์บัญชีบริการ

    ไปที่หน้าสร้างคีย์บัญชีบริการ
  2. จากรายการบัญชีบริการ ให้เลือกบัญชีบริการใหม่
  3. ป้อนชื่อในช่องชื่อบัญชีบริการ
  4. ป้อนรหัสในช่องรหัสบัญชีบริการ
  5. จากรายการบทบาท ให้เลือกบัญชีบริการ > ผู้สร้างโทเค็นบัญชีบริการ

  6. สําหรับประเภทคีย์ ให้เลือกตัวเลือก JSON

  7. คลิกสร้าง ไฟล์ JSON ที่มีการดาวน์โหลดคีย์ลงในคอมพิวเตอร์

เรียก API

เลือกตัวเลือกจากแท็บด้านล่าง

HTTP

Home Graph มีปลายทาง HTTP

  1. ใช้ไฟล์ JSON ของบัญชีบริการที่ดาวน์โหลดเพื่อสร้างโทเค็นเว็บ JSON (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 ตัวอย่างวิธีสร้างคําขอในบรรทัดคําสั่งโดยใช้ 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 เพื่อสร้างสตอรี่ไคลเอ็นต์สําหรับภาษาที่รองรับ
  3. เรียกเมธอด ReportStateAndNotification

Node.js

ไคลเอ็นต์ Google API Node.js มีการเชื่อมโยงสําหรับ Home Graph API

  1. เริ่มต้นบริการ google.homegraph โดยใช้ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน
  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

ไลบรารีของไคลเอ็นต์ HomeGraph API สําหรับ Java มีการเชื่อมโยงสําหรับ Home Graph API

  1. เริ่มต้น HomeGraphApiService โดยใช้ ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน
  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 หน้าแดชบอร์ด

ทําให้หน้าแดชบอร์ดสถานะรายงานใช้งานได้

เมื่อคุณมีคีย์บัญชีบริการและ User Agent ของโครงการแล้ว ให้ดาวน์โหลดและติดตั้งเวอร์ชันล่าสุดจาก Report State หน้าแดชบอร์ด เมื่อดาวน์โหลดเวอร์ชันล่าสุดแล้ว ให้ทําตามวิธีการจากไฟล์ README.MD ที่รวมอยู่

หลังจากที่คุณทําให้หน้าแดชบอร์ด Report State ใช้งานได้แล้ว ให้เข้าถึงหน้าแดชบอร์ดจาก URL ต่อไปนี้ (แทนที่ 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 และคุณจัดการ Intent DISCONNECT อย่างเหมาะสม