Esp8266 термостат для водонагревателя с удаленным управлением

Обновлено: 07.05.2024

К тому же уставка TCHset в 0 - абсолютна идентична enableCentralHeating = false. Я хочу отделить мух от котлет в плане управления. У меня enableCentralHeating выполняет роль переключателся Лето/Зима поскольку у меня Бакси 2-х контурный - при enableCentralHeating = false работает только контур ГВС и значение TCHset игнорируются.

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

В принципе более или менее закончил с ESPшным кодом. С кривыми прийдется отложить проверку до отопительного сезона. А веб морда будет отдельно от ESP, ибо нефиг загружать ардуинку фигней :-) Для этого и другие девайсы есть.

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

Понятно. В принципе работу кривых можно оценить по значению "op" и уличной температуры по графикам. Я за основу брал кривые термостата Vaillant. Можно ещё поизвращаться и добавить явно заданную кривую, какую сам состряпаешь. Я добился, таки хорошего быстродействия, веб морда грузится 800 мс.

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

Наконец то закончил и подебажил сегодня. Добавил опцию пост-рециркуляции в режиме отопления - если включена - то всегда рециркулируем, если выключена - то выключаем рециркуляцию, после того как температура установки меньше чем требуемая. Возможно тоже добавлю опцию гистерезиса. Хотя по мне лучше постоянная рециркуляция когда мы режиме отопления - насосу так даже лучше.


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

Здравствуйте. Пробовал ваш код , все данные на mqtt сервер приходят и веб странмцу ,но когда отключаю котел от сети, так и продолжают идти последние показания ( например включено отопление) и.т.д пока не перезагрузишь esp8266 или не включишь котел. Может я что то не так делаю?

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

Спасибо , а самого кода нет ? я немного переделываю под buderus 24k

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

andreyasb, вполне рабочий код от OldNavi, только датчик нужно прикрутить и надо сказать шустрее моего. Кстати, я ранее с сенсором DS18B20 дел не имел и всё бы ни чего, да случилось отключение эл. энергии, котёл перешёл на резервное, а вот сенсор термостата стал дурить -127 периодически, естественно котёл ушёл в аварию, а эл.нос газ перекрыл. Проблему пока не решил, но в код добавил функцию антизамерзайки, всё что ниже +5 гр. включается ручное управление котлом, т.е прямая уставка температуры воды котла.

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

Обновите библиотеки. Но с обновлёнными мой код не будет компилироваться.

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

попробовал ,тоже самое при отключение питания котла, передаются старые показания пока не включишь обратно котел ,получается если пропадет питание на котле нельза смотреть температуру в комнате удаленно с датчика 18в20

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

Generic не подойдет - нужно выбрать платформу ESP8226 (у меня платка WEMOS D1 R2 )

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

У меня собрался под Generic ESP8266 module, возможно не подключили все нужные библиотеки (opentherm например).

Вот список библиотек которые должны быть установлены в Ардуино IDE

ArduinoJson EEPROM_Rotate ESP8266Scheduler NTPClient PubSubClient WiFiManager opentherm_library

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

попробовал ,тоже самое при отключение питания котла, передаются старые показания пока не включишь обратно котел ,получается если пропадет питание на котле нельза смотреть температуру в комнате удаленно с датчика 18в20

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

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

У меня собрался под Generic ESP8266 module, возможно не подключили все нужные библиотеки (opentherm например).

Вот список библиотек которые должны быть установлены в Ардуино IDE

ArduinoJson EEPROM_Rotate ESP8266Scheduler NTPClient PubSubClient WiFiManager opentherm_library

У меня под NodeMCU 1.0.

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

попробовал ,тоже самое при отключение питания котла, передаются старые показания пока не включишь обратно котел ,получается если пропадет питание на котле нельза смотреть температуру в комнате удаленно с датчика 18в20

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

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

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

Те же йаца в другой обертке :-). Проц все равно одинаковый

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

Вот уж умеют эти железки доставать :-). Наблюдал интересную багу - через какое то время - железяка "пропадала" из сети, при этом MQTT работал нормально - железяка отвечала на все запросы MQTT. Долгое и вдумчивое изучение пакетов через tcpdump привело к следующей картине. Железка переставала отвечать на ARP запросы на предмет какой у нее ip адрес и вся сеть была уверена, что интрфейс железяки в down. При этом на своей стороне железяка считала, что она то в сети и исправно работала с MQTT. Причем ситуация повторялась на любой SDK. Гугление привело - что такое может быть багой SDK. Собственно пришил в прошивку костыль - что бы железяка переодически принудительно отсылала gratuitous ARP пакет бродкастом и проблема ушла.

