Руководство для начинающих по OpenHAB, часть 2: ZWave, MQTT, правила и графики

Руководство для начинающих по OpenHAB, часть 2: ZWave, MQTT, правила и графики

Бесплатно не всегда означает «не так хорошо, как платные», и OpenHAB не исключение. Программное обеспечение для домашней автоматизации с открытым исходным кодом намного превосходит возможности любой другой системы домашней автоматизации на рынке, но ее нелегко настроить. На самом деле, это может сильно расстраивать.





В части 1 руководства я провел вас через установка OpenHAB на Raspberry Pi , познакомил с основными концепциями OpenHAB и показал, как добавлять первые элементы в систему. Сегодня пойдем дальше:





  • Добавление устройств ZWave
  • Добавление контроллера Harmony Ultimate
  • Введение в правила
  • Представляем MQTT и устанавливаем брокер MQTT на ваш Pi с датчиками на Arduino
  • Запись данных и их графическое отображение

Введение в Z-Wave

Z-Wave был доминирующим протоколом домашней автоматизации в течение многих лет: он надежен, был широко разработан и работает в гораздо более длительном диапазоне, чем любые другие продукты для умного дома. Вам доступны сотни датчиков Z-Wave, которые выполняют широкий спектр задач. OpenHAB жестяная банка работают с Z-Wave, но его сложно настроить, а надежность не гарантируется.





Если вы подумываете о покупке дома с датчиками Z-Wave специально для использования с OpenHAB, я настоятельно рекомендую вам передумать. Это может сработать для вас, или это может быть связано с небольшими, но постоянными проблемами. По крайней мере, не покупайте дом, полный датчиков, пока у вас не будет возможности опробовать несколько. Единственная причина выбрать Z-Wave - это если вы не на 100% определились с OpenHAB и хотели бы оставить свои варианты открытыми в будущем: Z-Wave, например, работает с хабом Samsung SmartThings, а также с хабами, специфичными для Z-Wave. такие как Homeseer, и ряд других программных опций, таких как домотик .

Хотя OpenHAB включает привязку Z-Wave, вам все равно необходимо сначала настройте сеть Z-Wave , прежде чем OpenHAB сможет начать запрашивать у него данные. Если у вас есть плата контроллера Rasberry, у вас есть какое-то программное обеспечение для настройки сети, поэтому мы не будем рассматривать это здесь. Если вы купили контроллер Aeotec USB Z-Stick или аналогичный, у вас, вероятно, нет никакого программного обеспечения, поэтому читайте дальше.



Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB для создания шлюза (обычный белый) КУПИТЬ СЕЙЧАС НА AMAZON

Если у вас уже есть настройка сети Z-Wave , вы можете просто подключить свой контроллер к Pi и начать настройку привязки и элементов. Если это ваш первый набег на Z-Wave, все будет немного сложнее.

Во-первых, со стороны оборудования: каждый контроллер имеет свой собственный способ сопряжения с устройствами (технически известный как «режим включения», в котором назначается идентификатор узла). В случае Z-Stick Aotec это означает отключение его от USB-порта и однократное нажатие кнопки, чтобы перевести его в режим включения. Затем поднесите его к сопрягаемому устройству и нажмите на нем кнопку включения. (это также будет отличаться: моя розетка Everspring требует, чтобы кнопка была нажата 3 раза подряд, поэтому урок здесь - прочитать руководство для вашего устройства) .





Z-Stick кратковременно мигает, указывая на успех. Это создает проблемы при его повторном подключении к Pi, так как назначается новый порт. Перезагрузите Pi, чтобы он вернулся к стандартному порту, если вы обнаружите, что ему динамически переназначен другой порт. Еще лучше: не подключайте его к Pi, пока не выполните все сопряжения оборудования.

Установка привязок HABmin и Z-Wave

