สถานะรายงาน

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

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

หากไม่มี Report State ไฟจากผู้ให้บริการหลายรายในห้องนั่งเล่น คำสั่ง Ok Google เพิ่มความสว่างของห้องนั่งเล่นต้องแก้ไข Intent ของ 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 Console ให้ไปที่หน้า HomeGraph API

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

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

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

หมายเหตุ: ตรวจสอบว่าคุณใช้โปรเจ็กต์ GCP ที่ถูกต้องเมื่อทำตามขั้นตอนเหล่านี้ คือโปรเจ็กต์ที่ตรงกับรหัสโปรเจ็กต์ smart home ของคุณ
  1. ใน Google Cloud 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. รับคำจำกัดความบริการ Protocol Buffers สำหรับ Home Graph API
  2. ทำตามเอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์ gRPC เพื่อสร้างสตับลูกค้าสำหรับภาษาที่รองรับ
  3. เรียกใช้เมธอด ReportStateAndNotification

Node.js

ไคลเอ็นต์ Node.js ของ Google APIs มีบอนด์สําหรับ 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เครื่องมือ Viewer ซึ่งก็คือเว็บแอปแบบสแตนด์อโลนที่ไม่จําเป็นต้องดาวน์โหลดหรือติดตั้งใช้งาน

แดชบอร์ด Report State ยังคงใช้งานได้ แต่เลิกใช้งานแล้วและไม่รองรับอีกต่อไป

แดชบอร์ดสถานะรายงาน

ข้อกำหนดเบื้องต้น

คุณต้องมีคีย์บัญชีบริการและ agentUserId ก่อนจึงจะทดสอบการดำเนินการได้ หากคุณมีคีย์ของบัญชีบริการอยู่แล้ว ให้ไปที่agentUserIdดูการทําให้Report State แดชบอร์ดใช้งานได้

ติดตั้งใช้งานแดชบอร์ดสถานะรายงาน

เมื่อคุณมีคีย์บัญชีบริการและรหัสผู้ใช้ของตัวแทนสําหรับโปรเจ็กต์แล้ว ให้ดาวน์โหลดและติดตั้งใช้งานเวอร์ชันล่าสุดจาก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 อย่างเหมาะสม