Реклама
Бесплатно не всегда означает «не так хорошо, как оплачено», и OpenHAB не является исключением. Программное обеспечение для домашней автоматизации с открытым исходным кодом намного превосходит возможности любой другой системы домашней автоматизации, представленной на рынке, но настроить ее нелегко. На самом деле, это может быть совершенно расстраивающим.
В первой части руководства я провел вас через установка OpenHAB на Raspberry Pi Начало работы с OpenHAB Home Automation на Raspberry PiOpenHAB - это зрелая платформа домашней автоматизации с открытым исходным кодом, которая работает на различных аппаратных средствах и является независимость от протокола, что означает, что он может подключаться практически к любому оборудованию домашней автоматизации на рынке Cегодня. Прочитайте больше
представил основные концепции 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 Какой Smart Hub для домашней автоматизации лучше для вас?Какое-то время люди думали об этой идее, как о некоем уловке, но недавние выпуски продуктов показали, что интеллектуальная домашняя автоматизация начинает выполнять свои обещания. Прочитайте больше концентратор, а также специальные концентраторы Z-Wave, такие как Homeseer, и ряд других программных опций, таких как Domoticz.
Хотя OpenHAB включает в себя привязку Z-Wave, вам все равно нужно сначала настройте сеть Z-Waveдо того, как OpenHAB сможет начать запрашивать данные. Если у вас есть плата контроллера Rasberry, у вас есть какое-то программное обеспечение для настройки сети, поэтому мы не будем об этом рассказывать. Если вы купили контроллер Aeotec USB Z-Stick или аналогичный, скорее всего, у вас нет программного обеспечения, так что читайте дальше.
Aeotec Z-Stick Gen5, Z-Wave Plus USB для создания шлюзаAeotec Z-Stick Gen5, Z-Wave Plus USB для создания шлюза Купить сейчас на Amazon $44.95
Если у вас уже есть настройка сети Z-WaveВы можете просто подключить свой контроллер к Pi и начать настройку привязки и элементов. Если это ваш первый набег в Z-Wave, это немного сложнее.
Во-первых, на стороне аппаратного обеспечения: каждый контроллер имеет свой собственный способ сопряжения с устройствами (технически известный как «режим включения», в котором назначается идентификатор узла). В случае Aotec Z-Stick это означает отключение его от USB-порта и однократное нажатие кнопки, чтобы перевести его в режим включения. Затем поднесите его к устройству, к которому вы подключаетесь, и нажмите на него кнопку включения. (это также изменится: мой сокет Everspring требует, чтобы кнопка была нажата 3 раза подряд, поэтому урок здесь - прочитать руководство для вашего устройства).
Z-Stick кратковременно мигает, указывая на успех. Это создает проблемы при подключении его обратно к Pi, так как назначен новый порт. Перезапустите Pi, чтобы сбросить его до стандартного порта, если вы обнаружите, что ему был динамически переназначен другой порт. А еще лучше: не подключайте его к Pi, пока не выполните сначала все аппаратные соединения.
Установка HABmin и Z-Wave Bindings
Поскольку OpenHAB на самом деле не является утилитой конфигурации для Z-Wave, мы собираемся установить еще один инструмент веб-управления, который называется HABmin. Направляйтесь к HABmin Github хранилище скачать текущий выпуск. Разархивировав его, вы найдете 2 .jar файлы в каталоге дополнений - они должны быть помещены в соответствующий каталог дополнений в вашей общей папке OpenHAB Home (если вы также используете Aotec gen5 Z-Stick, убедитесь, что у вас есть как минимум версия 1.8 привязки Z-Wave).
Затем создайте новую папку в каталоге webapps и назовите ее «habmin» (строчные буквы важны). Скопируйте остальные загруженные файлы туда.
Примечание: есть также HABmin 2 в стадии активного развития. Установка почти такая же, но с одним дополнительным аддоном .jar. Возможно, стоит попробовать оба варианта, просто чтобы увидеть, какой вы предпочитаете.
Если вы еще этого не сделали, подключите свой контроллер к вашему Pi. Введите следующее, чтобы найти правильный порт.
ls / dev / tty *
Вы ищете что-нибудь с USB в названии, или в моем конкретном случае Z-флешка представлялась как /dev/ttyACM0 (модем). Возможно, будет проще выполнить команду один раз перед ее подключением и один раз после нее, чтобы вы могли увидеть, что изменится, если вы не уверены.