Поскольку OpenHAB на самом деле не является утилитой конфигурации для Z-Wave, мы собираемся установить другой инструмент веб-управления, который это делает, - то, что называется HABmin. Направляйтесь к Репозиторий HABmin Github скачать текущий выпуск. После того, как вы разархивируете его, вы найдете 2 .банка файлы в каталоге аддонов - они должны быть помещены в соответствующий каталог аддонов в вашем домашнем ресурсе OpenHAB. (если вы также используете Z-Stick Aotec gen5, убедитесь, что у вас установлена ​​привязка Z-Wave как минимум версии 1.8) .





Затем создайте новую папку в каталоге webapps и назовите ее «habmin» (строчные буквы важны). Скопируйте туда остальные загруженные файлы.

Примечание. Также есть HABмин 2 в активной разработке. Установка почти такая же, но с одним дополнительным расширением .jar. Возможно, стоит попробовать оба варианта, чтобы понять, что вам больше нравится.

Если вы еще этого не сделали, подключите контроллер к Pi. Введите следующее, чтобы найти правильный порт.

ls / dev / tty *

Вы ищете что-нибудь, в названии которого есть USB, или, в моем конкретном случае, Z-Stick представил себя как / dev / ttyACM0 (модем). Возможно, будет проще выполнить команду один раз перед ее подключением и еще раз после нее, чтобы вы могли видеть, что изменилось, если вы не уверены.

Откройте файл конфигурации OpenHAB и измените раздел Z-Wave, раскомментируя обе строки и указав фактический адрес устройства. Последним шагом для меня было разрешение пользователю OpenHAB доступа к модему.

sudo usermod -a -G dialout openhab

Теперь, чтобы все заработало, перезапустите OpenHAB.

sudo service openhab перезапуск

Надеюсь, если вы проверите журнал отладки, вы увидите что-то подобное. Поздравляю, вы сейчас говорите о Z-Wave. Вы также можете обнаружить, что журнал отладки переполнен сообщениями от различных узлов Z-Wave. Начнем с проверки HABMIN, чтобы увидеть, что он нашел: http: //openhab.local: 8080 / habmin / index.html (заменив openhab.local вашим именем хоста Raspberry Pi или IP-адресом).

В HABMIN есть на что посмотреть, но нас действительно беспокоит Конфигурация -> Привязки -> Z-Wave -> Устройства tab, как вы можете видеть ниже. Разверните узел, чтобы отредактировать расположение и метку имени для удобства использования.

Настройка элементов Z-Wave

Каждое устройство Z-Wave будет иметь определенную конфигурацию для OpenHAB. К счастью, большинство устройств уже были исследованы, и для вас уже есть примеры. Настройка пользовательских устройств, которые не распознаются, выходит далеко за рамки этого руководства, но предположим, что на данный момент она поддерживается.

Во-первых, у меня есть базовый выключатель питания и измеритель Everspring AN158 на узле 3. Быстрый поиск в Google привел меня к записи в блоге на Wetwa.re с образцом конфигурации элемента. Я адаптировал это следующим образом:

Переключатель Dehumidifier_Switch 'Dehumidifier' {zwave = '3: command = switch_binary'}

Number Dehumidifier_Watts 'Потребляемая мощность осушителя [% .1f Вт]' {zwave = '3: command = meter'}

Идеально.

Далее идет мультисенсор Aeotec Gen5.

Aeon Labs Мультисенсор Aeotec Z-Wave Gen5 (Z-Wave Plus) КУПИТЬ СЕЙЧАС НА AMAZON

Для этого я нашел образец конфигурации на iwasdot.com , а мой мультисенсор находится на узле 2.

Number Hallway_Temperature 'Температура в коридоре [% .1f ° C]' (Коридор, Температура) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0'}

Number Hallway_Humidity 'Влажность в коридоре [% .0f %%]' (Прихожая, влажность) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 5'}

Number Hallway_Luminance 'Яркость коридора [% .0f люкс]' (Прихожая) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 3'}

Свяжитесь с Hallway_Motion 'Hallway Motion [% s]' (Коридор, Движение) {zwave = '2: 0: command = sensor_binary, response_to_basic = true'}

Number sensor_1_battery 'Battery [% s %%]' (Движение) {zwave = '2: 0: command = battery'}

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

Привязка Logitech Harmony

