สร้างแอปบนอุปกรณ์เคลื่อนที่โดยใช้ Home API ใน iOS

1. บทนำ

f154e30306882c74.png

Home API คืออะไร

Google Home API มีชุดไลบรารีสำหรับนักพัฒนาซอฟต์แวร์เพื่อใช้ประโยชน์จากระบบนิเวศของ Google Home API ของ Home ช่วยให้นักพัฒนาแอปสร้างแอปที่จัดสรรและควบคุมอุปกรณ์สมาร์ทโฮมได้อย่างราบรื่น

3e11583c779a2cec.png

วิดีโอนี้จะอธิบายแอปบนอุปกรณ์เคลื่อนที่ที่คุณจะสร้างอย่างคร่าวๆ ดังนั้นโปรดทำตามวิดีโอขณะทำ Codelab

คอมโพเนนต์ของ Home API

Home API ประกอบด้วย

  • API สำหรับอุปกรณ์และบ้าน: โต้ตอบกับบ้านของผู้ใช้ แอปสามารถใช้ API เหล่านี้เพื่ออ่านข้อมูลเกี่ยวกับอุปกรณ์ ห้อง และโครงสร้าง (เช่น ดูอุณหภูมิปัจจุบันของเทอร์โมสตัท) และควบคุมอุปกรณ์ (เช่น เปลี่ยนอุณหภูมิที่กำหนดของเทอร์โมสตัท)
  • Commissioning API: จัดเตรียม (ตั้งค่า) อุปกรณ์ Matter ใหม่ลงใน Fabric โดยใช้ความพยายามเพียงเล็กน้อย
  • Automation API: สร้าง ลบ และค้นหาการทำงานอัตโนมัติที่ทำงานภายในบ้านของผู้ใช้

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

สิ่งที่คุณจะได้เรียนรู้

  • วิธีสร้างแอป iOS โดยใช้ Home API ตามแนวทางปฏิบัติแนะนำ
  • วิธีใช้ Device และ Structure API เพื่อแสดงและควบคุมสมาร์ทโฮม
  • วิธีใช้ Commissioning API เพื่อเพิ่มอุปกรณ์ลงในระบบนิเวศของ Google Home
  • วิธีใช้ Automation API เพื่อสร้างการทำงานอัตโนมัติพื้นฐาน

2. ตั้งค่าบ้าน

เตรียมอุปกรณ์

Google Home Playground มีอุปกรณ์สมาร์ทโฮมจำลองที่สร้างไว้ล่วงหน้าหลากหลายประเภท และขอแนะนำให้ใช้เพื่อสำรวจศักยภาพทั้งหมดของ Home API โดยเฉพาะอย่างยิ่งหากคุณมีอุปกรณ์ในบ้านจำนวนจำกัด

ทำตามวิธีการเพื่อลงชื่อเข้าใช้ Google Home Playground และลิงก์บัญชีให้เสร็จสมบูรณ์ในแอป Google Home หลังจากทำตามขั้นตอนเหล่านี้แล้ว คุณควรจะเห็นอุปกรณ์ในแท็บ "อุปกรณ์" ในแอป Google Home

c892afce113abe8f.png

3. การเริ่มตั้งค่า

รับโค้ดของแอปตัวอย่าง

เริ่มต้นด้วยการโคลนซอร์สโค้ดจาก GitHub

git clone https://github.com/google-home/google-home-api-sample-app-ios.git

ไดเรกทอรีตัวอย่างมี 2 สาขา ได้แก่ start และ finished สำหรับ Codelab นี้

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

สำรวจโค้ด "เริ่มต้น"

เริ่ม Codelab นี้โดยเปลี่ยนไปใช้กิ่ง start ของที่เก็บที่โคลนไว้

git checkout start