Откройте конфигурационный файл OpenHAB и измените раздел Z-Wave, раскомментировав обе строки и указав фактический адрес устройства. Одним из последних шагов для меня было предоставить пользователю OpenHAB доступ к модему.
sudo usermod -a -G dialout openhab
Теперь, чтобы запустить все в жизнь, перезапустите OpenHAB
sudo service openhab restart
Надеюсь, что если вы проверяете журнал отладки, вы увидите нечто подобное. Поздравляю, теперь вы говорите о Z-Wave. Вы также можете обнаружить, что журнал отладки заполнен сообщениями от различных узлов Z-Wave. Давайте начнем с проверки HABMIN, чтобы увидеть, что он нашел: http://openhab.local: 8080 / habmin / index.html (замена openhab.local на ваше имя хоста Raspberry Pi или IP-адрес).

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

Настройка элементов Z-Wave
Каждое устройство Z-Wave будет иметь определенную конфигурацию для OpenHAB. К счастью, большинство устройств уже были исследованы, и уже будут примеры для вашего. Настройка пользовательских устройств, которые не распознаются, выходит за рамки этого руководства, но давайте предположим, что оно пока поддерживается.
Во-первых, у меня есть базовый выключатель питания и измеритель Everspring AN158 на узле 3. Быстрый Googling привел меня к сообщению в блоге на Wetwa.re, с примером конфигурации элемента. Я адаптировал это следующим образом:
Switch Dehumidifier_Switch "Dehumidifier" {zwave = "3: command = switch_binary"} Number Dehumidifier_Watts "Потребляемая мощность осушителя [% .1f W]" {zwave = "3: command = meter"}
Отлично.
Далее идет мультисенсор Aeotec Gen5.
Aeon Labs Aeotec Мультисенсор Z-Wave Gen5 (Z-Wave Plus)Aeon Labs Aeotec Мультисенсор Z-Wave Gen5 (Z-Wave Plus) Купить сейчас на Amazon $69.27
Для этого я нашел образец конфигурации в iwasdot.comи мой мультисенсор находится на узле 2.
Номер температуры в коридоре "Температура в коридоре [% .1f ° C]" (коридор, температура) {zwave = "2: 0: команда = многоуровневый датчик, датчик_тип = 1, датчик_с масштаб = 0"} Номер Hallway_Humidity "Влажность прихожей [% .0f %%]" (Прихожая, Влажность) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 5"} Номер Hallway_Luminance "Прихожая Яркость [% .0f Люкс]" (Коридор) {zwave = "2: 0: команда = датчик_многоуровневый, датчик_тип = 3"} Свяжитесь с Hallway_Motion "Движение в коридоре [% s]" (Прихожая, движение) {zwave = "2: 0: command = sensor_binary, response_to_basic = true"} Number sensor_1_battery "Battery [% s %%]" (движение) {zwave = "2: 0: команда = батарея"}
Если формат выглядит странно для вас, пожалуйста, вернитесь к первому руководство для начинающих Начало работы с OpenHAB Home Automation на Raspberry PiOpenHAB - это зрелая платформа домашней автоматизации с открытым исходным кодом, которая работает на различных аппаратных средствах и является независимость от протокола, что означает, что он может подключаться практически к любому оборудованию домашней автоматизации на рынке Cегодня. Прочитайте больше в частности, раздел связывания Hue, где я объясняю, как добавляются элементы. Вероятно, вам когда-нибудь понадобится скопировать примеры вставки, как это, но если у вас новое устройство, документация по связыванию подробно команды.
Logitech Harmony Binding
Прежде чем мы перейдем к правилам, я хотел бы добавить краткую заметку о работе с привязкой Harmony. Я большой поклонник Серия гармоничных пультов Harmony Logitech Harmony Ultimate Обзор и Дешевая распродажаВ твоей гостиной хаос - признай это. Вы простите, что задаетесь вопросом, какие пульты дистанционного управления, какое устройство Что с телевизором, усилителем, TiVO, BluRay плеером, может быть, даже переключение освещения становится длительным ... Прочитайте больше чтобы упростить работу домашнего медиацентра, но они часто выступают как отдельная система в умном доме. Благодаря OpenHAB действия Logitech Harmony и полный контроль над устройствами теперь могут быть частью вашей централизованной системы и даже включены в правила автоматизации.
Начните с установки трех обязательных файлов, которые вы найдете, используя apt-cache для поиска «гармонии»:

Не забудьте Чаун каталог привязок снова, когда вы закончите:
sudo apt-get установить openhab-addon-action-harmonyhub. sudo apt-get установить openhab-addon-binding-harmonyhub. sudo apt-get установить openhab-addon-io-harmonyhub. sudo chown -hR openhab: openhab / usr / share / openhab
Чтобы настроить привязку, откройте файл openhab.cfg и добавьте новый раздел следующим образом:
########## ДИСТАНЦИОННОЕ УПРАВЛЕНИЕ ГАРМОНИЕЙ ########## harmonyhub: host = 192.168.1.181или твой ip harmonyhub: имя пользователя =ваш-гармония-почта-Войти harmonyhub: пароль =ваш пароль
IP-адрес вашего Harmony. Используйте сетевой сканер, чтобы выяснить это. Вам также нужно будет ввести данные для входа в систему, те, которые вы вводите при запуске стандартной утилиты конфигурации Harmony. Это оно. После перезапуска Hue ваш журнал отладки должен иметь внезапный всплеск вывода из привязки.
Это список в формате JSON всех ваших действий, устройств и команд, которые можно отправлять. Это хорошая идея, чтобы скопировать это для дальнейшего использования. вы можете сделать его еще проще для чтения со складными узлами, вставив его в онлайн форматер JSON такой как этот.

Помимо стандартной активности PowerOff, которая используется по умолчанию, вы найдете свои собственные определенные активности, перечисленные здесь по имени. Теперь давайте создадим простой элемент управления одной кнопкой, чтобы начать действия. Сначала добавьте следующую строку в файл товаров. Измените группу и значок, если хотите.
/ * Harmony Hub * / Строка Harmony_Activity "Гармония [% s]"(Living_Room) {harmonyhub = "* [currentActivity]"}
Это двухстороннее связывание строк, который может как извлечь текущую активность, так и дать команду текущей активности быть чем-то другим. Теперь мы можем создать для нее кнопку в файле Sitemap.
Переключить элемент = Harmony_Activity mappings = [PowerOff = 'Off', Exercise = 'Exercise', 13858434 = 'TV', Karaoke = 'Karaoke']
В квадратной скобке вы увидите каждое действие вместе с ярлыком. Как правило, вы можете напрямую ссылаться на действия, как вы назвали их на пульте дистанционного управления, но я обнаружил, что исключением из них является пробел в названии действия, например «Смотреть телевизор». В этом случае вам нужно будет использовать идентификатор активности. Опять же, вы можете найти идентификатор в выходных данных отладки JSON. Сохраните и обновите ваш интерфейс, вы должны увидеть что-то похожее на это:

Вы также можете ссылаться на действия в своих правилах, как мы увидим далее. Прочитайте вики-страницу для получения дополнительной информации о Гармония обязательна.
Общее введение в правила
Большинство центров умного дома включают создание правил, позволяющих автоматически реагировать на данные датчиков и события в доме. На самом деле, я бы сказал, что по-настоящему умный дом - это не то, что вам нужно, чтобы тратить время на взаимодействие с мобильными приложениями. Это тот, который невидим для конечного пользователя и полностью автоматизирован. С этой целью OpenHAB также включает в себя мощный язык сценариев правил, который вы можете программировать, намного превышающий сложность большинства умный дом хабы Битва за Умный Дом Хабы: что там и что будет? Прочитайте больше или Рецепты IFTTT IFTTT теперь подключается ко всему: представляем канал MakerПотенциальное использование IFTTT бесконечно. Но до сих пор было трудно связать его с вашими аппаратными проектами. Сегодня все изменилось. Прочитайте больше .
Правила программирования звучат хуже, чем есть. Давайте начнем с пары правил, которые включают или выключают свет в зависимости от датчика присутствия:
правило "Офис светит, когда Джеймс присутствует" когда элемент JamesInOffice изменился с OFF на ON. затем sendCommand (Office_Hue, ON) правило конца "Офис выключается, когда Джеймс уходит" когда элемент JamesInOffice изменился с ON на OFF. затем sendCommand (Office_Hue, OFF) конец
Сначала назовем правило - будь описательным, чтобы ты знал, какое событие запускает. Далее мы определяем наше простое правило, говоря когда х истинно, тогда у. Конец означает закрытие этого конкретного правила. Существует ряд специальных слов, которые вы можете использовать в правилах, но сейчас мы имеем дело с двумя простыми кусочками синтаксиса: Предмет, что позволяет запрашивать состояние чего-либо; и SendCommand, который делает именно то, что вы думаете, что будет. Я сказал вам, что это было легко.
Вероятно, нет необходимости использовать пару правил, но, поскольку моя логика усложняется, было бы целесообразно разделить их на предмет того, вход или выход из зоны - и это может быть хорошей идеей добавить датчик света где-то в уравнение, чтобы мы не включали без необходимости фары.
Давайте рассмотрим другой пример создания запланированного правила.
правило "Упражнение каждое утро" когда Время cron "0 0 8 1/1 *? *" затем harmonyStartActivity («Упражнение») конец.
Опять же, мы называем правило, укажите условия, когда оно должно срабатывать, и действия, которые необходимо предпринять. Но в этом случае мы определяем модель Времени. Забавный код, который вы видите в кавычках, является выражением CRON для Quartz Scheduler (формат немного отличается от обычного CRONtab). я использовал cronmaker.com чтобы помочь создать выражение, но вы также можете прочитать руководство по формату [Больше не доступно] для подробного объяснения и дополнительных примеров.

Мои правила гласят: «Каждое утро, 8 часов, каждый день недели, говорите моей системе Harmony Ultimate, чтобы начать упражнение», который, в свою очередь, активирует телевизор, Xbox, усилитель и нажимает кнопку A через минуту, чтобы запустить диск в дисководе.
К сожалению, OpenHAB пока не может выполнить это упражнение для меня.
Еще одно правило, которое я хочу показать вам, - это то, что я использую для управления уровнем влажности в моем доме. У меня есть один осушитель, который мне нужно перемещать везде, где это необходимо, поэтому я решил посмотреть на все мои датчики влажности, найти, какой из них самый высокий, и сохранить его в переменной. В настоящее время он срабатывает каждую минуту, но его можно легко снизить. Посмотрите сначала:
import org.openhab.core.library.types. * import org.openhab.model.script.actions. * импорт java.lang. Строковое правило "Монитор влажности" когда время cron "0 * * * *?" тогда var prevHigh = 0 var highHum = "" Влажность? .members.forEach [hum | logDebug («влажность.рулес», hum.name); if (hum.state как DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("влажность.rules", highHum); postUpdate (Dehumidifier_Needed, highHum); конец.
Суть правила заключается в Влажность? .Members.foreach линия. Влажность - это название группы для моих датчиков влажности; .members захватывает все предметы в этой группе; для каждого перебирает их (с любопытным форматом квадратных скобок, с которым вы, вероятно, не знакомы). Синтаксис правил является производным от Xtend, поэтому вы можете прочитать Xtend документация если вы не можете найти пример для адаптации.
Вы, вероятно, не будете нуждаться в этом - существуют сотни примеров правил:
- Подробное объяснение правил на официальной вики
- официальные образцы правил вики-страница
- Принятие правил на новые высоты
- Расширенные образцы на IngeniousFool.net
MQTT для OpenHAB и Интернета вещей
MQTT - это легкая система обмена сообщениями для межмашинной связи - своего рода твиттер для вашего Arduinos или Raspberry Pis, чтобы поговорить друг с другом (хотя, конечно, это работает гораздо больше, чем просто те). Он быстро набирает популярность и находит себя домом с устройствами Интернета вещей, которые, как правило, низкие Ресурсные микроконтроллеры, которым нужен надежный способ передачи данных датчика обратно в концентратор или получения удаленного команды. Это именно то, что мы будем делать с этим.
Но зачем изобретать велосипед?
MQ Telemetry Transport была изобретена еще в 1999 году для соединения нефтепроводов через медленный спутник. соединения, специально разработанные для минимизации использования батареи и пропускной способности, при этом обеспечивая надежный доставка данных. За прошедшие годы принципы разработки остались прежними, но сценарий использования сместился со специализированных встроенных систем на обычные устройства Интернета вещей. В 2010 году протокол был выпущен без лицензионных платежей, открытый для любого использования и реализации. Нам нравится бесплатно.
Вы можете быть удивлены, почему мы даже беспокоимся о еще одном протоколе - у нас уже есть HTTP - который может использоваться для отправки быстрых сообщений между всеми видами систем, подключенных к сети (таких как OpenHAB и IFTTT, особенно с новыми создатель канала IFTTT теперь подключается ко всему: представляем канал MakerПотенциальное использование IFTTT бесконечно. Но до сих пор было трудно связать его с вашими аппаратными проектами. Сегодня все изменилось. Прочитайте больше ). И ты был бы прав. Однако затраты на обработку HTTP-сервера довольно велики - настолько, что вы не можете легко запустить его на встроенный микроконтроллер, такой как Arduino (по крайней мере, вы можете, но у вас не останется много памяти для чего-либо еще). С другой стороны, MQTT легок, поэтому отправка сообщений по вашей сети не приведет к засорению каналов и может легко уместиться в нашем небольшом пространстве памяти Arduino.
Как работает MQTT?
MQTT требует как сервера (называемого «брокером»), так и одного или нескольких клиентов. Сервер выступает в роли посредника, получая сообщения и ретранслируя их любым заинтересованным клиентам.
Давайте продолжим с Twitter-для-машин аналогия хотя. Так же, как пользователи Твиттера могут твитнуть свои собственные бессмысленные 140 символов, так и пользователи могут «подписаться» на других пользователей, чтобы увидеть курируемый поток сообщений, Клиенты MQTT могут подписаться на определенный канал, чтобы получать оттуда все сообщения, а также публиковать на них свои собственные сообщения. канал. Этот шаблон публикации и подписки называется Паб / субв отличие от традиции клиент / сервер модель HTTP.
HTTP требует, чтобы вы установили связь с компьютером, с которым общаетесь, скажем, Hello, а затем постоянно возвращались друг к другу, пока вы получаете или помещаете данные. При использовании pub / sub клиенту, выполняющему публикацию, не нужно знать, какие клиенты подписаны: он просто выкачивает сообщения, а брокер перераспределяет их всем подписанным клиентам. Любой клиент может как публиковать темы, так и подписываться на них, как пользователь Twitter.
В отличие от Twitter, MQTT не ограничен 140 символами. Он не зависит от данных, поэтому вы можете отправлять небольшие числа или большие текстовые блоки, дейтаграммы в формате JSON или даже изображения и двоичные файлы.
Не то, чтобы MQTT лучше чем HTTP для всего - но это является более подходящим, если у нас будет много датчиков по всему дому, постоянно сообщающих.
Также важно знать, что OpenHAB не будет выступать в качестве вашего MQTT-брокера - об этом мы поговорим чуть позже. Тем не менее, OpenHAB будет действовать как клиент: он может публиковать ваш журнал активности OpenHAB, а также связывать определенные каналы для устройств, так что вы можете, например, иметь переключатель, который управляется сообщениями MQTT на конкретном канал. Это идеально подходит для создания дома, полного датчиков.
Установите Mosquitto на свой пи
Хотя 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 установить комаров.
Это все, что нам нужно сделать, чтобы 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 Совет для начинающих: «/myHome/” это другая тема, чтобы «мой дом/" - включение косой черты в начале создает пустой уровень темы, который, хотя и технически допустим, не рекомендуется, поскольку может сбивать с толку.
Теперь, когда мы знаем теорию, давайте попробуем использовать Arduino, Ethernet Shield и датчик температуры и влажности DHT11 - у вас, вероятно, есть один в вашем стартовом наборе, но если нет, просто замените датчик окружающей среды для датчика движения (или даже кнопка).
Публикация MQTT из Arduino с Ethernet-соединением
Если у вас есть гибридное Arduino-совместимое устройство со встроенным Wi-Fi или Ethernet, это также должно работать. В конце концов, нам нужен более удобный / дешевый способ общения, который предполагает использование сетевого подключения в каждой комнате, но это служит для изучения основ.
Начните с загрузки библиотека pubsubclient от Github. Если вы использовали кнопку «Скачать как ZIP», структура немного неправильная. Распакуйте, переименуйте папку, чтобы просто pubsubclientзатем возьмите два файла из ЦСИ папку и переместить их вверх на один уровень в корень загруженной папки. Затем переместите всю папку на свой Arduino / библиотеки каталог.
Вот мой пример кода, который вы можете адаптировать: выход сигнала DHT11 находится на выводе 7. Измените IP-адрес сервера для вашего Pi в следующей строке:
client.setServer ("192.168.1.99", 1883);
К сожалению, мы не можем использовать это дружественное имя (OpenHAB.local в моем случае) поскольку стек TCP / IP на Arduino очень упрощен, и добавление кода для именования Bonjour заняло бы много памяти, которую мы не хотим тратить впустую. Чтобы изменить темы, по которым передаются данные датчиков, прокрутите вниз до следующих строк:
буфер символов [10]; dtostrf (t, 0, 0, буфер); client.publish ( "openhab / Himitsu / температура", буфер); dtostrf (h, 0, 0, буфер); client.publish ( "openhab / Himitsu / влажности", буфер);
Код также включает в себя подписку на командный канал. Найдите и настройте следующую строку:
client.subscribe ( "openhab / Himitsu / команду");
Изучите код там, и вы увидите, что вы можете легко управлять светодиодом или реле, например, отправляя команды на определенные каналы. В примере кода он просто отправляет сообщение, подтверждающее получение команды.
Загрузите свой код, подключите Arduino к сети и, используя MQTT.fx, подпишитесь на # или openhab / Himitsu / # (или как вы изменили название комнаты, но не забудьте добавить # в конце). Довольно скоро вы увидите входящие сообщения; и если вы отправите ON или OFF в командную тему, вы также увидите подтверждения.

MQTT Binding для OpenHAB
Последний шаг в уравнении - подключить это к OpenHAB. Для этого, конечно, нам нужна привязка.
sudo apt-get установить openhab-addon-binding-mqtt. sudo chown -hR openhab: openhab / usr / share / openhab
И отредактируйте файл конфигурации, чтобы включить привязку.
mqtt: broker.url = tcp: // localhost: 1883. mqtt: broker.clientId = openhab
Перезапустите OpenHAB
sudo service openhab restart
Тогда давайте добавим элемент или два:
/ * Датчики MQTT * / Номер Himitsu_Temp "Температура Химицу [% .1f ° C]"(Himitsu, температура) {mqtt = " (Himitsu, Humidity) {mqtt = "
К настоящему времени вы должны понимать формат; это становится Номер элемента из привязки MQTT, по указанной теме. Это простой пример, вы можете обратиться к странице вики, где он может быть намного сложнее.
Поздравляем, теперь у вас есть база дешевого сенсорного массива на базе Arduino. Мы вернемся к этому в будущем и разместим Arduino в их собственной совершенно отдельной сети RF. Я также создал идентичную версию для плат Wizwiki 7500 если у вас есть один из них.
Постоянство и графические данные
К настоящему времени вы, вероятно, настроили несколько датчиков, будь то Z-Wave или пользовательские Arduinos с MQTT - так что вы Вы можете просмотреть текущее состояние этих датчиков в любое время, и вы также должны реагировать на их значение в правила. Но интересная вещь о значениях датчиков, как правило, заключается в том, что они меняются со временем: вот тут-то и появляются постоянство и отображение. Упорство в OpenHAB означает сохранение данных с течением времени. Давайте продолжим и настроим RRD4J (Round Robin Database для Java), так называемый, потому что данные сохраняются в циклическом порядке - более старые данные отбрасываются для сжатия размера базы данных.
Установите пакеты rrd4j с помощью следующих команд.
sudo apt-get установить openhab-addon-persistence-rrd4j. sudo chown -hR openhab: openhab / usr / share / openhab.
Затем создайте новый файл с именем rrd4j.persist в Конфигурации / сохранение папки. Вставьте в следующее:
Стратегии {everyMinute: "0 * * * *?" EveryHour: "0 0 * * *?" EveryDay: "0 0 0 * *?" default = everyChange. } Элементы {// сохраняют все, когда значение обновляется, только по умолчанию, и восстанавливают их из базы данных при запуске *: стратегии = everyChange, restoreOnStartup // далее мы определяем конкретные стратегии каждого часа для чего-либо в группе температур и каждую минуту для температуры влажности *: Strategy = everyHour Humidity *: Strategy = everyMinute // В качестве альтернативы вы можете добавить определенные элементы здесь, такие как // Bedroom_Humidity, JamesInOffice: стратегии = EveryMinute. }
В первой части этого файла мы определяем стратегии, которые просто означают присвоение имени выражению CRON. Это то же самое, что мы уже сделали с Моим. OpenHAB, но на этот раз мы создаем несколько новых стратегий, которые мы можем использовать для EveryDay, EveryHour и EveryMinute. Я еще не использовал их все, но я могу быть в будущем.
Во второй половине файла мы сообщаем rr4dj, какие значения данных сохранять. По умолчанию мы собираемся сохранять все при каждом обновлении, но я также указал некоторые временные стратегии для конкретных датчиков. Температуры меня не слишком беспокоят, поэтому я установил их, чтобы экономить только каждый час, но для меня большое значение имеет влажность, поэтому я хочу посмотреть, как она меняется каждую минуту. Если есть другие данные, которые вы хотите сохранить в определенное время, добавьте их здесь или измените, если необходимо.
Примечание: если вы хотите также отобразить данные, вы ДОЛЖНЫ хранить их как минимум раз в минуту. Неважно, если данные вашего датчика обновляются так быстро, вы просто должны указать rr4dj сохранять их раз в минуту.
С этим определением вы должны начать видеть некоторый вывод отладки, сообщающий, что значения хранятся.

Далее, давайте сделаем несколько симпатичных графиков всех этих данных. Это действительно легко. Чтобы составить график для отдельного датчика, добавьте следующее на карту своего сайта:
Элемент диаграммы = Спальня_Влажность = h
Это буквально все, что вам нужно. Допустимые значения для периода: ч, 4 ч, 8 ч, 12 ч, D, 3D, Вт, 2 Вт, М, 2М, 4М, Y; должно быть очевидно, что это значит. По умолчанию используется D для полного дня данных, если не указано иное.
Чтобы создать график с несколькими элементами, просто отобразите название группы:
Элемент диаграммы = период влажности = ч

Вам также может быть интересно узнать, что вы можете использовать этот график в другом месте; он генерирует изображение, используя следующий URL: http://YOUROPENHABURL: 8080 / график? группы = Влажность и период = ч
Как поживает Твой Система OpenHAB идет?
Вот и все, что касается этой части руководства, но не ожидайте, что это будет последним, что вы услышите от нас об OpenHAB. Надеемся, что это и руководство для начинающих дали вам прочную основу для разработки вашей собственной полной системы OpenHAB - но это процесс, который так и не был полностью завершен.
К счастью, OpenHAB может хорошо масштабироваться от нескольких устройств до сотен, от простого сложного правила до максимальной автоматизации дома - так как продвигается ваша система? Какие устройства вы выбрали? Каков следующий крупный проект, который вы собираетесь решать?
Давайте поговорим в комментариях - и, пожалуйста, если вы нашли это руководство полезным, нажмите на эти кнопки общего доступа, чтобы рассказать своим друзьям, как они тоже могут настроить свою собственную систему OpenHAB.
Джеймс имеет степень бакалавра в области искусственного интеллекта и сертифицирован CompTIA A + и Network +. Он является ведущим разработчиком MakeUseOf и проводит свое свободное время за игрой в VR-пейнтбол и настольные игры. Он строит компьютеры с детства.