Добавил следующий код

и шлю его с периодичностью в 10 секунд.

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

Просто для справки: пишут, что Wiznet тоже не сильно заморачивается на бесперебойной работе своих чипов. W5100 вроде как тоже ARP не бродкастит автоматически (хотя и заявляется, как чип, берущий на себя всю работу с Ethernet сетью) и иногда это вызывает проблемы. Но лично я не сталкивался с этим настолько часто, что мог бы вообще припомнить, где это мешало бы мне в жизни.

Что поделать - ширпотреб, выпускай - продавай - лепи новый чип.

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

OldNavi, вы ограничиваете значение переменной op вычислением:

полагаю, так проще:

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

Это не проще - это ровно также :-).

Я сейчас код рефракторю - делаю отказоустойчивым - нашел столько интересных багов связанных с железной реализацией :-). Например у меня ловит иногда периодически наводки на OT шину от включающегося насоса. (3 дня убил прежде чем нашел закономерность ).

ПИД регулятор для котла - видимо не буду использовать этот код. Либо его надо будет долго и вдумчиво отлаживать - либо ну его нвфиг. Моменты тепловых инерций котла и дома различаются на порядки и из-за этого интегральная ошибка скачет - мама - не горюй. В итоге даже если температура в доме на градус меньше уставки (а расти она будет ой как не быстро) - ПИД быстро накручивает уставку до 100˚ - а это неприятно, когда у тебя батареи жарят на всю катушку. Кривые все таки лучше - видимо не зря их производителю больше любят. Надо будет только поиграться с автоматом подстройки наклона кривой.

Документация ниже относиться к новому термостату !

Настройка термостата

Работа с отрицательными температурами требуют проверки !



Select thermostat - выбор номера термостата, выбор доступен, если в шестеренке установлено количество термостатов больше одного. Рекомендуется устанавливать количество не больше , чем требуется для экономии ресурсов.

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

Если требуется использовать режим охлаждения или управлять понижением влажности, то нужно включить режим Enable invert mode.

В поле выбора сенсора требуется выбрать датчик/метрику, от которого должен управляться термостат, это может быть локальный , а так же удаленный D2D или VSENS датчик. В поле Num требуется указать номер, если датчик имеет нумерацию.

В поле setup требуется указать значение температуры(или другого параметра в зависимости от типа датчика) , в поле Hysteresis требуется указать гистерезис. Все значения могут быть указаны так же до 3 знаков после запятой(точнее точки).

При ошибках чтения датчика после 3 попыток термостат выключает GPIO до устранения неисправности. При этом на странице термостата показывается ошибка.

Данные установки термостата передаются на все системы модуля, в том числе и на D2D или VSENS. Название метрик доступно на вкладке Metrics. Выключенные и не использующиеся термостаты не будут передавать данные, если выбран датчик disable и нажато после этого кнопка Set.

Коды ошибок: 4 - датчик не существует или еще не получены данные, 5 - 32 битное значение, не поддерживается термостатом, 100 и выше - ошибка датчика.

Работа с планировщиком заданий

На данный момент работа с термостатом предусмотрена в новом планировщике заданий(cron).

Пример установки температуры по времени и дням недели, в поле state off требуется установить ночную температуру, значение state on не имеет значение, так как используем параметр set внутри кода:

Комментарии из примера требуется убрать при вставке в поле ввода.

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

Работа в ModBus Slave

Поддерживается как чтение так и запись настроек через регистры Holding register начиная с 0 адреса.

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

Данные в регистрах содержат целое число, количество знаков определяет установленное значение в веб интерфейсе. Пример: если там ранее было установлено значение 12.34 , то все настройки в ModBus идут умноженные на 100.

Работа в Interpreter

Из опции Interpreter доступно чтение и установка значения термостата:

thermsetX - переменная чтения значения термостата без запятой. Х - номер термостата считая от 1.

thermoset(1,251) - установит 25.1 градусов на 1 термостате, если изначально в настройках термостата было выставлено значение с 1 знаком после запятой.

Включать или выключать термостат в Interpreter можно используя надстройку управления как GPIO.

Используя условие можно менять значение термостата по времени. Пример:

Изменение значения при выполнения условия(например нажатие кнопки) с выводом на экран. Пример:

Умное управление GPIO




В этом режиме подача команды на изменение состояния GPIO происходит только при событии. Поддерживается немедленная отправка состояния на MQTT и MajorDoMo. Ручное изменение GPIO нарушает логику работы термостата.

БЕЗ включенной опции - каждые 10 секунд, термостат принудительно включает требуемый уровень на GPIO. Внешнее управление не нарушает логику работы.

Крайне не рекомендуется использовать remap gpio и vgpio !

х10 Termosat - сравнения чисел с десятыми долями, умноженными на 10. Пример - 25.3 необходимо вводить 253 (Только для температурных датчиков). Опция для старого термостата.

Управление термостатом через SMS GSM модули, Telnet, Telegram и ICQ (ESP32, ESP8266RTOS)

settermo X Y Z - Установка параметров указанного термостата, где X - номер термостата Y и Z - нижняя и верхняя граница.

gettermo X - чтение параметров указанного термостата, где X - номер термостата,

ontermo X - вкл термостата X,

offtermo X - выкл термостата X.

Управление термостатом через MQTT

email/hostname/ thermo_enX Где - X - номер термостата. В топик можно слать 1 или 0 для вкл/выкл термостата,

email/hostname/ thermo_setX Где - X - установка температуры термостата (гистерезис остается тот же),

email/hostname/set/ thermo_enX - установка температуры термостата п ри опции "Отдельный топик на запись"!!

Управление термостатом get командами(старый термостат)

IP/configtermo?rmin0=11&rmax0=22&gpio0=1&st=1 Где - rmin0 - температура, rmax0- гистерезис, gpio0 - чем рулить, ln0 - номер датчика,

IP/configtermo?trn=2&ts=1, Где - trn=2 вкл термостат, ts=1 - номер термостата,

IP/configtermo?trn=1&ts=1, Где - trn=1 выкл термостат, ts=1 - номер термостата.

Управление термостатами как GPIO

Для контроля включением/выключением термостата из любых систем модуля можно использовать дополнительную опцию, требуется указать в шестеренке начальный виртуальный gpio , например 200, в этом случае первый термостат будет соответствовать 200 gpio, второй - 201 и т.д.



У меня ESP-01 – у которого только два управляемых выхода – GPIO 0 и GPIO 2:




2. Нужно:
1. Модуль ESP8266 (ESP-01);
2. Датчик температуры DS18B20;
3. USB-UART-TTL адаптер – например CР2102 (+драйвер);
4. Резистор 4,7 кОм;
5. Провода мама – мама/папа;
6. Изолента/термоусадка;









Если речь идет о настройке/отладки нескольких модулей имеет смысл сделать специальный комплект проводов для подключения.

Поэтому для питания модуля нужно организовать отдельное питание.
Если предполагается использовать более высокое напряжение — нужно использовать понижающий стабилизатор.
В моем случае я использовал две батареи АА 1,5В соединенные последовательно – но испытания показали хватает не на долго (возможно батареи были севшие).
ВНИМАНИЕ! При подключении внешнего источника питания при прошивке нужно соединить его с минусом USB-UART-TTL адаптера.

5. Загрузка скетча.
Если все сделали – можно начинать загрузку скетча:
vk.com/doc148062645_43703…630&dl=4f5f570366aac0e93a
Но для начала нужно в строчках с именем сети и пароля указать имя и пароль вашей сети:
const char *ssid = "…";
const char *password = "…";
Процесс загрузки визуально отличается от привычной загрузки – он будет сопровождаться рядом точек в окне статуса загрузки (см. фото).


6. Подключение датчика температуры.
Схема подключения датчика температуры типовая (см. рисунок).


Потребуется правда поработать паяльником – припаять сопротивление 4,7 кОм и датчик температуры, а так же перемычку включения питания (см. ранее).

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

Работа Wi-Fi модулей Мастер Кит в системе управления домашней автоматизацией OpenHAB

Светодиодные драйверы MEAN WELL для систем внутреннего освещения

Видео :


Тестовая конфигурация OpenHAB здесь.

Итак, термостат, о котором пойдет речь на фотографии, крайний слева, одно реле и 1 датчик температуры.

Работа Wi-Fi модулей Мастер Кит в системе управления домашней автоматизацией OpenHAB

Тест-драйв № 2

Температура может регулироваться в пределах 1…99 градусов Цельсия, гистерезис (точность поддержания температуры) – 1…5 °С с шагом 1 градус. Питание постоянное – 12 В, потребляемый ток порядка 250 мА.