Прежде чем мы перейдем к правилам, я хотел бы добавить небольшое примечание о работе с привязкой Harmony. Я большой поклонник серии пультов Harmony, которые упростят работу с домашним медиацентром, но они часто выступают в качестве отдельной системы в умном доме. Благодаря OpenHAB действия Logitech Harmony и полный контроль над устройствами теперь могут быть частью вашей централизованной системы и даже включены в правила автоматизации.

Начните с установки трех файлов привязки, которые вы найдете с помощью apt-cache для поиска «гармонии»:

Не забывай Chown каталог привязок снова, когда вы закончите:

sudo apt-get install openhab-addon-action-harmonyhub

sudo apt-get установить openhab-addon-binding-harmonyhub

sudo apt-get install openhab-addon-io-harmonyhub

sudo chown -hR openhab: openhab / usr / доля / openhab

Чтобы настроить привязку, откройте файл openhab.cfg и добавьте новый раздел следующим образом:

########## ПУЛЬТ ДИСТАНЦИОННОГО УПРАВЛЕНИЯ HARMONY ##########

harmonyhub: хост = 192.168.1.181 или ваш ip

harmonyhub: имя пользователя = ваша-гармония-электронная почта-логин

harmonyhub: пароль = ваш пароль

Это IP-адрес вашего концентратора Harmony. Используйте сетевой сканер, чтобы выяснить это. Вам также потребуется ввести свои данные для входа, те, которые вы вводите при запуске стандартной утилиты конфигурации Harmony. Вот и все. После перезапуска Hue в журнале отладки должен появиться внезапный всплеск вывода из привязки.

Это список всех ваших действий, устройств и команд в формате JSON, которые можно отправлять. Рекомендуется скопировать это для использования в будущем. вы можете упростить чтение с помощью сворачиваемых узлов, вставив его в онлайн-форматировщик JSON такой как этот .

Помимо стандартного действия PowerOff, которое используется по умолчанию, вы найдете свои собственные определенные действия, перечисленные здесь по имени. Теперь давайте создадим простой элемент управления с одной кнопкой для запуска действий. Сначала в свой файл товаров добавьте следующую строку. Если хотите, измените группу и значок.

/ * Harmony Hub * /

String Harmony_Activity 'Harmony [% s]' (Living_Room) {harmonyhub = '* [currentActivity]'}

Это двусторонняя привязка строк , который может как получить текущее действие, так и указать, что текущее действие должно быть чем-то другим. Теперь мы можем создать для него кнопку в файле карты сайта.

Переключить элемент = Harmony_Activity mappings = [PowerOff = 'Off', Exercise = 'Exercise', 13858434 = 'TV', Karaoke = 'Karaoke']

ноутбук подключен, не заряжается

В квадратных скобках вы увидите каждое действие вместе с меткой. Как правило, вы можете напрямую ссылаться на действия, как вы назвали их на своем пульте дистанционного управления, но я обнаружил, что исключением из этого правила является что-либо с пробелом в названии действия, например «Смотреть телевизор». В этом случае вам нужно будет использовать идентификатор действия. Опять же, вы можете найти идентификатор в выходных данных отладки JSON. Сохраните и обновите свой интерфейс, вы должны увидеть что-то похожее на это:

Вы также можете указать действия в своих правилах, как мы увидим далее. Прочтите вики-страницу для получения дополнительной информации о Связывание гармонии .

Общее введение в правила

Большинство концентраторов умного дома включают в себя создание каких-либо правил, чтобы вы могли автоматически реагировать на данные датчиков и события в доме. На самом деле, я бы сказал, что по-настоящему умный дом - это не тот дом, который вам нужно проводить, взаимодействуя с мобильными приложениями, - это тот, который невидим для конечного пользователя и полностью автоматизирован. С этой целью OpenHAB также включает мощный язык сценариев правил, который вы можете программировать, что намного превосходит сложность большинства концентраторов умного дома или рецептов IFTTT.

Правила программирования звучат хуже, чем есть на самом деле. Начнем с простого с пары правил, которые включают или выключают свет в зависимости от датчика присутствия:

правило 'Свет в офисе горит, когда Джеймс присутствует'

