DiyУмный дом

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

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

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

Это руководство доступно для скачивания в формате PDF. Загрузите руководство для начинающих OpenHAB, часть 2: ZWave, MQTT, правила и графики прямо сейчас . Не стесняйтесь копировать и делиться этим со своими друзьями и семьей.

В первой части руководства я рассказал вам об установке 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, hub, а также специальные хабы Z-Wave, такие как Homeseer, и ряд других программных опций, таких как Domoticz .

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

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

devtty

Откройте файл конфигурации 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-адрес).

zwave запускается в журнале openhab

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

изменить имя устройства

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

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

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

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

Отлично.

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

Для этого я нашел пример конфигурации на iwasdot.com , а мой мультисенсор находится на Node 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: команда = батарея"}

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

Logitech Harmony Binding

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

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

openhab apt-cache поиск связывания гармонии

Не забудьте снова добавить каталог bindings:

  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: username = your-harmony-email-login
 harmonyhub: пароль = ваш пароль 

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

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

форматированный JSON вывод openhab

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

  / * Harmony Hub * /
 Строка Harmony_Activity "Гармония [% s]" <телевидение> (Living_Room) {гармония = "* [currentActivity]"} 

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

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

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

openhab гармония в карте сайта

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

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

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

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

  правило "Офис светит, когда Джеймс присутствует"
 когда 
	 Элемент JamesInOffice изменен с OFF на ON
 тогда 
	 SendCommand (Office_Hue, ВКЛ)
 конец

 правило "Офис выключается, когда Джеймс уходит"
 когда 
	 Элемент JamesInOffice изменен с ON на OFF
 тогда
	 SendCommand (Office_Hue, OFF)
 конец 

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

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

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

  Правило "Упражнение каждое утро"
 когда
      Время cron "0 0 8 1/1 *? *"
 тогда
      harmonyStartActivity ( "Упражнение")
 конец

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

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

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

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

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

  import org.openhab.core.library.types. *
 import org.openhab.model.script.actions. *
 импорт java.lang.String

 правило "Монитор влажности"
 когда время cron "0 * * * *?"
 тогда
	 var prevHigh = 0
	 var highHum = ""

	 Влажность .members.forEach [гул? | 
		 logDebug («влажность.рулес», hum.name);
		 if (hum.state as DecimalType> prevHigh) {
			 prevHigh = hum.state
			 highHum = hum.name + ":" + hum.state + "%"
		 }
	 ]
     logDebug («влажность.рулес», highHum);
     postUpdate (Dehumidifier_Needed, highHum);
 конец

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

Возможно, вам это и не понадобится — существуют сотни примеров правил:

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

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

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

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

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

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

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

Давайте продолжим аналогию с Twitter для машин . Так же, как пользователи Twitter могут твитнуть свои бессмысленные 140 символов, так и пользователи могут «подписаться» на других пользователей, чтобы увидеть курируемый поток сообщений, клиенты MQTT могут подписаться на определенный канал, чтобы получать оттуда все сообщения, а также публиковать свои собственные сообщения. на этот канал. Этот шаблон публикации и подписки называется pub / sub , в отличие от традиционной модели 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. Сохраните и нажмите «Подключиться». Если маленький светофор в правом верхнем углу становится зеленым, вы можете идти.

Пример профиля mqttfx

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

тест inTopic MQTT

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

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

  inTopic / smallSubdivision / evenSmallerSubdivision
 Myhome / LivingRoom / температура
 Myhome / LivingRoom / влажности
 Myhome / кухня / температура
 Myhome / кухня / влажности 

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

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

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

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

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

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

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

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

  MYHOME / LivingRoom / # 

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

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

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

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

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

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

Вот мой пример кода, который вы можете адаптировать : выход сигнала 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 arduino сообщения возвращаются

MQTT Binding для OpenHAB

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

  sudo apt-get установить openhab-addon-binding-mqtt
 sudo chown -hR openhab: openhab / usr / share / openhab 

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

  MQTT: broker.url = TCP: // локальный: 1883
 MQTT: broker.clientId = openhab 

Перезапустите OpenHAB

  sudo service openhab restart 

Тогда давайте добавим элемент или два:

  / * Датчики MQTT * /
 Number Himitsu_Temp "Himitsu Temperature [% .1f ° C]" <температура> (Himitsu, температура) {mqtt = "<[брокер: openhab / himitsu / температура: состояние: по умолчанию]"}
 Number Himitsu_Humidity "Himitsu Humidity [% .1f %%]" <water> (Himitsu, Humidity) {mqtt = "<[брокер: openhab / himitsu / влажность: состояние: по умолчанию]"} 

К настоящему времени вы должны понимать формат; он получает элемент Number из привязки 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 * * * *?"
	 EveryHour: "0 0 * * *?"
	 EveryDay: "0 0 0 * *?"
	 default = everyChange
 }
 Предметы {
	 // сохраняем все при обновлении значения, просто по умолчанию, и восстанавливаем их из базы данных при запуске
	 *: стратегия = каждое изменение, restoreOnStartup

	 // далее мы определяем конкретные стратегии каждого часа для чего-либо в группе температур и каждую минуту для влажности
	 Температура *: стратегия = каждый час
	 Влажность *: стратегия = каждый минут

	 // в качестве альтернативы вы можете добавить определенные элементы здесь, такие как
	 // Bedroom_Humidity, JamesInOffice: Strategy = everyMinute
 } 

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

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

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

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

rrd4j хранит данные

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

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

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

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

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

диаграмма

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

Как поживает ваша система OpenHAB?

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

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

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

Похожие посты
Умный дом

Что такое «Эхо Амазонки Авто»?

Умный дом

Что такое умный туалет и стоит ли его покупать?

Как сделатьУмный дом

Как добавить Alexa в ваше умное зеркало

Tech новостиКак сделатьУмный дом

Как контролировать свои потолочные вентиляторы в SmartHome