Інтеграція HomeKit для керування розумним домом через iOS
HomeKit — це екосистема розумного дому від Apple: лампи, термостати, замки, датчики. Приложення отримує доступ до аксесуарів через HomeKit.framework, керує ними через HMAccessory та HMCharacteristic. Перш ніж писати перший рядок коду, розуміють: HomeKit працює тільки з сертифікованим обладнанням, а процедура тестування з реальними аксесуарами в Apple HomeKit simulator має обмеження.
Основні концепції HomeKit
HMHome — дім. Може бути декілька (основний, дача). HMRoom — кімната всередину дому. HMAccessory — фізичний пристрій (лампа, замок). HMService — функція аксесуара (лампа має сервіс освітлення + інформаційний сервіс). HMCharacteristic — конкретна властивість сервісу: яскравість, колірна температура, стан замка.
Ієрархія: Home → Room → Accessory → Service → Characteristic.
Налаштування та отримання доступу
import HomeKit
class HomeKitManager: NSObject, HMHomeManagerDelegate {
let homeManager = HMHomeManager()
override init() {
super.init()
homeManager.delegate = self
}
func homeManagerDidUpdateHomes(_ manager: HMHomeManager) {
guard let home = manager.primaryHome else {
// немає налаштованого дому — пропонуємо створити або додати аксесуари
return
}
listAccessories(in: home)
}
func listAccessories(in home: HMHome) {
for accessory in home.accessories {
print("Accessory: \(accessory.name)")
for service in accessory.services {
print(" Service: \(service.serviceType)")
for characteristic in service.characteristics {
print(" Characteristic: \(characteristic.characteristicType)")
}
}
}
}
}
Info.plist обов'язково: NSHomeKitUsageDescription. Без нього — крах при першому звертанні до HMHomeManager.
Entitlement: com.apple.developer.homekit — запитується через Apple Developer Portal. Без нього приложення не може взаємодіяти з HomeKit навіть на симуляторі з віртуальними аксесуарами.
Читання та запис характеристик
func setLightBrightness(_ accessory: HMAccessory, brightness: Int) {
guard let lightService = accessory.services.first(where: {
$0.serviceType == HMServiceTypeLightbulb
}),
let brightnessChar = lightService.characteristics.first(where: {
$0.characteristicType == HMCharacteristicTypeBrightness
}) else { return }
brightnessChar.writeValue(brightness) { error in
if let error = error {
// HMError.communicationFailure — аксесуар недоступний
// HMError.operationNotSupported — характеристика read-only
print("Write failed: \(error)")
}
}
}
func readCurrentTemperature(_ accessory: HMAccessory) {
guard let thermostat = accessory.services.first(where: {
$0.serviceType == HMServiceTypeThermostat
}),
let tempChar = thermostat.characteristics.first(where: {
$0.characteristicType == HMCharacteristicTypeCurrentTemperature
}) else { return }
tempChar.readValue { error in
if error == nil {
let temp = tempChar.value as? Double
print("Temperature: \(temp ?? 0)°C")
}
}
}
Підписка на події
func subscribeToLockState(_ lockChar: HMCharacteristic) {
lockChar.enableNotification(true) { error in
guard error == nil else { return }
// тепер делегат HMAccessoryDelegate отримує сповіщення
}
}
// HMAccessoryDelegate:
func accessory(_ accessory: HMAccessory,
service: HMService,
didUpdateValueFor characteristic: HMCharacteristic) {
if characteristic.characteristicType == HMCharacteristicTypeCurrentLockMechanismState {
let isLocked = characteristic.value as? Int == 1
updateLockUI(isLocked: isLocked)
}
}
Автоматизація та тригери
HMTrigger — автоматизація за умовою. Два типи:
-
HMTimerTrigger— за часом -
HMEventTrigger— за подією (відкриття дверей, зміна температури)
let fireDate = Date().addingTimeInterval(3600)
let timer = HMTimerTrigger(name: "Evening lights", fireDate: fireDate,
timeZone: .current, recurrence: nil, recurrenceCalendar: nil)
home.addTrigger(timer) { error in
guard error == nil else { return }
// додаємо дію до тригера
}
Симулятор аксесуарів для розробки
Apple HomeKit Accessory Simulator (частина Xcode Additional Tools) створює віртуальні аксесуари на Mac. Приложення в симуляторі iOS бачить їх через Wi-Fi. Це єдиний спосіб розробляти без реального обладнання.
Обмеження: деякі сценарії (Bluetooth аксесуари, Thread-пристрої) з симулятором не працюють повністю — потрібен реальний iPhone і сертифікований аксесуар.
Matter vs HomeKit
Matter (новий стандарт розумного дому) працює через HomeKit як один з транспортів на iOS. HMAccessory з профілем Matter з'являється в HomeKit автоматично при додаванні через HMHome.addAndSetupAccessories. Окремої обробки не потребує — HomeKit абстрагує протокол.
Термін інтеграції: 1–2 тижні — керування аксесуарами, читання/запис характеристик, базова автоматизація. Вартість розраховується індивідуально.