สาขานี้มีโค้ดเริ่มต้นสำหรับโปรเจ็กต์ คุณจะแก้ไขโค้ดนี้ตลอดทั้งโค้ดแล็บเพื่อใช้ฟังก์ชันการทำงานทั้งหมด แอปตัวอย่าง Codelab มีโครงสร้างพื้นฐานที่สร้างขึ้นใน Swift สำหรับการโต้ตอบกับ Home APIs iOS SDK มาดูส่วนประกอบหลักในโปรเจ็กต์ start กัน

  • Main Entry (GoogleHomeAPISampleIOSApp): อยู่ใน GoogleHomeAPISampleIOS/Main/GoogleHomeAPISampleIOS.swift ซึ่งเป็นจุดแรกเข้าหลักของแอป โดยจะกำหนดค่าและเริ่มต้น SDK รวมถึงตั้งค่าอินเทอร์เฟซผู้ใช้หลัก
  • Core Views (View/):
    • MainView.swift: มุมมองรากหลังการเปิดตัวซึ่งมี NavigationView หลัก โดยจะจัดการการเลือกโครงสร้าง Google Home ที่ใช้งานอยู่และแสดง StructureView ที่เกี่ยวข้อง
    • StructureView.swift: แสดงเนื้อหาของโครงสร้างที่เลือกในปัจจุบัน โดยใช้แท็บเพื่อสลับระหว่างตารางกริดของอุปกรณ์กับรายการการทำงานอัตโนมัติ นอกจากนี้ ยังมีเมนูสำหรับเพิ่มห้องหรืออุปกรณ์ด้วย
    • DeviceView.swift: แสดงถึงการ์ดแบบอินเทอร์แอกทีฟสำหรับอุปกรณ์เครื่องเดียวภายในตารางกริด StructureView
    • AutomationsView.swift: แสดงรายการการทำงานอัตโนมัติที่มีอยู่สำหรับโครงสร้าง และให้การนำทางเพื่อสร้างหรือดูรายละเอียดการทำงานอัตโนมัติ
  • ViewModels (ViewModel/): คลาสเหล่านี้จัดการสถานะและตรรกะสำหรับมุมมอง
    • AccountViewModel.swift: จัดการการเชื่อมต่อกับออบเจ็กต์ Home และจัดการสถานะการตรวจสอบสิทธิ์
    • MainViewModel.swift: จัดการรายการออบเจ็กต์ Structure ที่พร้อมใช้งานและติดตามโครงสร้างที่เลือก
    • StructureViewModel.swift: จัดการการแสดงห้องพักและออบเจ็กต์ DeviceControl ภายในโครงสร้างที่เลือก
    • AutomationList.swift, AutomationViewModel.swift และอื่นๆ: จัดการการดึงข้อมูล การแสดงผล การสร้าง และการจัดการการทำงานอัตโนมัติ
  • Device Controls (ViewModel/Device/):
    • DeviceControl.swift: คลาสพื้นฐานสำหรับการแสดงอุปกรณ์ที่ควบคุมได้ใน UI
    • คลาสย่อยที่เฉพาะเจาะจง (LightControl.swift, FanControl.swift, OnOffPlugInUnitControl.swift และอื่นๆ): ใช้ตรรกะ UI, การควบคุมอุปกรณ์ และการแมปสถานะสำหรับอุปกรณ์ประเภทต่างๆ ตามลักษณะของอุปกรณ์
    • DeviceControlFactory.swift: มีหน้าที่สร้างคลาสย่อย DeviceControl ที่เหมาะสมสำหรับ HomeDevice ที่กำหนด
  • Commissioning (Commissioning/):
    • CommissioningManager.swift: มีตรรกะสำหรับการจัดการขั้นตอนการจัดสรรอุปกรณ์ Matter
  • Utilities & UX (Utils/, UX/, Storage/): มีโค้ดตัวช่วยสำหรับองค์ประกอบ UI (สี ขนาด) การจัดการข้อผิดพลาด ที่เก็บข้อมูล (SelectedStructureStorage.swift) และยูทิลิตีอื่นๆ

ตลอดทั้งโค้ดแล็บนี้ คุณจะเห็นความคิดเห็น เช่น TODO หรือบล็อกโค้ดและคำเตือนที่ถูกแสดงความคิดเห็นไว้ภายในโปรเจ็กต์ start เครื่องหมายเหล่านี้จะระบุส่วนที่คุณจะเพิ่มหรือยกเลิกการแสดงความคิดเห็นในโค้ดเพื่อใช้ฟังก์ชันที่จำเป็นตามขั้นตอนที่ระบุ

