Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
日曜HackでHomeKitと戯れた話
Search
Tatsuya Tanaka
October 30, 2016
Technology
1
2k
日曜HackでHomeKitと戯れた話
API非公開の学習リモコンをHomeKit対応させた話と、HomeKitについて。
@iOS_LT #23
Tatsuya Tanaka
October 30, 2016
Tweet
Share
More Decks by Tatsuya Tanaka
See All by Tatsuya Tanaka
iPhoneのセンサー情報をmacOSアプリでリアルタイム活用するための技術
tattn
1
650
Better use of SwiftUI
tattn
0
450
Swift Concurrencyによる安全で快適な非同期処理
tattn
2
1.3k
iOSアプリの技術選択2022
tattn
7
3.9k
Widget Suggestions 対応と ヤフーの新OS対応
tattn
1
1.3k
WidgetKitで良い体験を作るには / Good experience with WidgetKit
tattn
2
1.7k
既存アプリにSwiftUIをどう組み込んでいくか
tattn
8
2.4k
iOS 14からのアプリ内課金
tattn
5
2.9k
iOS 14の位置情報系アップデート
tattn
0
22k
Other Decks in Technology
See All in Technology
「どこから読む?」コードとカルチャーに最速で馴染むための実践ガイド
zozotech
PRO
0
570
TS-S205_昨年対比2倍以上の機能追加を実現するデータ基盤プロジェクトでのAI活用について
kaz3284
1
230
Snowflake×dbtを用いたテレシーのデータ基盤のこれまでとこれから
sagara
0
130
会社紹介資料 / Sansan Company Profile
sansan33
PRO
7
380k
今日から始めるAWSセキュリティ対策 3ステップでわかる実践ガイド
yoshidatakeshi1994
0
130
複数サービスを支えるマルチテナント型Batch MLプラットフォーム
lycorptech_jp
PRO
1
990
なぜテストマネージャの視点が 必要なのか? 〜 一歩先へ進むために 〜
moritamasami
0
240
下手な強制、ダメ!絶対! 「ガードレール」を「檻」にさせない"ガバナンス"の取り方とは?
tsukaman
2
460
新アイテムをどう使っていくか?みんなであーだこーだ言ってみよう / 20250911-rpi-jam-tokyo
akkiesoft
0
360
エンジニアが主導できる組織づくり ー 製品と事業を進化させる体制へのシフト
ueokande
1
110
初めてAWSを使うときのセキュリティ覚書〜初心者支部編〜
cmusudakeisuke
1
280
まずはマネコンでちゃちゃっと作ってから、それをCDKにしてみよか。
yamada_r
2
120
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
930
Git: the NoSQL Database
bkeepers
PRO
431
66k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
Why Our Code Smells
bkeepers
PRO
339
57k
Fireside Chat
paigeccino
39
3.6k
Designing Experiences People Love
moore
142
24k
Making Projects Easy
brettharned
117
6.4k
Bash Introduction
62gerente
615
210k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.2k
Transcript
ాத ୡ (tattn) Github: https://github.com/tattn Qiita: http://qiita.com/tattn Twitter: https://twitter.com/tanakasan2525 ༵HackͰ
HomeKitͱٔΕͨ
HomeKit iOS 8 ͔Β͑ΔΑ͏ʹͳͬͨ iOSͱՈి Λܨ͙Ս͚ڮ
ઌिͷ༵ʹ͜Ε͕ಧ͖·ͨ͠ (ܹ҆ʂ2500ԁ) ֶशϦϞίϯϢχοτ
͔͠͠ɻɻɻ ͱ͍ͬͯ҆ͷͰ͕͢ APIެ։͞Εͯͳ͍ HomeKitʹରԠͯ͠ͳ͍
Demo
ಈըஏ͔͍ͣ͠ͷͰΧοτ
γεςϜߏ • RM mini 3 (ࠇ౾) • Node.js • homebridge
• iPhone 6s (iOS10) ࠇ౾ HomeKit API UDP ֎ઢ TV
ࠇ౾Λૢ࡞͢ΔͨΊʹ WireSharkͰެࣜΞϓϦͱࠇ౾ͷ௨৴Λݟͯɺ Node.jsͰͦΕΛਅࣅΔ͜ͱͰૢ࡞Մೳʹɻɻɻ
ࠇ౾Λૢ࡞͢ΔͨΊʹ ͪͳΈʹɺQUIC (ΫΠοΫ) ͱ͍͏ Google͕։ൃͨ͠৽͠ΊͷϓϩτίϧΛར༻͠ɺ UDPͷίωΫγϣϯΛு໋ͬͯྩΛग़ͯ͠·ͨ͠ɻɻɻʂ
Homebridge Node.jsͰHomeKitAPIͷΤϛϡϨʔτ͕Ͱ͖Δπʔϧ homebridge-***ͱ͍͏npmύοέʔδΛ࡞֦ͬͯு͢ΔΈɻ ࠇ౾༻ͷύοέʔδΛ࡞ɻ https://github.com/nfarina/homebridge https://github.com/tattn/homebridge-rm-mini3
iOS10ͰೖͬͨHomeΞϓϦ
ίʔυΛಡΈऔͬͯՈిΛઃఆ
͜Ε͚ͩͰɺHomeΞϓϦ & Siri ͔ΒϦϞίϯૢ࡞͕ՄೳʹͳΓ·ͨ͠ɻ
ୈࡾͷϖʔδ͕૿͑·ͨ͠
ͦ͏͍͑iOSͷLTͰͨ͠ɻɻɻ HomeKitͷAPIΛͬͯΈ·ͨ͠ https://github.com/tattn/HomeKit-Playground
HomeKitΛ͏ͨΊʹ CapabilityͰHomeKitΛOnʹ͢Δ
HomeKitͷઃఆͷΞΫηε plistʹ NSHomeKitUsageDescription ͷՃ͕ඞཁ iOS10͔ΒϢʔβʔσʔλͷΞΫηεͷ తͷهड़͕ඞਢʹ
ͱΓ͋͑ͣͷUI AppleͷΨΠυϥΠϯʹେମԊͬͨ ૉΒ͍͠UIΛ࡞ • ߇͑ΊͰ͋Δ͜ͱ • ໌ྎͰ͋Δ͜ͱ • Ԟߦ͖Λ༩͑Δ͜ͱ
Demo
ಈըஏ͔͍ͣ͠ͷͰΧοτ
HomeKit https://developer.apple.com/jp/documentation/HomeKitDeveloperGuide.pdf
Accessoryͷத (ྫ) https://developer.apple.com/jp/documentation/HomeKitDeveloperGuide.pdf TV Accessory Service • TV • εΠον
Characteristic • ిݯ • ϛϡʔτ • …
Primary Homeͷऔಘ // 管理クラスの取得 let homeManager = HMHomeManager() homeManager.delegate =
self // MARK: - HMHomeManagerDelegate func homeManagerDidUpdateHomes(_ manager: HMHomeManager) { // Primary Homeの取得 let home = manager.primaryHome } ↓͜ΕΛऔಘ
Room / Accessoryͷऔಘ let home = manager.primaryHome let room =
home?.rooms[0] let accessory = room?.accessories[0] // これでも可 let accessory = home?.accessories[0]
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 • ిݯ • ϛϡʔτ • …
ͷऔಘ 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: () } • ిݯ • ϛϡʔτ • …
Έͳ͞Μͥͻ࡞Γ·͠ΐ͏ʂ APIͷ͜ͱΛΔͨΊʹ ۙʹͦͷٕज़Λײ͡Δͷ͕खͬऔΓૣ͍Ͱ͢ʂ ←ֶशϦϞίϯϢχοτ ɹ͓͢͢ΊͰ͢ʂ