Рекламное объявление

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

К сожалению, я имею в виду буквальную горстку - все, что вы уже купили, возможно, не совместимо. Тем не менее, протокол уже был реконструирован, и эмулятор с открытым исходным кодом для HomeKit API доступен: или в простым языком, теперь вы можете создавать «поддельные» устройства HomeKit, и Siri будет управлять ими, как и любой другой официальный HomeKit аксессуар.

Сегодня мы собираемся создать управляемое освещение Wi-Fi и управлять им с помощью Siri. Вот демо.

Вот что вам нужно:

  • Raspberry Pi (Я использовал RPi2, есть небольшая разница в версиях Node для установки, учитывая обновленную архитектуру ARM - см. Примечания позже).
  • Брокер MQTT установлен на Raspberry Pi. Смотрите раздел «Установите Mosquitto на свой Pi» в моем Руководство по OpenHAB, часть 2 Руководство для начинающих OpenHAB, часть 2: ZWave, MQTT, правила и графики
    instagram viewer
    OpenHAB, программное обеспечение для домашней автоматизации с открытым исходным кодом, намного превосходит возможности других систем домашней автоматизации, представленных на рынке, но настроить его нелегко. На самом деле, это может быть совершенно расстраивающим. Подробнее
    . Его не нужно устанавливать специально на Pi - вы даже можете использовать облачный сервер MQTT, но так как в любом случае нам нужен Pi для этого урока, это удобно.
  • NodeMCU v2 (совместимый с Arduino)
  • Светодиоды Neopixel (я рекомендую 4 пикселя для тестирования, затем вы можете добавить внешний источник питания и добавить столько, сколько хотите)

Установка моста HomeKit

Мы собираемся установить приложение NodeJS под названием HAP-NodeJS к Raspberry Pi: это сформирует мост между запросами HomeKit и устройствами Wi-Fi. Сейчас мы настроим этот мост с одним аксессуаром, но вы можете добавить столько, сколько захотите.

Я на самом деле устанавливаю это на свой существующий домашний сервер с OpenHAB - я надеюсь соединить их вместе Позже, но пока, знаю, что они могут сосуществовать на том же Raspberry Pi. Если вы делаете то же самое, просто в дело, сделайте резервную копию вашей текущей карты Pi SD Легко клонируйте свою SD-карту для безотказной работы Raspberry PiНезависимо от того, есть ли у вас одна SD-карта или несколько, одна вещь, которая вам понадобится, - это возможность создавать резервные копии ваших карт, чтобы избежать проблем, возникающих при сбое загрузки Raspberry Pi. Подробнее . Если все пойдет не так, вы можете восстановить это.

Начните с полного обновления с терминала или Сессия SSH Настройка Raspberry Pi для использования без головы с SSHRaspberry Pi может принимать команды SSH при подключении к локальной сети (через Ethernet или Wi-Fi), что позволяет легко его настроить. Преимущества SSH выходят за рамки ежедневных проверок ... Подробнее .

sudo apt-get update. sudo apt-get upgrade. 

Возможно, вам придется сделать это дважды, если это было какое-то время.

Теперь установите несколько основных пакетов, которые нам понадобятся:

sudo apt-get установить npm git-core libnss-mdns libavahi-compat-libdnssd-dev. 

Далее мы собираемся установить последнюю версию NodeJS. У вас может возникнуть соблазн сделать это с кв-прибудете, но не... эта версия действительно старая и не будет работать. Вместо этого посетите nodejs.org, перейдите к скачать / выпуск / последний v5.x.0 / каталог, и проверьте, что ссылка для последней версии. Ты ищешь линукс-armv7l для Raspberry Pi 2 или linuxarmv6l для оригинальных моделей RPi. Затем, при необходимости изменив URL-адреса и имена каталогов, загрузите и установите с помощью следующих команд.

Wget https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gz. tar -xvf node-v5.5.0-linux-armv7l.tar.gz. cd node-v5.5.0-linux-armv7l. sudo cp -R * / usr / local. 

Подтвердите, набрав

версия узла. 

И вы должны увидеть v5.5 (или что-то последнее, что вы скачали).

Далее у нас есть несколько модулей Node для установки.

sudo npm install -g npm. sudo npm install -g node-gyp. 

В этой первой команде мы фактически используем Node Package Manager (npm) для установки более новой версии. Умный!

Теперь, чтобы загрузить эмулятор HomeKit под названием HAP-NodeJS:

мерзкий клон https://github.com/KhaosT/HAP-NodeJS.git. cd HAP-NodeJS. нпм перестроить. sudo npm установить узел-персистировать. sudo npm установить srp. 

В этот момент я запустил эту ошибку: «#error Эта версия узла / NAN / v8 требует компилятора C ++ 11“. Если это произойдет с вами, установите более свежий компилятор C ++ с помощью команд:

sudo apt-get install gcc-4.8 g ++ - 4.8. Возможности обновления sudo --install / usr / bin / gccgcc / usr / bin / gcc-4.6 20. Возможности обновления sudo --install / usr / bin / gcc gcc /usr/bin/gcc-4.8 50. Возможности обновления sudo --install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20. Возможности обновления sudo --install / usr / bin / g ++ g ++ /usr/bin/g++-4.8 50. 

Теперь у вас не должно быть проблем. Продолжайте выполнять эти команды, одну за другой:

sudo npm установить srp. sudo npm установить mdns --unsafe-perm. sudo npm устанавливает отладку. sudo npm install ed25519 --unsafe-perm. sudo npm install curve25519 --unsafe-perm. 

Это должно быть все. Попробуйте запустить эмулятор с:

узел Core.js. 

Если вы получаете сообщения о том, что не можете найти такой-то модуль, просто используйте sudo npm install снова введите команду и добавьте имя модуля, который отсутствовал. Предполагая, что все хорошо, вы должны увидеть несколько предупреждений, и ваш мост HomeKit будет работать. Вот как выглядит успех:

установлен hap-nodejs

Вы сразу видите, что он уже создал набор из 6 поддельных устройств. Мы будем использовать их в качестве отправной точки для нашего собственного индикатора Wi-Fi позже, но сейчас мы просто воспользуемся ими для тестирования. Вы также можете увидеть больше информации отладки, если вы запустите сервер с:

DEBUG = * узел Core.js

Теперь перейдите к устройству Apple, способному работать с Siri. Любопытно, что Apple не предоставляет стандартное приложение HomeKit, кроме зарегистрированных разработчиков, поэтому загрузите бесплатное Приложение Elgato Eveприложение для управления HomeKit, которое позволяет добавлять (даже не Elgato) устройства в сеть HomeKit.

При первом запуске приложения вам нужно будет назвать свой дом, идти дальше и пройтись по нему. Затем выберите «Добавить аксессуар». Не обращайте внимания на сообщение о близости к нему!

Елгато Ева 1

Далее вам будет предложено найти уникальный «Код установки HomeKit». Игнорируйте это и нажмите «Добавить в [название вашего дома]».

Он также скажет вам, что устройство не сертифицировано. На самом деле это не так. Иди вперед в любом случае. Когда вы попадаете на экран, запрашивая код доступа ...

Елгато Ева 2

Выберите, чтобы ввести код вручную, и введите следующее:

031-45-154

Это можно найти / изменить в Light_accessory.js файл, но об этом позже. Добавьте этот аксессуар в свою комнату по умолчанию, назовите его Поддельный свети продолжайте идти по диалоговым окнам, чтобы выбрать значок и т. д.

Наконец, вернитесь к сеансу SSH, где у вас работает HAP-NodeJS. Возможно, вы уже видели сообщение «Мы на связи?» - это приложение Elgato, опрашивающее световой статус. Откройте Siri и скажите ей: «Включите поддельный свет», затем попробуйте снова его выключить. Надеюсь, вы увидите несколько сообщений отладки от HAP-NodeJS, чтобы показать, что он получил команды.

Мы находимся? Нет. Включение света! Выключить свет!

Фантастика, это первый шаг. Теперь нам нужен настоящий свет, прежде чем вернуться, чтобы снова настроить мост.

Создание Wi-Fi Light

Аппаратная сторона этого шага на удивление проста, если мы начнем с четырех неопикселей, поскольку мы можем питать их непосредственно от платы разработчика NodeMCU и ее USB-соединения. Если у вас более длинная полоса, не беспокойтесь - мы определили это в программном обеспечении, поэтому остальные просто не включатся.

Подключите красный кабель питания от жилы Neopixel к выводу VIN, синее заземление к GND, а зеленый сигнальный кабель к контакту с маркировкой D2 на NodeMCU. Будьте очень осторожны с полярностью: если вы перепутаете землю и VIN, вы отправите прилив энергии через доску и уничтожите ее в процессе.

Если ваша среда Arduino еще не настроена для работы с ESP8266, следуйте инструкциям в моем ESP8266: Arduino Killer Встречайте убийцу Ардуино: ESP8266Что если я скажу вам, что есть Arduino-совместимая dev-плата со встроенным Wi-Fi менее чем за 10 долларов? Ну, есть. Подробнее Затем вернитесь после того, как вы подтвердите, что работаете. Установите эти дополнительные библиотеки:

  • lmroy's PubSubClient
  • NeoPixels Адафрута

Код, который мы используем, является модификацией Пользователь Github Адитья Танну - Я удалил ненужные функции беспроводного обновления, добавил некоторые функции HSV, которые отсутствовали, и упростил создание большего количества источников света, изменив только одну переменную. Если вы не видите код, встроенный ниже, вы найдете его на этот гист.

Обновите следующие строки, указав собственную сетевую информацию и уникальное имя для каждого создаваемого вами прибора (хоста).

const char * ssid = "..."; const char * password = "..."; const char * host = "officelight"; IP-адрес MQTTserver (192, 168, 1, 99);

IP-адрес этого устройства автоматически получается через DHCP - не имеет значения, меняется ли он, поскольку мы каждый раз подключаемся к одному и тому же серверу MQTT.

На данный момент мы используем только 4 Неопикселя, но вы можете увеличить число позже, если будете питать их от внешнего источника. Загрузите код и давайте попробуем - используйте ваш любимый клиент MQTT для отправки команд (измените имя хоста в следующих инструкциях, если вы его изменили).

  • Ты можешь отправить на к корню officelight канал, чтобы включить его. Отправьте любое другое значение этому каналу, чтобы отключить его.
  • Вы можете отправить число от 0 до 360 на офисный свет / оттенок, чтобы изменить цвет. Мы используем Цветовое пространство HSV0 и 360 красные, 120 зеленые и 240 синие.
  • Вы отправляете процентное значение для яркости (0-100, не включая символ%).
  • То же самое для насыщения. Значение 100 будет полностью насыщенным (т. Е. Сплошным цветом), а ноль будет чисто белым, независимо от указанного оттенка.

Убедившись, что осветительный прибор с приводом от MQTT работает, продолжайте.

Настройка нового аксессуара HomeKit

Вернитесь к Raspberry Pi и закройте приложение HAP-NodeJS, если вы этого еще не сделали. Перейдите к /accessories каталог. Чтобы сделать это проще, вы можете напрямую загрузить код, который уже был связан с прибором «officelight», введя следующее:

Wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js

По сути, это дубликат стандартного светового аксессуара с измененными именами переменных (опять же, адаптировано из работы Adysan, упрощено для удобства использования). Вот что вы должны знать для создания своих собственных аксессуаров на основе этого.

  • Все аксессуары должны быть названы *_accessory.js
  • Измените IP-адрес в переменной options вверху на ваш сервер MQTT
  • Если у вас другое имя прибора, найдите / замените все экземпляры «officelight”С вашим уникальным названием прибора. Вы можете сделать поиск / замену в Nano, нажав CTRL и \, набрав термин для поиска, термин для замены, затем нажмите (имеется в виду все случаи). Пройдите через каждый из них, чтобы точно узнать, какие переменные обновляются.
  • Создать уникальное шестнадцатеричное имя пользователя для аксессуара (light.username = «1B: 2B: 3C: 5D: 6E: FF»;)
  • Не меняйте PIN-код. Он соответствует определенному формату, и если вы не знаете, что делаете, он не сможет выполнить сопряжение. Нет проблем с тем, чтобы они оставались одинаковыми между огнями.
  • При добавлении их в приложение Elgato Eve вы можете присвоить своему устройству другое «имя Siri» и редактировать их в любое время, чтобы не зависеть от первоначального выбора. Нет необходимости редактировать файлы конфигурации или перезагружать сервер.
  • Получив несколько приборов, вы можете использовать приложение Elgato Eve, чтобы сгруппировать их по комнатам или создать конкретные сцены, состоящие из нескольких сложных действий. Сцены могут состоять из нескольких действий, таких как: включить офисный свет, уменьшить его до 25%, сделать его красным и активировать кофемашину.

Вам нужно будет снова добавить свой новый аксессуар через приложение HomeKit.

Наконец, мы хотим запускать наше приложение HAP-NodeJS при каждом перезапуске Pi. Добавьте следующее к вашему и т.д. / rc.local файл, прямо перед выход 0.

узел sudo /home/pi/HAP-NodeJS/Core.js  dev / null &

Вы можете видеть, что я объединил это с некоторыми другими командами, которые я уже настроил для запуска при загрузке.

rclocal запустить узел при запуске

Если вы используете rc.local впервые, вам может потребоваться установить его как исполняемый:

sudo chmod 755 /etc/rc.local

Если по какой-то причине вам нужно снова запустить его в режиме отладки, вы можете убить работающее приложение Node с помощью:

узел killall

Последний шаг: перейдите в каталог аксессуаров и удалите GarageDoorOpener_accessory.js. На момент написания, это ошибка, и через некоторое время сервер сломается.

Что вы будете контролировать с Siri?

Теперь, когда вы ознакомились с основами, на самом деле нет предела тому, что вы можете контролировать - если вы можете кодировать его в Javascript, вы можете создать свой собственный вспомогательный файл. Здесь так много возможностей, я думаю, вам будет очень весело. Дайте мне знать в комментариях, что вы придумали!

Джеймс имеет степень бакалавра в области искусственного интеллекта и сертифицирован CompTIA A + и Network +. Он является ведущим разработчиком MakeUseOf и проводит свое свободное время за игрой в VR-пейнтбол и настольные игры. Он строит компьютеры с детства.