Вы когда-нибудь видели, как яблочные часы открывают Ма c? Идея потрясающая, но я не хочу умных часов, потому что у меня уже есть телефон, который имеет аналогичные возможности AFAIK. Кроме того, я недавно перешел с OSX на Linux:)
Я не знаю, как Apple Watch удается разблокировать Ma c. Но я знаю, что было бы желательно с точки зрения пользовательского опыта:
- Требуется разблокировать быстрее, чем я ввожу свой пароль
- Должно работать при отсутствии Wi-Fi / 4G
- Должно быть энергосберегающим
RFID
Было бы неплохо использовать RFID, но нет в моих ноутбуках встроенных считывателей RFID.
Обнаружение близости на основе Bluetooth
Проблема с classi c Bluetooth - это требование постоянно сканировать близлежащие устройства для измерения силы сигнала (RSSI), из которого мы можем вывести близость.
К сожалению, обнаружение прыгает и слушает 40 каналов , И в любом случае телефоны перестают вещать, когда экран на некоторое время выключен. Это не достаточно хорошо. Я знаю, потому что я пытался:
import collection.JavaConverters._
import tinyb._
object Listener extends App {
var running = true
val BT_ADDR = sys.env.getOrElse("BT_ADDR", "XX:XX:XX:XX:XX:XX")
val BT_RSSI_DBM_THRESHOLD = Integer.parseInt(sys.env.getOrElse("BT_RSSI_DBM_THRESHOLD", "-65")).toShort
val manager = BluetoothManager.getBluetoothManager
val lock = new Object
while (true) {
manager.getAdapters.forEach(a => {
a.setRssiDiscoveryFilter(BT_RSSI_DBM_THRESHOLD)
a.removeDevices()
})
System.err.println("scanning for " + BT_ADDR + " at minimum " + BT_RSSI_DBM_THRESHOLD + " dBm RSSI...")
manager.startNearbyDiscovery(
(device: BluetoothDevice) => {
if (BT_ADDR.equals(device.getAddress)) {
onProximity(device)
manager.stopNearbyDiscovery()
lock.synchronized(lock.notify())
}
else println(device.getName)
}
, 1000
, false
)
lock.synchronized(lock.wait())
}
}
Я смотрел на BTLE (Bluetooth Low Energy), и мне трудно понять следующее:
Есть ли способ установить sh от Linux единственного низкоэнергетического Bluetooth-соединения с телефоном Android, которое мы можем постоянно оставлять бездействующим и использовать его для пробуждения телефона и передачи некоторых пакетов (чтобы мы могли измерить его мощность RSSI и выводить близость) по требованию , только когда это строго необходимо.
Т.е. мы бы ограничивали передачу только этими редкими случаями:
- Проверьте, когда пользователь отсутствует, если мы обнаружим неактивные мышь и клавиатуру в течение 1 минуты,
- Проверьте, достаточно ли близко пользователь, когда GDM активен
- Нет активности BT, в противном случае
Этот подход быстрый, энергоэффективный и не требует сетевого протокола, только некоторые редкие BT передача.
Но возможно ли это с Bluetooth LE? Любые указатели на примеры?