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

1. บทนำ

f154e30306882c74.png

Home API คืออะไร

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

3e11583c779a2cec.png

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

Home API ประกอบด้วยรายการต่อไปนี้

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

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

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

  • วิธีสร้างแอป iOS โดยใช้ Home API ด้วยแนวทางปฏิบัติแนะนำ
  • วิธีใช้ Device and 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 นี้ ซึ่งใช้ตรวจสอบงานของคุณ

สํารวจโค้ด "start"

เริ่ม 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

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

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

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

bd56b7080037e38a.png 9c0f08a3f4197a77.png

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

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

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

ก่อนใช้ 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() ให้กด 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 Hub ในโครงสร้างออนไลน์อยู่และเข้าถึงได้ หากไม่มีอุปกรณ์ 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

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

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

เมื่อคุณคุ้นเคยกับ Device และ Structure 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

เยี่ยมมาก!