ФОРУМ КУПИТЬ

Последние статьи

ВСЕ СТАТЬИ

Интеграция Apple HomeKit в общую систему Умного Дома

03/10/2016 18:09:52

Как бы мы не относились к продукции Apple, к тем неочевидным, а иногда и странным подходам, которые проповедует и внедряет компания из Купертино, мобильные телефоны, планшеты, плееры, ноутбуки и компьютеры с отгрызенным яблоком на логотипе занимают довольно внушительную долю на рынке. И, надо признать, эта доля пользовательских симпатий завоевана вполне честно. Ведь многие из этих продуктов в момент выхода зачастую обладали рядом уникальных и прогрессивных потребительских свойств, двигая всю индустрию вперед. Но и сейчас, даже несмотря на некоторую пробуксовку и отсутствие прорывных идей в последних моделях устройств, Apple все же стремится порадовать своих пользователей новыми "фичами". А некоторые нововведения имеют непосредственное отношение к теме нашего сайта. Вместе с выходом iOS 10 компания Apple представила приложение "Дом" и так называемый HomeKit.


"Теперь очень умный". ЫЫыыыы... ;)

Что же по сути предлагает нам Apple? В целом ничего особенного, но кое-что нам может пригодится. Прежде всего, нужно сказать, что приложение "Дом" доступно только на устройствах от Apple. И описанная в статье технология не будет работать на мобильных телефонах и планшетах с операционной системой Android. Поэтому, если вы счастливый обладатель iPhone или iPad, то читаем дальше.

С помощью приложения Дом, которое доступно на всех iOS устройствах можно:
- Управлять светом, замками, гаражными дверьми, жалюзи, вентиляторами, розетками, кондиционерами; получать информацию от: датчиков температуры, влажности, оханных систем; наблюдать за камерами наблюдения и так далее;
- Использовать голосовой помощник Siri для управления устройствами
- Диммировать освещение с помощью 3D Touch
- Синхронизировать перечень устройств и их состояния на всех подключенных к дому устройствах
- Создавать сценарии (необходим AppleTV)

Звучит неплохо, правда? Особенно заинтересовала возможность использовать Siri для голосового управления отдельными группами освещения. Ведь иногда куда проще сказать: "выключи свет на кухне", чем открывать приложение/браузер и искать нужную кнопку в общем перечне устройств или иконку на плане. Но особенно полезной технология будет начинающим пользователям, которые пока только приобщаются к полноценным системам домашней автоматизации. Они могли бы начать управлять своей автоматикой с телефоном и планшетов сразу, попутно и не спеша разбираясь в хитростях "хардкорной" серверной автоматизации, построенной на таком ПО как OpenHAB, ioBroker, Majordomo и т.д.

Однако есть один маленький, но очень обидный нюанс. Все эти приборы, о которых идет речь в рекламных материалах Apple, должны быть не простыми, а особенными, созданными специально для HomeKit. То есть нельзя вот просто так взять и подключить любую автоматику. Нужно купить в Apple Online Store специальные "HomeKit-enabled" модели. А для создания такого оборудования производителю нужно иметь business Apple ID, быть участником MFi Program, выполнять все требования Apple и проходить жесткую модерацию. А уж вопроса цены подобных лампочек и термометров лучше в рамках данной статьи вообще не касаться.

Но, как это часто бывает в подобных случаях, нашлись хорошие люди, которые расковыряли HAP интерфейс (кстати, сделал это наш соотечественник Alex Skalozub) и написали специальное ПО, которое прикидывается настоящими "HomeKit-enabled" устройствами. Речь идет о программе HAP-NodeJS, которая устанавливается на домашний сервер.

Очень важно, что HAP-NodeJS можно поставить на любую операционную систему: Windows, MacOS, Linux. Необходимо только предварительно скачать и установить программную платформу NodeJS и пакетный менеджер npm. Те, кто использует Windows, могут скачать дистрибутивы с официальных сайтов. Я же использую Debian Linux, причем предыдущей (на момент написания статьи) версии Wheezy. Поэтому дам краткую инструкцию по установке.