สร้างไฟล์การกำหนดค่าการติดตั้งใช้งาน Apple

หากต้องการกำหนดค่า App Attest ให้ทำตามวิธีการสร้างไฟล์การกำหนดค่าการติดตั้งใช้งานของ Apple โปรดทราบว่าหลังจากตั้งค่าแล้ว คุณจะติดตั้งใช้งานแอปได้ในอุปกรณ์จริงเท่านั้น ไม่ใช่ในโปรแกรมจำลอง

ตั้งค่าการตรวจสอบสิทธิ์

หากต้องการรับรหัสไคลเอ็นต์ OAuth และเปิดใช้ Home API ให้ลงชื่อเข้าใช้ Google Cloud ก่อน แล้วสร้างโปรเจ็กต์ใหม่หรือเลือกโปรเจ็กต์ที่มีอยู่ จากนั้นทำตามขั้นตอนที่ระบุเพื่อสร้างรหัสไคลเอ็นต์ OAuth และเปิดใช้ Home API รวมถึงเพิ่มบัญชีลงในรายการที่อนุญาต

ตั้งค่า SDK

รับ iOS SDK ของ Home APIs และกำหนดค่าโดยดูวิธีการตั้งค่าที่ระบุไว้ในตั้งค่า SDK อย่าลืมแทนที่ HOME_API_TODO_ADD_APP_GROUP ด้วยกลุ่มแอปของคุณเอง

สร้างและเรียกใช้โปรเจ็กต์

หลังจากสร้างและเรียกใช้โปรเจ็กต์ด้วยสาขา start แล้ว กล่องโต้ตอบ TODO และหน้าจอที่แสดงข้อความ "ต้องลงชื่อเข้าใช้" ควรปรากฏขึ้น การโต้ตอบของ Home API จะได้รับการติดตั้งใช้งานในส่วนต่อไปนี้

bd56b7080037e38a.png 9c0f08a3f4197a77.png

หมายเหตุ: ค้นหาโค้ดที่ต้องแก้ไขโดยค้นหาข้อความที่แสดงในกล่องโต้ตอบในโปรเจ็กต์ เช่น ค้นหา "TODO: initialize Home"

4. การเริ่มต้น

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

ก่อนที่จะใช้ Home API สำหรับ iOS คุณต้องเริ่มต้น Home ในแอป Home เป็นรายการระดับบนสุดใน SDK และให้สิทธิ์เข้าถึงเอนทิตีทั้งหมดในโครงสร้างของผู้ใช้ เมื่อขอเอนทิตีทั้งหมดของประเภทใดประเภทหนึ่ง API จะแสดงออบเจ็กต์ Query ที่ให้คุณเลือกวิธีรับผลลัพธ์ ใน GoogleHomeAPISampleIOS/Accounts/AccountViewModel.swift ให้นำความคิดเห็นและการแจ้งเตือนใน connect() ออกเพื่อใช้การเริ่มต้นบ้าน

  /// TODO: initialize Home
  /// Remove comments to initialize Home and handling permission.
  private func connect() {
    Task {
      do {
        self.home = try await Home.connect()
      } catch {
        Logger().error("Auth error: \(error).")
      }
    }
  }

สิทธิ์ในการใช้ Home API

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

47310f458c0094d9.png 4a571dbd9979a88c.png e29c75891a3a67af.png

5. อุปกรณ์และโครงสร้าง

รับห้องและอุปกรณ์

ใน GoogleHomeAPISampleIOS/ViewModel/StructureViewModel.swift ให้นำความคิดเห็นและการแจ้งเตือนใน getRoomsAndDevices() ออกเพื่อรับห้องและอุปกรณ์ในโครงสร้างที่เลือกด้วย home.rooms() และ home.devices() ตามลำดับ

  /// TODO: get rooms and devices
  /// Remove comments to get the rooms and devices from home entry
  private func getRoomsAndDevices(){
    self.home.rooms().batched()
      .combineLatest(self.home.devices().batched())
      .receive(on: DispatchQueue.main)
      .catch { error in
        Logger().error("Failed to load rooms and devices: \(error)")
        return Just((Set<Room>(), Set<HomeDevice>()))
      }
      .map { [weak self] rooms, devices in
        guard let self = self else { return [] }
        self.hasLoaded = true
        return self.process(rooms: rooms, devices: devices)
      }
      /// receive from .map and .assign() to publisher entries
      .assign(to: &self.$entries)
  }