когда

Параметр JamesInOffice изменен с ВЫКЛ на ВКЛ

тогда

sendCommand (Office_Hue, ВКЛ)

конец

правило 'Свет в офисе выключен, когда Джеймс уходит'

когда

Пункт JamesInOffice изменен с ВКЛ на ВЫКЛ.

тогда

sendCommand (Office_Hue, ВЫКЛ)

конец

Во-первых, мы называем правило - быть описательным, чтобы вы знали, какое событие запускается. Затем мы определяем наше простое правило, говоря когда x истинно, тогда сделайте y . Конец означает закрытие этого конкретного правила. Есть ряд специальных слов, которые вы можете использовать в правилах, но пока мы имеем дело с двумя простыми частями синтаксиса: Элемент , который позволяет запрашивать состояние чего-либо; а также sendCommand , который делает именно то, что вы думаете. Я сказал вам, что это было легко.

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

Давайте посмотрим на другой пример создания запланированного правила.

правило «Делайте упражнения каждое утро»

когда

Время cron '0 0 8 1/1 *? * '

тогда

harmonyStartActivity ('Упражнение')

конец

Опять же, мы называем правило, указываем условия, когда оно должно сработать, и действия, которые необходимо предпринять. Но в этом случае мы определяем шаблон времени. Забавный код, который вы видите в кавычках, - это CRON-выражение для Quartz Scheduler (формат немного отличается от обычного CRONtab). я использовал cronmaker.com чтобы помочь создать выражение, но вы также можете прочитать руководство по формату [Больше не доступно] для подробного объяснения и других примеров.

CronMaker.com используется для создания правильно отформатированного выражения Cron

Мои правила гласят просто: «В 8 утра каждое утро, каждый день недели, скажите моей системе Harmony Ultimate начать упражнение», которое, в свою очередь, активирует телевизор, Xbox, усилитель и через минуту нажимает кнопку A для запуска. диск в приводе.

К сожалению, OpenHAB пока не может выполнить это упражнение за меня.

Еще одно правило, которое я хочу вам показать, - это то, что я использую для управления уровнем влажности в моем доме. У меня есть единственный осушитель, который мне нужно перемещать везде, где это необходимо, поэтому я решил проверить все свои датчики влажности, найти, какой из них самый высокий, и сохранить его в переменной. В настоящее время он срабатывает каждую минуту, но его можно легко уменьшить. Взгляните сначала:

импортировать org.openhab.core.library.types. *

импортировать org.openhab.model.script.actions. *

импорт java.lang.String

правило 'Монитор влажности'

когда Time cron '0 * * * *?'

тогда

var prevHigh = 0

var highHum = ''

Влажность? .Members.forEach [гул |

logDebug ('влажность.рулес', имя_жм.);

if (hum.state as DecimalType> prevHigh) {

prevHigh = hum.state

highHum = hum.name + ':' + hum.state + '%'

}

выиграть 10 100% использование диска

]

logDebug ('влажность. rules', highHum);

postUpdate (Dehumidifier_Needed, highHum);

конец

Суть правила в Влажность? .Members.foreach линия. Влажность - это групповое название моих датчиков влажности; .members берет все предметы в этой группе; для каждого перебирает их (с любопытным форматом квадратных скобок, с которым вы, вероятно, не знакомы). Синтаксис правил является производным от Xtend, поэтому вы можете прочитать Документация Xtend если вы не можете найти пример для адаптации.

Однако вам, вероятно, не понадобится - существуют сотни примеров правил:

MQTT для OpenHAB и Интернета вещей

MQTT - это легкая система обмена сообщениями для межмашинного взаимодействия - своего рода Twitter для ваших Arduinos или Raspberry Pis, чтобы общаться друг с другом (хотя, конечно, он работает не только с ними). Он быстро набирает популярность и становится домом для устройств Интернета вещей, которые обычно представляют собой микроконтроллеры с низким уровнем ресурсов, которым требуется надежный способ передачи данных датчиков обратно в концентратор или получения удаленных команд. Именно это мы и будем с этим делать.

Но зачем изобретать велосипед?

