BTKit 0.5.0

BTKit 0.5.0

Rinat Enikeev 维护。



BTKit 0.5.0

BTKit

使用点分表示法访问 Ruuvi BLE 设备:device.ruuvi?.tag

Swift Version License PRs Welcome

扫描 Ruuvi BLE 设备并使用点分表示法访问。参见教程

特性

要求

  • iOS 10.0+
  • Xcode 12.0+

安装

CocoaPods

您可以通过将 BTKit 添加到您的 Podfile 中,使用 CocoaPods 安装它。

platform :ios, '10.0'
use_frameworks!
pod 'BTKit'

Swift Package Manager

您可以在 XCode/文件/Swift 包中添加包依赖...链接到此仓库。

使用示例

为了使其正常工作,请导入 BTKit

import BTKit

检查 iPhone/iPad 的蓝牙状态

view.isBluetoothEnabled = scanner.bluetoothState == .poweredOn

BTForeground.shared.state(self, closure: { (observer, state) in
    observer.view.isBluetoothEnabled = state == .poweredOn
})

前台监听广告

BTForeground.shared.scan(self) { (observer, device) in
                             if let ruuviTag = device.ruuvi?.tag {
                                 print(ruuviTag)
                             }
                         }

判断设备是否超出范围或已离线

BTForeground.shared.lost(self, options: [.lostDeviceDelay(10)], closure: { (observer, device) in
    if let ruuviTag = device.ruuvi?.tag {
        print("Ruuvi Tag is offline or went out of range")
    }
})

监测特定设备广告

BTForeground.shared.observe(self, uuid: ruuviTag.uuid, options: [.callbackQueue(.untouch)]) { (observer, device) in
    print("Specific RuuviTag is advertising")
}

连接到特定设备

if ruuviTag.isConnectable {
    ruuviTag.connect(for: self, options: [.connectionTimeout(10)],  connected: { observer, result in
        switch result {
        case .just:
            print("just connected")
        case .already:
            print("was already connected")
        case .disconnected:
            print("just disconnected")
        case .failure(let error):
            print(error.localizedDescription)
        }
    }, heartbeat: { observer, device in
        if let ruuviTag = device.ruuvi?.tag {
            print(ruuviTag)
        }
    }, disconnected: { observer, result in
        switch result {
        case .just:
            print("just disconnected")
        case .already:
            print("disconnected")
        case .stillConnected:
            print("still connected because of other callers")
        case .failure(let error):
            print(error.localizedDescription)
        }
    })
}

或使用 uuid

BTBackground.shared.connect(for: self, options: [.connectionTimeout(10)],  connected: { observer, result in
    switch result {
    case .just:
        print("just connected")
    case .already:
        print("was already connected")
    case .disconnected:
        print("just disconnected")
    case .failure(let error):
        print(error.localizedDescription)
    }
}, heartbeat: { observer, device in
    if let ruuviTag = device.ruuvi?.tag {
        print(ruuviTag)
    }
}, disconnected: { observer, result in
    switch result {
    case .just:
        print("just disconnected")
    case .already:
        print("disconnected")
    case .stillConnected:
        print("still connected because of other callers")
    case .failure(let error):
        print(error.localizedDescription)
    }
})
}

从可连接设备读取温度、湿度、压力日志

if let from = Calendar.current.date(byAdding: .minute, value: -5, to: Date()) {
    ruuviTag.celisus(for: self, from: from) { (observer, result) in
        switch result {
        case .success(let values):
            print(values)
        case .failure(let error):
            print(error.localizedDescription)
        }
    }
    ruuviTag.humidity(for: self, from: from) { (observer, result) in
        switch result {
        case .success(let values):
            print(values)   
        case .failure(let error):
            print(error.localizedDescription)
        }
    }
    ruuviTag.pressure(for: self, from: from) { (observer, result) in
        switch result {
        case .success(let values):
            print(values)
        case .failure(let error):
            print(error.localizedDescription)
        }
    }
}

或使用 BTKit 如果只知道 uuid

BTBackground.shared.services.ruuvi.nus.celisus(for: self, uuid: ruuviTag.uuid, from: from, result: { (observer, result) in
    switch result {
    case .success(let values):
        print(values)
    case .failure(let error):
        print(error.localizedDescription)
    }
})

BTBackground.shared.services.ruuvi.nus.humidity(for: self, uuid: ruuviTag.uuid, from: from, result: { (observer, result) in
    switch result {
    case .success(let values):
        print(values)
    case .failure(let error):
        print(error.localizedDescription)
    }
})

BTBackground.shared.services.ruuvi.nus.pressure(for: self, uuid: ruuviTag.uuid, from: from, result: { (observer, result) in
    switch result {
    case .success(let values):
        print(values)
    case .failure(let error):
        print(error.localizedDescription)
    }
})

一次性读取完整日志

if let from = Calendar.current.date(byAdding: .minute, value: -5, to: Date()) {
    ruuviTag.log(for: self, from: from) { (observer, result) in
        switch result {
        case .success(let logs):
            print(logs)
        case .failure(let error):
            print(error.localizedDescription)
        }
    }
}

或使用 BTKit 如果只知道 uuid

BTBackground.shared.services.ruuvi.nus.log(for: self, uuid: ruuviTag.uuid, from: from, result: { (observer, result) in
    switch result {
    case .success(let logs):
        print(logs)
    case .failure(let error):
        print(error.localizedDescription)
    }
})

从设备断开连接

ruuviTag.disconnect(for: self) { (observer, result) in
    switch result {
    case .just:
        observer.isConnected = false
    case .already:
        observer.isConnected = false
    case .stillConnected:
        observer.isConnected = true
    case .failure(let error):
        observer.isConnected = false
        print(error.localizedDescription)
    }
}

或使用 BTKit 如果只知道 uuid

BTBackground.shared.disconnect(for: self, uuid: ruuviTag.uuid) { (observer, result) in
    switch result {
    case .just:
        observer.isConnected = false
    case .already:
        observer.isConnected = false
    case .stillConnected:
        observer.isConnected = true
    case .failure(let error):
        observer.isConnected = false
        print(error.localizedDescription)
    }
}

贡献

我们期待您对 BTKit 的贡献,更多信息请查看 LICENSE 文件。

元数据

林纳特·尼基耶夫 - [email protected]

遵循BSD许可协议。更多信息请参阅LICENSE文件。