Опрос


Что для Вас Умный Дом?


Результаты

Интеграция 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 Wheezy (под пользователем root)

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

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

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

Если все прошло хорошо, можно приступить к самому интересному - подключению к серверу 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-интерфейсом) для управления различными системами. Ведь не обязательно управлять каким-то конкретно оборудованием, можно управлять системами в целом. Например, с помощью виртуального аксессуара можно отправить команду не устройству напрямую, а серверу ("включи отопление"), который, в свою очередь выполнит целую серию действий: запустит котел и насосы, отрегулирует клапаны и приводы и т.д.


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

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


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

 

 

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



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



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

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


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


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


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