Накупить умных гаджетов — не проблема. Но как сделать так, чтобы они работали вместе и управлялись при помощи голоса? Команда «Сири, включи свет» будет работать только с устройствами, которые поддерживают фирменный протокол HomeKit. Однако немного шаманства, и этому трюку можно научить практически любой девайс, способный принимать команды извне.

Если ты успел поддаться моде и купил хотя бы пару умных домашних приборов, то наверняка столкнулся с проблемой: каждый из них управляется через свое приложение, имеет свой стандарт связи и хорошо интегрируется только с устройствами того же производителя. Обойти это ограничение вполне реально, причем в основном софтверными методами, которые не требуют замены всей техники. Купить придется разве что Raspberry Pi или другой одноплатный компьютер и (если понадобится) несколько модулей беспроводной связи для него.

Для меня возня с умным домом началась с приобретения одной-единственной светодиодной лампочки, на примере которой я и покажу, как будет работать моя система. Я решил не шиковать и остановился на самом бюджетном варианте — лампе MiLight с четырьмя диодами (тремя цветными и белым).


Рано или поздно умные лампы будут стоить примерно столько же, сколько и обычные светодиодные, и китайцы уже неплохо продвинулись в этом направлении. На AliExpress лампы MiLight сейчас продаются примерно за 800 рублей, к ним в комплект можно взять беспроводной командный модуль. Он подключается к домашнему Wi-Fi, а лампочками рулит по собственному проприетарному радиопротоколу.

Как вариант — можешь посмотреть на лампы Yeelight производства Xiaomi. Они подороже, зато подключаются сразу к Wi-Fi и не требуют промежуточного радиоканала и лишней коробки с контроллером. Ну и конечно, всегда существуют Lifx и Philips Hue. Их качество не вызывает сомнений, но цены тут уже совсем другие — по 4–7 тысяч за лампочку.

Особое внимание при выборе лампы стоит обратить на протокол. Попадаются модели с управлением не по Wi-Fi, а по Bluetooth LE. При работе со смартфоном это может быть удобнее, но если ты, как и я, собираешься использовать Raspberry Pi или другой компьютер в качестве «мозга» умного дома, то предпочтителен Wi-Fi.

 

Подключаем лампу и настраиваем Wi-Fi

Честно говоря, изначально у меня не было вообще никакого плана. Мне была нужна лампочка для настольной лампы, и я хотел иметь возможность выключать ее, не вставая с кровати. Иногда, знаешь ли, хочется просто накрыться одеялом и немедленно заснуть — в такие моменты выключатель в другом конце комнаты становится куда большей проблемой, чем обычно.

Первоначальная установка оказалась проста, хоть и не совсем прямолинейна. Вкручиваем лампочку в патрон, включаем радиомодуль в любой USB и подключаемся к сети Wi-Fi, которую он создаст. Это временное решение: оно нужно только для первой настройки.

В случае с MiLight последующие действия будут такими. Открываем веб-интерфейс (обычно по адресу 10.10.100.254) и вбиваем админский логин и пароль (admin/admin). Теперь можно зайти в настройки STA Setting и вписать данные своего роутера, а потом выбрать STA mode в разделе Work Mode.


Обязательно зайди в раздел Other Setting и скопируй себе номер порта UDP, а также IP-адрес из поля Server Address. Эти данные пригодятся тебе чуть позже. По желанию можешь еще зайти в раздел Account и поменять логин и пароль на что-нибудь пооригинальнее.

Теперь перезагружай радиокоробок, и можешь переключать компьютер на обычный Wi-Fi. С настройкой покончено, это было нетяжело! А вот следующий шаг из инструкции доставил мне почти физическую боль.


Проблема в том, что админка авторства безвестных китайских программистов — это еще туда-сюда, а вот доверять им дизайн приложения для iOS не стоит вовсе. В нем плохо все. В первую очередь — необходимость зачем-то каждый раз выбирать вид пульта, который оно эмулирует, а также отсутствие возможности одной кнопкой вернуть нормальный ровный свет, если вдруг ошибся и начал перебирать режимы мигания (количество которых превышает все разумные пределы). Дизайн и разрешение экрана времен iPhone 4, учитывая перечисленное, можно уже и не обсуждать. Китайский лубок как он есть.

Китайский лубок
Китайский лубок

Впрочем, неверно выразился. Китайский лубок, известный также как няньхуа, прекрасен, чего не скажешь о приложении MiLight. Хорошая новость заключается в том, что нам оно не понадобится.

 

Пишем простой скрипт и рулим лампочкой с компьютера

Если программа общается с устройством по IP, значит, отловить и подделать ее команды — не такая уж сложная задача. В нашем случае она к тому же давно решена и существует масса реализаций протокола MiLight на разных языках программирования и в составе разных утилит.

Начнем с самого простого. Чтобы включить лампочку, достаточно всего трех строк на Python без всяких левых библиотек.

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto("x42x00x55", ("192.168.0.10", 8899))

В последней строчке поменяй IP и порт на актуальные, и лампочка должна начать повиноваться. Для выключения замени первый байт послания на 41, а для выставления белого цвета полной яркости — на C2. Если твоя лампа работает по TCP, а не по UDP, поменяй SOCK_DGRAM на SOCK_STREAM.

Такой способ удобен для отправки одной-двух команд, но если ты хочешь что-то более развесистое, то, так или иначе, понадобится скрипт-обертка. Писать ее не обязательно — есть готовые варианты. Лично мне приглянулся модуль wifileds, с ним включение лампочки выглядит следующим образом:

import wifileds
led_connection = wifileds.limitlessled.connect('192.168.0.10', 8899)
led_connection.rgbw.all_on()
led_connection.rgbw.white()

Полный список команд ты увидишь, открыв файл rgbw.py, rgb.py или white.py, там же можешь подсмотреть и шестнадцатеричные коды, если планируешь командовать лампой напрямую через socket. Важный момент: для белых ламп, RGB и RGBW коды команд различаются.

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

 

Прочие извраты с MiLight

Большую подборку скриптов, совместимых с MiLight, ты можешь найти на сайте LimitlessLED. Это американская фирма, которая продает под своим брендом те же или похожие лампочки (по крайней мере, их протоколы полностью идентичны).

Настоящие фанаты своего дела пошли дальше и разреверсили радиопротокол MiLight. Если тебе не мил фирменный вайфайный коробок, то ты можешь попробовать воспроизвести его функции при помощи Arduino с модулем ESP8266. Для него к тому же существует прошивка, которая расширяет число групп лампочек с четырех штук до 262 тысяч, а также имеет веб-интерфейс и RESTful API.

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


2 комментария

  1. GrafGrigorio

    06.03.2017 at 09:53

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

  2. roman.rrv

    07.03.2017 at 07:44

    Согласен с GrafGrigorio! Проще купить любой модуль ESP8266 по вкусу (100-150 руб), твердотельное реле G3MB-202P (100 руб) и блок питания hlk-pm03 (150 руб). Итого 400 руб на управление любой нагрузкой (до 2А). Управлять можно хоть чем, если лень изучать и писать скетчи можно использовать blynk.

Оставить мнение

Check Also

Предсказание случайности. Изучаем ASLR в Linux и GNU libc, обходим защиту адресного пространства и stack canary

За время существования в ядре Linux появилось множество различных механизмов защиты от экс…