Upgrade to Pro — share decks privately, control downloads, hide ads and more …

日曜HackでHomeKitと戯れた話

 日曜HackでHomeKitと戯れた話

API非公開の学習リモコンをHomeKit対応させた話と、HomeKitについて。

@iOS_LT #23

Tatsuya Tanaka

October 30, 2016
Tweet

More Decks by Tatsuya Tanaka

Other Decks in Technology

Transcript

  1. ాத ୡ໵ (tattn)
    Github: https://github.com/tattn
    Qiita: http://qiita.com/tattn
    Twitter: https://twitter.com/tanakasan2525
    ೔༵HackͰ
    HomeKitͱٔΕͨ࿩

    View Slide

  2. HomeKit
    iOS 8 ͔Β࢖͑ΔΑ͏ʹͳͬͨ
    iOSͱՈి
    Λܨ͙Ս͚ڮ

    View Slide

  3. ઌिͷ೔༵೔ʹ͜Ε͕ಧ͖·ͨ͠
    (ܹ҆ʂ2500ԁ)
    ֶशϦϞίϯϢχοτ

    View Slide

  4. ͔͠͠ɻɻɻ
    ͱͬͯ΋͍҆ͷͰ͕͢
    API͸ެ։͞Εͯͳ͍
    HomeKitʹ͸ରԠͯ͠ͳ͍

    View Slide

  5. Demo

    View Slide

  6. ಈը͸ஏ͔͍ͣ͠ͷͰΧοτ

    View Slide

  7. γεςϜߏ੒
    • RM mini 3 (ࠇ౾)
    • Node.js
    • homebridge
    • iPhone 6s (iOS10)
    ࠇ౾
    HomeKit API
    UDP
    ੺֎ઢ
    TV

    View Slide

  8. ࠇ౾Λૢ࡞͢ΔͨΊʹ
    WireSharkͰެࣜΞϓϦͱࠇ౾ͷ௨৴Λݟͯɺ
    Node.jsͰͦΕΛਅࣅΔ͜ͱͰૢ࡞Մೳʹɻɻɻ

    View Slide

  9. ࠇ౾Λૢ࡞͢ΔͨΊʹ
    ͪͳΈʹɺQUIC (ΫΠοΫ) ͱ͍͏
    Google͕։ൃͨ͠৽͠ΊͷϓϩτίϧΛར༻͠ɺ
    UDPͷίωΫγϣϯΛு໋ͬͯྩΛग़ͯ͠·ͨ͠ɻɻɻʂ

    View Slide

  10. Homebridge
    Node.jsͰHomeKitAPIͷΤϛϡϨʔτ͕Ͱ͖Δπʔϧ
    homebridge-***ͱ͍͏npmύοέʔδΛ࡞֦ͬͯு͢Δ࢓૊Έɻ
    ࠇ౾༻ͷύοέʔδΛ࡞੒ɻ
    https://github.com/nfarina/homebridge
    https://github.com/tattn/homebridge-rm-mini3

    View Slide

  11. iOS10ͰೖͬͨHomeΞϓϦ

    View Slide

  12. ίʔυΛಡΈऔͬͯՈిΛઃఆ

    View Slide

  13. ׬੒
    ͜Ε͚ͩͰɺHomeΞϓϦ & Siri ͔ΒϦϞίϯૢ࡞͕ՄೳʹͳΓ·ͨ͠ɻ

    View Slide

  14. ୈࡾͷϖʔδ͕૿͑·ͨ͠

    View Slide

  15. ͦ͏͍͑͹iOSͷLTͰͨ͠ɻɻɻ
    HomeKitͷAPIΛ࢖ͬͯΈ·ͨ͠

    https://github.com/tattn/HomeKit-Playground

    View Slide

  16. HomeKitΛ࢖͏ͨΊʹ
    CapabilityͰHomeKitΛOnʹ͢Δ

    View Slide

  17. HomeKitͷઃఆ΁ͷΞΫηε
    plistʹ
    NSHomeKitUsageDescription
    ͷ௥Ճ͕ඞཁ
    iOS10͔ΒϢʔβʔσʔλ΁ͷΞΫηεͷ
    ໨తͷهड़͕ඞਢʹ

    View Slide

  18. ͱΓ͋͑ͣͷUI
    AppleͷΨΠυϥΠϯʹେମԊͬͨ
    ૉ੖Β͍͠UIΛ࡞੒
    • ߇͑ΊͰ͋Δ͜ͱ
    • ໌ྎͰ͋Δ͜ͱ
    • Ԟߦ͖Λ༩͑Δ͜ͱ

    View Slide

  19. Demo

    View Slide

  20. ಈը͸ஏ͔͍ͣ͠ͷͰΧοτ

    View Slide

  21. HomeKit
    https://developer.apple.com/jp/documentation/HomeKitDeveloperGuide.pdf

    View Slide

  22. Accessoryͷத਎ (ྫ)
    https://developer.apple.com/jp/documentation/HomeKitDeveloperGuide.pdf
    TV
    Accessory
    Service
    • TV
    • εΠον
    Characteristic
    • ిݯ
    • ϛϡʔτ
    • …

    View Slide

  23. Primary Homeͷऔಘ
    // 管理クラスの取得
    let homeManager = HMHomeManager()
    homeManager.delegate = self
    // MARK: - HMHomeManagerDelegate
    func homeManagerDidUpdateHomes(_ manager: HMHomeManager) {
    // Primary Homeの取得
    let home = manager.primaryHome
    }
    ↓͜ΕΛऔಘ

    View Slide

  24. Room / Accessoryͷऔಘ
    let home = manager.primaryHome
    let room = home?.rooms[0]
    let accessory = room?.accessories[0]
    // これでも可
    let accessory = home?.accessories[0]

    View Slide

  25. Characteristicͷऔಘ
    for service in accessory.services {
    switch service.serviceType {
    case HMServiceTypeSwitch:
    for chara in service.characteristics {
    switch chara.characteristicType {
    case HMCharacteristicTypePowerState:
    // 電源スイッチの取得
    chara
    default: ()
    }
    }
    default: ()
    }
    }
    Accessory
    Service
    • TV
    • Ϙλϯ
    Characteristic • ిݯ
    • ϛϡʔτ
    • …

    View Slide

  26. ஋ͷऔಘ
    Accessory
    Service
    • TV
    • Ϙλϯ
    Characteristic
    switch chara.characteristicType {
    case HMCharacteristicTypePowerState:
    // 値の取得
    chara.readValue { error in
    let isOn = chara.value as? Bool
    }
    // 値の設定
    chara.writeValue(true) { error in
    print(error)
    }
    default: ()
    }
    • ిݯ
    • ϛϡʔτ
    • …

    View Slide

  27. Έͳ͞Μ΋ͥͻ࡞Γ·͠ΐ͏ʂ
    APIͷ͜ͱΛ஌ΔͨΊʹ͸
    ਎ۙʹͦͷٕज़Λײ͡Δͷ͕खͬऔΓૣ͍Ͱ͢ʂ
    ←ֶशϦϞίϯϢχοτ
    ɹ͓͢͢ΊͰ͢ʂ

    View Slide