Ассортимент светильников Philips Hue определенно не дешев (есть несколько вариантов
), но я очень ценю хорошо документированный API
для создания собственных приложений Hue. Сегодня я покажу вам, как управлять подсветкой Hue с Arduino, а затем добавлю простой датчик движения.
Зачем мы это делаем? Потому что системы домашней автоматизации могут быть довольно жесткими и дорогими. Узнав, как управлять Hue от Arduino, вы открываете двери для разнообразных проектов домашней автоматизации, которые просто не могут быть побеждены готовыми компонентами. Если совместное хакерство — не ваше дело, попробуйте эти 8 великолепных приложений Hue.
вместо.
Система оттенков
Давайте немного разберемся с техникой, чтобы вы знали основные системы, с которыми вы работаете. Hue lights создают ячеистую сеть
с использованием беспроводного протокола ближнего действия под названием ZigBee, в частности, они сертифицированы ZigBee Light Link, что означает, что другие продукты ZLL также должны работать вместе с Hue (теоретически).
Хотя ZigBee технически ограничен, ячеистая сеть означает, что каждая новая лампочка расширяет сеть, передавая сообщения другим лампам. Это означает, что если у вас возникли проблемы с управлением освещением на другой стороне дома, попробуйте установить другой источник света между ними.
Zigbee — отличный протокол, но он сильно отличается от Wi-Fi или проводной компьютерной сети, поэтому нам необходим мост Philips Hue Bridge, чтобы объединить их вместе. Мост Hue выполняет модифицированную прошивку Linux с открытым исходным кодом, которая транслирует базовый веб-сервер.
Когда вы закончите, введите его в адресную строку браузера с отладки / clip.html добавлен в URL. В моем случае это было:
http://192.168.1.216/debug/clip.html
Это инструмент отладки, который позволяет отправлять и получать пакеты JSON через простой веб-интерфейс. Первым шагом является включение профиля разработчика на самом Hue Bridge, который по умолчанию отключен по соображениям безопасности. Вставьте следующее в поле BODY, оставьте URL как / API /, и отправьте запрос POST, нажав кнопка сообщения:
{"devicetype":"test user","username":"newdeveloper"}
В первый раз, когда вы сделаете это, вы увидите где-то в ответе «кнопка ссылки не нажата». Это функция безопасности, которая требует, чтобы каждое новое приложение, которое вы используете, было физически авторизовано. Идите и найдите свой мост, нажмите кнопку и отправьте тот же запрос снова в течение 30 секунд. На этот раз вы получите другой ответ, и пользователь будет авторизован. Если вы хотите использовать другое имя пользователя, прочитайте документы API о создании пользователей. Пока этого будет достаточно.
Как только ваш пользователь настроен, базовый URL, с которым вы должны взаимодействовать, становится / API / newdeveloper / . Вы можете отправить запрос GET, чтобы узнать все, что ваш мост знает о подключенных источниках света, сигналах тревоги, сценах и кратком журнале приложений, которые использовались. Вот образец информации о состоянии, которая содержится в одной лампочке.
"state": {
"on": true,
"bri": 254,
"hue": 14910,
"sat": 144,
"effect": "none",
"xy": [
0.4596,
0.4105
],
"ct": 369,
"alert": "none",
"colormode": "ct",
"reachable": false
},
"type": "Extended color light",
"name": "Bedroom 1",
"modelid": "LCT001",
Обратите внимание, что «включено»: истинное состояние на самом деле не показывает, включена ли лампочка или нет; только то, что в соответствии с настройками моста, он должен быть включен. «Достижимый»: «ложь» может указывать на то, что лампа находится слишком далеко или просто выключена при выключателе питания.
Последний пример, прежде чем мы интегрируем это в Arduino: убедитесь, что один из ваших источников света виден и включен, и что вы знаете, какой это номер. Изменить URL на / API / newdevelopers / огни / 1 / состояние (изменяя номер на свой свет), и отправьте запрос PUT со следующими данными:
{"hue": 50100,"sat":255,"bri":255}
Вы должны увидеть, как ваш свет реагирует так:
То, что вы сделали, это выдвинули новое состояние в колбу. Вы также можете добавить «transitiontime», который является примитивным методом анимации, показывающим, сколько секунд вы хотели бы, чтобы изменение состояния заняло.
Цвет можно установить несколькими различными способами, но, к сожалению, простого способа отправки значения RGB не существует. В приведенном выше примере мы отправили оттенок, СубботаУрация и бриghtness. Попробуйте изменить значение оттенка и снова отправить запрос PUT.
Работа от Arduino
Существует существующая библиотека Hue / Arduino под названием ArduinoHue, на которую сами Philips ссылаются в документации API, но проблема с этой библиотекой заключается в том, что она обменивается данными через USB-соединение с вашим ПК, что также требует постоянного запуска приложения Python. Eugh. Вы можете также позволить своему компьютеру запустить весь процесс в этот момент и полностью отключить Arduino.
Вместо этого я покажу вам, как управлять Hue от Arduino используя щит Ethernet. Arduino не нужно подключать к компьютеру, поэтому он может работать независимо от того, где вы можете подключить кабель Ethernet. На самом деле, он также должен работать со щитом Wi-Fi, но у меня его нет, чтобы играть с ним.
Если вы хотите пропустить, полный пример кода приведен ниже или доступен здесь. Я адаптировал это на примере, опубликованном Гилсоном Огайме. Если вы никогда раньше не играли со своим щитом Ethernet, возможно, вы захотите быстро пройтись по учебному пособию по веб-клиенту — я предполагаю, что вы немного знакомы с этим, и не буду описывать код, используемый для создания сети. IP и т. Д. Мы также показали, как создать мини-веб-сервер с экраном Ethernet.
,
Создание изменений состояния
Создание нового состояния для отправки на лампочки является простым случаем создания новой строковой переменной и экранирования всех двойных кавычек. Я добавил случайным образом () там же, чтобы создать несколько динамичную анимацию. Попробуйте сделать переменную оттенка случайной для разных цветов.
String command = "{\"on":true,\"hue\":50100,\"sat\":255,\"bri\":255,\"transitiontime\":"+String(random(15,25))+"}";
Отправка команды
Чтобы фактически отправить команду, у вас есть вспомогательная функция setHue (), которая принимает в качестве аргумента номер света и командную строку, например:
setHue(1,command);
Все, что он делает, это подключается к мосту, выплевывает команду в виде запроса PUT вместе со всей другой ерундой, связанной с созданием HTTP-запроса.
client.print("PUT /api/");
client.print(hueUsername);
client.print("/lights/");
client.print(lightNum);
client.println("/state HTTP/1.1");
client.println("keep-alive");
client.print("Host: ");
client.println(hueHubIP);
client.print("Content-Length: ");
client.println(command.length());
client.println("Content-Type: text/plain;charset=UTF-8");
client.println(); // blank line before body
client.println(command); // Hue command
Добавление датчика движения
Наконец, я подключил простой датчик движения HC-SR501 к цифровому выводу ввода / вывода 2. При обнаружении движения на мост перебрасывается серия состояний для 2 лампочек, чтобы создать медленную, динамическую анимацию. Когда датчик движения деактивируется, обе команды отправляются по одной. В идеале они должны были бы вернуться в состояние, в котором они находились, до того, как было обнаружено движение, но логика не настолько умна — мы просто собираемся включать и выключать их.
Ограничения
Хотя по общему признанию неоптимизированный код, сетевому интерфейсу Arduino требуется почти секунда для отправки одного запроса команды. Я тестировал ту же команду с Mac, используя то же соединение Ethernet, и она была способна в десять-двадцать раз превышать эту скорость (вот AppleScript на случай, если вы хотите протестировать). Следовательно, любая быстрая анимация (я пытался создать эффект мерцающей свечи) просто невозможна в Arduino. Это не должно быть проблемой для большинства проектов, только для высокоскоростной анимации света, но хорошо знать об этом ограничении.
Также трудно полностью проанализировать любой ответ JSON, который вы получите с моста; на Arduino недостаточно ОЗУ для хранения всех необработанных данных. По этой причине вы можете ограничиться отправкой.
Взломать оттенок
Теперь, когда вы обладаете знаниями о том, как управлять Hue полностью независимо, это открывает мир взломов домашней автоматизации Hue. Настоящий вопрос: что ты будешь делать?