MQ Telemetry Transport был изобретен еще в 1999 году для соединения нефтепроводов через медленные спутниковые соединения, специально разработан для минимизации использования батареи и пропускной способности, при этом обеспечивая надежную доставку данных. За прошедшие годы принципы проектирования остались прежними, но вариант использования сместился со специализированных встроенных систем на обычные устройства Интернета вещей. В 2010 году протокол был выпущен без лицензионных отчислений, и его мог использовать и внедрить любой желающий. Нам нравится бесплатное.

Вам может быть интересно, почему мы вообще беспокоимся о еще одном протоколе - в конце концов, у нас уже есть HTTP - который можно использовать для отправки быстрых сообщений между всеми видами систем, подключенных к Интернету (например, OpenHAB и IFTTT, в частности, с новым каналом производителя) ). И ты был бы прав. Однако накладные расходы на обработку HTTP-сервера довольно велики - настолько, что вы не можете легко запустить его на встроенном микроконтроллере, таком как Arduino (по крайней мере, вы можете, но у вас не останется много памяти для чего-либо еще. ). MQTT, с другой стороны, является легковесным, поэтому отправка сообщений по вашей сети не забивает каналы и может легко поместиться в нашем маленьком пространстве памяти Arduino.

Как работает MQTT?

MQTT требует наличия как сервера (называемого «брокером»), так и одного или нескольких клиентов. Сервер действует как посредник, получая сообщения и ретранслируя их всем заинтересованным клиентам.

Продолжим Твиттер для машин аналогия хотя. Подобно тому, как пользователи Twitter могут твитнуть свои собственные бессмысленные 140 символов, а пользователи могут «следовать» за другими пользователями, чтобы увидеть тщательно подобранный поток сообщений, клиенты MQTT могут подписаться на определенный канал, чтобы получать все сообщения оттуда, а также публиковать свои собственные сообщения. на этот канал. Этот шаблон публикации и подписки называется pub / sub , в отличие от традиции клиент / сервер модель HTTP.

HTTP требует, чтобы вы обратились к машине, с которой общаетесь, произнесите Hello, а затем постоянно подтверждаете друг друга, пока вы получаете или вводите данные. С pub / sub клиенту, выполняющему публикацию, не нужно знать, какие клиенты подписаны: он просто перекачивает сообщения, а брокер перераспределяет их всем подписанным клиентам. Любой клиент может публиковать темы и подписываться на них, как пользователь Twitter.

Однако, в отличие от Twitter, MQTT не ограничен 140 символами. Он не зависит от данных, поэтому вы можете отправлять небольшие числа или большие текстовые блоки, датаграммы в формате JSON или даже изображения и двоичные файлы.

Дело не в том, что MQTT лучше HTTP для всего - но он является больше подходит, если у нас будет много датчиков по всему дому, которые будут постоянно сообщать о них.

Также важно знать, что OpenHAB не будет выступать в качестве вашего брокера MQTT - мы рассмотрим этот вопрос позже. Однако OpenHAB будет действовать как клиент: он может как публиковать ваш журнал активности OpenHAB, так и связывать определенные каналы с устройствами, так что вы можете, например, иметь переключатель, который управляется сообщениями MQTT на определенном канале. Это идеально подходит для создания дома, полного датчиков.

Установите Mosquitto на свой Pi

Хотя OpenHAB включает клиент MQTT, поэтому вы можете подписаться на тему, а также публиковать сообщения, он не будет действовать как сервер. Для этого вам нужно либо использовать веб-брокер MQTT (платный или бесплатный), либо установить бесплатное программное обеспечение на свой Pi. Я бы хотел оставить все это дома, поэтому я установил Mosquitto на Pi.

К сожалению, версия, доступная через обычный apt-get, полностью устарела. Вместо этого давайте добавим самые свежие источники.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

sudo apt-key добавить mosquitto-repo.gpg.key

cd /etc/apt/sources.list.d/

sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

sudo apt-get install mosquitto

Это все, что нам нужно сделать, чтобы сервер MQTT работал в локальной сети. По умолчанию ваш брокер работает на порту 1883.

Убедитесь, что ваш сервер MQTT работает, используя бесплатный кроссплатформенный файл MQTT.fx. Щелкните значок настроек, чтобы создать новый профиль, и введите IP-адрес или имя вашего Raspberry Pi. Сохраните и нажмите 'Подключиться'. Если маленький светофор в правом верхнем углу загорится зеленым, можно идти.

Для быстрой проверки щелкните вкладку «подписаться» и введите inTopic / в текстовое поле, затем нажмите Подписывайся кнопка. Теперь вы подписаны на получение сообщения по теме inTopic, хотя в нем будет отображаться 0 сообщений. Вернитесь на вкладку публикации, введите inTopic в маленькое поле и короткое сообщение в большое текстовое поле ниже. Ударять Публиковать несколько раз и посмотрите на вкладку подписки. Вы должны увидеть несколько сообщений, появившихся в этой теме.

Прежде чем мы добавим несколько реальных датчиков в нашу сеть, нам нужно узнать об уровнях тем, которые позволяют нам структурировать и фильтровать сеть MQTT. Имена тем чувствительны к регистру, не должны начинаться с символа $, включать пробел или символы, отличные от ASCII - на самом деле стандартные методы программирования для имен переменных.

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

inTopic / smallSubdivision / evenSmallerSubdivision

myHome / livingRoom / температура

myHome / livingRoom / влажность

myHome / кухня / температура

myHome / кухня / влажность

Вы уже должны видеть, как эта древовидная структура идеально подходит для умного дома, полного датчиков и устройств. Лучшая практика для использования с несколькими датчиками в одной комнате - публиковать каждую переменную датчика как отдельный уровень темы (с переходом на более конкретную тему (как в приведенных выше примерах)), а не пытаться публиковать несколько типов датчиков в одном и том же канале. .

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

Подстановочный знак + заменяет любой уровень темы. Например:

myHome / + / температура

подписал бы клиента на оба

myHome / livingRoom / температура

myHome / кухня / температура

... но не уровень влажности.

# - это многоуровневый подстановочный знак, поэтому вы можете получить что угодно из массива датчиков livingRoom с помощью:

myHome / livingRoom / #

Технически, вы также можете подписаться на корневой уровень #, на котором вы получаете абсолютно все, что проходит через брокера, но это может быть похоже на втыкание пожарного шланга вам в лицо: немного ошеломляюще. Попробуйте подключиться к публичному брокеру MQTT из HiveMQ и подписаться на #. Я получил около 300 сообщений за несколько секунд до того, как мой клиент просто упал.

Совет для начинающих по MQTT: ' /мой дом/' это отдельная тема для ' мой дом/' - включение косой черты в начале создает пустой уровень темы, который, хотя технически допустим, не рекомендуется, поскольку может сбивать с толку.

Теперь, когда мы знаем теорию, давайте попробуем Arduino, Ethernet Shield и датчик температуры и влажности DHT11 - у вас, вероятно, есть один в вашем стартовом наборе, но если нет, просто замените датчик окружающей среды на датчик движения. сенсор (или даже кнопку).

Публикация MQTT из Arduino с подключением Ethernet

Если у вас есть гибридное Arduino-совместимое устройство со встроенным Wi-Fi или Ethernet, это тоже должно работать. В конце концов, нам понадобится лучший / более дешевый способ общения, предполагающий использование сетевого подключения в каждой комнате, но это служит для изучения основ.

Начни с скачивания библиотека pubsubclient от Github . Если вы использовали кнопку «Загрузить как ZIP», структура немного неправильная. Разархивируйте, переименуйте папку в просто pubsubclient , затем извлеките два файла из src папку и переместите их на один уровень вверх в корень загруженной папки. Затем переместите всю папку на свой Arduino / библиотеки каталог.

Вот мой пример кода, который вы можете адаптировать : выходной сигнал DHT11 находится на контакте 7. Измените IP-адрес сервера на IP-адрес вашего Pi в следующей строке:

client.setServer ('192.168.1.99', 1883);

К сожалению, мы не можем использовать его понятное имя (OpenHAB.local в моем случае) поскольку стек TCP / IP на Arduino очень упрощен, и добавление кода для именования Bonjour потребует много памяти, которую мы не хотим тратить впустую. Чтобы изменить темы, по которым транслируются данные датчиков, прокрутите вниз до следующих строк:

char buffer [10];

dtostrf (t, 0, 0, буфер);

client.publish ('openhab / himitsu / temperature', буфер);

dtostrf (h, 0, 0, буфер);

client.publish ('openhab / himitsu / влажность', буфер);

Код также включает подписку на командный канал. Найдите и настройте следующую строку:

client.subscribe ('openhab / himitsu / command');

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

Загрузите свой код, подключите Arduino к сети и с помощью MQTT.fx подпишитесь на # или openhab / himitsu / # (или как там вы изменили название комнаты, но не забудьте поставить # в конце). Довольно скоро вы должны увидеть приходящие сообщения; и если вы отправите ON или OFF в тему команд, вы также увидите возвращающиеся подтверждения.

Привязка MQTT для OpenHAB

Последний шаг в уравнении - подключить это к OpenHAB. Для этого, конечно, нужна привязка.

sudo apt-get установить openhab-addon-binding-mqtt

sudo chown -hR openhab: openhab / usr / доля / openhab

И отредактируйте файл конфигурации, чтобы включить привязку.

mqtt: broker.url = tcp: // localhost: 1883

mqtt: broker.clientId = openhab

Перезагрузите OpenHAB

sudo service openhab перезапуск

Затем добавим пару пунктов:

/ * Датчики MQTT * /

Number Himitsu_Temp 'Температура Химицу [% .1f ° C]' (Himitsu, Температура) {mqtt = '<[broker:openhab/himitsu/temperature:state:default]'}

Number Himitsu_Humidity'Himitsu Humidity [% .1f %%] '(Himitsu, Влажность) {mqtt ='<[broker:openhab/himitsu/humidity:state:default]'}

К настоящему времени вы должны понимать формат; это получает Номер элемента из привязки MQTT по указанной теме. Это простой пример, вы можете обратиться к вики-странице, где он может быть намного сложнее .

Поздравляем, теперь у вас есть основа дешевой матрицы датчиков на базе Arduino. Мы вернемся к этому в будущем и разместим Arduino в их собственной, полностью отдельной радиочастотной сети. Я также создал идентичную версию для плат Wizwiki 7500 если у вас есть один из них.

Сохраняемость и графические данные

К настоящему времени вы, вероятно, настроили несколько датчиков, будь то из Z-Wave или пользовательских Arduinos с MQTT, поэтому вы можете просматривать текущее состояние этих датчиков в любое время, и вы также должны реагировать на их значение в правилах. Но что самое интересное в значениях датчиков, как правило, они меняются со временем: вот тут-то и появляются настойчивость и построение графиков. Упорство в OpenHAB означает сохранение данных с течением времени. Давайте продолжим и настроим RRD4J (Round Robin Database для Java), так называемый, потому что данные сохраняются в циклическом режиме - старые данные отбрасываются, чтобы уменьшить размер базы данных.

Установите пакеты rrd4j с помощью следующих команд.

sudo apt-get install openhab-addon-persistence-rrd4j
sudo chown -hR openhab:openhab /usr/share/openhab

Затем создайте новый файл с именем rrd4j.persist в конфигурации / постоянство папка. Вставьте следующее:

Стратегии {

everyMinute: '0 * * * *?'

каждый час: '0 0 * * *?'

everyDay: '0 0 0 * *?'

по умолчанию = everyChange

}

Предметы {

// сохраняем все, когда значение обновляется, только значение по умолчанию, и восстанавливаем их из базы данных при запуске

*: стратегия = everyChange, restoreOnStartup

// затем мы определяем конкретные стратегии каждый час для чего-либо в группе температуры и каждую минуту для влажности

лучший способ купить iphone

Температура *: стратегия = каждый час

Влажность *: стратегия = everyMinute

// в качестве альтернативы вы можете добавить сюда определенные элементы, например

// Спальня_Влажность, JamesInOffice: strategy = everyMinute

}

В первой части этого файла мы определяем стратегии, что означает просто присвоение имени выражению CRON. Это то же самое, что мы уже делали с My.OpenHAB, но на этот раз мы создаем несколько новых стратегий, которые мы можем использовать EveryDay, EveryHour и EveryMinute. Я еще не использовал их все, но, возможно, в будущем.

Во второй половине файла мы сообщаем rr4dj, какие значения данных следует сохранять. По умолчанию мы собираемся сохранять все при каждом обновлении, но я также указал некоторые временные стратегии для конкретных датчиков. Температура меня не слишком беспокоит, поэтому я установил ее, чтобы экономить только каждый час, но влажность - большая проблема для меня, поэтому я хочу видеть, как она меняется каждую минуту. Если есть другие данные, которые вы хотите сохранить в определенное время, добавьте их здесь сейчас или измените при необходимости.

Примечание: если вы также хотите построить график данных, вы ДОЛЖНЫ сохранять его не реже одного раза в минуту. Неважно, обновляются ли данные вашего датчика так быстро, вам просто нужно указать rr4dj сохранять их раз в минуту.

Определив это, вы должны начать видеть некоторые отладочные данные, говорящие о том, что значения сохраняются.

Теперь давайте сделаем несколько красивых графиков всех этих данных. Это действительно просто. Чтобы построить график для отдельного датчика, добавьте на карту сайта следующее:

Элемент диаграммы = Спальня_Период влажности = ч

Это буквально все, что вам нужно. Допустимые значения для периода: h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; должно быть очевидно, что они означают. Если не указано иное, по умолчанию используется значение D для данных за полный день.

Чтобы создать диаграмму с несколькими элементами, просто нанесите вместо нее название группы:

Элемент диаграммы = Период влажности = ч

Вам также может быть интересно узнать, что вы можете использовать этот график в другом месте; он генерирует изображение, используя следующий URL: http: // YOUROPENHABURL: 8080 / chart? groups = Humidity & period = h

Как Ваш Система OpenHAB скоро появится?

Это все, что касается этой части руководства, но не ожидайте, что это будет последнее, что вы услышите от нас об OpenHAB. Надеюсь, это и руководство для начинающих дали вам прочную основу для разработки вашей собственной полной системы OpenHAB, но это процесс, который никогда не заканчивается полностью.

К счастью, OpenHAB может хорошо масштабироваться от нескольких устройств до сотен, от простых правил до максимальной автоматизации дома - так как поживает ваша система? Какие устройства вы выбрали? Каким следующим большим проектом вы собираетесь заняться?

Давайте поговорим в комментариях - и, пожалуйста, если вы нашли это руководство полезным, нажмите эти кнопки общего доступа, чтобы рассказать своим друзьям, как они тоже могут настроить свою собственную систему OpenHAB.

Мы надеемся, что вам понравятся предметы, которые мы рекомендуем и обсуждаем! MUO имеет аффилированные и спонсируемые партнерства, поэтому мы получаем долю дохода от некоторых ваших покупок. Это не повлияет на цену, которую вы платите, и поможет нам предложить лучшие рекомендации по продуктам.

Делиться Делиться Твитнуть Эл. адрес Руководство по анимации речи для новичков

Оживить речь может быть непросто. Если вы готовы начать добавлять диалог в свой проект, мы разберем этот процесс за вас.

Читать далее
Похожие темы
  • Сделай сам
  • Умный дом
  • Ардуино
  • Домашняя автоматизация
  • Длинная форма
  • Длинная направляющая
Об авторе Джеймс Брюс(Опубликовано 707 статей)

Джеймс имеет степень бакалавра в области искусственного интеллекта и имеет сертификаты CompTIA A + и Network +. Когда он не занят в качестве редактора обзоров оборудования, он любит LEGO, VR и настольные игры. До прихода в MakeUseOf он работал светотехником, учителем английского языка и инженером центра обработки данных.

Ещё от James Bruce

Подписывайтесь на нашу новостную рассылку

Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!

Нажмите здесь, чтобы подписаться