Amazon Dash Button hack: Умная wi-fi кнопка

TL; DR;

Инструкция по настройке

Общая идея

Вы приклеиваете эту кнопку на стену, и ее нажатия регистрируются в таблице или календаре google, также можно настроить любое действие через сервис IFTTT.

Из таблицы google можете строить любые графики и все, на что у вас хватит фантазии. Например, вот так.

Практика показывает, что это нравится детям и служит для них дополнительным мотиватором что-то регулярно делать (например, зарядку).

Да и взрослым во многих ситуациях гораздо проще нажать на аппаратную кнопку на стене, чем доставать телефон, искать там нужное приложение, нажимать кнопку в нем.

Решение

Для решения этой задачи трудно найти более простое и дешевое решение, чем кнопка от amazon.

Особенно, когда они на распродаже по $0.99. Обратите внимание, при распродажах этих кнопок amazon не вешает объявление на главную страницу, как для других своих устройств. Я увидел объявление о распродаже, на которой купил свои кнопки, только когда уже зашел на страницу выбора кнопок с готовностью купить их по регулярной цене.

В общем, и с регулярной стоимостью этих кнопок в $5 трудно конкурировать. На aliexpress вы можете купить ESP8266 за $2 или более комфортную в использовании NodeMCU за $4, но добавьте к ним корпус, светодиод, кнопку, батарейку, вооружитесь паяльником на несколько часов, напишите микропрограмму..

Если же говорить о полных аналогах, также, как и Amazon Dash Button не требующих брать в руки паяльник, то это:

AWS IoT Button $20
flic $35
кнопка particle.io $50
XiaoMi Aqara Smart Wireless Switch Key $8 за каждую кнопку (switch) и $25 один Zigbee хаб (gateway)


Даже сравнивать невозможно с $5 (тем более, с $0.99).

Единственная неприятность - вам нужна подписка Amazon Prime, как для покупки кнопки Amazon Dash Button, так и для ее активации. Первый месяц подписка дается бесплатно, далее стоит порядка $10 в месяц.

Для регистрации нажатий кнопки вам нужно постоянно работающее приложение, которое будет при нажатии кнопки выполнять нужные действия. Я упаковал свое приложение в контейнер Docker и у себя использую его на дисковом массиве Synology.

Вы можете поставить его на любой постоянно включенный компьютер, где есть Docker.

Обратите внимание, что если это macOS или Windows, docker работает в них в виртуальной машине и поэтому приложение из контейнера не сможет прослушивать сеть и надо его запускать вне контейнера.

Чтобы использовать мое приложение вне docker, вам надо установить python3 и перечисленные в pip.requirements.txt библиотеки, а также и все необходимые для них системные зависимости (их довольно много и их описание надо искать в описании каждой библиотеки). Поэтому я и рекомендую вам использовать мой контейнер docker, который во-1х избавляет вас от необходимости это делать, а во-вторых не заставляет ставить специфичные для моего приложения библиотеки в вашу систему и разбираться с возможными при этом конфликтами.

Подробнее о решении

Внутри кнопки от Amazon достаточно мощный процессор (ARM Cortex-M3 STM32 в старых кнопках, Atmel ATSAMG55J19 в новых, появившихся в конце 2016]), если бы был простой способ использовать его с wifi обвязкой кнопки, то нам вовсе не нужен бы был никакой сервер. Но пока не нашли возможности сделать с его помощью что-то более полезное, чем помигать светодиодом (и даже этот трюк
далеко не так просто сделать).

Поэтому, строго говоря, это не взлом Amazon Dash Button, мы ничего с кнопкой не делаем, мы используем ее без изменений, обнаруживаем ее попытки выйти в сеть и, если их видим, то считаем что кнопка нажата.

Кнопка при этом будет моргать красным, поскольку она не сконфигурирована до конца и ничего не делает в amazon. Но при этом мое приложение получит сигнал о нажатии и выполнить настроенные вами действия.

Мое приложение для прослушивания траффика в локальной сети использует python библиотеку scapy.

Оно работает как со старыми кнопками Amazon (выпущенными до 2016) так и с новыми кнопками Amazon.

В сети есть немало альтернативных вариантов взлома кнопки Amazon Dash Button, но я не смог найти удобной интеграции с Google Drive (Google Sheets и Google Calendar) и готового контейнера Docker для установки на Synology, поэтому написал все это сам. Контейнер я собрал на базе минималистичного Alpine Linux, он имеет минимально возможный объем и требует совсем немного ресурсов, практически не влияя на загрузку Synology.

Для старых кнопок был вариант подмены адреса сервера амазон и вызова кнопкой вашего скрипта, так что кнопка показывала зеленым цветом успех, но в новых требуется SSL-сертификат амазона и этот хак не работает.

С моим приложением кнопка Amazon может не просто фиксировать события но и интервалы (например, как долго ребенок делал упражнения). Для этого ее надо нажимать в начале и в конце интервала.

Как настроить, описано в Инструкции по настройке.