Для Debian 9 (Stretch)

curl -sL https://deb.nodesource.com/setup_10.x | bash -
apt-get install nodejs
apt-get install libavahi-compat-libdnssd-dev

А дальше (для всех ОС), когда nodejs и npm установлен, скачиваем и устанавливаем HAP-NodeJS

https://github.com/KhaosT/HAP-NodeJS/archive/v0.4.41.zip
Распаковываем архив, заходим в папку HAP-NodeJS-0.4.41 и выполняем команду
npm install

Update 09.06.2019
Начиная с версии 0.4.43 разработчики отказались от node-mdns (dnssd.lib)
В Debian 9 последняя версия у меня не заработала. HAP-nodejs запускается, но устройства Apple его не видят
Возможно причина в конфигурации моего сервера. Пока решить проблему не удалось.

Если все прошло хорошо, можно приступить к самому интересному - подключению к серверу HAP-NodeJS произвольного оборудования. Очень легко подключаются модули MegaD-328/2561.
Для подключения MegaD-328/2561 необходимо зайти в папку accessories. В ней находятся примеры "фейковых" устройств (вентилятора, гаражных ворот, лампочки, замка, датчика температуры, термостата). Если запустить сервер как есть, то все эти устройства появятся в приложении "Дом". Фейковыми устройствами можно будет управлять, но они фактически ничего не делают. Чтобы завести реальное устройство, например, люстру, которая подключена к MegaD-328 на порт P7, необходимо:

1. Взять за основу файл Light_accessory.js (можно переименовать его, но в имени файла обязательно должно присутствовать "_accessory.js", например Mega14-P7_accessory.js)
2. Изменить значение "light.username". Там указано что-то вроде MAC-адреса. Нужно, чтобы это значение было уникальным.
3. Изменить имя устройства в функции .addService(). Например: .addService(Service.Lightbulb, "Кухня"). Важно, чтобы кодировка файла была UTF-8.
4. В начале файла добавить объявление библиотеки для работы с HTTP. Здесь мы указываем IP-адрес устройства.

var http = require('http');
var options = {
    host: '192.168.0.14',
    path: ''
}

5. Добавить обработку для MegaD-328/2561 в коде описания устройства в секции setPowerOn()

    options['path'] = "/sec/?cmd=7:" + status;

    var status = 0;
    if ( on == "true" || on == 1 )
    status = 1;
    
    options['path'] = "/sec/?cmd=7:" + status;

    var request = http.request(options, function (res) {
        var data = '';
        res.on('data', function (chunk) { data += chunk; });
        res.on('end', function () { console.log(data); });
    });
    request.on('error', function (e) { console.log(e.message); });
    request.end();

Или просто скачать готовый пример: MegaD-out-hap.zip
Обратите внимание на строчку: "/sec/?cmd=7:" + status
Здесь мы указываем, каким именно портов управляем. В данном примере P7. Устройству отправляется GET-запрос "/sec/?cmd=7:1" на включение или /sec/?cmd=7:0" на выключение. Описание команд для MegaD-328/2561 можно найти в API.

А теперь просто запускаем HAP-NodeJS

node BridgedCore.js

Если все выполнено правильно, порт P7 устройства MegaD-328/2561 автоматически добавится в приложение "Дом" (iOS может потребовать включение iCloud и настройку ключей) и им можно будет управлять с любого iOS-девайса и через Siri. Вся настройка с установкой HAP-NodeJS занимает не более 10-15 минут. Это даже проще, чем описано в статье.

Добавление в приложение "Дом" датчика температуры (например, DS18B20), подключенного к MegaD-328+MegaD-14-IN / MegaD-2561 нисколько не сложнее.
Готовый пример для датчика DS18B20, который можно взять за основу: MegaD-temp-hap.zip