ฟังก์ชัน process() จะตรวจสอบก่อนว่าอุปกรณ์อยู่ในห้องเดียวกันหรือไม่ จากนั้นจึงทำให้อุปกรณ์โต้ตอบกันเป็น HomeDevices โดยใช้ DeviceControl และ DeviceControlFactory

4c677c4c294e67ca.png

หมายเหตุ: หากอุปกรณ์ของคุณไม่อยู่ในรายการในDeviceControlFactory ระบบจะแสดงเป็น "ไม่รองรับ" ดูข้อมูลเพิ่มเติมเกี่ยวกับอุปกรณ์ที่รองรับได้ที่หน้าประเภทอุปกรณ์ที่รองรับใน iOS

โต้ตอบกับอุปกรณ์

ปลั๊กอิน outlet1 จะไม่ทำงานในตอนแรกเมื่อแตะหรือเลื่อนบนอุปกรณ์ หากต้องการเปิดใช้การโต้ตอบกับฟังก์ชันนี้ ให้ค้นหา GoogleHomeAPISampleIOS/ViewModel/Device/OnOffPlugInUnitControl.swift แล้วนำความคิดเห็นและการแจ้งเตือนภายในฟังก์ชัน primaryAction() ออก

  /// TODO: primary action of OnOffPlug
  /// Toggles the plug; usually provided as the `action` callback on a Button.
  public override func primaryAction() {
    self.updateTileInfo(isBusy: true)
    Task { @MainActor [weak self] in
      guard
        let self = self,
        let onOffPluginUnitDeviceType = self.onOffPluginUnitDeviceType,
        let onOffTrait = onOffPluginUnitDeviceType.matterTraits.onOffTrait
      else { return }

      do {
        try await onOffTrait.toggle()
      } catch {
        Logger().error("Failed to to toggle OnOffPluginUnit on/off trait: \(error)")
        self.updateTileInfo(isBusy: false)
      }
    }
  }

ฟังก์ชัน primaryAction() ซึ่งอยู่ในคลาส OnOffPlugInUnitControl จะสลับสถานะเปิด/ปิดของปลั๊กอัจฉริยะหรืออุปกรณ์ใดก็ตามที่แสดงโดย OnOffPluginUnitDeviceType

ดูตัวอย่างการควบคุมอุปกรณ์เพิ่มเติมได้ใน GoogleHomeAPISampleIOS/ViewModel/Device

สร้างห้องใหม่

Structure API ช่วยให้สร้างและลบห้อง รวมถึงโอนอุปกรณ์ระหว่างห้องได้

ใน GoogleHomeAPISampleIOS/ViewModel/StructureViewModel.swift ให้นำความคิดเห็นและการแจ้งเตือนใน addRoom() ออก

  /// TODO: add room
  /// Add a new room in a given structure.
  func addRoom(name: String, structure: Structure) {
    Task {
      do {
        // The view will be updated with the values from the devices publisher.
        _ = try await structure.createRoom(name: name)
      } catch {
        Logger().error("Failed to create room: \(error)")
      }
    }
  }

หากต้องการสร้างห้องใหม่ด้วย structure.createRoom() ให้ไปที่มุมซ้ายบนแล้วเลือกไอคอน "+" > เพิ่มห้อง ป้อนชื่อห้องแชทใหม่ แล้วคลิก "สร้างห้องแชท" ห้องใหม่จะปรากฏขึ้นหลังจากผ่านไป 2-3 วินาที

b122ae6642b7da1c.png a45f785e1d51938e.png 7753b56cbdcff8d6.png

ย้ายอุปกรณ์ไปห้องอื่น

