Как управлять Philips Hue Lights от Arduino (и добавить датчик движения)

Ассортимент светильников 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, но у меня его нет, чтобы играть с ним.

Ehternet-Sheild ящик

Если вы хотите пропустить, полный пример кода приведен ниже или доступен здесь. Я адаптировал это на примере, опубликованном Гилсоном Огайме. Если вы никогда раньше не играли со своим щитом 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. Настоящий вопрос: что ты будешь делать?

Ссылка на основную публикацию