Да, у меня дома всегда тепло ;)

Вот, как описанные выше два "аксессуара" выглядят на планшете iPad. Приложение "Дом" позволяет сгруппировать устройства по комнатам, сделав для каждой из них свою фоновую картинку, а также переименовать устройства так, как удобно пользователю.
Пару слов о Siri. Штука, очень полезная, потому что позволяет тренировать свое произношение. С моими фефектами фикции фразу "Включи свет в зале" искусственный интеллект зачастую воспринимает как "включи свет в жаре". Можно почувствовать себя, например, героем известного клипа: "Рублиштейна 24!... Ошибка!". Гусары поймут. Но все же не стоит преувеличивать. В подавляющем большинстве случаев Siri отрабатывает превосходно, а приложение Дом можно использовать как еще один инструмент (наравне с Web-интерфейсом) для управления различными системами. Ведь не обязательно управлять каким-то конкретно оборудованием, можно управлять системами в целом. Например, с помощью виртуального аксессуара можно отправить команду не устройству напрямую, а серверу ("включи отопление"), который, в свою очередь выполнит целую серию действий: запустит котел и насосы, отрегулирует клапаны и приводы и т.д.
Update: В последних версиях iOS распознавание русской речи было улучшено. Ошибок стало значительно меньше.


Некоторые особенности

Если устройство привязано к определенному Дому (к определенному AppleID), то оно уже не привязывается к Дому на другом телефоне или планшете, где прописан другой AppleID. Иными словами, если я добавил все устройства к своему мобильному телефону, то эти же устройства я не могу добавить на мобильном телефоне жены. Но есть выход. Я могу дать доступ к "своему" Дому любым другим пользователям, если они зарегистрированы в iCloud. Таким образом, дети, жены и прочие родственники становятся "гостями" моего Дома. Это вполне логичный ход, но у него есть ряд недостатков. "Гости" не могут по-своему организовать (персонифицировать) управление устройствами. Поменять название устройств или их иконки, сделать разбивку по комнатам могу только я. У "гостей" нет на это привилегий. Они пользуются той организацией, которую сделал "хозяин". Все, что они могут сделать - это выбрать для себя свои фоновые картинки. Но и это еще не все. Голосовой помощник Siri работает только у меня, как "владельца" дома. Siri почему-то не работает у "гостей" дома. Ошибка ли это Apple или такой ход был сделан умышленно сказать трудно. Подождем следующих обновлений. UPDATE: начиная с версии iOS (10.3) Siri работает и у гостей!


Пример интеграции с Демо-интерфейсом: MegaD-demo_integration-hap.zip
Этот пример также содержит код механизма обновления состояния управляемых устройств, если они были включены/выключены не через приложение Дом.
Пример управления диммируемым каналом (ШИМ/PWM - управления яркостью): MegaD-out-pwm-hap.zip

 

 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:

(необязательно, не отображается на сайте)


Сортировка комментариев: Последние сверху | Первые сверху

2020-05-18 13:44:27 | Andrey_B
Анатолий, спросите лучше на форуме. Там есть соответствующая тема.


2020-05-18 12:41:26 | Анатолий
Подскажите не кто не писал плагин под homebridge?? Под контролер Mega?


2020-05-16 10:43:35 | Анатолий
Добрый день. Помогите добрые люди. на ОС Win 7 установил платформу NodeJS и пакетный менеджер npm. В момент установки npm на HAP-NodeJS вываливается куча ошибок... с чем может быть связано? и можно как-то проверить что на HAP-NodeJS установился пакет npm?


2018-11-15 13:16:31 | Andrey_B
Дмитрий, я лично не использую в HAP-nodeJS ничего, кроме освещения, поэтому готового решения в данный момент подсказать не могу. Этой тему нужно отдельно позаниматься.


