Рекламное объявление
Ассортимент светильников Philips Hue определенно не дешев (Есть несколько альтернатив Philips Hue альтернативы, которые на самом деле стоитСистема Philips Hue лидирует в интеллектуальном освещении, но есть несколько достойных альтернатив. Мы выбрали три, которые предлагают одинаковый набор основных функций и возможность взлома. Подробнее ), но одна вещь, которую я действительно ценю, это хорошо документированные API Что такое API и как открытые API меняют Интернет?Вы когда-нибудь задумывались, как программы на вашем компьютере и посещаемых вами сайтах «общаются» друг с другом? Подробнее для создания собственных приложений Hue. Сегодня я покажу вам, как управлять подсветкой Hue с Arduino, а затем добавлю простой датчик движения.
Почему мы это делаем? Потому что системы домашней автоматизации могут быть довольно жесткими и дорогими. Узнав, как управлять Hue от Arduino, вы открываете двери для множества индивидуальных проектов домашней автоматизации, которые просто не могут быть побеждены готовыми компонентами. Если совместное хакерство - не ваше дело, попробуйте
8 сказочных приложений Hue 7 лучших приложений Philips Hue для Android и iPhoneИщете лучшие приложения Philips Hue для использования со своими умными лампами? Вот несколько отличных приложений для iPhone и Android. Подробнее вместо.Система оттенков
Давайте немного разберемся с техникой, чтобы вы знали основные системы, с которыми вы работаете. Огни оттенка создают ячеистая сеть Mesh Networks: будущее общенияСетчатые сети практически неуязвимы. В ячеистой сети нет точек дросселирования, через которые проходит весь трафик. Вместо этого информация передается от одного устройства к другому, пока не достигнет места назначения. Подробнее , используя беспроводной протокол ближнего действия под названием ZigBee - в частности, они ZigBee Light Link сертифицированный, что означает, что другие продукты ZLL также должны работать вместе с Hue (теоретически).
Хотя ZigBee технически работает на небольшом расстоянии, это означает, что каждая новая лампочка расширяет сеть, передавая сообщения другим лампам. Это означает, что если у вас возникли проблемы с управлением источником света на другой стороне дома, попробуйте установить другой источник света между ними.
Zigbee - отличный протокол, но он сильно отличается от Wi-Fi или проводной компьютерной сети, поэтому нам необходим мост Philips Hue Bridge, чтобы объединить их вместе. Мост Hue использует модифицированную прошивку Linux с открытым исходным кодом, которая транслирует базовый веб-сервер.

Именно взаимодействуя с этим локальным веб-сервером, вы можете узнать текущее состояние индикаторов и управлять ими.
Это красивая простая система, созревшая для проектов DIY. Престижность Philips за то, что сделал эту вещь такой взломанной.
Начинающийся
Прежде чем вы сможете получить доступ к документации API, вам необходимо зарегистрироваться в качестве разработчика. Это бесплатно, но вы должны принять условия. Сделай это сейчас.
Любой, кто знаком со стандартными веб-сервисами или Javascript, должен уметь работать с Hue: все данные передаются и принимаются как Пакеты JSON Что такое JSON? Обзор дилетантаПланируете ли вы быть веб-разработчиком или нет, неплохо бы хотя бы знать, что такое JSON, почему он важен и почему он используется во всем Интернете. Подробнее .
Чтобы увидеть это в действии, вам нужно знать IP-адрес вашего моста Хюэ. Есть несколько способов сделать это:
- Посмотрите на таблицу назначения адресов DHCP в интерфейсе администратора вашего роутера
- Запустите программу сетевого сопоставления, как IP Scanner Home
- Попробуйте Инструмент брокера Philips UPnP
- Пинг «philips-hue.home»

Когда вы закончите, введите его в адресную строку браузера с отладки / clip.html добавлен в URL. В моем случае это было:
http://192.168.1.216/debug/clip.html
Это инструмент отладки, который позволяет отправлять и получать пакеты JSON через простой веб-интерфейс. Первым шагом является включение профиля разработчика на самом Hue Bridge, который по умолчанию отключен по соображениям безопасности. Вставьте следующее в поле BODY, оставьте URL как /api/и отправьте запрос POST, нажав кнопка сообщения:
{"devicetype": "тестовый пользователь", "имя пользователя": "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", "достижимый": false}, "type": "Extended color light", "name": "Bedroom 1", "modelid": "LCT001",
Обратите внимание, что «На»: правда штат на самом деле не показывает, включена ли лампа; только то, что в соответствии с настройками моста, это должен Быть на. «Достижим» ложь может указывать как на лампочку, которая находится слишком далеко, так и просто выключена при выключателе питания.
Последний пример, прежде чем мы интегрируем это в Arduino: убедитесь, что один из ваших источников света виден и включен, и что вы знаете, какой это номер. Изменить URL на /api/newdevelopers/lights/1/state (изменяя номер на свой свет), и отправьте запрос PUT со следующими данными:
{"hue": 50100, "sat": 255, "bri": 255}
Вы должны увидеть, как ваш свет реагирует так:

То, что вы сделали, это выдвинули новое состояние в колбу. Вы также можете добавить «переходное время», которое является примитивным методом анимации, показывающим, сколько секунд вы хотели бы, чтобы изменение состояния заняло.
Цвет может быть установлен в ряд разных способов, но, к сожалению, не существует простого способа отправить значение RGB. В приведенном выше примере мы отправили оттенок, сиделУрация и бриghtness. Попробуйте изменить значение оттенка и снова отправить запрос PUT.
Работа от Arduino
Существует существующая библиотека Hue / Arduino, которая называется ArduinoHue которые Philips сами ссылаются в документации API, но проблема с этой библиотекой заключается в том, что связывается через USB-соединение с вашим ПК, на котором также должно быть запущено приложение Python постоянно. Eugh. Вы можете также позволить своему компьютеру запустить весь процесс в этот момент и полностью отключить Arduino.
Вместо этого я покажу вам, как управлять Hue от Arduino используя щит Ethernet. Arduino не нужно подключать к компьютеру, поэтому он может работать независимо от того, где вы можете подключить кабель Ethernet. На самом деле, он также должен работать со щитом Wi-Fi, но у меня его нет, чтобы играть с ним.

Если вы хотите пропустить, полный пример кода приведен ниже, или доступна здесь. Я адаптировал его из приведенного примера Гилсон Огайме. Если вы никогда ранее не играли со своим щитом Ethernet, возможно, вы захотите быстро пробежаться по учебник по веб-клиенту - Я предполагаю некоторый уровень знакомства с этим и не буду описывать код, используемый для установки сетевого IP-адреса и т. Д. Мы также показали вам как создать мини веб-сервер с экраном Ethernet Дайте вашему проекту Arduino собственный мини-веб-сервер с сетевым экраномНекоторое время назад я показал вам, как настроить систему управления интернетом для вашего Arduino, но для поддержания интернет-соединения он должен был оставаться подключенным к компьютеру через USB ... Подробнее .
Создание изменений состояния
Создание нового состояния для нажатия на лампочки - это простой случай создания нового строка переменная, и экранирование всех двойных кавычек. Я добавил случайным образом () там же, чтобы создать несколько динамичную анимацию. Попробуйте сделать переменную оттенка случайной для разных цветов.
String command = "{\" on ": true, \" hue \ ": 50100, \" sat \ ": 255, \" bri \ ": 255, \" transitiontime \ ":" + String (random (15, 25)) + "}";
Отправка команды
Чтобы фактически отправить команду, у вас есть вспомогательная функция setHue (), которая принимает в качестве аргумента номер света и командную строку, например:
setHue (1, команда);
Все, что он делает, это подключается к мосту, выплевывает команду в виде запроса PUT вместе со всей другой ерундой, связанной с созданием HTTP-запроса.
client.print ("PUT / api /"); client.print (hueUsername); client.print ( "/ огни /"); client.print (lightNum); client.println ("/ state HTTP / 1.1"); client.println ( "Keep-жив"); client.print ("Host:"); client.println (hueHubIP); client.print ("Content-Length:"); client.println (command.length ()); client.println ("Content-Type: text / plain; кодировка = UTF-8" ); client.println (); // пустая строка перед телом. client.println (команда); // Оттенок
Добавление датчика движения
Наконец, я подключил простую Датчик движения HC-SR501 к цифровому выводу ввода / вывода 2. Когда движение обнаружено, ряд состояний выдвигается к мосту для 2 лампочек, чтобы создать медленную, динамическую анимацию. Когда датчик движения деактивируется, обе команды отправляются по одной. В идеале они должны были бы вернуться в состояние, в котором они находились, до того, как было обнаружено движение, но логика не настолько умна - мы просто собираемся включать и выключать их.
Ограничения
Хотя по общему признанию неоптимизированный код, сетевой интерфейс Arduino тратит почти секунду, чтобы отправить один командный запрос. Я протестировал ту же команду с Mac, используя то же соединение Ethernet, и она была способна в десять-двадцать раз превышать эту скорость (вот AppleScript в случае, если вы хотите проверить). Следовательно, любая быстрая анимация (я пытался создать эффект мерцающей свечи) просто невозможна в Arduino. Это не должно быть проблемой для большинства проектов, только для высокоскоростной анимации света, но хорошо знать об этом ограничении.
Также трудно полностью проанализировать любой ответ JSON, который вы получите с моста; на Arduino недостаточно ОЗУ для хранения всех необработанных данных. По этой причине вы можете ограничиться отправкой.
Взломать оттенок
Теперь, когда вы обладаете знаниями о том, как управлять Hue полностью независимо, это открывает мир взломов домашней автоматизации Hue. Настоящий вопрос: что ты будешь делать?
Джеймс имеет степень бакалавра в области искусственного интеллекта и сертифицирован CompTIA A + и Network +. Он является ведущим разработчиком MakeUseOf и проводит свое свободное время за игрой в VR-пейнтбол и настольные игры. Он строит компьютеры с детства.