Управление эхо-точкой 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.

Несколько фрагментов кода, упомянутых в статье, можно найти на

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *