Как сделать DIY Wi-Fi Light под управлением Siri

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

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

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

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

  • Raspberry Pi (я использовал RPi2, есть небольшая разница в версиях Node для установки, учитывая обновленную архитектуру ARM — см. Примечания позже).
  • Брокер MQTT установлен на Raspberry Pi. См. Раздел «Установка Mosquitto на свой Pi» в моем Руководстве по OpenHAB, часть 2.

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

  • NodeMCU v2 (совместимый с Arduino)
  • Светодиоды Neopixel (я рекомендую 4 пикселя для тестирования, затем вы можете добавить внешний источник питания и добавить столько, сколько хотите)

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

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

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

, Если все пойдет не так, вы можете восстановить это.

Начните с полного обновления терминала или сеанса SSH

,

sudo apt-get update
sudo apt-get upgrade

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

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

sudo apt-get install npm git-core libnss-mdns libavahi-compat-libdnssd-dev

Далее мы собираемся установить последнюю версию NodeJS. У вас может возникнуть соблазн сделать это с APT-получить, но не … эта версия действительно старая и не будет работать. Вместо этого, посетите 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

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

node version

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

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

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

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

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

git clone https://github.com/KhaosT/HAP-NodeJS.git
cd HAP-NodeJS
npm rebuild
sudo npm install node-persist
sudo npm install srp

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

sudo apt-get install gcc-4.8 g++-4.8
sudo update-alternatives --install/usr/bin/gccgcc/usr/bin/gcc-4.6 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50

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

sudo npm install srp
sudo npm install mdns --unsafe-perm
sudo npm install debug
sudo npm install ed25519 --unsafe-perm
sudo npm install curve25519 --unsafe-perm

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

node Core.js

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

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

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

DEBUG=* node 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, чтобы показать, что он получил команды.

Are we on? No.
Turning the light on!
Turning the light off!

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

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

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

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

Если ваша среда Arduino еще не настроена для работы с ESP8266, продолжайте и следуйте руководству в моем ESP8266: Arduino Killer

Затем вернитесь после того, как подтвердите, что работаете. Установите эти дополнительные библиотеки:

  • lmroy’s PubSubClient
  • Adafruit’s NeoPixels

Код, который мы используем, является модификацией Aditya Tannu пользователя Github — я удалил ненужную функцию обновления по беспроводной сети, добавил некоторые отсутствующие функции HSV и упростил создание большего количества источников света, просто изменив одна переменная Если вы не видите код, встроенный ниже, вы найдете его в этом списке.

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

const char* ssid = "....";
const char* password = "...";
const char* host = "officelight";
IPAddress MQTTserver(192, 168, 1, 99);

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

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

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

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

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

Вернитесь к Raspberry Pi и закройте приложение HAP-NodeJS, если вы этого еще не сделали. Перейдите к / аксессуары каталог. Чтобы упростить это, вы можете напрямую загрузить код, который уже был связан с устройством «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 node /home/pi/HAP-NodeJS/Core.js < /dev/null &

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

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

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

sudo chmod 755 /etc/rc.local

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

killall node

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

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

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

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