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

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


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


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


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


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


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


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


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


[[Image: 1. WB CPU Temp in HomeKit 1.png | 300px|thumb|right| Нода ''wb-in'' ]]
[[Image: 1. WB CPU Temp in HomeKit 1.png | 300px|thumb|right| Нода ''wb-in'', окно ''Edit in node'' ]]
Добавим ноду WB, которая будет выдавать CPU Temperature:
Добавим ноду WB, которая будет выдавать CPU Temperature:
# Перетяните в рабочую область ноду '''in''', которая находится слева в группе '''Wiren Board'''.
{{Node-RED Tuning wb-in
# Дважды кликните на ней — откроется окно '''Edit in node''', где укажите:
| name = CPU Temp
#* Name — имя, например, CPU Temp.
| mqtt-topic = hwmon/CPU Temperature
#* 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'':
# Перетяните в рабочую область ноду '''function''', которая находится слева в группе '''function'''.
{{Node-RED Tuning function
# Дважды кликните на ней — откроется окно '''Edit function node''' и впишите в поле '''On Message''' код:
|name = to Float
#:<syntaxhighlight lang="js">
|code = <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 типа Service:
Добавим ноду HomeKit, которая создаст виртуальное устройство:
# Перетяните в рабочую область ноду '''service''', которая находится слева в группе '''Apple HomeKit'''.
# Перетяните в рабочую область ноду '''service''', которая находится слева в группе '''Apple HomeKit'''.
# Дважды кликните на ней — откроется окно '''Edit service node''', где:
# Дважды кликните по ней — откроется окно '''Edit service node''', где:
#* в поле '''Service''' выберите '''TemperatureSensor''',
#* в поле '''Service''' выберите '''TemperatureSensor''',
#* в поле '''Bridge''' выберите мост, который мы создавали ранее — ''wb-demo''.
#* в поле '''Bridge''' выберите мост, который мы создавали ранее — ''wb-demo''.
Строка 104: Строка 97:
Теперь настроим переключатель HomeKit, который будет управлять устройством Buzzer.
Теперь настроим переключатель HomeKit, который будет управлять устройством Buzzer.


[[Image: 2. WB Buzzer in HomeKit 1.png | 300px|thumb|right| Нода ''wb-in'' ]]
[[Image: 2. WB Buzzer in HomeKit 1.png | 300px|thumb|right| Нода ''wb-in'', окно ''Edit in node'' ]]
Добавим ноду WB, которая будет выдавать состояние Buzzer:
Добавим ноду WB, которая будет выдавать состояние Buzzer:
# Перетяните в рабочую область ноду '''in''', которая находится слева в группе '''Wiren Board'''.
{{Node-RED Tuning wb-in
# Дважды кликните на ней — откроется окно '''Edit in node''', где укажите:
| name = Buzzer
#* Name — имя, например, Buzzer.
| mqtt-topic = buzzer/enabled
#* 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'':
# Перетяните в рабочую область ноду '''function''', которая находится слева в группе '''function'''.
{{Node-RED Tuning function
# Дважды кликните на ней — откроется окно '''Edit function node''' и впишите в поле '''On Message''' код:
|name = true/false
#:<syntaxhighlight lang="js">
|code = <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 типа Service:
Добавим ноду HomeKit, которая создаст виртуальное устройство:
# Перетяните в рабочую область ноду '''service''', которая находится слева в группе '''Apple HomeKit'''.
# Перетяните в рабочую область ноду '''service''', которая находится слева в группе '''Apple HomeKit'''.
# Дважды кликните на ней — откроется окно '''Edit service node''', где:
# Дважды кликните по ней — откроется окно '''Edit service node''', где:
#* в поле '''Service''' выберите '''Switch''',
#* в поле '''Service''' выберите '''Switch''',
#* в поле '''Bridge''' выберите мост, который мы создавали ранее — ''wb-demo''.
#* в поле '''Bridge''' выберите мост, который мы создавали ранее — ''wb-demo''.
Строка 136: Строка 126:
[[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'':
# Перетяните в рабочую область ноду '''function''', которая находится слева в группе '''function'''.
{{Node-RED Tuning function
# Дважды кликните на ней — откроется окно '''Edit function node''' и впишите в поле '''On Message''' код:
|name = 1/0
#:<syntaxhighlight lang="js">
|code = <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:
# Перетяните в рабочую область ноду '''out''', которая находится слева в группе '''Wiren Board'''.
{{Node-RED Tuning wb-out
# Дважды кликните на ней — откроется окно '''Edit out node''', где укажите:
|name = Buzzer
#* Name — имя, например, Buzzer.
|mqtt-topic = buzzer/enabled
#* 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).
Строка 164: Строка 149:


== Настройка в устройстве Apple ==
== Настройка в устройстве Apple ==
Теперь нам нужно добавить созданный выше мост в экосистему Apple HomeKit и распределить созданные устройства по комнатам. В будущем, при добавлении устройств, они будут автоматически появляться в приложении Home.
{{Wbincludes:Apple HomeKit Tunning iPhone}}
 
Чтобы упростить настройку, подключите контроллер 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 | Пример флоу из инструкции ]]
* [[Media: Apple HomeKit DemoFlow.zip | Пример флоу из инструкции ]], замените пин-код в настройках моста.
* [https://developer.apple.com/homekit/ Документация Apple HomeKit]
* [https://developer.apple.com/documentation/homekit/hmcharacteristic/characteristic_types Список доступных характеристик Apple HomeKit]

Текущая версия на 18:45, 18 апреля 2024

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

Описание

В инструкции мы расскажем, как подключиться к Apple HomeKit с помощью Node-RED и модуля node-red-contrib-homekit-bridged.

Разработкой и поддержкой модуля занимается открытое сообщество пользователей Node-RED.

Подготовка

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

Настройка делается через встроенный в 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. Закройте окно с настройками. Установка модуля завершена.

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

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

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

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

  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, окно Edit in node

Добавим ноду 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, которая создаст виртуальное устройство:

  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, окно Edit in node

Добавим ноду 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, которая создаст виртуальное устройство:

  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 и распределить созданные устройства по комнатам. В будущем, при добавлении устройств, они будут автоматически появляться в приложении Home.

Перед началом настройки подключите контроллер Wiren Board и ваше устройство Apple к одной локальной сети, например, по Wi-Fi.

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

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

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

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