Нижний Новгород, Россия
Автор статьи Максим Захаров
В данной статье мы расскажем вам как можно сэкономить на электроэнергии используя OpenHAB2 для управления тёплым полом. Мы подключим к обычному регулятору теплого пола Wi-Fi реле от Sonoff. Реле будет включаться и выключаться с помощью MQTT команд, которые будет отправлять OpenHAB2 по определенному расписанию. Для оптимизации расписания мы также будем замерять температуру пола с помощью датчика собранного на базе NodeMCU ESP8622. Датчик будет передавать температуру по MQTT на сервер - это позволит нам построить графики и определить время нагревания и остывания пола.
Изначально в ванной мы имеем один из самых простых регуляторов теплого пола Eberle 525 22. Он имеет кнопку включения и регулятор на 5 режимов подогрева. Обычно он включен постоянно и греет пол даже тогда, когда это не нужно, например, ночью пока все спят.
В системе управления умным домом вы добавим переключатель "Зимний режим". Если этот параметр включен, то наш тёплый пол будет работать по расписанию - включаться на определенное время утром и вечером. А днем и ночью он будет отключен.
Первое что нам необходимо сделать - это добавить возможность включать и выключать подогрев пола удаленно. Для этого мы установим Wi-Fi реле Sonoff Basic в цепи перед регулятором теплого пола, но сначала нам необходимо его подготовить.
Изначально реле Sonoff Basic идет со стандартным программным обеспечением, которое позволяет включать и выключать реле с помощью приложения на телефоне. При этом все данные идут через китайские сервера, и если у вас дома отключат интернет, то вы не сможете управлять подогревом.
Для интеграции c OpenHAB2 и стабильной работы включения/выключения подогрева нам необходимо загрузить на реле свое программное обеспечение, которое позволит нам отправлять команды по протоколу MQTT. Вы можете загрузить готовую прошивку, например, Tasmona или можете написать свою в ArduinoIDE. Все что вам необходимо получить в итоге - чтобы реле подключалось к вашему MQTT серверу и слушало определенный канал. Если в этот канал приходит 1, то реле включается, если в этот канал приходит 0, то реле выключается. Также можно добавить функционал для включения/выключения по нажатию на внешнюю кнопку на реле.
Как прошивать модули Sonoff через Arduino IDE, а также как загружать прошивки Tasmona вы можете найти в отдельных статьях на нашем сайте. Я сделал прошивку через ArduinoIDE c самым простым функционалом.
В результате прошивки и настройки Sonoff подключается к MQTT серверу (у нас он находится по адресу 192.168.1.137, порт 1883, логин mqttuser, пароль mqttpass), подписывается на канал sonoffnode5/gpio/12 и ждет входную команду. В зависимости от нее включается и выключается.
Для того, чтобы OpenHAB2 мог общаться с вашим реле по протокому MQTT необходимо настроить binding для работы с MQTT. Binding (байндинг) - это драйвер OpenHAB2 для работы с разными протоколами. Заходите на домашнюю страницу вашего OpenHAB2, выбираете Paper UI, переходите в Add-ons и в разделе Bindings устанавливаете MQTT binding.
После этого необходимо настроить подключение опенхаба к вашему локальному MQTT серверу. Подключаетесь в серверу где установлени OpenHAB2 через консоль или файловый менеджер, открываете файл /etc/openhab2/services/mqtt.cfg (это адрес для OpenHAB2 установленный на Raspberry Pi или Orange Pi, для другой операционки или версии опенхаба этот адрес может отличаться). В файле прописываем настройки подключения к MQTT серверу:
mainbroker.url=tcp://192.168.1.137:1883
mainbroker.clientId=MainBrocker
mainbroker.user=mqttuser
mainbroker.pwd=mqttpass
Обратите внимание - в системе OpenHAB2 мы добавили MQTT сервер с именем mainbroker. Дальше вся работа в опенхабе с этим сервером будет проходить по его имени. Больше нигде не понадобится указывать его адрес, или имя пользователя. Кроме того, вы можете добавить в систему несколько разных MQTT брокеров и работать с ними параллельно также обращаясь к ним по именам.
Как установить и настроить MQTT сервер читайте в нашей статье: Установка MQTT брокера Mosquitto на Raspberry Pi и Orange Pi.
Перед тем как подключать реле к регулятору теплого пола - мы соберем тестовую схему, чтобы проверить работу MQTT. Для этого мы должны отсоединить все провода программатора от Sonoff Basic, убрать плату обратно в корпус и подключить электрический провод с вилкой на входной разъем. Помните, что все манипуляции с прошивкой Sonoff вы должны делать при отключенном питании 220 вольт. Втыкаем вилку в розетку только после полной сборки устройства.
Для проверки работы реле необходимо установить MQTT клиент на ваш телефон. Для Android удобными приложением является MyMQTT. Запускаете приложение, вводите настройки подключения, подключаетесь к MQTT серверу и переходите во вкладку Publish.
В поле Topic вводим название канала, на который подписано Wi-Fi реле, нашем случае это sonoffnode5/gpio/12. В поле Message указываем 0 или 1 и нажимаем кнопку Publish. В зависимости от переданной команды реле будет включаться и выключаться, вы услышите характерый звук срабатывания реле! Теперь можно переходить к настройке OpenHAB2.
Для управления реле необходимо добавить в опенхаб item (элемент), который будет за него отвечать. Подключаемся к серверу, где установлен ваш OpenHAB2 через терминал или файловый менеджер. Заходим в папку где хранятся файлы с элементами системы (для Raspberry Pi и Orange Pi это папка /etc/openhab2/items/). Если у вас уже есть файл с элементам, то можете открыть его, если нет, то создаем новый файл с расширением *.items, например, winter.items.
В него записываем строчку:
Switch SONOFF5 "Реле для теплого поле" { mqtt=">[mainbroker:sonoffnode5/gpio/12:command:ON:1],>[mainbroker:sonoffnode5/gpio/12:command:OFF:0]" }
Как видно из кода мы создали элемент SONOFF5 типа switch. Он обращается к байндингу MQTT и работает с сервером mainbroker, который мы обозначили чуть выше. Дальше указывается канал и команды, которые соответствуют статусам ON и OFF. Т.е. если в канал sonoffnode5/gpio/12 придет 1, то статус нашего элемента станет ON, если 0, тогда OFF. После того как мы прописали элемент в файле *.items вся последующая работа с ним в системе OpenHAB2 будет проходит по его имени SONOFF5. Также нам больше не понадобятся его каналы и параметры, так как теперь мы будет работать только со статусами ON и OFF. Это очень удобно.
После того как мы добавили элемент в систему, нам необходимо вывести его на экран. Для этого мы переходим в папку с графическими интерфейсами опенхаба - это файлы с расширением sitemap. Для Raspberry Pi и Orange Pi это папка /etc/openhab2/sitemaps/. Если у вас еще нет файла sitemap, то создайте его, например, main.sitemap. Добавляем в него следующий код:
sitemap main label="Main Home"
{
Frame label="Управление тёплый полом" {
Switch item=SONOFF5 label="Тёплый пол"
}
}
В этом коде мы объявляем отображение (sitemap) main c заголовком "Main Home". Внутри него находится область Frame с названием "Управление тёплый полом", в которой находится переключатель SONOFF5. В одном сайтмапе может быть несколько обсластей frame, а в них может быть по несколько разных элементов. Сохраняем и закрываем файл.
Теперь чтобы посмотреть наше отображение введите в браузере http://192.168.1.137:8080/classicui/app?sitemap=main. По адресу 192.168.1.137 расположена Raspberry Pi, на которую мы установили MQTT брокер и OpеnHAB. Если в адресной строке указывать разные значение переменной sitemap, то можно открывать разные отображения. Также в найтройках можно прописать отображени по-умолчанию, которое будет открываться по адресу http://192.168.1.137:8080/classicui/app.
Если вы все настроили верно, то при нажатии на переключатель "Тёплый пол" на странице http://192.168.1.137:8080/classicui/app?sitemap=main должно включаться и выключаться реле Sonoff.
В новых версиях OpenHAB2 кроме стандартных отображений, которые редактируются через файл, есть также интерфейс HABPanel, который позволяет добавлять элементы управления с помощью мышки. Если он у вас установлен, то просто перейдите по ссылке http://192.168.1.137:8080/habpanel/index.html.
Теперь необходимой создать панель с элементами. Перейдите в настройки нажав на иконку в правом верхнем углу. Там выбираем "Add new dashboard". Вводим название "Тёплый пол" и нажимаем OK.
Теперь слева в выпадающем меню должна появится ссылка на панель "Тёплый пол" - нажимаем на нее. Чтобы добавить элемент управления на эту панель необходимо нажать на иконку карандашика около названия панели и нажать кнопку "Add Widget".
Для добавления переключателя выбираем элемент типа Switch, настройки прописываем как на скриншоте ниже и сохраняем. Также вы можете выбрать кастомную иконку для элемента.
Так на нашей панеле управления "Тёплый пол" появился первый элемент! Чтобы выйти из режима редактирования панели - просто нажимаем вверху кнопку Run. Теперь панель в режиме использования - при нажатии на иконку наш элемент будет менять статус ON/OFF, при этом реле должно включаться и выключаться.
Внимание! Все манипуляции с регулятором теплого пола и проводами необходимо делать при отключенном электричестве! Работать с блоками под непряжением запрещено! Перед началом установки необходимо выключить питание теплого пола в электрическом щитке!
Теперь когда мы проверили, что реле включается и выключается через опенхаб - установим его к регулятору пола. Отключаем питание теплого пола в электрическом щитке, снимаем рамку с регулятора, откручиваем болты, которыми от прикреплен к стене и достаем регулятор из стены. Всего у вас будет 6 проводов - два входных провода 220В, два выходящих провода для питания самого теплого пола, два провода для датчика температуры. Вам необходимо установить реле так, чтобы оба входящи провода шли на его входы, а два выходящих из реле провода идут на вход регулятора. Получится, что реле стоит на 2х входящих проводях перед регулятором. Соединение проводов должно быть как на схеме:
Собираем всю конструкцию обратно. У меня не было свободного места за регулятором пола, поэтому мне пришлось разместить Sonoff под ним. Получилось вот так:
Теперь когда все собрано включаем питание теплого пола в электрическом щитке, ждем несколько секунд пока реле подключится к Wi-Fi сети и проверяем его работу. Если реле и тёплый пол включаются при нажатии переключателя в OpenHAB2 значит вы все подвлючили верно!
Попробовав разные режимы работы регулятора, я понял, что оптимальная интенсивность нагрева поле это чуть меньше 3. Выставляем регулятор на это значение и больше его не трогаем.
Каждый день я начинаю работать в 9 утра, поэтому встаю в 7:40. Предположим, что тёплый пол нагревается за 2 часа, следовательно нам необходимо начать нагрев пола в 5:40. В 8:40 я уже выезжаю из дома на работу, поэтому мы можем выключать подогрев пола примерно в 8:20.
Для удобства пользования я добавлю в OpenHAB2 переключатель "Зимний режим", который будет управлять всей автоматизацией связанной с зимой: тёплыми полами, полотенцесушителями, проветриванием и т.д. Для этого открываем файл /etc/openhab2/items/winter.items и добавляем в него строчку:
Switch SetWinter "Зимний режим"
Это значит, что в систему мы добавили элемент типа Switch с именем SetWinter и меткой "Зимний режим". Сохраняем и закрываем файл. Добавим этот переключатель на нашу панель управления в HABPanel. Переходим по адресу http://192.168.1.137:8080/habpanel/index.html, выбираем слева в списке панель "Тёплый пол", переходим в режим редактирования и добавляем элемент Switch со следующими параметрами:
Также я добавил этому переключателю иконку в виде снежинки. Нажимаем "Save" и кнопку "Run". Как вы видите теперь на панели у нас есть 2 переключателя - один включает/выключает зимний режим, а второй включает/выключает тёплый пол.
Теперь создадим правила автоматизации для включения и выключения пола по расписанию. Все правила автоматизации в OpenHAB2 храняться в файлах с расширением *.rules в папке /etc/openhab2/rules/. Переходим в эту папку, создаем в ней файл winter.rules и добавляем в него следующий код:
rule "Flor - Morning start"
when
Time cron "0 40 5 1/1 * ? *"
then
if(SetWinter.state == ON ) {
sendCommand(SONOFF5, ON)
}
end
rule "Flor - Morning stop"
when
Time cron "0 20 8 1/1 * ? *"
then
if(SetWinter.state == ON ) {
sendCommand(SONOFF5, OFF)
}
end
В этом коде содержится 2 правила автоматизации. Первое правило "Flor - Morning start" отвечает за то, что в 5:40 включится подогрев пола. Это правило не просто включает подогрев, а проверяет включен ли зимний режим - if(SetWinter.state == ON ) {}. Если зимний режим включен, то передается команда на включение пола - sendCommand(SONOFF5, ON). Данное правило действет каждый день, но при желании вы можете выбрать для его исполнения определенные дни. Для этого необходимо подкорректировать правило в соответствии с синтаксисом cron.
Правило "Flor - Morning stop" очень похоже на первое, но отвечает за выключение пола. В 8:20 оно проверяет зимний режим и передает команду на выключение пола sendCommand(SONOFF5, OFF). Сохраняем и закрываем файл.
Как видно из примера, включать и выключать элементы из правил очень удобно - просто передаем команду ON или OFF для нужного элемента. С OpenHAB2 вы легко можете настроить автоматизацию теплого пола у себя дома!
Для того, чтобы сделать использование теплого пола еще более экономичным мы можем замерить время нагревания и остывания, и в зависимости от этого скорректировать график включения пола. Следовательно нам необходимо провести замеры температуры пола во время его работы.
Для этого можно попытаться использовать датчик температуры, который подключен к контроллеру теплого пола. Но т.к. мне не удалось выяснить тип датчика, который шел в комплекте с регулятором, а также не хотелось вытаскивать дополнительные провода из регулятора - я решил собрать отдельный датчик температуры.
Датчик температуры я решил собрать на основе Wi-Fi платы NodeMCU ESP8266. Использование модуля ESP дает нам возможность легко передавать значения температуры в OpenHAB2 по протоколу MQTT. Эти значения мы добавим в базу данных и построим по ним график, который наглядно покажет нам как изменяется температура поверхности пола.
Для сборки датчика кроме платы esp нам понадобится сенсор температуры ds18b20 и резистор на 4.7 кОм. Сигнальный пин для сенсора в нишей схеме - это D4. Собираем элементы как показано на схеме:
В спаянном виде это будет выглядеть примерно так:
Для сбора данных с датчика и отправки их по MQTT вы можете написать свой код, например, в Arduino IDE, или можете использовать одну из готовых прошивок. Для быстрой сборки и настройки схемы с сенсорами удобно использовать прошивку ESPEasy. Пользоваться ей очень просто: все что вам необходимо сделать - это загрузить прошивку на вашу плату esp, а дальше все настройки происходят через веб интерфейс. В нашей статье вы можете найти подробную инструкцию о том как загрузить и настроить ESPEasy.
После загрузки и первичной настройки ESPEasy нам необходимо сконфигурировать подключение к MQTT серверу и добавить датчик в систему. Заходимчерез браузер в веб интерфейс ESPEasy 192.168.1.181 (такой ip адрес был присвоен нашему esp модулю), прописываем следующие настройки MQTT сервера и сохраняем:
Переходим во вкладку Devices и добавляем новое устройство. Заполняем все параметры как на скриншоте ниже:
После сохранения вы вернетесь на страницу со списком подключенных сенсоров и увидите, что теперь там выводится температура с датчика. Кроме этого теперь каждые 5 секунд плата NodeMCU отправляет показания с датчика температуры на MQTT сервер в канал /Smarthome1/dallastemp/Temperature.
Не всегда с первой попытки удается получить данные с датчика. Если после выполнения всех инструкций температура будет показываться как 0.00 - необходимо проверить следующие параметры: правильность подключения датчика к плате esp, правильность настройки подключения к MQTT серверу, а также правильно должен быть указан IDX.
После того как вы получили данные с датчика можно приступать к установке датчика на пол. Я просто примотал датчик к полу изолентой:
Чтобы датчик не мерил среднее между температурой пола и воздуха я добавил изоляцию из паралона и нескольких слоев фольги.
Добавим в OpenHAB2 элемент, который будет отвечать за температуру пола. Для этого заходим в файл /etc/openhab2/items/winter.items и добавляем следующую строчку:
Number flor_dallas "Температура пола [%.1f °C]" <temperature> {mqtt="<[mainbroker:/Smarthome1/dallastemp/Temperature:state:default]"}
Это лемент типа "Number", которому мы присвоили имя "flor_dallas" и метку "Температура пола [%.1f °C]". Где [%.1f °C] обознрачает, что значение температуры при использование в sitemaps будет отображаться с одним знаком после запятой, а также к нему будет добавляться °C. С помощью mqtt байндинга система работает с сервером mainbroker и смотрит значения, которые приходят в канал /Smarthome1/dallastemp/Temperature. <temperature> используется для добавления иконки в виде градусника в сайтмапах. Дальше вся работа с этим элементом в системе будет происходить через обращение к его имени - flor_dallas.
Добавим вывод температуры пола на панель "Тёплый пол" в HABPanel. Перейдем в напель, включим режим редактирования и добавим элемент Dummy cо следующими параметрами.
Сохраняем и нажимаем кнопку "Run". Теперь на панели управления у нас 2 переключателя и один индикатор температуры. Как только новое значение температуры будет передано с датчика на MQTT сервер - оно сразу же будет отображено на нашей панеле.
Мы умеем получать данные с датчика и отображать их на панеле управления, теперь для анализа работы подогрева нам необходимо построить график температуры. Для этого мы будем передавать все показания с датчика в базу данных, а потом строить по ним график. Я буду использовать базу данные MySQL. Если вы уже настроили свою базу данные и умеете работать с Persistence, то просто открываете файл /etc/openhab2/persistence/mysql.persist и добавляете в него строчку:
flor_dallas : strategy = everyChange, everyDay, restoreOnStartup
Она означает, что значения переменной flor_dallas будут записываются в базу данных при каждом изменении или при наступлении нового дня. Также restoreOnStartup обозначает, что при перезагрузке системы самое свежее значение из базы данных будет взято как значение этой переменной в системе.
Если у вас не настроена база данных и вы не работали с persistence, тогда вы все это можете узнать в нашей статье - Экспорт данных в MySQL и построение графиков в HABPanel.
Теперь когда данные поступают в базу данных мы можем построить график. Окрываем панель управление в HABPanel, переходим в режим редактирования и добавляем элемент chart со следующими параметрами:
Для построения красивых интерактивных графиков необходимо выбрать тип "n3-line-chart", для базы данных MySQL вводим "mysql" в поле "Service provider". Временной отрезок на график можете выбрать любой, я выбрал неделю - W.
В этой вкладке необходимо указать параметры осей координат. Указываем минимальное и максимальное значение переменной. Если вы не отметите параметр "Include zero", то минимальное значением на шкале будет равно минимальному значению переменной за указанный период. График всегда будет отображаться строго между его минимальным и максимальным значением.
Если вы выводите на графике только один параметр, то удобно добавить вторую ось с точно такими же параметрами. Тогда разметка вертикальной оси будет и слева, и справа от графика.
В последней вкладке вводим какой параметр системы мы будем выводить на графике и по какой оси. Указываем его название, цвет и стиль визуального отображения: Line, Area, Dots. Чтобы график отображался в режиме реального времени и обновлялся с приходом новых данных - необходимо поставить галочку "Live update". Как видно из настроек последней вкладки вы можете добавить вывод сразу нескольких параметров на графике. Они могут быть одного типа или разных, специально для этого есть две оси Y. Сохраняем и выходим из режима редактирования.
Запустим цикл работы теплого пола и подождем пока накопится достаточное количество данных для анализа. Обратине внимание, что график не строится пока переменная не изменится. Т.е. если у вас датчик лежит в помещении с посянной температрой, то новые точки на графике не будут появляться до тех пор пока вы его не нагреете или не охладите.
Вот такой у меня получился график температуры на поверхности пола:
На графике видно, что 5го числа вечером я установил датчик на уже остывающий пол. Шестого утром пол включился и стал нагреваться. В районе 9:30 пол нагрелся и перешел в режим постоянной работы. Около 16:00 я его выключил чтобы замерить время остывания. На следующее утро я его опять включил и замерил время до полного нагревания. На графике время включения и выключения пола не соответствуют времени из правил, т.к. это были тестовые запуски. Это не мешает определить нам время нагрева и остывания пола.
Наблюдая за температурой пола во время его работы я понял, что при 34 градусах он уже достаточно тёплый, а при 26 он уже ощущается холодным. Теперь мы можем легко определить время нагрева и остывания пола. Нагрев:
На графике хорошо видно, что нагрев пола до максимальной температуры происходит примерно за 1,5 часа. При этом нагрев до 34 градусов примерно за час. Следовательно мы можем включать подогрев не за 2 часа до нужного времени, а за час.
Как видно на графике пол остывает до 34 градусов примерно за 30 минут.
Скорректируем правила автоматизации с учетом новых данных:
rule "Flor - Morning start"
when
Time cron "0 10 6 1/1 * ? *"
then
if(SetWinter.state == ON ) {
sendCommand(SONOFF5, ON)
}
end
rule "Flor - Morning stop"
when
Time cron "0 10 8 1/1 * ? *"
then
if(SetWinter.state == ON ) {
sendCommand(SONOFF5, OFF)
}
end
Также добавим правило, чтобы пол был тёплым с 20:30 до 23:00:
rule "Flor - Morning start"
when
Time cron "0 0 19 1/1 * ? *"
then
if(SetWinter.state == ON ) {
sendCommand(SONOFF5, ON)
}
end
rule "Flor - Morning stop"
when
Time cron "0 30 22 1/1 * ? *"
then
if(SetWinter.state == ON ) {
sendCommand(SONOFF5, OFF)
}
end
Как вы видите нам удалось сильно сократить расходы электрожнергии на тёплый пол благодаря тому, что теперь он работает всего несколько часов в день по расписанию!
UPDATE: Новая инстуркция по настройке и работе с MQTT в openHAB 2.x