寄付窓口はこちら

try! Swift スマートホームのためのコード #tryswiftconf Day1-10

twitter.com

私たちはスマートテクノロジーの時代に生きており、スマートテクノロジーは家庭にも入り始めています。この講演では、Appleが提供しているスマートアクセサリのためのフレームワークであるHomeKitと連携する方法について解説します。この講演を聞いた後、家に帰ってすぐにスマートアクセサリを触りたくなるかもしれませんよ?

スマートホーム、ホットですね! 非常に多くのホームシステムが有ります。ただし、すべての家電が共通プロトコルで通信したりはしません。

今日はHomeKitというAppleフレームワークの話をします。

f:id:niwatako:20160302170718j:plain

具体的な事例として照明を取り上げます。どういうコードを書くと照明をコントロールできるのかがテーマです。 専門家ではありませんが、私がどうやって入門したかの紹介になります。

f:id:niwatako:20160302170802j:plain

基本的なオブジェクトを理解しましょう。今日は、ユーザーは一つの自宅を持つと仮定します。 f:id:niwatako:20160302170915j:plain サービスには特性(Charasteristic)があります f:id:niwatako:20160302170924j:plain 読書両方できるとは限りませんがこうしたプロパティを持っています。 照明なら電源、色相、再度などを持っています

きょうは電源を取り上げます。

2つの主要なオブジェクトがあります。HomeManagerとHomeDelegate

f:id:niwatako:20160302171018j:plain f:id:niwatako:20160302171023j:plain

変更の通知を受けて情報を更新します。

他にも今日カバーしない豊富な機能があります f:id:niwatako:20160302171100j:plain


f:id:niwatako:20160302171108j:plain

Bridgeを介して通信が行われます。

サンプルアプリです。電源がオンかオフか。 f:id:niwatako:20160302171141j:plain

リアルタイムにON/OFFを反映する必要があります。そしてONにしようとしてONに出来たかどうかを確認したい。電源状況と、コネクションの死活監視。

f:id:niwatako:20160302171304j:plain f:id:niwatako:20160302171311j:plain

ホームデータにアクセスするにはアクセス権が必要です。 f:id:niwatako:20160302171320j:plain

ここが最初のエントリポイントです f:id:niwatako:20160302171357j:plain

f:id:niwatako:20160302171419j:plain f:id:niwatako:20160302171425j:plain すべての特性が同じように書き込まれていて、文字列で特性が入っています。ここはたまたまBoolですが、他のKeyなら別のオブジェクトかもしれません。

f:id:niwatako:20160302171509j:plain

f:id:niwatako:20160302171521j:plain

電球がONになったかチェック f:id:niwatako:20160302171544j:plain 返り値を把握しておく必要があります。

読み込みでエラーが出ました。通信障害が起きる場合があります。 f:id:niwatako:20160302171614j:plain 必ずしもコールバックではないがcompletionHandlerを使える。

ON/OFF死体タイミングで出来なかったというエラーが渡しの場合は発生しました。 通信障害が発生したら通信を無効化する(破棄?)するようにした。

電球の状態そのものの確認をしてみます

f:id:niwatako:20160302171732j:plain

f:id:niwatako:20160302171739j:plain 通知がサポートされている場合にはNotificationを登録します。 f:id:niwatako:20160302171801j:plain

Delegateにこうした実装をします f:id:niwatako:20160302171710j:plain

これで最新データを確認できます f:id:niwatako:20160302171820j:plain

このコールバックはどんな機能の変更に対しても飛んで来るので注意が必要です。

次に重要なのがこれです f:id:niwatako:20160302171902j:plain

Wi-Fiが落ちた時とか、なにか事象が発生したことを検知できる f:id:niwatako:20160302171915j:plain

操作、最新状態の取得ができるようになりました。 f:id:niwatako:20160302171940j:plain

DEMOをお見せしましょう、でも電球をにほんまで追ってこられませんでした 自宅の動画をお見せします。その後でアクセサリシミュレータの使い方を説明しましょう。

デモ:コードサンプルに入っていなかった機能も入っています。自分のアプリを使ってリビング手前の証明を見て、明るさを調整し、スイッチでON/OFFして、電球の色を変えて、TableViewCellの色が変わって、リアルタイムに照明の色を羽井します。

アクセサリシミュレータ:Apple Developer Toolsからダウンロードできます。操作したり、アクセサリの変更がリアルタイムにシミュレータで実行中のアプリに伝わったりします。

f:id:niwatako:20160302172450j:plain HomeKitDatabaseが既にアプリに入っており、パーミッションを許可するだけで利用することが出来ました。

Resource

f:id:niwatako:20160302172520j:plain

まとめ

f:id:niwatako:20160302172533j:plain

まだ数がありませんが、アプリが出ているので是非試してみてください。そしてアプリを作ってみてください。 メーカー提供APIスタンドアロンのものもあったり、オープンソースもあったり。 ぜひOpenSourceHomeKit対応アクセサリにコントリビュートしてください。 ホームセキュリティシステムと連携して光で知らせるようなことも出来るでしょう。

沢山の人が利用するようになればいろんな事ができるようになるでしょう。皆さんが作ったアプリを利用するのを楽しみにしています。 クリエイティブなアプリをぜひ作ってみてください。

QA

将来こういったものがHomeKitで出れば良いというものはありますか?

結構豊富は機能を持っていますが、いろんなタイプを追加して欲しいですね。AppleがTypesを決めている。特性はデベロッパも決められますが、カスタムタイプなアクセサリができたらクールだと思います。

HomeKitの設定の仕方、Philippsを使ったとのことですが、照明も設定したと思いますが、セキュリティは?他の人は使えないのでしょうか? アクセサリの組み合わせは可能でしょうか。携帯をずっと稼働させてアクセサリを操作しているのでしょうか

iCloudのアカウントに紐付いています。シェアをリクエストして共有は可能です。

プログラムがiCloudで実行されていて火災報知機などから情報は取得できるのか、脳はどこにあるのか?

いろんなツールがあって、独自のコードがサーバーで走るものもあるようです。iOSだけでやる場合には何らかの形で常に稼働させる機能が必要になると思う。デベロッパが、Philipsの場合では、SDKを持っていて、継続して機能するものを提供しています。

気に入った記事は はてなブックマーク

はてなブックマークアプリiOS開発チームから来ました! はてなブックマークにはSwift特集があります! 良い記事を見逃さないように、ご利用ください! http://b.hatena.ne.jp/hotentry/it/Swift

そして良いまとめ記事があったらはてなブックマークでブックマークしましょう! try! Swift の記事で盛り上がると嬉しいです!