Оглавление:
- Шаг 1. Взлом Bluetooth-маяков
- Шаг 2. Создание навыка и приложения для Alexa
- Шаг 3. Повышение эффективности наших навыков
- Шаг 4: Собираем все вместе
Видео: Алекса, где мои ключи?: 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Alexa особенно хорошо подходит для задач поиска информации и мониторинга активов с использованием беспроводных домашних сетей. Естественно подумать о размещении ценных вещей в сетке для быстрого поиска. Мы взламываем дешевые Bluetooth-маяки с низким энергопотреблением для обеспечения дальности действия сети и долговечности аккумулятора и создаем интеллектуальное приложение, чтобы Alexa знала, где мы оставили ключи.
Как это сделать…
Шаг 1. Взлом Bluetooth-маяков
Набор из 3 маяков можно приобрести менее чем за 15 долларов, и они поддерживаются приложениями Android / iOS, но мы откажемся от конфиденциальности. Кроме того, поиск ключей не должен превращаться в поиск телефона.
Этот учебник adafruit по обратному проектированию умного освещения помог нам управлять маяками. Начните с включения сканирования маяка для адреса устройства, запустив:
sudo hcitool lescan
Найдите и скопируйте адрес с именем iTag, затем запустите:
sudo gatttool -I
Подключитесь к устройству в интерактивном режиме, запустив:
подключить AA: BB: CC: DD: EE: FF
Попробуйте запустить «справку», чтобы просмотреть параметры, или «первичный», чтобы просмотреть службы:
Запустив 'char-desc', за которым следует дескриптор службы, как указано выше, мы находим UUID, которые ищем, ссылаясь на характеристики характеристик gatt и спецификации услуг. Чтобы узнать больше об этих сервисах, ознакомьтесь с этим. Анализируя трафик с помощью Wireshark, мы обнаруживаем, что 0100111000000001 вызывает тревогу, а логически 0000111000000001 отключает его. Теперь у нас есть простая функция Python:
import pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Соединение успешно', тайм-аут = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')
Далее мы сосредотачиваемся на создании навыка Alexa, чтобы активировать маяк, когда мы ищем ключи.
Шаг 2. Создание навыка и приложения для Alexa
Мы создаем навык, который будет привязан к локальному серверу. Затем мы настраиваем наш сервер для выполнения любых действий, которые мы хотели бы, в этом случае предоставить приблизительное расположение клавиш и подать сигнал маяка Bluetooth. Flask предоставляет простую и удобную библиотеку Python для обслуживания приложения. Используя flask-ask, мы можем настроить сервер для взаимодействия с нашим навыком Alexa, который мы построим позже. Хорошо обслужите приложение с помощью Ngrok, который предоставит нам https-ссылку, которая нам понадобится для нашего навыка Alexa. Сначала мы создали приложение с простейшими функциями: заставлять наш маячок BLE издавать звуковой сигнал при срабатывании.
#! / usr / bin / env pythonfrom flask import Flask from flask_ask import Ask, statement import pexpect app = Flask (_ name_) ask = Ask (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF '# Ваш идентификатор радиомаяка Bluetooth здесь @ ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Ваши ключи где-то здесь". оператор возврата (речевой_текст) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Соединение выполнено успешно', тайм-аут = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') если _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')
Мы использовали функцию sound_alarm (), которую мы написали ранее, чтобы издавать звуковой сигнал BLE. Для функции, которая будет использоваться для намерения, мы добавляем декоратор запроса с нашим намерением «findkeys». Когда мы создадим навык Alexa на панели инструментов разработчика Amazon, мы будем использовать это имя для наших целей. Запишите этот сценарий в файл с именем app.py и запустите
python app.py
Это будет обслуживать ваше приложение на https:// localhost: 5000. Запустите сервер ngrok и скопируйте сгенерированную ссылку https. Он понадобится вам при настройке навыка Alexa. Подробнее читайте в этом посте. Мы успешно настроили простое приложение, теперь напишем скилл Алекса. Перейдите к панели управления разработчика Amazon и войдите в систему. Нажмите Alexa и начните работу с Alexa Skill kit.
Следуйте инструкциям, предоставленным графическим интерфейсом.
На вкладке Interation Model вы захотите заполнить поле Intent Schema следующим образом:
В поле Sample Utterances вы хотите написать несколько примеров команд, которые человек может использовать для активации навыка. Мы написали это:
findkeys найди мои ключи найди ключи где мои ключи найди ключи я потерял свои ключи
- На вкладке «Конфигурация» убедитесь, что в качестве конечной точки службы выбран HTTPS. Скопируйте ссылку https и вставьте ее в поле по умолчанию внизу. Связывание аккаунта можно оставить на Нет.
- В сертификате SSL выберите средний вариант: «Моя конечная точка разработки - это поддомен домена, имеющего групповой сертификат от центра сертификации».
- Вкладка «Тест» позволит вам протестировать новый навык, введя одну из ваших примеров команд.
Завершите заполнение последних двух вкладок, пока все галочки не станут зелеными. Затем начните свое мастерство с помощью функции бета-тестирования. Это позволяет вам разместить свое умение на любом эхо-устройстве перед его публикацией. Следуйте инструкциям по электронной почте, чтобы установить навык на свое эхо-устройство.
Шаг 3. Повышение эффективности наших навыков
Мы заставляем бездействующие компьютеры, разбросанные по всему дому, опрашивать маяк Bluetooth, чтобы сообщить об уровне сигнала RSSI.
Снимая показания с нескольких устройств, мы можем использовать уровень сигнала в качестве прокси для расстояния. Нам нужно выяснить, как использовать это, чтобы вычислить наиболее вероятную часть дома, чтобы найти маяк.
Переходим к машинному обучению. Задание crontab каждые 2 минуты создает набор данных кортежей RSSI. Размещая маяк в разных местах, таких как: «Спальня», «Ванная комната», «Кухня», «Жилая зона», мы маркируем журналы RSSI. После того, как мы нанесли на карту дом, мы можем использовать древовидные модели, такие как XGBClassifier от xgboost.
Реализация повышения градиента xgboost будет обрабатывать недостающие данные из показаний тайм-аута, обучаясь за пару секунд. Используйте python pickle, чтобы сохранить обученную модель и загрузить ее в наше приложение alexa retrievr. Когда вызывается навык, приложение просматривает показания RSSI Bluetooth и генерирует предсказанное местоположение, alexa может ответить, предлагая «попробовать поискать в ванной».
Шаг 4: Собираем все вместе
Имея модель для аппроксимации последнего местоположения ключей, мы можем добавить ее в приложение, чтобы улучшить выражение, возвращаемое Alexa. Мы изменили сценарий, чтобы он читал:
import osfrom flask import Flask from flask_ask import Ask, statement import pexpect import pickle import pandas as pd import numpy as np from collections import defaultdict, Counter from reverse_read import reverse_readline app = Flask (_ name_) ask = Ask (app, '/') @ ask.intent ('findkeys') def retrievr (): os.system ("/ path / to / repo / sound_alarm.py &") speech_text = guess_locate () return statement (speech_text) def guess_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = while len (res_lst)! = 20: ln = next (line_gen) if ln.startswith ('Host'): _, ip, _, reading = ln.split () read_dict [ip] = чтение res_lst.append (read_dict) if ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N / A ': np.nan}). Values mdl_ = pickle.load (open (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) guess = guess.most_common (1).) [0] [0] reply_str = 'Попробуйте поискать в' if guess == 1: reply_str + = 'bedroom' elif guess ". == 2: reply_str + = 'ванная' elif guess == 3: reply_str + = 'kitchen' elif guess == 4: reply_str + = 'гостиная' return reply_str if _name_ == "_main_": app.run (host = '127.0.0.1', порт = '5000')
Мы создали новую функцию под названием guess_locate (), которая принимает файл с самыми последними записанными уровнями сигнала rssi. Затем он запустит образцы для нашей маринованной модели xgboost и вернет строку с наиболее вероятным местоположением. Это местоположение будет возвращено, когда появится запрос Alexa. Поскольку установление соединения с маяком может занять несколько секунд, мы запускаем отдельный процесс, вызывающий эту функцию в sound_alarm.py.
Рекомендуемые:
КРОЛИК КРОЛИК ГДЕ ТЫ ?: 3 шага
КРОЛИК КРОЛИК ГДЕ ТЫ: Я из Тайваня, мне 13 лет, меня зовут Чиа-Ин Ву. В нашей семье есть кролик, он часто играет с нами в прятки. Он любит прятаться в углу рядом с диваном, но из-за того, что диван загораживает взгляд, мы часто не можем его найти. S
Фред! Где ты ?: 3 шага
Фред! Где ты ?: Этот проект посвящен тому, сколько километров вы находитесь от дома. Fred питается от аккумулятора, который заряжается, как смартфон, поэтому вы можете взять его с собой. Это очень легко построить, но вы можете застрять в кодировании. В этом проекте вы будете
Кто за дверью, система камер с активированной Алекса: 3 шага
Кто за дверью, система камер с активированной системой Alexa: иногда во время просмотра телевизора вы не хотите открывать дверь, если это не важно. Этот проект позволяет вам увидеть человека у двери, просто сказав устройству Amazon Echo: «Алекса, включи дверной монитор». Вы проверяете, кто появляется
Keyminder! Устройство, которое заставит вас не потерять ключи !: 3 шага (с изображениями)
Keyminder! Устройство, которое заставит вас не потерять ключи !: Это устройство поможет вам не потерять ключи! Если вы похожи на меня, то, придя с работы домой, вы сразу же теряете ключи после того, как отпираете дверь, и вы ждете следующего дня прямо перед тем, как уйти искать их. Ага, может быть
Алекса и лампа с переключателем: 3 шага (с изображениями)
Алекса и лампа с переключателем: Amazon Echo - отличный комплект! Мне нравится идея устройств, активируемых голосом! Я хотел сделать свою собственную лампу с управлением от Alexa, но оставить ручной переключатель в качестве опции. Я поискал в Интернете и нашел эмулятор WEMO, который, посмотрев на другие опции