Управление эхо-точкой Amazon с помощью оболочки: немного веселья
Вдохновение
В пятницу у меня было немного свободного времени, и я наткнулся на концептуальную статью об отправке TextToSpeech в amazon echo.
Первоначально я был вдохновлен возможностью написания пользовательских фраз на Amazon Echo, прочитав следующую статью.
К сожалению, пример не работал у меня из коробки — вход в оболочку никогда не работал у меня без капчи, поэтому следующие три пункта касаются получения правильных файлов cookie сеанса для запуска демонстрации.
Эта статья является кратким изложением результатов и может стать отправной точкой для некоторых новых экспериментов.
Файлы cookie, необходимые для работы с «API»
Для работы с API Echodot через curl или wget проще всего хранить необходимые сеансовые куки в файле cookies.txt.
Формат: структура файла cookie.txt Netscape такова, что каждая строка содержит одну пару имя-значение.
Запись, которая выглядит так:
.netscape.com TRUE / FALSE 946684799 NETSCAPE_ID 100103
Каждая строка представляет одну часть хранимой информации. Между каждым из полей вставляется вкладка.
Вот что представляет каждое поле слева направо:
домен — Домен, создавший И который может читать переменную.
флаг — значение TRUE/FALSE, указывающее, могут ли все машины в данном домене получить доступ к переменной. Это значение устанавливается браузером автоматически в зависимости от значения, которое вы установили для домена.
path — путь в домене, для которого действительна переменная.
secure — значение TRUE/FALSE, указывающее, требуется ли безопасное соединение с доменом для доступа к переменной.
expire — время UNIX, когда истечет срок действия переменной. Время UNIX определяется как количество секунд с 00:00:00 по Гринвичу 1 января 1970 года.
name — Имя переменной.
значение — значение переменной.
Для работы с Amazon Alexa API используется следующий минимальный набор файлов cookie:
.amazon.com TRUE / FALSE <expiration> ubid-main <censored>
.amazon.com TRUE / FALSE <expiration> csrf <censored>
.amazon.com TRUE / FALSE <expiration> session-id <censored>
.amazon.com TRUE / FALSE <expiration> x-main "<censored>"
.amazon.com TRUE / FALSE <expiration> session-token "<censored>"
.amazon.com TRUE / TRUE <expiration> at-main <censored>
Срок действия может быть установлен на какое-то отдаленное время в будущем, например, на 2038 год. 2177406671
но непонятно, действительно ли это продлевает сессию,
даже если API время от времени пингуется.
Ручной способ получения файлов cookie сеанса Alexa
Откройте анонимную вкладку, сказав в браузере Firefox. Используйте тип расширения для экспорта файлов cookie для домена amazon.com. Фильтровать только файлы cookie, относящиеся к вышеуказанным.
Не сравнивал, но другие браузеры также должны позволять более или менее легко экспортировать файлы cookie.
Более или менее автоматизированный способ получения файлов cookie сеанса Alexa.
Подход найден на можно использовать. Он возвращает в основном cookie, который хорошо работает с
таким образом, мне пришлось немного изменить, как alexa-node-cookie-helper
чтобы вернуть также вывод, совместимый с cookie.txt
node ./get-cookies-txt.js
Что хорошего в этом подходе, так это то, что если вы получаете капчу (очень часто для домена amazon.com в США) — у вас все еще есть возможность войти в систему в интерактивном режиме и получить необходимые файлы cookie.
Вызов команд Alexa из оболочки
Теперь вы можете поместить извлеченные файлы cookie сеанса в /tmp/.alexa.cookie
и использовать она
Здесь по-прежнему лучшим является сценарий оболочки Торстена Герига.
Который предоставляет несколько полезных опций
alexa.sh [-d <device>|ALL] -e <pause|play|next|prev|fwd|rwd|shuffle|vol:<0-100>> |
-b [list|<"AA:BB:CC:DD:EE:FF">] | -q | -r <"station name"|stationid> |
-s <trackID|'Artist' 'Album'> | -t <ASIN> | -u <seedID> | -v <queueID> | -w <playlistId> |
-i | -p | -P | -S | -a | -m <multiroom_device> [device_1 .. device_X] | -lastalexa | -l | -h
-e : run command, additional SEQUENCECMDs:
weather,traffic,flashbriefing,goodmorning,singasong,tellstory,speak:'<text>',automation:'<routine name>'
-b : connect/disconnect/list bluetooth device
-q : query queue
-r : play tunein radio
-s : play library track/library album
-t : play Prime playlist
-u : play Prime station
-v : play Prime historical queue
-w : play library playlist
-i : list imported library tracks
-p : list purchased library tracks
-P : list Prime playlists
-S : list Prime stations
-a : list available devices
-m : delete multiroom and/or create new multiroom containing devices
-lastalexa : print device that received the last voice command
Я использую Alexa для некоторых пользовательских уведомлений, поэтому вариант TTS меня особенно интересует.
alexa.sh -d RZ -e "speak: 'meow'"
другие средства автоматизации покрываются openhab.
Интерфейс программирования для nodeJS
Здесь снова интересна библиотека npm, так как она содержит мало свежих коммитов.
Грязный пример без обещаний ниже:
let Alexa = require('alexa-remote2');
let alexa = new Alexa();
let cookie = 'session-id=.../ /...=" csrf=12345780';
alexa.init({
cookie: cookie,
bluetooth: false,
logger: console.log,
alexaServiceHost: 'pitangui.amazon.com',
acceptLanguage: 'en-US',
amazonPage: 'amazon.com',
useWsMqtt: true
},
function (err) {
if (err) {
console.log (err);
return;
}
alexa.sendCommand("RZ", "goodmorning", null, function (err, payload) {
if (err) {
console.log(err);
return;
}
console.log(payload);
});
}
);
Безопасность
Текущие подходы предполагают хранение конфиденциальной информации о сеансе на диске, включая, в некоторых случаях, логин и пароль.
Вы определенно не хотите делать это со своей основной учетной записью, поэтому вы можете создать техническую учетную запись Amazon и добавить ее.
в вашу семью амазонки в соответствии с
Несмотря на то, что информация о платежах передается, по умолчанию обмен платежами НЕ включен, но с установленной сессией.
с этой общей учетной записью — вы видите устройства и можете вызывать некоторые методы API = что многообещающе.
Относитесь к безопасности с необходимой важностью. Правильным способом будет использование Alexa Skill SDK.
Интеграция с Умным домом
Openhab имеет рабочую привязку; Я почти уверен, что другие системы, такие как Domoticz, уже имеют интеграцию.
Краткое содержание
Даже с ограниченным набором команд и немного хакерским способом работы с устройством (будет работать до тех пор, пока логика alexa.amazon.com не останется неизменной) вы можете автоматизировать несколько дополнительных вещей в своем доме. Для более серьезных решений вам потребуется реализовать свои собственные навыки работы с Alexa.
Несколько фрагментов кода, упомянутых в статье, можно найти на