ใน GoogleHomeAPISampleIOS/ViewModel/StructureViewModel.swift ให้นำความคิดเห็นและการแจ้งเตือนใน moveDevice() ออก

  /// TODO: move device
  /// Move a device into a different room.
  func moveDevice(device deviceID: String, to roomID: String, structure: Structure) {
    Task {
      do {
        _ = try await structure.move(device: deviceID, to: roomID)
      } catch {
        Logger().error("Failed to move to room: \(error)")
      }
    }
  }

หากต้องการย้ายตำแหน่งอุปกรณ์ที่มี structure.move() ให้กดอุปกรณ์ค้างไว้ เลือก "ย้ายไปยังห้องอื่น" แล้วเลือกห้องใหม่

f9627592af44163d.png fd126fabb454f2bf.png 813e1e23e50cd9f6.png

ลบห้องที่ว่างเปล่า

ใน GoogleHomeAPISampleIOS/ViewModel/StructureViewModel.swift ให้นำความคิดเห็นและการแจ้งเตือนใน removeRoom() ออก

  /// TODO: delete room
  /// Delete an empty room in a given structure.
  func removeRoom(id: String, structure: Structure) {
    Task {
      do {
        // The view will be updated with the values from the devices publisher.
        _ = try await structure.deleteRoom(id: id)
      } catch {
        Logger().error("Failed to remove room: \(error)")
      }
    }
  }

หากต้องการลบห้องที่ว่างเปล่าซึ่งมี structure.deleteRoom() ให้คลิกไอคอนถังขยะทางด้านขวาของชื่อห้อง แล้วยืนยันการดำเนินการ โปรดทราบว่าคุณจะลบได้เฉพาะห้องที่ว่างเปล่าเท่านั้น

4f129262ad67f564.png

หมายเหตุ: ย้ายอุปกรณ์กลับเพื่อสร้างห้องว่าง

6. การจัดเตรียม

หมายเหตุ: ส่วนนี้ต้องใช้ Google Hub และอุปกรณ์ Matter ตรวจสอบว่าฮับ Google ในโครงสร้างออนไลน์และเข้าถึงได้ หากไม่มีอุปกรณ์ Matter ให้ลองใช้แอปอุปกรณ์เสมือน Matter แทน

เพิ่มอุปกรณ์ Matter

Commissioning API ช่วยให้แอปเพิ่มอุปกรณ์ Matter ใหม่ลงในบ้านและบัญชี Google ของผู้ใช้ได้ ซึ่งจะช่วยให้คุณได้รับประสบการณ์การตั้งค่าที่ราบรื่นภายในแอปโดยตรง

ใน GoogleHomeAPISampleIOS/Commissioning/CommissioningManager.swift ให้นำความคิดเห็นและการแจ้งเตือนใน addMatterDevice() ออก

  /// TODO: add Matter Device
  /// Starts the Matter device commissioning flow to add the device to the user's home.
  /// - Parameters:
  ///   - structure: The structure to add the device to.
  ///   - add3PFabricFirst: Whether to add the device to a third party fabric first.
  public func addMatterDevice(to structure: Structure, add3PFabricFirst: Bool) {
    self.isCommissioning = true

    /// pass if it's 1p or 3p commissioning
    let userDefaults = UserDefaults(
      suiteName: CommissioningManager.appGroup)
    userDefaults?.set(
    add3PFabricFirst, forKey: CommissioningUserDefaultsKeys.shouldPerform3PFabricCommissioning)

    Task {
      do {
        try await structure.prepareForMatterCommissioning()
      } catch {
        Logger().error("Failed to prepare for Matter Commissioning: \(error).")
        self.isCommissioning = false
        return
      }

      // Prepare the Matter request by providing the ecosystem name and home to be added to.
      let topology = MatterAddDeviceRequest.Topology(
        ecosystemName: "Google Home",
        homes: [MatterAddDeviceRequest.Home(displayName: structure.name)]
      )
      let request = MatterAddDeviceRequest(topology: topology)

      do {
        Logger().info("Starting MatterAddDeviceRequest.")
        try await request.perform()
        Logger().info("Completed MatterAddDeviceRequest.")
        let commissionedDeviceIDs = try structure.completeMatterCommissioning()
        Logger().info("Commissioned device IDs: \(commissionedDeviceIDs).")
      } catch let error {
        structure.cancelMatterCommissioning()
        Logger().error("Failed to complete MatterAddDeviceRequest: \(error).")
      }

      self.isCommissioning = false
    }
  }

