HomeKit accessoryDidUpdateУслуги не называются - PullRequest
0 голосов
/ 27 февраля 2019

В следующем быстром и грязном тестовом приложении я пытаюсь получать обновления уровня освещенности от аксессуара детектора движения Hue с помощью accessoryDidUpdateServices ().Однако функция делегата никогда не вызывается.Я запускаю его на iPhone с установленной iOS 12.1.4.

Может кто-нибудь объяснить, что я делаю неправильно, и что мне нужно сделать, чтобы правильно обрабатывать обновления HMService?

import HomeKit

public class ViewController: UIViewController, HMHomeManagerDelegate, HMAccessoryDelegate {

    var manager: HMHomeManager!

    public override func viewDidLoad() {
        super.viewDidLoad()
        manager = HMHomeManager()
        manager.delegate = self
    }

    public func homeManagerDidUpdateHomes(_ manager: HMHomeManager) {
        let service = manager.primaryHome!.servicesWithTypes([HMServiceTypeLightSensor])!.first!
        service.accessory!.delegate = self
        let characteristic = service.characteristics.filter({ $0.characteristicType == HMCharacteristicTypeCurrentLightLevel }).first!

        Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (timer) in
            print("Light level: \(characteristic.value!)")
        }
    }

    public func accessoryDidUpdateServices(_ accessory: HMAccessory) {
        print("Service updated: \(accessory.name)")
    }
}

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Проблема заключалась в том, что я использовал accessoryDidUpdateService, когда должен был использовать accessory: didUpdateValueFor.С последним функционалом код работает как положено.

0 голосов
/ 28 февраля 2019

Я думаю, что вам не хватает addHomes(manager.homes) внутри вашего viewDidLoad, и вам нужно убедиться, что вы создали новый дом, чтобы добавить его, а затем вы можете добавить аксессуары и добавить к дому.

Я настоятельно рекомендую этот учебник HomeKit на веб-сайте RayWenderlich: https://www.raywenderlich.com/5313-homekit-tutorial-getting-started

...