Кнопка Amazon Dash: ретроспектива

в 11:00, , рубрики: amazon dash, diy или сделай сам, кнопка

Кнопка Amazon Dash: ретроспектива - 1

Интернет вещей произведёт революцию везде! Производство? Выгул собак? Перезагрузка кофемашин? Вождение автомобиля? Питание? Засуньте туда датчик! Маркетинг утверждает, что любая часть нашей жизни будет улучшена при помощи IoT. Почему? Потому, что при помощи простого датчика и симфонии пустопорожней корпоративной болтовни про машинное обучение революция сродни явлению iPhone вот-вот произойдёт! И вот он: Amazon Dash, где-то 2014-й год.

Первым продуктом семейства Dash было устройство для сканирования штрих-кода Amazon Dash Wand – его бесплатно раздавали клиентам Amazon Fresh [службы доставки еды / прим. перев.], которые должны были вешать его на кухне, например, при помощи магнита на холодильник. Когда у клиента Fresh заканчивалось молоко, он мог просканировать пакет перед тем, как выбросить, добавив тем самым его в корзину покупок. Подозреваю, что эти устройства были довольно дорогими и достаточно сложными, чтобы их можно было использовать так, как хотела Amazon (поэтому их запуск был настолько ограниченным). Целью Amazon было позволить потенциальным клиентам делать заказы с как можно меньшими усилиями, чтобы те в результате покупали как можно больше. Помните кнопку «купить сейчас за 1 клик»?

Кнопка Amazon Dash: ретроспектива - 2

И этот Wand в итоге обновили до устройства, содержащего Алексу, активируемую кнопочкой (оставив сканер штрих-кодов и магнитик на холодильник), которое доступно всем. Однако Amazon возложила свои надежды на новую штуковину. В середине 2015 года Amazon представила «сервис пополнения запасов» Dash Replenishment Service с представляющим его продуктом – кнопкой Dash Button. Эта кнопка должна была стать кнопкой «покупки в 1 клик» в физическом мире. Чтобы использовать сканер штрихкодов Wand, пользователю нужно было вспомнить, что он где-то лежит, найти штрихкод, отсканировать его, вспомнить о необходимости открыть свою корзину и заказать товар. Слишком много шагов, слишком много возможностей сойти с коммерческих американских горок Безоса. Кнопка Dash Button работала проще! Нажмите кнопку, получите отмеченный на ней продукт по сохранённому адресу. Каждую кнопку нужно было покупать (за $5 с купоном на скидку в $5) с привязкой к определённому бренду, а потом в онлайне настроить на покупку определённого продукта при нажатии. В рекламных роликах счастливые семьи размещали их на стиральных машинах для покупки Tide, на кухонных шкафах для покупки бумажных полотенец. Довольно хитроумно – это действительно кнопка «купить сейчас за 1 клик» для физического мира.

У кнопок Dash было два варианта. У обоих был один и тот же интерфейс, и работали они, по сути, одинаково. У устройства была одна кнопка (ПО может распознавать несколько последовательностей нажатий), один RGB светодиод и микрофон (нет, оно не слушало ваши разговоры, но мы к этому ещё вернёмся). И ещё у него был WiFi передатчик. У второй версии (которую втихую выпустили в 2016) добавилось соединение по Bluetooth и полностью поменялась начинка, хотя пользователю этого не было заметно.

В феврале 2019 года Amazon прекратила продажу Dash Buttons.

Но мы пишем про железки, а не про бизнес

Кнопки Dash были прикольным хаком! В мире, знакомом с ESP8266, железки вроде Dash Button считаются стандартным проектом начального уровня для автоматизации дома. Но в 2015, когда кнопки только вышли, ESP ещё только начинала свой путь. До того времени WiFi подразумевал необычное устройство типа Electric Imp или интегральной схемы с надписью Texas. Рынок дешёвых устройств с подключением к интернету был совсем другим, и более дорогим.

Вероятно, Amazon не было смысла производить такую кнопку, если бы она стоила дороже пары долларов, поэтому при её разработке компания провернула пару трюков, чтобы снизить стоимость, не снижая потребительские качества.

Кнопка Amazon Dash: ретроспектива - 3

Прикольные хаки начинаются с подключения. Классические методы соединения с домашней сетью WiFi устройств – это кошмар с точки зрения пользователя. Загрузите устройство впервые, дождитесь, пока оно сообразит, что с сетью нет связи, зайдите в режим точки доступа, откройте приложение, вручную откройте страницу настроек и соединитесь с новой WiFi-сетью, вернитесь в приложение, введите логин/пароль, бесконечно долго подождите, когда оно как-нибудь сообщит вам об успехе. И это сработает, только если ваш телефон не прибьёт приложение в фоне или не уронит WiFi сеть из-за отсутствия интернет-соединения! Разработчики Android в различные моменты, возможно, могли заставить переключить сеть WiFi без вмешательства пользователя, но даже в этом случае опыт переключения между платформами был ужасно непоследовательным.

Что же делать хакеру? Bluetooth работает неплохо, но ему нужен ещё один передатчик. Упомянутый Electric Imp использовал фотоэлемент, к которому нужно было прислонять экран телефона – тот мигал в определённой последовательности, кодирующей доступ. Устройства можно запрограммировать заранее, как делает Amazon с новыми Kindle, введя туда данные из учётной записи покупателя, но это сложный производственный процесс, и всё равно нужна какая-то схема для смены сети. Но вместо всех этих обходных манёвров Amazon решила использовать метод, который я встречал только в анекдотах: акустическое спаривание.

Кнопка Amazon Dash: ретроспектива - 4
Кнопка Dash Button V1

В обоих поколениях был микрофон, воспринимавший логин/пароль пользовательской сети через звуки, полученные частотной манипуляцией, на частоте чуть ниже 20 кГц. Почему 20 кГц, а не выше? Метод акустического спаривания должен был работать везде, где есть микрофон и спикер. Эти требования так легко выполнить, что Amazon могла разработать процедуру спаривания так, чтобы она сработала не только в рамках собственного мобильного приложения – люди могли использовать что угодно, от Chromebook с браузером до другого устройства от Amazon. Мне неизвестны случаи настройки этих кнопок через расположенное неподалёку Amazon Echo, однако технически это было бы возможно, а выглядело бы как волшебство. Учитывая всё это, частота должна была быть такой, чтобы её можно было всегда точно воспроизвести – то есть, в диапазоне, доступном человеческому уху. По ссылке можно ознакомиться с подробностями разбора этого протокола.

Кнопка Amazon Dash: ретроспектива - 5
Внутренности V1

Заглядывая внутрь устройства, мы сталкиваемся с неожиданностью: батарейка АА! Не какая-то «промышленная» батарея под другим брендом, а простая потребительская батарейка, без изменения бренда, просто припаянная к контактам. Шта? Ну, видимо, в Amazon решили, что батарейка-таблетка не обеспечит достаточно долгой продолжительности работы, возможно, из-за потребления энергии при переподключении по WiFi, а более крупная таблетка будет гораздо дороже обычной батарейки. И хотя батарейку неплохо держит корпус (чёрный овал слева), она, к сожалению, припаяна к контактам, поэтому всю сборку придётся менять, когда батарейка сядет, примерно после тысячи нажатий.

Что насчёт остального корпуса? Выглядит всё максимально просто. Винты крепят плату к верхней части корпуса, всё остальное приклеено или приварено ультразвуком. Формы всех пластиковых компонентов подобраны так, чтобы их было легко отливать. В целом устройство выглядит простым (и дешёвым) в изготовлении, что не так уж удивительно.

Взламываемость

Что можно взломать в кнопке Dash Button? Если люди начнут выкидывать эти удивительно простые устройства, сможем ли мы дать им вторую жизнь?

Возможно, первым хаком было использование этих кнопок не по назначению вообще безо всяких взломов как ПО, так и железа. Между нажатиями кнопка отключается, чтобы экономить энергию. В долгосрочной перспективе даже редкие запросы для поддержания связи с WiFi значительно потребляют энергию: а кнопки Dash должны работать годами, поэтому они не остаются постоянно подключёнными. При нажатии кнопки устройство просыпается, включает светодиод, давая понять, что живо, соединяется с WiFi, вызывает API Amazon, потом отваливается от сети и выключает светодиод. При соединении с сетью оно в обязательном порядке проходит через несколько шагов настроек, включая трансляцию запроса ARP probe, чтобы убедиться, что ни у кого больше нет такого MAC-адреса.

Предприимчивые хакеры сообразили, что если отслеживать трафик LAN, эти запросы можно поймать, и в них войдёт уникальный MAC-адрес устройства. И из-за особенного стиля работы кнопки Dash, если мы видим запрос ARP probe, то мы знаем, что устройство только что проснулось, что означает, что кнопку только что нажали. Дальше с этим можно делать всё, что угодно [сделав так, чтобы кнопка ничего не заказывала / прим. перев.]. Впервые о таком методе я узнал из блога Теда. И даже когда бэкенд Amazon когда-нибудь отключится, кнопки работать не перестанут.

Кнопка Amazon Dash: ретроспектива - 6
Плата V1

Отлов запросов ARP работает, однако мне он кажется не очень удобным. У этих устройств и так есть процессоры, поэтому пусть они сами говорят то, что нужно. Что насчёт программирования кнопок Dash? Неудивительно, что люди уже разобрались с платой, и расписали, что куда идёт. Ни у одной из версий кнопки нет никаких особенно редких запчастей: у версии 1 стоит модуль Broadcom Cypress BCM943362WCD4 семейства WICED, что, по сути, есть просто STM32F205, скленный с передатчиком – для него есть набор разработчика. На версии 2 стоят Atmel Microchip ATSAMG55 и Atmel Microchip ATWINC1500B, с передатчиком Cypress CYBL10563-68FNXI Bluetooth. Это доступные всем процессоры ARM с подробной документацией.

И, несмотря на доступность железа и кнопок, никто, судя по всему, не продвинулся на этом фронте сколь-нибудь далеко. Легко найти обучающие материалы по перепрограммированию устройств и миганию светодиодами или отслеживанию нажатий кнопок, но все материалы, найденные мною, заканчиваются на самом интересном месте: «а теперь надо разобраться с WiFi». Так что да, их можно перепрограммировать в некие странные тестовые устройства, но пока нам ещё лишь предстоит увидеть, как кто-нибудь сумеет полностью подчинить себе эту кнопку, чтобы получить доступ ко всем скрытым в ней богатым возможностям.

Что дальше?

В конце позвольте пару слов про Amazon. Небольшие проекты по производству устройств типа Dash Button и Wand – мои любимые типы корпоративных экспериментов. Мне всегда нравится, когда компания пытается произвести необычное устройство. Это гораздо лучше, чем убивать эти проекты ещё до того, как они выйдут за пределы лаборатории.

С другой стороны, Dash Button – довольно расточительная штука. Пусть у них ограниченный срок службы, однако никакие отметки на них не помешают выкинуть их в мусор после того, как они прекратят работать. А что ещё Amazon ожидает от клиентов? У устройства очевидно есть внутри батарейка, однако поскольку на корпусе нет чётких указаний на этот счёт, пользователи могут и не догадаться, что его нужно отправлять туда, где перерабатывают батарейки. Использование обычной распространённой батарейки – хитроумная идея, однако за ней должен последовать очевидный способ её извлечения, что дало бы возможность использовать продукт без ограничений по времени, и лучше отнестись к экологии.

Плюсом будет то, что скоро мы сможем собирать эти кнопки мешками! Когда они начнут выходить из строя, мы сможем прервать поток электронного мусора, собирая их и переделывая под другие цели.

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

Второй путь очевиден – заставить работать WiFi! По моему опыту, WiFi под брендом WICED от Broadcom бывает довольно сложным, но WINC1500 не кажется чем-то экзотическим. Как было отмечено в 2016 году, этот модуль использовался в Arduino MKR1000 и WiFi Shield 101, а также в нескольких платах от Adafruit. Можно ли в нём разобраться? Надеемся, что да!

Автор: Вячеслав Голованов

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js