Skip to content

Latest commit

 

History

History
232 lines (158 loc) · 8.75 KB

File metadata and controls

232 lines (158 loc) · 8.75 KB
nav
group SESAME SDK
title iOS 版
order 1

iOS版 SesameSDK

Sesameデバイス

Appをダウンロード

インストール手順

1. 依存関係のインストール

    1. Scheme を SesameSDK に設定し、任意のiOSデバイスを選択します。
    1. command + shift + k を押して product フォルダをクリアします。
    1. command + b を押して SDK をビルドします。
    1. ビルドが完了したら、Xcode -> SDK project -> Products フォルダの下にある SesameSDK.framework を右クリックし、「Finderで開く」を選択し、SesameSDK.frameworkを取得します。

SesameWatchKitSDK

    1. Scheme を SesameWatchKitSDK に設定し、任意のwatch OSデバイスを選択します。
    1. command + shift + k を押して product フォルダをクリアします。
    1. command + b を押して SDK をビルドします。
    1. ビルドが完了したら、Xcode -> SDK project -> Products フォルダ下にある SesameWatchKitSDK.framework を右クリックし、「Finderで開く」を選択し、SesameWatchKitSDK.framework を取得します。

Swift Package

Swift Package Managerは、Swiftのコードの配布を管理するためのツールです。Swiftのビルドシステムに統合されており、依存関係のダウンロード、コンパイル、リンクプロセスを自動で行います。

  • プロジェクトにSesameSDKをSwift Package Managerを使って統合します:
dependencies: [
    .package(url: "https://github.com/CANDY-HOUSE/SesameSDK_iOS_with_DemoApp.git", .branch("master"))
]

img

手動統合

  • 任何の依存関係マネージャを使用したくない場合は、SesameSDKを手動でプロジェクトに統合することも可能です。

img

2. 認可の追加

<key> NSBluetoothAlwaysUsageDescription </key>
<string> セサミスマートロックに接続し、ドアのロック/アンロックを行います。 </string>
<key> NSBluetoothPeripheralUsageDescription </key>
<string> このアプリは、アプリを使用していない時でも、近くのBluetoothデバイスにデータを提供することがあります。
</string>

3. 初期化

適切なタイミングでBluetoothスキャンを開始します。

CHBluetoothCenter.shared.enableScan { res in }

Bluetoothのステータスが変わった時のコールバック

public protocol CHBleStatusDelegate: AnyObject {
    func didScanChange(status: CHScanStatus)
}

スキャンしたセサミデバイスのリストは、1秒ごとの頻度で呼び出し元に渡されます。

public protocol CHBleManagerDelegate: AnyObject {
    func didDiscoverUnRegisteredCHDevices(_ devices: [CHDevice])
}

4. デバイスへの接続

接続を確立する前に、デバイスの状態が接続可能状態であることを確認する必要があります。

if sesame5.deviceStatus == .receivedBle() {
    sesame5.connect() { _ in }
}

この時点で、Sesameデバイスの接続状態のコールバックを受信します。

public protocol CHDeviceStatusDelegate: AnyObject {
    func onBleDeviceStatusChanged(device: CHDevice, status: CHDeviceStatus, shadowStatus: CHDeviceStatus?)
    func onMechStatus(device: CHDevice)
}

5. デバイスの登録

接続状態が「登録準備完了」になった時点で、デバイスを登録してペアリングを完了させることができます。デバイスの登録は、デバイスとのペアリングを行うために必要な手順です。

if device.deviceStatus == .readyToRegister() {
    device.register( _ in )
}

登録が完了すると、CHDeviceManagerを使ってペアリング済みのデバイスを取得することができます。

var chDevices = [CHDevice]()
CHDeviceManager.shared.getCHDevices { result in
    if case let .success(devices) = result {
        chDevices = devices.data
    }
}

6. ロック・アンロック

ペアリング済みのデバイスを取得したら、APPを通じてロックとアンロックを実行することが可能になります。

ロック

    public func lock(historytag: Data?, result: @escaping (CHResult<CHEmpty>))  {
      if deviceShadowStatus != nil,
         deviceStatus.loginStatus == .unlogined {
          CHIoTManager.shared.sendCommandToWM2(.lock, self) { _ in
              result(.success(CHResultStateNetworks(input: CHEmpty())))
          }
          return
      }
      if (self.checkBle(result)) { return }
      let hisTag = Data.createOS2Histag(historytag ?? self.sesame2KeyData?.historyTag)

      sendCommand(.init(.lock,hisTag)) { responsePayload in
          if responsePayload.cmdResultCode == .success {
              result(.success(CHResultStateBLE(input: CHEmpty())))
          } else {
              result(.failure(self.errorFromResultCode(responsePayload.cmdResultCode)))
          }
      }
  }

アンロック

    public func unlock(historytag: Data?, result: @escaping (CHResult<CHEmpty>))  {
      if deviceShadowStatus != nil,
         deviceStatus.loginStatus == .unlogined {
          CHIoTManager.shared.sendCommandToWM2(.unlock, self) { _ in
              result(.success(CHResultStateNetworks(input: CHEmpty())))
          }
          return
      }
      if (self.checkBle(result)) { return }
      let hisTag = Data.createOS2Histag(historytag ?? self.sesame2KeyData?.historyTag)

      sendCommand(.init(.unlock,hisTag)) { responsePayload in
          if responsePayload.cmdResultCode == .success {
              result(.success(CHResultStateBLE(input: CHEmpty())))
          } else {
              result(.failure(self.errorFromResultCode(responsePayload.cmdResultCode)))
          }
      }
  }

7. 通信プロトコル

各命令の詳細は BlueToothプロトコル を参照してください。

8. 詳細を見る

SesameSDKの詳細設計については、以下の設計図とフローチャートを参照してください。

フレームワーク/モジュールの選択

BLE 製品コードのサンプル解説

Class の詳細は Sesame SDK Class を参照してください。

Bluetooth状態マシン

State Machine

iOS クラス図

Class_diagram