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 может не просто фиксировать события но и интервалы (например, как долго ребенок делал упражнения). Для этого ее надо нажимать в начале и в конце интервала.
Как настроить, описано в Инструкции по настройке.