หากต้องการสร้างห้องใหม่ด้วย structure.prepareForMatterCommissioning() ให้ไปที่มุมซ้ายบนแล้วเลือกไอคอน"+" > เพิ่มอุปกรณ์ลงใน Google Fabric โดยใช้ MatterAddDeviceRequest เพื่อเพิ่มอุปกรณ์ Matter ลงในห้อง หลังจากเลือกห้องและชื่ออุปกรณ์แล้ว อุปกรณ์จะแสดงในหน้าจอ "อุปกรณ์"

adf6cbb531787aaf.png f002bd6320bc480d.png

7. การทำงานอัตโนมัติ

ดูการทำงานอัตโนมัติทั้งหมดในบ้าน

แตะการทำงานอัตโนมัติที่แถบนำทางด้านล่าง โดยจะแสดงการทำงานอัตโนมัติทั้งหมดในโครงสร้างของคุณด้วย structure.listAutomations()

cc6d50f72f812c24.png

หมายเหตุ: หากไม่ได้ตั้งค่าการทำงานอัตโนมัติในบ้านไว้ คุณจะเห็นข้อความ "เพิ่มการทำงานอัตโนมัติเพื่อเริ่มต้นใช้งาน"

สร้างการทำงานอัตโนมัติ

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

ใน GoogleHomeAPISampleIOS/ViewModel/Automation/AutomationsRepository.swift ให้นำความคิดเห็น การแจ้งเตือน และการทำงานอัตโนมัติที่ว่างเปล่าใน lightAutomation() ออก

  /// TODO: create automation
  /// - Parameter devices: devices in current selected structure
  /// - Returns: the automation object to be created
  /// This automation will turn off the light after 5 seconds.
  public func lightAutomation(devices: Set<HomeDevice>) async throws -> any DraftAutomation {
    let light = devices.first { $0.name == "light2" }
    
    guard let light else {
      Logger().error("Unable to find light device with name light2")
      throw HomeError.notFound("No devices support OnOffLightDeviceType")
    }
    
    return automation(
      name: "Turn off light after 5 seconds",
      description:
        """
        Turns off light2 after it has been on for 5 seconds.
        """
    ) {
      let onOffStarter = starter(light, OnOffLightDeviceType.self, OnOffTrait.self)
      onOffStarter
      condition {
        onOffStarter.onOff.equals(true)
      }
      delay(for: Duration.seconds(5))
      action(light, OnOffLightDeviceType.self) {
        OnOffTrait.off()
      }
    }
  }

หากต้องการสร้างการทำงานอัตโนมัติที่จะปิดไฟ 5 วินาทีหลังจากเปิด ให้ไปที่มุมมองการทำงานอัตโนมัติ แล้วคลิกปุ่ม "+ เพิ่ม" จากนั้นเลือก "ปิดไฟหลังจากผ่านไป 5 วินาที" รายละเอียดการทำงานอัตโนมัติ รวมถึง starter, condition และ action จะปรากฏขึ้น คลิก "บันทึก" เพื่อสร้างการทำงานอัตโนมัติโดย structure.createAutomation()

21c1f8ea2a29134b.png 4bd36f6ed9c5f6e9.png

หมายเหตุ: การทำงานอัตโนมัติที่ใช้ได้จะขึ้นอยู่กับอุปกรณ์ในบ้าน หากไม่เห็นระบบอัตโนมัติที่พร้อมใช้งาน ให้ลองเปลี่ยนชื่ออุปกรณ์ไฟเป็น "light2"

กลับไปที่แท็บ "อุปกรณ์" แล้วเปิดไฟชื่อ "light2" โดยจะปิดโดยอัตโนมัติหลังจากผ่านไป 5 วินาที