2018-11-13 23:05:54 | Дмитрий
Андрей, а еще нет возможности выложить доработанные другие аксессуары - GarageDoorOpener, Lock, Outlet и Fan? Пробую сам, но что-то не идет(


2018-11-13 10:35:33 | Andrey_B
Дмитрий, не пробовал. С камерами - это вообще отдельная история.


2018-11-12 22:01:24 | Дмитрий
Андрей, в Homekit есть возможность добавления камеры через Hap NodeJS. не пробовали это реализовать? Или лучше использовать Homebridge?


2018-06-13 14:54:57 | Andrey_B
Пока не могу предложить готового примера, но думаю это возможно.


2018-06-13 11:28:10 | Мой
Добрый день. Да. Цель такая: при срабатывании датчика, приходит увеломление от приложения Дом, и срабатывает автоматизация на перекрытие кранов.


2018-06-12 10:09:15 | Andrey_B
Евгений, датчик протечки в программе "Дом" для устройств Apple? С какой именно целью?


2018-06-12 08:46:10 | Евгений
Добрый день. А как правильно настроить датчик протечки?


2018-05-15 20:02:51 | Andrey_B
Евгений, ваш вопрос имеет отношение не столько к RPi, сколько к конкретной версии операционной системы. Если вы используете Raspbian, то для версии Wheezy нужно искать ответ для SysV, если Jessie и далее - для systemd.
Например, попробуйте в поиске такой запрос: "systemd startup shell script".


2018-05-14 23:48:16 | Евгений
Спасибо! А как можно добавить BridgedCore.js в автозагрузку на Raspberry PI? Может есть ссылка на какую-нибудь понятную статью?


2018-05-14 16:52:20 | Andrey_B
Евгений, перезалил архив. Добавил контроль состояния диммируемого канала.


2018-05-14 00:16:45 | Евгений
Диммируемый канал нормально заработал после того, как в секции setPowerOn() заменил

else if ( on == "true" || on == 1 )
{

if ( global_state == 0 )
{
status = global_state_last;
global_state = global_state_last;
}
}

на

else if ( on == "true" || on == 1 )
{
status = global_state_last;
global_state = global_state_last;
}


Контроль состояния обыкновенной лампы получается с помощью таймера описанного , в статье, а как контролировать яркость диммируемой лампы?


2018-05-10 17:19:18 | Евгений
Спасибо! А никто ещё случайно не пытался добавить в apple Home Kit mega-d как термостат? Т.е. есть допустим датчик DS подключённый к меге, есть силовой канал, которым этот датчик управляет, а приложение Home видит все это как один элемент - термостат. Такое вообще возможно? Просто, к сожалению, средствами приложения Home нельзя организовать термостат из двух элементов.


2018-05-09 12:30:04 | Andrey_B
Евгений, добавил в конце статьи ссылку на архив с примером управления диммируемым каналом.


2018-05-09 07:35:22 | Евгений
Добрый день. Андрей, не пробовали ещё привязать диммируемые каналы?


2018-05-03 17:07:59 | Andrey_B
Евгений, попробую на днях. О результатах напишу.


2018-05-03 08:22:23 | Евгений
Добрый день, скажите, а есть ли возможность управлять яркостью ламп через HomeKit и HAP-NodeJS? Просто в примере, описанном в данной статье, речь идёт об управлении недиммируемыми каналами. Если да, то как?


2018-03-06 12:42:40 | Andrey_B
Артём, наверное ON нужно в кавычки взять.


2018-03-05 19:54:31 | Артём
Андрей, для запроса состояния напрямую у устройства в setInterval(function()
прописываю options['path'] = "/sec/?pt=1&cmd=get";
и if ( data == ON )
Что-то ещё нужно менять?
В логах ошибка ReferenceError: ON is not defined


2018-01-21 16:42:14 | Siris
Доброго всем времени суток!
Подскажите пожалуйста те кто знают.
ОС Windows7, скачал все по инструкции, установил но в папке HAP-NodeJS-master не нашел куда вводить npa install. Подскажите куда вводить эту команду ?


2018-01-12 18:29:22 | Andrey_B
Денис, я думаю проблема в том, что устройства Apple используют широковещательные пакеты для поиска девайсов в сети. А если у вас сервер в другой IP-сети, то широковещательные пакеты из-за отсутствия маршрутизации туда просто не доходят.


2018-01-12 16:07:57 | Денис
Добрый день, все сделали по Вашей инструкции, сервер не на что не ругался (ubuntu-server). Появился вопрос в Йфоне установил приложение, как мне телефону объяснить чтобы он смотрел в мой сервер, сервер находится в другой сети на статическом IP. В данный момент йфон просит добавить аксесуар, но как я могу его добавить, если он не знает куда ему долбиться.


2017-10-18 17:20:17 | Andrey_B
Николай, прежде всего, стоит сказать, что если нужно включать одну лампочку и больше ничего, то Raspberry Pi и сам это может делать. У него для этого есть GPIO. Нужно только подобрать какую-нибудь готовую обвязку.
Но если хочется использовать именно MegaD, тогда контроллер + любой исполнительный модуль, выбранный исходя из количества необходимых входов и выходов.
Если Raspberry Pi подключен к сети через Ethernet (к роутеру или коммутатору), то контроллер MegaD включается к этому же роутеру или коммутатору. Если RPi подключен через Wi-Fi, то можно, думаю, подключить контроллер MegaD к Ethernet разъему Raspberry Pi.


2017-10-18 15:29:54 | Николай
Очень интересная статья. Загорелся сделать "умным" свой гараж. Опыта работы с этим нет.
Есть Raspberry Pi 3. Подскажите, пожалуйста, тот минимум, который мне необходимо приобрести, для того, чтобы с помощью Siri включить, например, лампочку.
Не понял, как физически соединить Raspberry и Mega-d.


2017-08-19 06:44:22 | Денис
Андрей, спасибо
Заработало!


2017-08-18 12:05:33 | Andrey_B
Денис, во-первых, нужно убедиться, что указан верный "host", а во-вторых, в качестве ответа (data) нужно обрабатывать не "1", а "ON".


2017-08-17 18:37:34 | Денис
Андрей, спасибо
url напрямую у мегаД должен быть /sec/?pt=1&cmd=get верно?
Не обрабатывается почему то


2017-08-16 10:46:39 | Andrey_B
Денис, в статье в самом низу есть ссылка на архив с примером. И даже написано "Этот пример также содержит код механизма обновления состояния управляемых устройств, если они были включены/выключены не через приложение Дом.". В конце js файла вы увидите код таймера. В переменной options['path'] содержится URL, который вызывается для обновления данных. В примере используется URL "Демо интерфейса", но можно запросить состояние и напрямую у устройства.


2017-08-15 17:03:16 | Денис
Андрей,
Вы писали что можно написать опрос состояний
Не могли бы раскрыть как? (на форуме пишите что нужно "завести таймер")


2016-11-27 16:03:31 | Andrey_B
Олег, этот код не включает лампочки, он меняет только отображение в программе.
Как нетрудно догадаться
Characteristic.On, true - для того, чтобы лампочка отобразилась включенной
и
Characteristic.On, false - для выключенной.


2016-11-27 14:40:53 | Олег
этот код принудительно включает лампочки :( возможно нужно вместо .on ставить .current?


2016-11-23 12:03:54 | Andrey_B
Олег, я для себя нашел только одно решение. С некоторой периодичностью опрашивать устройство (или БД, как я сделал у себя) и таким образом узнавать состояние портов.
Задать состояние лампочки можно с помощью вот такого кода
light.getService(Service.Lightbulb).setCharacteristic(Characteristic.On, true);


2016-11-22 23:17:33 | Олег
на ubuntu 16.04 запустил но потратил полдня. К сожалению обнаружил косячек, не считывается статус выходов, т.е. если я включу свет клавишей то в телефоне это не отобразится. а так вроде работает.