Оглавление:
Видео: NEST ваш старый термостат: 4 шага (с изображениями)
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Система отопления в моем доме, наверное, такая же старая, как и сам дом. Ему около 30 лет, и это нормально с точки зрения домашних лет, но с точки зрения технологий он в значительной степени застрял в ледниковом периоде. Есть 2 основные проблемы с коммерческими решениями:
- непомерно высокая цена
- продукт как услуга
Мы все помним, что случилось с Revolv, и я не очень хочу, чтобы это случилось со мной посреди зимы. Имея это в виду, я представляю вам невероятно подозрительно выглядящий, но функциональный контроллер NEST-Alike для вашего старого термостата. Не волнуйтесь, я планирую вскоре добавить гораздо лучший корпус!
Функции:
- возможность пользоваться имеющимся термостатом (на случай, если жена по этому поводу стонет)
- удаленный доступ
- ВНУТРЕННИЙ режим
- индикатор оптимальной температуры
- Работает с Alexa
Скоро (проверяйте обновления здесь)
- Google Home
- Календарь Google
- Несколько датчиков
- Управление радиатором
- IFTT интеграции
- Поддержка таскеров
- HTTP-запросы
- Намного лучше выглядящий корпус
Шаг 1: Как работает термостат
Термостат скорее всего подключен к ВЫСОКОМУ НАПРЯЖЕНИЮ! Не пытайтесь что-либо сделать, если не убедитесь, что цепь отключена. Вы можете причинить себе вред и повредить подключенное оборудование. Проконсультируйтесь с квалифицированным электриком, чтобы обеспечить вашу безопасность
Термостат Honeywell - это настенный блок с питанием от сети (для обычных устройств Sonoff требуется минимум 90 В, в моей схеме - 230 В). Блок подключен к основному блоку управления (который является более продвинутым блоком) и отправляет сигнал, когда температура падает ниже заданного уровня. Хотя ваш блок может быть другим, принцип, скорее всего, тот же. Если у вас 3 провода и нет радиосвязи между настенным блоком - это руководство для вас.
Я знаю принцип работы 3-х проводных термостатов, и это не помешало мне сжечь предохранитель, случайно закоротив 2 провода! У меня к устройству подключено 3 провода (4-й - земля). Мой термостат Honeywell не является беспроводным, поэтому для переключения сигнала я могу использовать Sonoff Basic. Пришло время разобрать его и посмотреть, как сигнал поступает на блок. При ближайшем рассмотрении терминал подключается следующим образом:
- (синий) - Земля
- (желтый) - сигнал, при сильном нажатии включается обогрев
- не используется
- (красный) - провод под напряжением, используемый для высокого уровня сигнала
Чтобы достичь своей цели, я должен замкнуть провод под напряжением на сигнальный провод, когда я хочу, чтобы мой обогрев был включен. Если у вас есть термостат, подключенный аналогичным образом, вам повезло, так как Sonoff Basic будет достаточно, чтобы сделать свое дело.
Шаг 2. Подготовка Sonoff Basic
Прежде чем мы начнем подключать провода, мы должны добавить в смесь датчик температуры (DHT11). Убедитесь, что на вашем устройстве Sonoff установлена прошивка Tasmota (у меня есть отличное руководство по перепрошивке), и ваш Sonoff с поддержкой Tasmota настроен правильно (также я уже охвачен мной). Теперь все, что вам осталось, это подключить датчик DHT11 к Sonoff и настроить его для отчетов о температуре.
DHT11 поставляется с 3 подключенными контактами: сигнал - GPIO14Vcc - 3.3VGND - GND
Я проделал дыру, меня не беспокоит, как это выглядит сейчас, все, что мне нужно, это подтверждение концепции и валидация. Я сделаю красивый и блестящий корпус, когда прибудет мой 3D-принтер. Я уделил особое внимание тому, как я подключаю Sonoff, так как я должен убедиться, что провод под напряжением подключается к сигнальному проводу на другом конце устройства Sonoff. В блоке Honeywell встроен нагрузочный резистор (R), ограничивающий ток. Хотя цепь защищена предохранителем на 3 А, разумно подобрать такое же сопротивление для дополнительной защиты. Как только я подготовил провода, пришло время выключить основное питание и подключить Sonoff обратно.
Sonoff Tasmota - термостат Honeywell
INPUT Live - 4-й терминал Live
INPUT GND - 1-й контакт GND
ВЫХОДНОЙ сигнал - сигнал 2-го терминала
Я уже упоминал об этом раньше, я не собираюсь акцентировать внимание на внешнем виде этого. Жена убедилась, и я могу сосредоточиться на функциональности и устранении любых ошибок, которые могут возникнуть. Хорошо, что оригинальный термостат все еще работает. Если я включу его, он переопределит тот, который основан на Sonoff Tasmota. Это должно быть отличной резервной копией на случай непредвиденных событий.
Шаг 3: NodeRED
Обратите внимание, что видео может содержать старые ссылки на NodeRed, я постоянно работаю над улучшением дизайна. Это небольшие изменения, и файлы статей постоянно обновляются
Я наткнулся на этот дизайн в Интернете. Выглядит отлично, однако при ближайшем рассмотрении виджет не совсем подходит для NodeRED. Для этого нужно установить 5 полезных нагрузок, что совершенно не так, как работает дизайн узлов. Мне потребовалось некоторое время, чтобы придумать лучший способ передать всю эту информацию, чтобы обновить виджет и сохранить его работоспособность. Я уверен, что со временем я потрачу больше времени на дизайн, чтобы можно было продвигать все необходимые обновления с помощью одного объекта msg. На данный момент это то, что есть.
Температурный поток
DHT11 отправляет отчеты каждые X секунд на сервер NodeRED. Я увеличил эту частоту через консоль Tasmota. Просто запустите команду, чтобы установить частоту в секундах:
TelePeriod Установите период телеметрии от 10 до 3600 секунд.
Это делается в основном для тестов, так как я не хочу ждать минуты, чтобы проверить, сработали ли мои исправления ошибок. Сохранение высокой частоты приведет к более частому срабатыванию нагревателя в течение более коротких периодов времени, поэтому не устанавливайте его на 10 секунд для других целей, кроме тестирования. Узел MQTT извлекает данные из:
sonoff / tele / датчик
и хранит наиболее полезные данные в следующих объектах:
msg.payload. DHT11. Temperature msg.payload. DHT11. Humidity
Чтобы ограничить количество ошибок, я добавил узел сглаживания для усреднения результатов и обновил переменную потока: NodeRED:
Функциональный узел - Обновите TempAmbient
flow.set ('TempAmbient', msg.payload. DHT11. Temperature); return msg;
Обновление виджета
Я решил, что 5 секунд - это хорошая частота обновления, поэтому выставляю все необходимые значения с этой частотой. Единственное исключение - слайдер, который по понятной причине срабатывает мгновенно.
Каждый соответствующий узел отправляет полезную нагрузку с назначенной темой виджету типа «гнездо».
- цвет (отопление | охлаждение * | выкл. & hvac_state)
- лист (истина | ложь и has_leaf)
- прочь (истина | ложь и прочь)
- Окружающая температура (число и окружающая_температура)
- Целевая температура (число и целевая температура)
*не используется
NodeRED: узел функции - обновление виджета
цвет
x = flow.get ('TempTarget'); // targetz = flow.get ('TempAmbient'); //окружающий
if (z = x) {
flow.set ('heatingState', "выключено"); flow.set ('HeatingSwitch', "ВЫКЛ"); } msg.payload = z; msg.topic = "температура_окружающей среды"; return msg;
лист
x = flow.get ('TempAmbient'); если (x> 17 && x <23) {flow.set ('лист', истина); msg.payload = true; msg.topic = "has_leaf"; return msg; } else {flow.set ('лист', ложь); msg.payload = false; msg.topic = "has_leaf"; return msg; }
Отмена цвета
x = flow.get ('прочь'); если (x === true) {msg.topic = "hvac_state"; msg.payload = "выключено"; return msg; }
msg.topic = "hvac_state";
msg.payload = flow.get ('heatingState');
return msg;
Прочь
x = flow.get ('прочь'); if (x === true) {flow.set ('HeatingSwitch', "ВЫКЛ"); flow.set ('heatingState', "выключено"); }
msg.topic = "прочь";
msg.payload = flow.get ('прочь'); return msg;
Целевая температура
если (msg.topic === "обновление") {msg.topic = "целевая_температура"; msg.payload = flow.get ('TempTarget'); return msg; }
if (msg.command === "SetTargetTemperatureRequest") {
flow.set ('прочь', ложь); msg.topic = "целевая температура"; flow.set ('TempTarget', msg.payload); }
if (msg.topic === "слайдер") {
flow.set ('прочь', ложь); msg.topic = "целевая температура"; flow.set ('TempTarget', msg.payload); }
if (msg.command === "GetTemperatureReadingRequest") {}
return msg;
Как видите, я отказался от переменных потока, чтобы можно было вспомнить значение в любой момент времени. У меня есть поток отладки, который в основном считывает все сохраненные значения.
- «TempAmbinet» - сохраняет текущую температуру
- «TempTarget» - содержит целевое временное значение.
- «Лист» - при необходимости отображает лист
- «Ушел» - при необходимости отображает статус «ушел»
- «HeatingState» - меняет цвет дисплея
- «HeatingSwitch» - контролирует состояние реле.
Задача заключалась в том, чтобы на самом деле убедиться, что информация обновляется при «обновлении» и при запросе другими способами (Alexa и т. Д.). Вот почему вы увидите разные условия в JavaScript. Каждый раз, когда значения обновляются, отправляются в переменную потока, и виджет обновляется.
Слайдер
Тестирование показало, что необходимо дополнительное обновление ползунка (ползунок подталкивает целевую температуру). Slider отправляет полезную нагрузку (номер) со связанной темой «слайдер» при перемещении. Вдобавок ко всему, я хочу, чтобы ползунок занял правильное положение, если имеется несколько веб-интерфейсов. Для этого каждые 5 секунд я просто обновляю положение ползунка до текущей целевой температуры.
NodeRED: узел функции - ползунок обновления '
msg.payload = flow.get ('TempTarget'); вернуть сообщение;
Релейное управление
Контроллер реле простой, занимает (пока) два входа. Алекса истинно | ложно и взаимодействие, которое следует за обновлением переменной потока «Переключатель нагрева». Нет необходимости в мгновенном действии, поэтому для простоты он выполняется с той же частотой обновления 5 секунд, что и остальная часть потока.
Реле подключается через MQTT. Узел отправляет в тему команды ON | OFF:
sonoff / cmnd / POWER1
Функциональный узел принимает истинное | ложное значение от Alexa, а также изменяет состояние входа в соответствии с переменной потока «heatingSwitch».
NodeRED: Функциональный узел - управляющее реле '
если (msg.command === "TurnOffRequest") {msg.payload = "ВЫКЛ"; return msg; }
if (msg.command === "TurnOnRequest") {
msg.payload = "ВКЛ"; flow.set ('TempTarget', 21); return msg; } если (msg.topic === "обновление") {msg.payload = flow.get ('heatingSwitch'); } return msg;
Интеграция с Alexa
Это первое устройство, на котором мне пришлось отключить «автоматическое подтверждение». Вместо того, чтобы автоматически предполагать ответ, я сгенерировал его, поскольку мне нужна возможность запрашивать установленную температуру. В принципе, msg.payload = true | false указывает, был ли запрос успешным, а найденные здесь шаблоны сделают все остальное. Если вы новичок в Alexa и NodeRed, обязательно прочтите это.
Я решил передать благодарности отдельно (я знаю, что это не лучший способ), чтобы иметь возможность контролировать все это немного лучше. Правильно, каждый ответ должен быть дан в конце цепочки команд. Моя компания рискует не вернуть ошибки, если они произойдут. Обратите внимание, что для согласованности я обновляю только переменные, в то время как цикл обновления подталкивает новые значения к виджету.
NodeRED: функциональный узел - обработка ответов Alexa '
// Какова целевая температура термостата if (msg.command === "GetTemperatureReadingRequest") {x = flow.get ('TempTarget'); msg.extra = {"temperatureReading": {"value": x}, "applianceResponseTimestamp": новая дата (). toISOString ()}; msg.payload = true; return msg; } // Устанавливаем температуру (не ниже 10 или выше 30) if (msg.command === "SetTargetTemperatureRequest") {if (msg.payload 30) {var range = {min: 10.0, max: 30.0} msg.payload = false; msg.extra = диапазон; } еще {msg.extra = {targetTemperature: {значение: msg.payload}}; msg.payload = true; } return msg; } // Включаем if (msg.command === "TurnOnRequest") {msg.payload = true; flow.set ('прочь', ложь); flow.set ('TempTarget', 21); return msg; } // Отключаем if (msg.command === "TurnOffRequest") {msg.payload = true; flow.set ('прочь', истина); return msg;
Шаг 4: Заключение
Если вы открываете панель управления NodeRED для WAN, всей системой отопления можно будет управлять удаленно. Я бы порекомендовал вам прочитать следующие статьи, чтобы узнать больше о безопасности NodeRED и NodeRED.
- NodeRED для новичков
- Безопасность NodeRED
Кроме того, если вы хотите быть в курсе обновлений этого проекта - подпишитесь на меня на платформе по вашему выбору:
- Facebo хорошо
- Твиттер
- YouTube
И если вам хочется купить мне кофе или поддержать меня более продолжительно:
- Paypal
- Патреон
Надеюсь, вам понравился проект!