Node-RED Apple HomeKit: различия между версиями

Материал из Wiren Board
(не показано 39 промежуточных версий 1 участника)
Строка 1: Строка 1:
{{DISPLAYTITLE: Настройка Apple HomeKit на контроллере Wiren Board через Node-RED}}
{{DISPLAYTITLE: Настройка Apple HomeKit на контроллере Wiren Board}}
{{Draft}}
[[Image:apple-home.png |300px|thumb|right| Список устройств в приложении Home ]]
[[Image:apple-home.png |300px|thumb|right| Список устройств в приложении Home ]]


== Описание ==
== Описание ==
В инструкции мы расскажем, как подключиться к [[Apple HomeKit]] с помощью Node-RED и модуля ''node-red-contrib-homekit-bridged''.
Алиса — это программный фреймворк для умных устройств от Apple. Все добавленные устройства будут видны в приложении Home, что позволит вам управлять ими удалённо со своего iPhone и других устройств Apple.


Разработкой и поддержкой модуля занимается открытое сообщество пользователей [https://t.me/SprutAI_NodeRED Node-RED].
В инструкции используется модуль '''node-red-contrib-homekit-bridged''', поддержку которого осуществляет сообщество [https://t.me/SprutAI_NodeRED Node-RED].


== Подготовка ==
== Подготовка ==
Для настройки моста Apple HomeKit на контроллере [[Wiren Board]] с помощью Node-RED нам понадобится:
Для настройки моста Apple HomeKit на контроллере [[Wiren Board]] с помощью Node-RED нам понадобится:
* установленный Node-RED совместимой версии и [[Node-Red | настроенный модуль WB Nodes]],
* установленный [[Node-Red | Node-RED]],
* модуль [https://flows.nodered.org/node/node-red-contrib-homekit-bridged node-red-contrib-homekit-bridged] — его мы установим ниже и для этого нам понадобится доступ в интернет,
* настроенный модуль [[Node-Red#WB_Nodes |WB Nodes]],  
* аккаунт iCloud и устройство Apple с приложением Home.
* модуль [https://flows.nodered.org/node/node-red-contrib-homekit-bridged node-red-contrib-homekit-bridged] — его мы установим ниже,
* аккаунт iCloud и мобильное приложение Home.
 
На контроллере должен быть доступ к интернету — HomeKit без него не работает.


{{Wbincludes:Node-RED Intro}}
{{Wbincludes:Node-RED Intro}}
Строка 23: Строка 27:
}}
}}


После установки, в левой панели появится группа ''Apple HomeKit''.
После установки, в левой панели появится секция ''alice''.


== Добавление устройства ==
== Добавление устройства ==
Строка 47: Строка 51:
Мост настроен, дальше можно добавлять устройства. В процессе нужно учесть два момента:
Мост настроен, дальше можно добавлять устройства. В процессе нужно учесть два момента:
# устройство HomeKit на вход принимает и отдаёт объект, который содержит имя характеристики и значение;
# устройство HomeKit на вход принимает и отдаёт объект, который содержит имя характеристики и значение;
# WB ноды '''in''' и '''out''' отдают и принимают значения в виде строки.
# WB нода '''in''' отдаёт, а нода '''out''' принимает строку.


Чтобы синхронизировать разные типы данных, мы будем создавать конвертеры значений.
Чтобы синхронизировать разные типы данных, мы будем создавать конвертеры значений.
Строка 59: Строка 63:
В примере мы настроим сенсор температуры HomeKit, который будет выводить температуру процессора.
В примере мы настроим сенсор температуры HomeKit, который будет выводить температуру процессора.


[[Image: 1. WB CPU Temp in HomeKit 1.png | 300px|thumb|right| Нода ''wb-in'', окно ''Edit in node'' ]]
[[Image: 1. WB CPU Temp in HomeKit 1.png | 300px|thumb|right| Нода ''wb-in'' ]]
Добавим ноду WB, которая будет выдавать CPU Temperature:
Добавим ноду WB, которая будет выдавать CPU Temperature:
{{Node-RED Tuning wb-in
# Перетяните в рабочую область ноду '''in''', которая находится слева в группе '''Wiren Board'''.
| name = CPU Temp
# Дважды кликните на ней — откроется окно '''Edit in node''', где укажите:
| mqtt-topic = hwmon/CPU Temperature
#* Name — имя, например, CPU Temp.
}}
#* Server — MQTT-сервер, связь с которым настраивается при установке модуля ''WB Nodes''.
#* Channel — выберите в открывшемся списке mqtt-топик '''hwmon/CPU Temperature'''. Если список пуст, нажмите кнопку ''Refresh Device List''.
# Чтобы сохранить, нажмите кнопку '''Done'''.


[[Image: 1. WB CPU Temp in HomeKit 2.png | 300px|thumb|right| Конвертер ''to Float'' ]]
[[Image: 1. WB CPU Temp in HomeKit 2.png | 300px|thumb|right| Конвертер ''to Float'' ]]
Настроим конвертер, который преобразует значение ''CPU Temperature'' в объект ''HomeKit'':
Настроим конвертер, который преобразует значение ''CPU Temperature'' в объект ''HomeKit'':
{{Node-RED Tuning function
# Перетяните в рабочую область ноду '''function''', которая находится слева в группе '''function'''.
|name = to Float
# Дважды кликните на ней — откроется окно '''Edit function node''' и впишите в поле '''On Message''' код:
|code = <syntaxhighlight lang="js">
#:<syntaxhighlight lang="js">
msg.payload = {'CurrentTemperature': parseFloat(msg.payload)};
msg.payload = {'CurrentTemperature': parseFloat(msg.payload)};


return msg;
return msg;
</syntaxhighlight>
</syntaxhighlight>
}} Конвертер готов.
# Укажите имя в поле '''Name''', например, ''to Float''.
# Нажмите кнопку '''Done'''. Конвертер готов.


''CurrentTemperature'' — это имя характеристики, взято из [https://developer.apple.com/documentation/homekit/hmcharacteristic/characteristic_types документации Apple HomeKit].
''CurrentTemperature'' — это имя характеристики, взято из [https://developer.apple.com/documentation/homekit/hmcharacteristic/characteristic_types документации Apple HomeKit].


[[Image: 1. WB CPU Temp in HomeKit 3.png | 300px|thumb|right| Настройка устройства HomeKit]]
[[Image: 1. WB CPU Temp in HomeKit 3.png | 300px|thumb|right| Настройка устройства HomeKit]]
Добавим ноду HomeKit, которая создаст виртуальное устройство:
Добавим ноду HomeKit типа Service:
# Перетяните в рабочую область ноду '''service''', которая находится слева в группе '''Apple HomeKit'''.
# Перетяните в рабочую область ноду '''service''', которая находится слева в группе '''Apple HomeKit'''.
# Дважды кликните по ней — откроется окно '''Edit service node''', где:
# Дважды кликните на ней — откроется окно '''Edit service node''', где:
#* в поле '''Service''' выберите '''TemperatureSensor''',
#* в поле '''Service''' выберите '''TemperatureSensor''',
#* в поле '''Bridge''' выберите мост, который мы создавали ранее — ''wb-demo''.
#* в поле '''Bridge''' выберите мост, который мы создавали ранее — ''wb-demo''.
Строка 97: Строка 104:
Теперь настроим переключатель HomeKit, который будет управлять устройством Buzzer.
Теперь настроим переключатель HomeKit, который будет управлять устройством Buzzer.


[[Image: 2. WB Buzzer in HomeKit 1.png | 300px|thumb|right| Нода ''wb-in'', окно ''Edit in node'' ]]
[[Image: 2. WB Buzzer in HomeKit 1.png | 300px|thumb|right| Нода ''wb-in'' ]]
Добавим ноду WB, которая будет выдавать состояние Buzzer:
Добавим ноду WB, которая будет выдавать состояние Buzzer:
{{Node-RED Tuning wb-in
# Перетяните в рабочую область ноду '''in''', которая находится слева в группе '''Wiren Board'''.
| name = Buzzer
# Дважды кликните на ней — откроется окно '''Edit in node''', где укажите:
| mqtt-topic = buzzer/enabled
#* Name — имя, например, Buzzer.
}}
#* Server — MQTT-сервер, связь с которым настраивается при установке модуля ''WB Nodes''.
#* Channel — выберите в открывшемся списке mqtt-топик '''buzzer/enabled'''. Если список пуст, нажмите кнопку ''Refresh Device List''.
# Чтобы сохранить, нажмите кнопку '''Done'''.


[[Image: 2. WB Buzzer in HomeKit 2.png | 300px|thumb|right| Конвертер ''true/false'' ]]
[[Image: 2. WB Buzzer in HomeKit 2.png | 300px|thumb|right| Конвертер ''true/false'' ]]
Настроим конвертер, который преобразует состояние ''Buzzer'' в объект ''HomeKit'':
Настроим конвертер, который преобразует состояние ''Buzzer'' в объект ''HomeKit'':
{{Node-RED Tuning function
# Перетяните в рабочую область ноду '''function''', которая находится слева в группе '''function'''.
|name = true/false
# Дважды кликните на ней — откроется окно '''Edit function node''' и впишите в поле '''On Message''' код:
|code = <syntaxhighlight lang="js">
#:<syntaxhighlight lang="js">
msg.payload = (msg.payload == '1') ? {'On':true} : {'On':false};
msg.payload = (msg.payload == '1') ? {'On':true} : {'On':false};


return msg
return msg
</syntaxhighlight>
</syntaxhighlight>
}} Конвертер готов.
# Укажите имя в поле '''Name''', например, ''true/false''.
# Нажмите кнопку '''Done'''. Конвертер готов.


[[Image: 2. WB Buzzer in HomeKit 3.png | 300px|thumb|right| Настройка устройства HomeKit ]]
[[Image: 2. WB Buzzer in HomeKit 3.png | 300px|thumb|right| Настройка устройства HomeKit ]]
Добавим ноду HomeKit, которая создаст виртуальное устройство:
Добавим ноду HomeKit типа Service:
# Перетяните в рабочую область ноду '''service''', которая находится слева в группе '''Apple HomeKit'''.
# Перетяните в рабочую область ноду '''service''', которая находится слева в группе '''Apple HomeKit'''.
# Дважды кликните по ней — откроется окно '''Edit service node''', где:
# Дважды кликните на ней — откроется окно '''Edit service node''', где:
#* в поле '''Service''' выберите '''Switch''',
#* в поле '''Service''' выберите '''Switch''',
#* в поле '''Bridge''' выберите мост, который мы создавали ранее — ''wb-demo''.
#* в поле '''Bridge''' выберите мост, который мы создавали ранее — ''wb-demo''.
Строка 126: Строка 136:
[[Image: 2. WB Buzzer in HomeKit 4.png | 300px|thumb|right| Конвертер ''1/0'' ]]
[[Image: 2. WB Buzzer in HomeKit 4.png | 300px|thumb|right| Конвертер ''1/0'' ]]
Настроим конвертер, который преобразует объект ''HomeKit'' в состояние ''Buzzer'':
Настроим конвертер, который преобразует объект ''HomeKit'' в состояние ''Buzzer'':
{{Node-RED Tuning function
# Перетяните в рабочую область ноду '''function''', которая находится слева в группе '''function'''.
|name = 1/0
# Дважды кликните на ней — откроется окно '''Edit function node''' и впишите в поле '''On Message''' код:
|code = <syntaxhighlight lang="js">
#:<syntaxhighlight lang="js">
msg.payload = (msg.payload.On) ? '1' : '0';
msg.payload = (msg.payload.On) ? '1' : '0';


return msg
return msg
</syntaxhighlight>
</syntaxhighlight>
}} Конвертер готов.
# Укажите имя в поле '''Name''', например, ''1/0''.
# Нажмите кнопку '''Done'''. Конвертер готов.


[[Image: 2. WB Buzzer in HomeKit 5.png | 300px|thumb|right| Нода ''wb-out'' ]]
[[Image: 2. WB Buzzer in HomeKit 5.png | 300px|thumb|right| Нода ''wb-out'' ]]
Добавим ещё одну ноду WB, которая будет устанавливать состояние Buzzer:
Добавим ещё одну ноду WB, которая будет от устанавливать состояние Buzzer:
{{Node-RED Tuning wb-out
# Перетяните в рабочую область ноду '''out''', которая находится слева в группе '''Wiren Board'''.
|name = Buzzer
# Дважды кликните на ней — откроется окно '''Edit out node''', где укажите:
|mqtt-topic = buzzer/enabled
#* Name — имя, например, Buzzer.
}}
#* Server — MQTT-сервер, связь с которым настраивается при установке модуля ''WB Nodes''.
#* Channel — выберите в открывшемся списке mqtt-топик '''buzzer/enabled'''. Если список пуст, нажмите кнопку ''Refresh Device List''.
#* Command — выберите '''/on'''.
#* Payload — должно быть выбрано msg.payload
# Чтобы сохранить, нажмите кнопку '''Done'''.


У нас получилось пять нод, соедините их между собой: Buzzer (wb-in) → true/false → Buzzer (HK) → 1/0 → Buzzer (wb-out).
У нас получилось пять нод, соедините их между собой: Buzzer (wb-in) → true/false → Buzzer (HK) → 1/0 → Buzzer (wb-out).
Строка 149: Строка 164:


== Настройка в устройстве Apple ==
== Настройка в устройстве Apple ==
{{Wbincludes:Apple HomeKit Tunning iPhone}}
Теперь нам нужно добавить созданный выше мост в экосистему Apple HomeKit и распределить созданные устройства по комнатам.
 
Чтобы упростить настройку, подключите контроллер Wiren Board и ваш iPhone к одной Wi-Fi сети.
 
Мы будем использовать iPhone и стандартное приложение Home:
# Откройте '''приложение Home'''.
# Выберите '''Add Accessory'''.
# Нажмите '''More options…'''
# Если контроллер и iPhone в одной Wi-Fi сети, то в списке появится мост, который мы настроили выше — ''wb-demo''.
# Выберите наш мост из списка.
# На сообщение о том, что аксессуар не сертифицирован, ответьте '''Add Anyway'''.
# Введите код, который мы сохранили при добавлени моста.
# Выберите для нашего моста комнату, например, ''Breadroom''.
# Укажите имя моста, или оставьте по умолчанию.
# Нажмите '''Continue''' и дальше для каждого устройтства укажите комнату.
 
Настройка завершена.
<gallery mode="packed" heights="200px" caption="Настройка в приложении Home">
Image: 3. iPhone Home 1.png | Иконка приложения Home
Image: 3. iPhone Home 2.png | ''Add Accessory''
Image: 3. iPhone Home 3.png | ''More options…''
Image: 3. iPhone Home 4.png | Выбор моста
Image: 3. iPhone Home 5.png | Запрос подтверждения
Image: 3. iPhone Home 6.png | Ввод кода
Image: 3. iPhone Home 7.png | Выбор комнаты
Image: 3. iPhone Home 8.png | Имя моста
Image: 3. iPhone Home 9.png | Мост добавлен
Image: 3. iPhone Home 9-1.png | Добавление устройства
Image: 3. iPhone Home 9-2.png | Выбор типа устройства
Image: 3. iPhone Home 10.png | Устройства в Apple Home
</gallery>


== Полезные ссылки ==
== Полезные ссылки ==
* [[Media: Apple HomeKit DemoFlow.zip | Пример флоу из инструкции ]], замените пин-код в настройках моста.
*
* [https://developer.apple.com/homekit/ Документация Apple HomeKit]
* [https://developer.apple.com/documentation/homekit/hmcharacteristic/characteristic_types Список доступных характеристик Apple HomeKit]

Версия 11:18, 12 мая 2022

Это черновик страницы. Последняя правка сделана 12.05.2022 пользователем A.Degtyarev.

Список устройств в приложении Home

Описание

Алиса — это программный фреймворк для умных устройств от Apple. Все добавленные устройства будут видны в приложении Home, что позволит вам управлять ими удалённо со своего iPhone и других устройств Apple.

В инструкции используется модуль node-red-contrib-homekit-bridged, поддержку которого осуществляет сообщество Node-RED.

Подготовка

Для настройки моста Apple HomeKit на контроллере Wiren Board с помощью Node-RED нам понадобится:

На контроллере должен быть доступ к интернету — HomeKit без него не работает.

Настройка делается через встроенный в Node-Red веб-интерфейс, который доступен по адресу http://wb-ip-address:1880, например, http://192.168.42.1:1880.

В примерах мы будем создавать флоу (flows) — это блок-схемы процесса.

Установка модуля

Установка модуля node-red-contrib-homekit-bridged

Чтобы Node-RED мог работать с HomeKit, установите модуль node-red-contrib-homekit-bridged:

  1. Зайдите в веб-интерфейс Node-RED.
  2. В правом верхнем углу вызовите меню.
  3. В открывшемся окне выберите вкладку Управление палитрой (Manager palette).
  4. Перейдите на вкладку Установка (Install), введите в поле поиска homekit-bridged и нажмите на клавиатуре Enter.
  5. Установите пакет с названием node-red-contrib-homekit-bridged.
  6. Закройте окно с настройками. Установка модуля завершена.

После установки, в левой панели появится секция alice.

Добавление устройства

Как это работает

Добавление новых устройств в общем случае выглядит так:

  1. Описываем на контроллере виртуальное устройство HomeKit.
  2. Прописываем логику, которое это устройство реализует, например, включение зуммера.
  3. Публикуем флоу кнопкой Deploy.
  4. Если мост уже добавлен в приложение Home, то устройство появится в нём автоматически.

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

Настройка моста

Мост настраивается один раз и потом используется во всех устройствах:

  1. Перетяните в рабочую область ноду Service, которая находится слева в группе Apple HomeKit.
  2. Дважды кликните на ней — откроется окно Edit service node, где нажмите на карандашик в поле Bridge.
  3. Откроется окно Add new homekit-bridge config node, где:
    • укажите имя в поле Name, например, wb-demo
    • и запомните пин-код из поля Pin Code.
  4. Чтобы сохранить настройки, нажмите кнопку Add.
  5. В окне Edit service node нажмите кнопку Cancel и удалите ноду с рабочей области.

Мост настроен, дальше можно добавлять устройства. В процессе нужно учесть два момента:

  1. устройство HomeKit на вход принимает и отдаёт объект, который содержит имя характеристики и значение;
  2. WB нода in отдаёт, а нода out принимает строку.

Чтобы синхронизировать разные типы данных, мы будем создавать конвертеры значений.

Сенсор

В примере мы настроим сенсор температуры HomeKit, который будет выводить температуру процессора.

Нода wb-in

Добавим ноду WB, которая будет выдавать CPU Temperature:

  1. Перетяните в рабочую область ноду in, которая находится слева в группе Wiren Board.
  2. Дважды кликните на ней — откроется окно Edit in node, где укажите:
    • Name — имя, например, CPU Temp.
    • Server — MQTT-сервер, связь с которым настраивается при установке модуля WB Nodes.
    • Channel — выберите в открывшемся списке mqtt-топик hwmon/CPU Temperature. Если список пуст, нажмите кнопку Refresh Device List.
  3. Чтобы сохранить, нажмите кнопку Done.
Конвертер to Float

Настроим конвертер, который преобразует значение CPU Temperature в объект HomeKit:

  1. Перетяните в рабочую область ноду function, которая находится слева в группе function.
  2. Дважды кликните на ней — откроется окно Edit function node и впишите в поле On Message код:
    msg.payload = {'CurrentTemperature': parseFloat(msg.payload)};
    
    return msg;
    
  3. Укажите имя в поле Name, например, to Float.
  4. Нажмите кнопку Done. Конвертер готов.

CurrentTemperature — это имя характеристики, взято из документации Apple HomeKit.

Настройка устройства HomeKit

Добавим ноду HomeKit типа Service:

  1. Перетяните в рабочую область ноду service, которая находится слева в группе Apple HomeKit.
  2. Дважды кликните на ней — откроется окно Edit service node, где:
    • в поле Service выберите TemperatureSensor,
    • в поле Bridge выберите мост, который мы создавали ранее — wb-demo.
    • укажите имя в поле Name, например, CPU Temp.
  3. Нажмите кнопку Done.

У нас получилось три ноды, соедините их между собой: CPU Temp (wb-in) → to Float → CPU Temp (HK).

Общий вид флоу

Чтобы изменения вступили в силу, нажмите справа вверху страницы кнопку Deploy.

Устройство с управлением

Теперь настроим переключатель HomeKit, который будет управлять устройством Buzzer.

Нода wb-in

Добавим ноду WB, которая будет выдавать состояние Buzzer:

  1. Перетяните в рабочую область ноду in, которая находится слева в группе Wiren Board.
  2. Дважды кликните на ней — откроется окно Edit in node, где укажите:
    • Name — имя, например, Buzzer.
    • Server — MQTT-сервер, связь с которым настраивается при установке модуля WB Nodes.
    • Channel — выберите в открывшемся списке mqtt-топик buzzer/enabled. Если список пуст, нажмите кнопку Refresh Device List.
  3. Чтобы сохранить, нажмите кнопку Done.
Конвертер true/false

Настроим конвертер, который преобразует состояние Buzzer в объект HomeKit:

  1. Перетяните в рабочую область ноду function, которая находится слева в группе function.
  2. Дважды кликните на ней — откроется окно Edit function node и впишите в поле On Message код:
    msg.payload = (msg.payload == '1') ? {'On':true} : {'On':false};
    
    return msg
    
  3. Укажите имя в поле Name, например, true/false.
  4. Нажмите кнопку Done. Конвертер готов.
Настройка устройства HomeKit

Добавим ноду HomeKit типа Service:

  1. Перетяните в рабочую область ноду service, которая находится слева в группе Apple HomeKit.
  2. Дважды кликните на ней — откроется окно Edit service node, где:
    • в поле Service выберите Switch,
    • в поле Bridge выберите мост, который мы создавали ранее — wb-demo.
    • укажите имя в поле Name, например, Buzzer.
  3. Нажмите кнопку Done.
Конвертер 1/0

Настроим конвертер, который преобразует объект HomeKit в состояние Buzzer:

  1. Перетяните в рабочую область ноду function, которая находится слева в группе function.
  2. Дважды кликните на ней — откроется окно Edit function node и впишите в поле On Message код:
    msg.payload = (msg.payload.On) ? '1' : '0';
    
    return msg
    
  3. Укажите имя в поле Name, например, 1/0.
  4. Нажмите кнопку Done. Конвертер готов.
Нода wb-out

Добавим ещё одну ноду WB, которая будет от устанавливать состояние Buzzer:

  1. Перетяните в рабочую область ноду out, которая находится слева в группе Wiren Board.
  2. Дважды кликните на ней — откроется окно Edit out node, где укажите:
    • Name — имя, например, Buzzer.
    • Server — MQTT-сервер, связь с которым настраивается при установке модуля WB Nodes.
    • Channel — выберите в открывшемся списке mqtt-топик buzzer/enabled. Если список пуст, нажмите кнопку Refresh Device List.
    • Command — выберите /on.
    • Payload — должно быть выбрано msg.payload
  3. Чтобы сохранить, нажмите кнопку Done.

У нас получилось пять нод, соедините их между собой: Buzzer (wb-in) → true/false → Buzzer (HK) → 1/0 → Buzzer (wb-out).

Общий вид флоу

Чтобы изменения вступили в силу, нажмите справа вверху страницы кнопку Deploy.

Настройка в устройстве Apple

Теперь нам нужно добавить созданный выше мост в экосистему Apple HomeKit и распределить созданные устройства по комнатам.

Чтобы упростить настройку, подключите контроллер Wiren Board и ваш iPhone к одной Wi-Fi сети.

Мы будем использовать iPhone и стандартное приложение Home:

  1. Откройте приложение Home.
  2. Выберите Add Accessory.
  3. Нажмите More options…
  4. Если контроллер и iPhone в одной Wi-Fi сети, то в списке появится мост, который мы настроили выше — wb-demo.
  5. Выберите наш мост из списка.
  6. На сообщение о том, что аксессуар не сертифицирован, ответьте Add Anyway.
  7. Введите код, который мы сохранили при добавлени моста.
  8. Выберите для нашего моста комнату, например, Breadroom.
  9. Укажите имя моста, или оставьте по умолчанию.
  10. Нажмите Continue и дальше для каждого устройтства укажите комнату.

Настройка завершена.

Полезные ссылки