Інтеграція Apple HomeKit у загальну систему Розумного Дому

apple
"Тепер дуже розумний". ЫЫыыыы. ;)

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

apple

Але, як це часто буває в подібних випадках, знайшлися хороші люди, які розколупали HAP інтерфейс (до речі, зробив це наш співвітчизник Alex Skalozub) і написали спеціальне програмне забезпечення, яке прикидається справжніми "HomeKit-enabled" пристроями. Йдеться про програму HAP-NodeJS, яка встановлюється на домашній сервер.

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

Тільки для Debian Wheezy (під користувачем root)

А далі (для всіх ОС), коли nodejs і npm встановлений, завантажуємо та встановлюємо HAP-NodeJS

Якщо все пройшло добре, можна розпочати найцікавіше - підключення до сервера HAP-NodeJS довільного обладнання. Дуже легко підключаються модулі MegaD-328/2561. Для підключення MegaD-328/2561 необхідно зайти в папку accessories. У нійє приклади "фейкових" пристроїв (вентилятора, гаражних воріт, лампочки, замка, датчика температури, термостата). Якщо запустити сервер як є, всі ці пристрої з'являться в додатку "Дім". Фейковими пристроями можна буде керувати, але вони практично нічого не роблять. Щоб завести реальний пристрій, наприклад, люстру, яка підключена до MegaD-328 на портP7, необхідно:

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

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

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

Якщо все виконано правильно, порт 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

homekit
Так, у мене вдома завжди тепло;)

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

Деякі особливості

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

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

2018-11-13 23:05:54 Дмитро Андрію, а ще немає можливості викласти допрацьовані інші аксесуари - GarageDoorOpener, Lock, Outlet та Fan? Пробую сам, але щось не йде(

2018-11-13 10:35:33Andrey_B Дмитро, не пробував.Із камерами – це взагалі окрема історія.

2018-11-12 22:01:24 Дмитро Андрію, в Homekit є можливість додавання камери через Hap NodeJS. Чи не пробували це реалізувати? Чи краще використовувати Homebridge?

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

2018-06-13 11:28:10 Мій Доброго дня. Так. Мета така: при спрацьовуванні датчика, приходить сповіщення від додатку Будинок, і спрацьовує автоматизація на перекриття кранів.

2018-06-12 10:09:15Andrey_B Євген, датчик протікання у програмі "Дім" для пристроїв Apple? З якою метою?

2018-06-12 08:46:10 Євген Добрий день. А як правильно налаштувати датчик протікання?

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

2018-05-14 16:52:20Andrey_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:04Andrey_B Євген, додав наприкінці статті посилання на архів з прикладом управління каналом, що димується.

2018-05-09 07:35:22 Євген Доброго дня. Андрію, не пробували ще прив'язати димовані канали?

2018-05-03 17:07:59Andrey_B Євгене, спробую днями. Про результати напишу.

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

2018-03-06 12:42:40Andrey_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:22Andrey_B Деніс, я думаю проблема в тому, що пристрої Apple використовують широкомовні пакети для пошуку девайсів у мережі. А якщо у вас сервер в іншій IP-мережі,то широкомовні пакети через відсутність маршрутизації туди просто не доходять.

2017-10-18 17:20:17Andrey_B Микола, перш за все, варто сказати, що якщо потрібно включати одну лампочку і більше нічого, то Raspberry Pi і сам це може робити. Він має для цього GPIO. Потрібно тільки підібрати якусь готову обв'язку. Але якщо хочеться використовувати саме MegaD, тоді контролер + будь-який виконавчий модуль, обраний виходячи з кількості необхідних входів і виходів. Якщо Raspberry Pi підключений до мережі через Ethernet (до роутера або комутатору), то контролер MegaD включається до цього ж роутера або комутатора. Якщо RPi підключений через Wi-Fi, можна, думаю, підключити контролер MegaD до Ethernet роз'єму Raspberry Pi.

2017-08-19 06:44:22 Денис Андрій, дякую Запрацювало!

2017-08-18 12:05:33Andrey_B Деніс, по-перше, потрібно переконатися, що вказано вірний "host", а по-друге, як відповідь (data) потрібно обробляти не "1", а "ON".

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

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

2016-11-27 16:03:31Andrey_B Олег, цей код не включає лампочки, він змінює тільки відображення в програмі. для того, щоб лампочка відобразилася включеною і Characteristic.On, false - для вимкненої.

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

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