Есть рабочая система на WB в связке с OpenHAB (v1 в работе, v2 тестируется), пультами и исполнительными устройствами на noolite и датчиками noolite и Oregon, а также инфракрасными передатчиками Rmpro (broadlink) для управления устройствами по ИК-каналу. Все общается и взаимодействует через mqtt. Еще мобильное приложение OpenHAB запущено на мобильных устройствах с iOS и Android. Вкратце все, правила и логики описывать нет смысла.
В чем вопрос?
Появляется решение как использовать Apple HomeKit без покупки сертифицированных устройств, точнее его эмулятор hap-nodejs на node.js. Кратко, он создает сервер, который эмулирует устройства для Apple Homekit, а сами устройства, их работу и взаимодействие можно описать на JavaSvript. Я не мог пройти мимо такого решения, т.к. это красивый интерфейс, Siri и логика взаимодействия с iOS через Siri с напоминаниями, событиями и т.п.
У меня получилось запустить HAP-nodeJS на линукс (debian). Точнее на NAS Synology, не знаю, возможно ли такое на WB. Соответственно мобильный клиент видит устройства и пытается с ними создать связку для работы. Это прекрасно. Проблема уже в другом, язык описания логики устройства производится на JavaSvript в шаблоне(повторяюсь уже), а я в нем от слова никак. А надо описать логику, чтобы работала связка iOS <-> HAP-NodeJS (HomeKit) <-> mqtt. Т.е. датчики, положения выключателей, все это передавалось на мобильный клиент, ну и соответственно информация с мобильного передавалась в mqtt для работы правил и исполнительных устройств.
Теперь подробнее:
Сам проект HAP-NodeJS живет тут Git HAP-NodeJS
Внутри него есть папка Accessories, в которой находятся различные шаблоны устройств, в которых на языке JS описано как им работать. Т.е. допустим по нажатию кнопки в мобильном приложении (“Дом” на iOS 10) на Accessories “Light” можно отправить команду по протоколу http на заданный IP. Ну и наверно принять изменения состояния. Мне надо чтобы шаблон описывал работу с mqtt broker.
Прошу помощи в JavaScript. В свою очередь готов рассказать подробнее, что и как работает у меня.
Нужно понять, какая версия nodejs используется для этой штуки. На Wiren Board поддерживается до версии три с чем-то, новые не работают и не будут.
Ну вроде явных требований к версии нет. При настройке на MacOS (народ на другом форуме настраивал), указывали что не менее 4.5.0. Но у меня сомнения, что требуется прям последняя версия. Как бы задачи обязательно поставить на WB не стоит, но если настроим работу скриптов, то попробую перенести все на WB.
Поправил ссылку в своем посте на проект.
Подсмотрел на хабре статью по настройке этого эмулятора, приведу цитату:
“версия должна быть 0.10.44”
Статья тут ссылка на хабр
Она как бы о других устройствах, но принцип работы эмулятора понять можно.
Ну немного поваял, чуть чуть получилось
Вообщем заменил в скрипте температуры блок, который отвечает за генерацию случайных значений. сам скрипт называется так “TemperatureSensor_accessory.js” и находится тут TemperatureSensor_accessory.js
Вот что сделал:
Удалил полностью строки кода
randomizeTemperature: function() {
// randomize temperature to a value between 0 and 100
FAKE_SENSOR.currentTemperature = Math.round(Math.random() * 100);
}
и вместо
// randomize our temperature reading every 3 seconds
setInterval(function() {
FAKE_SENSOR.randomizeTemperature();[/code]
вписал
[code]var client = mqtt.connect({ port: 1883, host: '192.168.1.3', keepalive: 10000});
client.subscribe('/devices/oregon_rx_1d20_d7_1/controls/temperature')
client.on('message', function (topic, message) {
console.log(topic, message.toString());
FAKE_SENSOR.currentTemperature = message.toString();
// FAKE_SENSOR.currentTemperature = 55;
В итоге в консоль выводит правильно значение температуры с mqtt топика, НО в мобильный клиент не отдает информацию, пишет нет ответа
если я закоментирую строку
FAKE_SENSOR.currentTemperature = message.toString();
и расскоментирую
FAKE_SENSOR.currentTemperature = 55;
то в мобильный клиент прилетит значение 55.
Что я сделал не так? Почему message.toString() в лог пишется верно, а мобильному не отдает. Какой формат надо сделать?
P.S. Не хватает знаний, помогите.
А вот так это выглядит в мобильном клиенте на скорую руку. (Не могу спрятать под спойлер)
<spoiler=“Скриншот”>
может
parseInt(message.toString());
?
Заработало.
Получается, что клиент не понимает не целое число.
Спасибо! Красота.
Теперь пойду кнопки ваять
Нашел проект homekit2mqtt, там не надо знаний JS. Поставил, все отлично работает, температура показывает, свет переключается, скрипты работают.
Теперь возник вопрос, как правильно установить node.js на WB? Плюсом надо *npm *и, есть дополнение от разработчика:
If you’re running on Linux, you’ll need to make sure you have the libavahi-compat-libdnssd-dev package installed.
Нашел на форуме дискуссию:
Node.JS
Я могу ей руководствоваться? Она верная?
P.S. Консультируюсь, потому что не хочу поломать то, что работает. Как ставить стандартным путем, из пакетов, я знаю.
to_Rainstation: спасибо за классную идею.
Поделитесь, пожалуйста, примером управления светом и управления ИК-передатчиком через HomeKit. Не хватает знаний чтобы понять что изменить например в “Light_accessory”.
Присоединяюсь к просьбе, расскажите, что и как надо установить, чтобы начать всем этим делом пользоваться? тоже охотно бы протестировал такие возможности, глядишь и сформировали бы что-нибудь прогрессивное!
Я отказался от HAP-NodeJS пока, т.к. не силен в JS. Переключился на homekit2mqtt, в нем все отлично работает. Описания устройств делаются в одном файле настроек, по сути там все интуитивно понятно, прочитайте примеры, что непонятно, спрашивайте - расскажу.
Попробую кратко рассказать идею уже на основе homekit2mqtt, но по сути разницы нет, принцип будет один. Итак основная концепция (везде мое мнение, оно может не совпадать с реальностью, т.к. я все это сам изучал и, возможно, где-то ошибаюсь):
В основе homekit от Apple лежат уже преднастроенные шаблоны устройств, т.е. уже обладающие своими иконками, свойствами и атрибутами. Поэтому изначально надо выбрать шаблон, который лучше всего подходит под нужды и определить его свойства в файле настроек.
Таким образом появится управляющий элемент, который по нажатию (или движению ползунка) меняет свои свойства и пишет их в ветку mqtt.
Пока для меня было все просто, дальше я пока самостоятельно решить не могу.
На WB работает скрипт, который отслеживает изменения в mqtt для данной ветки и отправляет http пакеты на ИК-передатчик, который уже управляет любым ИК устройством в комнате. Вот в этом и затык, как на JS написать скрипт, который основываясь на изменениях в ветке mqtt будет отправлять строго определенные пакеты данных из файла (-ов).
P.S. Пока писал увидел еще просьбу, не пойму, что именно точнее описать? Работу IR-передатчика или работу с homekit устройствами?
P.S.S. И кто-нибудь помогите с JS? Или это настолько сложный язык что им никто не пользуется? Есть же тут программисты, и я не в коммерческих целях прошу (т.е. я из этого выгоду не планирую извлекать), хотя определенное вознаграждение могу заплатить, пока хочу обменяться знаниями.
Да, у меня такое мнение сложилось, что здесь нет программистов если они и есть, то почему-то молчат усердно. хотелось бы чтобы вопросы по реализации програмного кода как-то обсуждались и дополнялись, но пока такое ощущение, что кто что сам изучил тот то и делает, это грустно конечно
Перенес тему в Rules Engine, т.к. сейчас требуется помощь в написании правил именно на WB. Продублирую суть.
Правило должно отслеживать в любой (указанной) ветки (ветках) mqtt определенное значение и, в зависимости от данного значения отправлять пакет данных по http на 80 порт. Пакет данных содержится в файле, т.е. его надо прочитать, там примерно от 250 байт до 1 килобайта данных, в зависимости от команды (это записанные ИК-команды).
Если представить схематично:
Если в /devices/устройство значение 1, то на адрес http://x.y.z:80 отправляем пакет данных из файла file.dat
Если в /devices/устройство значение 0, то на адрес http://x.y.z:80 отправляем пакет данных из файла file_1.dat
и т.д., все остальное я допишу сам, мне не хватает понимания именно данной конструкции.
А подскажите, как вы ноду вообще поставили? Я пока дошел до того, что ее компилировать нужно.
А вы на что ее ставите? Ну т.е. на компьютер (какая ОС?) или на WB?
я думаю всем будет интересно как всё это устанавливается и настраивается на контроллере wirenboard. спасибо!
Вот на контроллер ноду пока не ставил. Мне к сожалению так и не ответили в ветке о просьбе подсказать как правильно это сделать. В данный момент нода крутится на NAS. Как только кто нибудь запостит как ее правильно ставить, перенесу на WB.
А, вот как. Я на WB ее пытался поставить, пока сдался )
Евгений, уважаю вашу занятость, но ткните нас носом в ссылку, где описан процесс установки nodejs на WB.
Спасибо.
хочу вернуться к вопросу об установке node.js. кто-нибудь поставил её на контроллер? как всё-таки это сделать???
В 2013-ом году из nodejs (точнее libv8) выкинули поддержку архитектуры, которая используется в Wiren Board 2-5. Поэтому поставить можно только заведомо устаревшие версии.