Вчера мы показали вам, как создать самодельный Wi-Fi-свет что можно контролировать с Siri; сегодня мы собираемся использовать эти знания, чтобы заставить Siri работать и со звуковой системой Sonos, а затем соединить все это в романтической сцене.
Проверьте конечный результат:
Видео выше не было подделано или поставлено — все возможно, используя Siri, и руководство ниже. Не требуется джейлбрейк, хотя есть некоторые программы, для которых я предоставил код.
Вещи, которые вам понадобятся:
- Raspberry Pi
- устройство iOS
- Siri-совместимое цветное освещение, такое как Philips Hue с концентратором 2-го поколения или наш DIY Wi-Fi Light
- Sonos (или другое устройство воспроизведения с HTTP API)
- (Опционально) NodeMCU / ESP8266, реле и розетки; или коммерческий аксессуар для розетки HomeKit
Почему это так сложно?
HomeKit, и управление вашими устройствами с помощью голосового управления действительно опрятно. К сожалению, закрытая экосистема Apple, HomeKit ограничена горсткой устройств. Сонос не один из них. Однако еще не все потеряно. Благодаря некоторым трудолюбивым хакерам, протокол HomeKit был недавно изменен, и, как продемонстрировано в нашем последнем проекте, теперь вы можете создавать свои собственные поддельные устройства HomeKit. Мы воспользуемся этим.
Начните с того, что следуйте нашему учебному пособию « , потому что это станет основой всего остального. На самом деле, если у вас еще нет системы освещения Philips Hue, вы можете пойти дальше и на самом деле создать освещение Wi-Fi, описанное в этом руководстве.
Даже если у вас есть система Hue, продолжайте и следуйте инструкциям, потому что вам нужно будет создать поддельные аксессуары HomeKit для всего остального (код приведен ниже). Продолжая это руководство, я собираюсь предположить, что у вас уже запущен сервер HAP-NodeJS, и вы успешно добавили фальшивый индикатор и протестировали сервер, даже если он не подключен к действительному элементу «Сделай сам» аппаратное обеспечение.
Сделать плейлист
Создайте новый плейлист Sonos под названием «Romantic». Это не обязательно должно быть одно и то же имя, но вам придется настроить дополнительные скрипты позже, если вы его измените. Я добавил несколько треков Marvin Gaye и Sade к своим. Гладкая
Затем, на Raspberry Pi, на котором запущен HAB-NodeJS (если вы не знаете, о чем я говорю, вы не читали учебник по освещению Wi-Fi. Сначала сделайте это) , перейдите в свой домашний каталог и введите следующее для установки HTTP API для Sonos. Это даст нам веб-URL, который мы можем пропинговать, чтобы вызвать определенные действия на Sonos.
git clone https://github.com/jishi/node-sonos-http-api.git sonos cd sonos npm install production npm install basic-auth sonos-discovery require-fu request-promise node-static async npm start
Если вы видите сообщение о том, что такой-то модуль не найден, просто выполните другую установку npm и имя модуля, затем попробуйте снова запустить npm . Возможно, у меня уже были установлены глобально модули из других проектов, и вам может потребоваться установить больше. Надеюсь, вы увидите что-то вроде этого:
Поздравляем, теперь у вас есть простой HTTP API, который вы можете использовать для запуска вашего Sonos. Читайте документацию для полного списка команд, но формат, который нас больше всего интересует, таков:
http: // [IP-адрес СЕРВЕРА]: 5005 / [ИМЯ КОМНАТЫ] / [ДЕЙСТВИЕ]
или как конкретный пример:
http://192.168.1.99:5005/master%20bedroom/playlist/romantic
Дело не имеет значения. % 20 — это URL-кодировка пробела, но вы также должны иметь возможность ввести фактический пробел, и ваш браузер автоматически преобразует его. Приведенная выше команда просто запускает романтический плейлист на устройстве в главной спальне. Используйте команду паузы, чтобы остановить это:
http://192.168.1.99:5005/master%20bedroom/pause
Помимо этого, API также предоставляет нам функцию, которая очень пригодится для других проектов: возможность произнести конкретное утверждение, например уведомление, затем продолжить воспроизведение текущей очереди. Пытаться:
http://192.168.1.99:5005/master%20bedroom/say/make%20use%20of%20is%20awesome/en-gb
В первый раз, когда вы это сделаете, вы получите сообщение о необходимости регистрации на ключ API на VoiceRSS.org [Больше не доступно] (более 350 запросов в день бесплатны). Когда вы закончите с этим, введите:
nano settings.json
и вставьте ключ в следующий пример:
{ "voicerss":"YOURAPIKEY" }
Перезапустите сервер и снова проверьте связь с URL. Через несколько секунд вы услышите восхитительный английский голос. Вы можете изменить конец URL на en-us, если предпочитаете американский голос. Ухоженная! Абсолютно не имеет отношения к этому проекту, но все равно аккуратно!
Наконец, давайте снова запустим этот сервер после перезапуска Pi:
sudo nano /etc/rc.local
Добавить строку перед выходом 0 :
sudo node /home/pi/sonos/server.js < /dev/null &
CTRL-X, Y для сохранения. Вы можете видеть, что я запускаю это вместе с OpenHAB, детектором присутствия Bluetooth для дома и сервером HAP-NodeJS HomeKit — он также должен быть запущен, если вы уже выполнили предварительное учебное руководство по освещению Wi-Fi.
Создание устройства HomeKit для Sonos
Суть этого проекта в том, что Sonos не может контролироваться Siri, однако мы можем добавить некоторую степень контроля, создав поддельное устройство HomeKit, которое активирует определенный список воспроизведения, когда мы его включаем — поддельный свет — самый простой способ сделать это.
Сначала перейдите в каталог HAP-NodeJS / и установите модуль «request».
sudo npm install request
Затем перейдите в каталог accessories / и возьмите мой готовый прибор с помощью следующей простой команды:
wget https://gist.githubusercontent.com/jamesabruce/72bd250fbcf054acaa25/raw/8272d4b9a4ef76db752cab2ddd9bdc47d09a65f1/Romantic_accessory.js
Внесите некоторые изменения, если это необходимо — это задано для местоположения Sonos «Спальня хозяев» по умолчанию, поэтому измените мастер строки % 20bedroom в направлении начала кода, если вы хотите, чтобы он был направлен в другую комнату. Поскольку мы притворялись светом, отправка команды яркости на самом деле ничего не даст, хотя в какой-то момент я обновлю ее, чтобы справиться с громкостью. Это блок кода, который делает магию:
setPowerOn: function(on) { console.log("Turning the light %s!", on ? "on" : "off"); FAKELIGHT.powerOn = on; console.log(on); if(on){ request('http://localhost:5005/master%20bedroom/playlist/romantic', function (error, response, body) { console.log("Sent play request"); }) } else{ request('http://localhost:5005/master%20bedroom/pause', function (error, response, body) { console.log("Sent pause request"); }) } },
Вы можете увидеть, что это удивительно просто: когда источник получает команду setPowerOn от HomeKit, он проверяет, является ли значение 1 (или истинным), и в какой точке он отправляет URL-адрес Sonos HTTP API для воспроизведения этого списка воспроизведения. Если это что-то еще (т. Е. 0, false), он отправляет команду паузы. Перезапустите сервер HAP-NodeJS, затем перейдите на устройство iOS и выполните ту же процедуру, что и раньше, чтобы добавить фальшивый индикатор «Романтический список воспроизведения» (вам потребуется код сопряжения 031-45-154) .
Проверьте, работает ли ваше новое устройство, затем продолжайте. Если вы немного заняты программированием, попробуйте отобразить изменения яркости в объеме (и, пожалуйста, поделитесь кодом в комментариях!).
(Необязательно) Сказочные огни и другие устройства переменного тока
Вас может удивить то, что нет никаких официальных волшебных огней HomeKit, и я не смог найти ни одного универсального электророзетки HomeKit, который мне нравился бы по внешнему виду / цене — поэтому я собрал самодельный с помощью платы разработчика NodeMCU / ESP8266. , реле и стандартная двухканальная розетка. Я не буду вдаваться в подробности об оборудовании, так как вам не следует помещать вещи в розетки, если вы не совсем уверены в таких вещах , но я предоставлю вам свой код для стороны NodeMCU (подключите реле триггера на контакт D2 / GPIO4) и аксессуар для него .
Как и индикатор Wi-Fi, он передает команды по каналу MQTT («спальня-вилка»), поэтому вам необходимо изменить код с помощью адреса вашего брокера MQTT (ознакомьтесь со второй частью нашего руководства OpenHAB о том, как настроить MQTT брокера ), измените названия каналов, если хотите, и, конечно, введите свои собственные данные Wi-Fi.
Собираем все вместе
Наконец, мы собираемся сделать несколько «сцен», используя приложение Elgato Eve или предпочитаемый менеджер HomeKit. На языке HomeKit сцена может состоять из любого количества аксессуаров и команд для этих аксессуаров.
Вы можете назвать сцену как угодно, и Сири сможет сопоставить ее, даже не сказав «установить сцену» . Итак, я сделал две сцены: одну под названием «дети в постели», а другую «давай серьезно».
Первый выключает один из источников света Hue, другой — розовый, затем включает романтический аксессуар для плейлиста и сказочные огни. Последний делает огни снова белыми и приостанавливает Sonos (т.е. отключает романтический аксессуар плейлиста). Simples!
Я надеюсь, что вам понравился этот урок, и вы действительно можете увидеть, как мы можем расширить контроль Siri на что угодно без особых проблем благодаря мощному HAP-NodeJS . Есть ли что-то, для чего вы хотели бы увидеть какие-то особенные действия Siri? Сообщите нам в комментариях и расскажите, как вы использовали Siri для управления своим домом.