ส่วนประกอบของการทำงานอัตโนมัติมีดังนี้

  • เงื่อนไขเริ่มต้น: นี่คือเหตุการณ์ที่เริ่มต้นการทำงานอัตโนมัติ ในตัวอย่างนี้ การทำงานอัตโนมัติจะเริ่มเมื่อมีการเปลี่ยนแปลงใน OnOffTrait
  • เงื่อนไข: ตรวจสอบว่าอุปกรณ์เริ่มต้นตรงตามข้อกำหนดที่เฉพาะเจาะจงหรือไม่ ในกรณีนี้ ระบบจะเรียกใช้การทำงานอัตโนมัติหากไฟเปิดอยู่
  • การดำเนินการ: นี่คือการทำงานอัตโนมัติที่คุณต้องการดำเนินการ แต่จะดำเนินการได้ก็ต่อเมื่อเงื่อนไขเริ่มต้นเป็นไปตามข้อกำหนดเท่านั้น หากเป็นไปตามเงื่อนไข ระบบจะปิดไฟ

ดูตัวอย่างเพิ่มเติมได้ที่หน้าตัวอย่างการทำงานอัตโนมัติ

ลบการทำงานอัตโนมัติ

ระบบจะเรียกใช้เมธอด structure.deleteAutomation() เมื่อคุณปัดไปทางซ้ายในการทำงานอัตโนมัติที่มีอยู่ แล้วแตะไอคอนถังขยะเพื่อนำการทำงานอัตโนมัตินั้นออกจากบ้าน

dc678cd9e16f89a5.png

8. ขอแสดงความยินดี

ยินดีด้วย คุณสร้างแอปสมาร์ทโฮมพื้นฐานโดยใช้ Home API สำหรับ iOS ได้สำเร็จแล้ว

สิ่งที่คุณทำสำเร็จ

  • การเริ่มต้น: เชื่อมต่อแอปกับระบบนิเวศ Google Home โดยใช้ Home.connect()
  • สิทธิ์: จัดการการตรวจสอบสิทธิ์และการให้สิทธิ์ผู้ใช้สำหรับการเข้าถึงข้อมูลบ้าน
  • อุปกรณ์และโครงสร้าง: ดึงและแสดงห้องและอุปกรณ์โดยใช้ home.rooms() และ home.devices()
  • การควบคุมอุปกรณ์: การโต้ตอบกับอุปกรณ์ที่ใช้งาน เช่น การสลับสถานะของ OnOffPluginUnitDeviceType โดยการเรียกใช้คำสั่งในลักษณะของอุปกรณ์
  • การจัดการโครงสร้าง: เพิ่มฟังก์ชันในการสร้างห้องใหม่ (structure.createRoom()) ย้ายอุปกรณ์ระหว่างห้อง (structure.move()) และลบห้องที่ว่าง (structure.deleteRoom())
  • การจัดสรร: ผสานรวมขั้นตอนการจัดสรรของ SDK เพื่อเพิ่มอุปกรณ์ Matter ใหม่ (MatterAddDeviceRequest)
  • การทำงานอัตโนมัติ: อธิบายวิธีแสดงรายการ สร้าง (structure.createAutomation()) และลบ (structure.deleteAutomation()) การทำงานอัตโนมัติภายในโครงสร้าง

ตอนนี้คุณมีความเข้าใจพื้นฐานเกี่ยวกับวิธีใช้ประโยชน์จาก Home API เพื่อสร้างประสบการณ์การควบคุมสมาร์ทโฮมที่สมบูรณ์บน iOS แล้ว

ขั้นตอนถัดไป

  • ลองควบคุมอุปกรณ์ประเภทอื่นๆ ที่มีให้ในแอปตัวอย่าง (ไฟ พัดลม ม่าน และอื่นๆ)
  • เจาะลึกรายละเอียดเพิ่มเติมเกี่ยวกับลักษณะและคำสั่งต่างๆ ที่ใช้ได้กับอุปกรณ์ต่างๆ
  • ทดลองสร้างการทำงานอัตโนมัติที่ซับซ้อนมากขึ้นโดยใช้เงื่อนไขเริ่มต้น เงื่อนไข และการดำเนินการที่แตกต่างกัน
  • ดูฟีเจอร์และรายละเอียดขั้นสูงเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับ Home API

เยี่ยมมาก!