Рубрики
Без рубрики

Контроль Amazon Echo Dot с оболочкой: немного веселья

Быстрый обзор, иллюстрируя возможность отправки некоторых команд, включая текст до речи на устройствах Amazon Echo без необходимости писать пользовательские навыки Amazon, используя оболочку или NODEJS

Автор оригинала: Vyacheslav.

Вдохновение

У меня было немного свободное время в пятницу, и приходите к доказательству концептуальной статьи по отправке TexttOShepecheCh для Echo Amazon.

Первоначально я был вдохновлен возможностью писать пользовательские фразы на эхо Amazon, чтение следующую статью https://www.gehriig.info/alexa/alexa.html

К сожалению, пример не работал для себя из коробки – логин Shell никогда не работал для меня с CAPTCHA, таким образом, в следующих трех точках на получение правильного сеанса cookie для запуска демонстрации.

Эта статья является резюме выводов и может быть отправной точкой для некоторых новых экспериментов.

Печенье, необходимое для работы с «API»

Для работы с EchoDot API через Curl или Wget, самым простым будет хранить необходимые файлы файла cookie Sessions. Формат: Макет файла файла cookies.txt netscape.

Запись, которая выглядит так:

.netscape.com   TRUE   /   FALSE   946684799   NETSCAPE_ID   100103

Каждая строка представляет собой одну часть сохраненной информации. Вкладка вкладывается между каждым из полей.

Слева направо, вот что представляет каждое поле:

Домен – домен, который создал, и который может прочитать переменную.

Флаг – настоящее/ложное значение, указывающее, могут ли все машины в данном домене могут получить доступ к переменной. Это значение устанавливается автоматически браузером, в зависимости от значения, которое вы установили для домена.

Путь – путь в домене, для которого действительна переменная.

Безопасность – настоящее значение/ложное значение, указывающее, необходимо ли защищенное соединение с доменом для доступа к переменной.

Истечение истечения срока действия. Время с истечением переменной. Время UNIX определяется как количество секунд с 1 января 1970 года 00:00:00 GMT.

Имя – имя переменной.

значение – значение переменной.

Для работы с Amazon Alexa API используется после минимального набора файлов cookie:

.amazon.com	TRUE	/	FALSE		ubid-main	
.amazon.com	TRUE	/	FALSE		csrf	
.amazon.com	TRUE	/	FALSE		session-id	
.amazon.com	TRUE	/	FALSE		x-main	""
.amazon.com	TRUE	/	FALSE		session-token	""
.amazon.com	TRUE	/	TRUE		at-main	

Срок действия может быть установлен на некоторое далекое время в будущем, как 2038 2177406671 , но не ясно, если это действительно продлевает сеанс, Даже если API время от времени пингирует.

Ручной способ получить файлы cookie alexa

Откройте анонимную вкладку, говоря в браузере Firefox. Используйте расширение HTTPS://github.com/rotemdan/exportcookies для экспорта cookies для домена Amazon.com. Фильтр только файлы cookie, связанные с выше.

Не сравнивало, но другие браузеры должны позволить также более или менее легко экспортировать файлы cookie.

Более или менее автоматический способ получить файлы cookie alexa

Можно использовать подход на https://github.com/apollon77/alexa-cookie. Он возвращается в основном cookie, который хорошо играет с https://github.com/apollon77/alexa-remote

Таким образом, я должен был немного изменить как Alexa-Node-Cookie-Helper Чтобы вернуть также Cookie.txt совместимый вывод

node ./get-cookies-txt.js

Что хорошо с этим подходом, в том, что если вы получите CAPTCHA (очень часто для домена Amazon.com) – у вас есть возможность до сих пор входить в систему интерактивно и получить необходимые файлы cookie

Призывая команды Alexa из оболочки

Теперь вы можете поместить забрать сеанс cookie в /tmp/.alexa.cookie и использовать она

Вот еще лучший – это Shell Script https://github.com/thorsten-gehrig/alexa-remote-control by Thorsten Gehrig. Который предоставляет несколько полезных вариантов

alexa.sh [-d |ALL] -e > |
          -b [list|<"AA:BB:CC:DD:EE:FF">] | -q | -r <"station name"|stationid> |
          -s  | -t  | -u  | -v  | -w  |
          -i | -p | -P | -S | -a | -m  [device_1 .. device_X] | -lastalexa | -l | -h

   -e : run command, additional SEQUENCECMDs:
        weather,traffic,flashbriefing,goodmorning,singasong,tellstory,speak:'',automation:''
   -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 библиотека https://github.com/apollon77/alexa-remote представляет интерес, как содержит мало свежих коммитов.

Грязный пример W/O Обещания ниже:

let Alexa = require('alexa-remote2');
let alexa = new Alexa();

let cookie = 'session-id=.../ /...=" csrf=12345780';

alexa.init({
        cookie: cookie,  // cookie if already known, else can be generated using email/password
//        email: '...',    // optional, amazon email for login to get new cookie
//        password: '...', // optional, amazon password for login to get new cookie
        bluetooth: false,
        logger: console.log, // optional
        alexaServiceHost: 'pitangui.amazon.com', // optional, e.g. "pitangui.amazon.com" for amazon.com, default is "layla.amazon.de"
//        userAgent: '...', // optional, override used user-Agent for all Requests and Cookie determination
        acceptLanguage: 'en-US', // optional, override Accept-Language-Header for cookie determination
        amazonPage: 'amazon.com', // optional, override Amazon-Login-Page for cookie determination and referer for requests
        useWsMqtt: true // optional, true to use the Websocket/MQTT direct push connection
    },
    function (err) {
        if (err) {
            console.log (err);
            return;
        }
        // for (let device in this.names) {
        //     console.log (device);
        // }

        alexa.sendCommand("RZ", "goodmorning", null, function (err, payload) {

          if (err) {
            console.log(err);
            return;
          }

            console.log(payload);

        });

    }
);


Безопасность

Текущие подходы включают хранение конфиденциальной информации сеанса на диске, в том числе в некоторых случаях логин и пароль. Вы определенно не хотите делать это с вашей основной учетной записью – так что вы можете создать техническую учетную запись Amazon, и добавить ее в свою домохозяйство Amazon в соответствии с

Хотя говорится, что информация об оплате разделена, по умолчанию по умолчанию Sharing не включен, но с сессией, сделанным с этой общей учетной записью – вы видите устройства и можете назвать некоторые API.

Лечить безопасность с необходимым важность. Правильный путь будет использоваться Alexa Skill SDK.

Интеграция с SmartHome

OpenHab работает обязательным https://www.openhab.org/addons/bindings/amazonechocontrol/Я почти уверен, что другие системы, такие как Domoticz, уже тоже есть интеграции.

Резюме

Даже с ограниченным набором команд, а немного хэкинский способ работать с устройством (будет работать до тех пор, пока Alexa.amazon.com логика остается неизменным) вы можете автоматизировать несколько дополнительных вещей в вашем доме. Для более серьезных решений вам нужно будет реализовать свои собственные навыки Алекса.

Несколько кодовых фрагментов, упомянутых в статье, можно найти на https://github.com/voronenko/alexa-echodot-shell