You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 5使用HomeKit SDK开发iOS应用控制插座开关的示例代码咨询

HomeKit Swift 实现智能插座开关控制示例

前置配置

  • 项目设置中开启「HomeKit」能力
  • 在Info.plist中添加NSHomeKitUsageDescription权限描述,说明App使用HomeKit的用途

核心实现代码

基础属性与代理设置

import HomeKit
import UIKit

class OutletControlViewController: UIViewController {
    // 声明HomeKit家庭管理实例
    private let homeManager = HMHomeManager()
    // 存储目标插座的开关特性
    private var powerStateCharacteristic: HMCharacteristic?

    override func viewDidLoad() {
        super.viewDidLoad()
        // 设置家庭管理代理
        homeManager.delegate = self
    }
}

目标设备查找逻辑

extension OutletControlViewController: HMHomeManagerDelegate {
    // 家庭管理器加载完成后执行查找逻辑
    func homeManagerDidUpdateHomes(_ manager: HMHomeManager) {
        // 1. 查找名称为Holmdel的目标家庭
        guard let targetHome = manager.homes.first(where: { $0.name == "Holmdel" }) else {
            print("未找到目标家庭Holmdel")
            return
        }
        
        // 2. 查找家庭下名称为Bedroom的目标房间
        guard let targetRoom = targetHome.rooms.first(where: { $0.name == "Bedroom" }) else {
            print("未找到目标房间Bedroom")
            return
        }
        
        // 3. 查找房间内名称为SYLVANIA Outlet-4515的插座设备
        guard let targetOutlet = targetRoom.accessories.first(where: { $0.name == "SYLVANIA Outlet-4515" }) else {
            print("未找到目标插座设备")
            return
        }
        
        // 4. 查找插座的开关服务
        guard let powerService = targetOutlet.services.first(where: { $0.serviceType == HMServiceTypeOutlet }) else {
            print("设备未识别到插座服务")
            return
        }
        
        // 5. 查找开关服务对应的电源状态特性
        guard let powerChar = powerService.characteristics.first(where: { $0.characteristicType == HMCharacteristicTypePowerState }) else {
            print("未找到电源控制特性")
            return
        }
        
        // 保存特性供后续控制使用
        self.powerStateCharacteristic = powerChar
    }
}

插座开关控制方法

// MARK: 插座控制方法
extension OutletControlViewController {
    /// 控制插座开关
    /// - Parameter isOn: true为开,false为关
    func controlOutlet(isOn: Bool) {
        guard let powerChar = powerStateCharacteristic else {
            print("电源控制特性未初始化,请先确认设备查找完成")
            return
        }
        
        // 写入开关状态
        powerChar.writeValue(NSNumber(value: isOn)) { error in
            if let error = error {
                print("控制失败,错误:\(error.localizedDescription)")
                return
            }
            print("插座\(isOn ? "开启" : "关闭")成功")
        }
    }
}

注意事项

  • 设备必须已经通过苹果家庭App完成配对,加入到对应的家庭和房间下
  • HMHomeManager的回调在子线程触发,如果需要更新UI请切换到主线程执行
  • 首次启动App会弹出HomeKit权限申请弹窗,用户授权后才能正常访问家庭数据

内容的提问来源于stack exchange,提问作者Gene Fernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:21:00