Все файлы, которые мы будем менять, находятся в папке C:∖OpenHab∖configurations. Именно эту папку следует сохранять в качестве резервной копии. Скопируйте в нее файлы из архива с нашего сайта configurations_testdive2.zip.

1. Общие настройки. В файле openhab.cfg ничего менять не будем. Подойдут те же настройки TCP/UDP биндинга, что мы использовали в первой части для подключения Wi-Fi.

2. Интерфейс системы. Название конфигурации осталось прежним, поэтому и запускать ее будем так же. Наберите в командной строке браузера. (Предполагаем, что OpenHAB у вас установлен на этом же компьютере, иначе вместо localhost следует набрать IP-адрес сервера OpenHAB в вашей сети).

Работа Wi-Fi модулей Мастер Кит в системе управления домашней автоматизацией OpenHAB

Главная страница не изменилась.

Работа Wi-Fi модулей Мастер Кит в системе управления домашней автоматизацией OpenHAB

А вот на второй странице появился новый раздел MP3502 Wi-Fi термостат, при этом содержимое файла testdrive.sitemap я не трогал.

Работа Wi-Fi модулей Мастер Кит в системе управления домашней автоматизацией OpenHAB

Все настройки сделаны в файле testdrive.Items, и сам экран управления термостатом выглядит так:

Работа Wi-Fi модулей Мастер Кит в системе управления домашней автоматизацией OpenHAB

3. Описание в системе модуля MP3500 и способов управления им. Все элементы управления описываются в файле с расширением .items, который находится в папке C:∖OpenHab∖configurations∖items. Приведу только строки, которые я добавил для этой статьи, и которые относятся к термостату и определяют вид приведенной выше страницы:

Напомню, каждый Item описывается в одну строку; при редактировании в NotePad обратите на это внимание. Возьмите заготовку из моего файла testrive.items.

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

Немного пояснений. Применение скрытых Inems обусловлено тем, что TCP/UDP Binding, к сожалению, не может передавать в модуль непосредственно из строки команды типа !SetR0_1 , которые понимает модуль. Он может лишь при получении Item-ом команды OFF заглянуть в соответствующий файл с правилами трансформации и взять в нем команду, которая соответствует команде OFF. Вот пример,

>[OFF:192.168.2.108:7777:MAP(MP3502_U_eco.map)

На человеческий язык переводится так: при получении Item-ом команды OFF сделать исходящее обращение > по протоколу UDP на адрес: порт 192.168.2.108:7777 и передать в него строку, которую надо взять из файла трансформации MP3502_U_eco.map и которая соответствует команде OFF.

Содержимое моего файла MP3502_U_eco.map, который расположен в папке C:∖OpenHab∖configurations∖transform, состоит из двух строк, которые выглядят так:

ON=!GetAll∖r
OFF=!GetAll∖r

В данном случае я хочу, чтобы при любой команде, которую получает Item с типом Switch ON или OFF в модуль термостата уходил запрос состояния. Список команд модуля есть в описании на сайте. Других команд модуль типа Switch просто не понимает. Подробнее об Items.

Теперь делаю вывод: скрытые элементы мне нужны, чтобы вызвать необходимый файл трансформации с нужными настройками модуля при ограниченном наборе команд каждого элемента (всего ON и OFF).

Теперь сами скрытые элементы, вот они:

Эти элементы не отображаются в интерфейсе. Чтобы отобразить, надо вставить признак группы (Wi-Fi_3502) .

Назначение элементов станет понятнее, если вы посмотрите на алгоритм управления модулем и описание правил (Rules).

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

if(receivedCommand==INCREASE) percent =percent + 1
if(receivedCommand==DECREASE) percent =percent — 1

Обращаю внимание, что в OpenHAB нельзя в настройке биндинга указывать конкретный порт; в нашем случае это мог бы быть порт 7777, но почему-то корректная работа началась только, когда я поставил звездочку вместе с адресом 192.168.2.108:* Помните? Посмотрите, в предыдущей статье: мы настраивали файл конфигурации и в нем разрешали биндингу UDP использовать маскирование… Вот, пригодилось!

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

Внимание! Сам код выделен коричневым. При копировании в свой файл правильно отработайте знаками // комментарии.

На этом пока все, успехов!

Продолжение следует! Думаю, это будет подключение устройств через COM-порт и освоение облачной технологии MQTT.

Читайте также: