=== Заметки злого админа » Разбираем контроллер умного дома Z-Wave.Me Hub === Что-то давненько я не ковырял разные необычные железки. На днях мне снова пришлось вернуться к теме умных домов, протестировать вот такой набор железа. 1. Контроллер Z-Wave.Me Hub 2. Датчик затопления 3. Датчик открытия двери, движения, температуры 4. Реле с сухим контактом 5. Реле с измерением мощности нагрузки Z-Wave.Me Hub Датчики Реле Что интересно, на контроллере написано, что это российская разработка. А на самом деле в веб-интерфейсе имеется логотип европейской компании POPP, которая выпускает точно такой же девайс. Если это действительно наши для немцев придумали, то мое глубочайшее уважение разработчикам. Но если честно, верится с трудом. Неужели правда спроектировано в России? Дизайн аккуратный, со всех сторон мигают и переливаются лампочки. Правда, не совсем ясно, как и куда его крепить. Скорее всего, к стене, но никакого крепежа в комплекте не было, даже отверстий подходящих на корпусе нет. Контроллер нормально запустился, все датчики и реле без проблем подключились. Управлять умным домом можно через локальную сеть, Wi-Fi или сайт find.z-wave.me. Передо мной стояла задача выяснить, можно ли организовать удаленное управление контроллером через собственный сайт. Собственно, именно эта модель была выбрана, потому что ее использует Ростелеком в своем умном доме, а у него есть собственный личный кабинет. Первым делом я попробовал попасть в контроллер через сеть. Он отвечал по ssh, но ни один из указанных на корпусе паролей не подходил. Пришлось аккуратно расколупать корпус в поисках консоли. К счастью, разработчики не стали сильно огораживать устройство, даже нормально распаяли на плате UART. На обратной стороне платы я обнаружил флешку MicroSD, на которой хранятся настройки и логи. Этих логов пишется достаточно много, а кроме того, используется журналируемая файловая система ext4. Неизвестно, сколько проживет флешка в таком режиме. Плата контроллера Первым делом я вошел в failsafe режим OpenWrt и поменял пароль root. Но после перезагрузки войти в систему не получилось. Сравнив хеш пароля до и после перезагрузки, я понял, что пароль кто-то меняет. Пришлось скопировать корневую файловую систему на флешку и тщательно изучить ее. Обнаружился скрипт /etc/init.d/set_default_password, который делал следующее: ROOT_PASSWORD=`dd if=/dev/mtd3 bs=1 skip=$((0x100)) count=10` && echo -e $ROOT_PASSWORD\n$ROOT_PASSWORD | passwd WIFI_PASSWORD=`dd if=/dev/mtd3 bs=1 skip=$((0x110)) count=10` && sed -i s/\(option key \).*$/\13$WIFI_PASSWORD'/ /etc/config/ wireless Пароли хранились в особом месте внутренней памяти и устанавливались при каждой загрузке контроллера. Можно было бы перезаписать их, но я пока не стал это делать и входил в систему, используя прошитый рутовый пароль. Интересно, уникален ли этот пароль для каждого устройства и хранит ли изготовитель базу паролей всех изготовленных контроллеров для нужд техподдержки. При этом он попадает в локальную сеть дома, а там всякое возможно& Исследуя систему, можно найти много интересного. Не обошлось и без костылей. sleep 10 # if we dont wait, it hangs on something. Весь основной функционал выполняет один монолитный процесс z-way- server, который содержит в себе и работу с периферией, и веб- интерфейс, написанный на богомерзком яваскрипте, и хост для выполнения плагинов, написанных на нем же. Z-Way API открыто и позволяет выполнять все необходимые действия. А теперь о самом главном. Я таки нашел, как сделано в этой системе удаленное управление. Это скрипт /etc/init.d/zbw_connect. Он устанавливает SSH туннель до сервера find.z-wave.me и пробрасывает на него порты веб-интерфейса (8083) и ssh (22). Скрипт содержит в себе логин и приватный ключ для соединения с сервером, а также передает через переменные окружения другие данные, необходимые для доступа. Отредактировав этот скрипт, я перенаправил туннель на свой сервер и смог управлять контроллером через Z-Way API. Скорее всего, Ростелеком сделал то же самое, особо не изменяя прошивку контроллера. На очереди создание личного кабинета пользователя и организация передачи запросов из него через API. Фактически, полная реализация серверной части. А это значит, много интересной работы. .