Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Demo

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

iOS10ͰೖͬͨHomeΞϓϦ

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

ͦ͏͍͑͹iOSͷLTͰͨ͠ɻɻɻ HomeKitͷAPIΛ࢖ͬͯΈ·ͨ͠ https://github.com/tattn/HomeKit-Playground

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Demo

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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 • ిݯ • ϛϡʔτ • …

Slide 26

Slide 26 text

஋ͷऔಘ 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: () } • ిݯ • ϛϡʔτ • …

Slide 27

Slide 27 text

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