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

24 сентября 2019, 16:07

Этой статьей я начинаю цикл описания - что сделано на сегодняшний день в доме по улучшению комфортного проживания. 

Я за прогресс! Но всегда помню, что меня окружают разные люди и умный дом делаю таким, чтобы каждый чувствовал себя в нем комфортно. И это не только связано с удобством включения голосом, например, лампочки, а чтобы эту лампочку можно было включить и традиционным способом. Чтобы гости не чувствовали себя идиотами, пытаясь справиться с незнакомыми для себя способами управления традиционными вещами. 

 Речь сегодня пойдет о способе задания температуры в помещении.

Краткое техническое задание: 

 - Контроллер умного дома:  Wiren Board 6 Универсальный контроллер для автоматизации с открытым ПО на базе Linux. 

 - Комплектующие к контроллеру: Модельный ряд реле, датчиков, вспомогательных устройств Wiren Board.

 - Устройства общения человек-машина-человек: Термостаты, информационные электронные доски, извещатели, кнопки, переключатели, лампы. 

 - Программное обеспечение: Встроенное ПО Wiren Board, Node-red, Apple ПО, Sprut-Hub.

Так как по своей профессии я инженер, то первым делом занялся анализом, что же есть на рынке из устройств, позволяющих задавать температуру в помещении. Одним из условий была возможность интеграции в систему Умный Дом по протоколу Modbus RTU (RS485), чтобы иметь понятный, простой интерфейс, и, по возможности, не содержать бесполезной информации, типа расписания работы на неделю, лишних иконок и т.д. 

1600x_image.png?1569319468

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

1600x_image.png?1569319467

Зачем мне, например , значок кривой руки, вентиля или дыма из трубы, символизирующего уровень вентиляции? Пленка вместо стекла и углы обзора окончательно разубедили что-либо покупать у самого многочисленного населения нашей планеты.

1600x_image.png?1569319468

Далее попался термостат с Modbus от Siemens RDF302. Все устраивает, даже архаичный внешний вид не сильно смущает, ведь это же Siemens! А нет, купить его практически невозможно. Сроки поставки от месяца, цена высокая, одну штуку никто не повезет в Санкт-Петербург для экспериментов.


Ищем далее, и находим ПУ-3. Простой, без лишней информации на экране, с ярким сенсорным дисплеем, из коммутаций - только шина RS485 и питание. А самое главное, производится в родном городе, есть в наличии и цена ниже китайского.

Возможности

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

Так как в качестве основы Умного Дома выбран универсальный контроллер Wiren Board 6 (WB6), далее я опишу последовательность действий для подключения устройств по Modbus к данному контроллеру и дальнейшего использования его в управлении Умным Домом. Сразу хочу сказать, что без помощи Андрея Попова (Белоруссия), у меня вряд ли что-либо получилось, поэтому ему отдельное спасибо.

Последовательность

  1. Получение таблицы адресов управления устройством по шине RS485. 
  2. Написание файла конфигурации устройства для контроллера WB6. 
  3. Подключение к контроллеру. 
  4. Написание алгоритма применения в Node-red и использование в Homekit. 
  5. Написание шаблона для SprutHub (в доработке).

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

АдресОписание
0
Чтение текущей температуры на встроенном датчике
1
Задание желаемой температуры
2
Включение и выключение термостата
3
Режим работы термостата, 0-авто, 1-нагрев, 2-охлаждение, 3-вентиляция 
4
Скорость вентилятора
9
Внешняя температура
20
Задание времени. Часы 
21
Задание времени. Минуты
22
День недели

На основе этих данных пишем файл конфигурации устройства для контроллера WB6.

{
"device_type":"TemperatureControlPanel",
"device":{
"name":"Temperature Control Panel",
"id":"temp",
"max_read_registers":0,
"channels":[
{
"name":"Current temperature",
"reg_type":"holding",
"readonly":false,
"address":0,
"type":"temperature",
"scale":0.1,
"format":"s16"
},
{
"name":"Mode",
"reg_type":"holding",
"readonly":false,
"address":3,
"type":"value",
"scale":1,
"format":"s16"
},
{
"name":"Speed Vent",
"reg_type":"holding",
"readonly":false,
"address":4,
"type":"range",
"scale":1,
"max":5
},
{
"name":"Temperature Set",
"reg_type":"holding",
"readonly":false,
"address":1,
"type":"range",
"scale":0.1,
"max":35
},
{
"name":"The thermostat works",
"reg_type":"holding",
"readonly":false,
"address":2,
"type":"switch"

      },
{
"name":"Outdoor temperature",
"reg_type":"holding",
"readonly":false,
"address":9,
"type":"value",
"scale":0.1,
"format":"s16"
}

  ]
}
}

Внешний вид устройства в разделе Wiren Board config.

Как мы видим, можно менять скорость вращения вентилятора, устанавливать желаемую температуру, включать или отключать термостат. Из информационных топиков можно увидеть текущую температуру , измеряемую встроенным датчиком, режим работы термостата, а также внешнюю температуру, отображаемую на термостате. Внешнюю температуру можно получать от любого датчика, имеющего топики в Wiren Board.

Данный термостат не имеет силовых выходов для подключения нагрузки, поэтому для реализации возможности управления нагрузкой пишем правила в Node-red. В качестве нагрузки можно использовать реле Wiren Board, подключенное также к контроллеру WB6 по RS485. 

Создаем простое правило в Node-red.  Для этого используем написанную ноду node-red-contrib-wirenboard. Для управления нагрузкой сравниваем заданную температуру с текущей. На выходе функции имеем Ноль или Единицу, в зависимости от величин заданной температуры и текущей температуры.

[{"id":"4f94a426.b0c74c","type":"join","z":"d25093e8.f49e6","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":1335,"y":2260,"wires":[["b6856f00.088c"]],"l":false},{"id":"b6856f00.088c","type":"function","z":"d25093e8.f49e6","name":"Logik","func":"if (msg.payload.TargetTemperature > msg.payload.CurrentTemperature) {\n    msg.payload = \"1\";\n}\nelse if (msg.payload.TargetTemperature < msg.payload.CurrentTemperature) {\n    msg.payload = \"0\";\n}\nreturn msg;","outputs":1,"noerr":0,"x":1395,"y":2260,"wires":[[]],"l":false},{"id":"1198a1d2.0096ae","type":"inject","z":"d25093e8.f49e6","name":"","topic":"","payload":"","payloadType":"date","repeat":"5","crontab":"","once":false,"onceDelay":0.1,"x":995,"y":2240,"wires":[["96badb93.bb8e58"]],"l":false},{"id":"e2f7fe8b.f1cc5","type":"inject","z":"d25093e8.f49e6","name":"","topic":"","payload":"","payloadType":"date","repeat":"5","crontab":"","once":false,"onceDelay":0.1,"x":995,"y":2300,"wires":[["d2ad9fd.7ed376"]],"l":false},{"id":"d2ad9fd.7ed376","type":"wb-get","z":"d25093e8.f49e6","name":"температура уставки","server":"9d631ffc.e111f","filter":"/devices/temp_103/controls/Temperature Set","x":1140,"y":2300,"wires":[["b6b9e0a4.bc3c7"]]},{"id":"e9aa300d.0516f","type":"change","z":"d25093e8.f49e6","name":"var","rules":[{"t":"change","p":"topic","pt":"msg","from":"/devices/temp_100/controls/Current temperature","fromt":"str","to":"CurrentTemperature","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1275,"y":2240,"wires":[["4f94a426.b0c74c"]],"l":false},{"id":"b6b9e0a4.bc3c7","type":"change","z":"d25093e8.f49e6","name":"var","rules":[{"t":"change","p":"topic","pt":"msg","from":"/devices/temp_100/controls/Temperature Set","fromt":"str","to":"TargetTemperature","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1275,"y":2300,"wires":[["4f94a426.b0c74c"]],"l":false},{"id":"96badb93.bb8e58","type":"wb-get","z":"d25093e8.f49e6","name":"Текущая темература","server":"9d631ffc.e111f","filter":"/devices/temp_103/controls/Current temperature","x":1140,"y":2240,"wires":[["e9aa300d.0516f"]]},{"id":"9d631ffc.e111f","type":"wb-server","z":0,"name":"WB","url":"192.168.88.143","allowuntrusted":true}]

Более сложное правило в Node-red. Передаем данные с термостата в Apple Homekit, желаемую температуру можно задавать как на самом термостате, так и в приложении Дом на iOS устройстве. Все параметры синхронизируются между собой.  На реле выдается состояние Ноль или Единица, обработанная нодой node-red-contrib-homekit-bridged.

[{"id":"6f5a9630.00aa48","type":"homekit-service","z":"f4eb4999.3608c8","name":"Термостат","serviceName":"Thermostat","x":635,"y":380,"wires":[["547f25a0.48f0ac","65abb0c0.33338","73315bf9.1ae444","8aa31c7.9446de"]],"l":false},{"id":"547f25a0.48f0ac","type":"function","z":"f4eb4999.3608c8","name":"Save TEMP/HUM/TT","func":"var T1 = context.get(\"T1\")||{\n    \"target_temperature\": 22,\n    \"temperature\": 20,\n    \"humidity\": 50,\n    \"targetHeatCoolState\": 0\n};\n\nvar OutMsg = {};\n\nif (msg.payload.TargetHeatingCoolingState !== undefined){\n    T1.targetHeatCoolState = msg.payload.TargetHeatingCoolingState;\n}\n\nif (msg.payload.CurrentTemperature !== undefined) {\n    T1.temperature = msg.payload.CurrentTemperature;\n}\n\nif (msg.payload.CurrentRelativeHumidity !== undefined) {\n    T1.humidity = msg.payload.CurrentRelativeHumidity;\n}\n\nif (msg.payload.TargetTemperature !== undefined) {\n    T1.target_temperature = msg.payload.TargetTemperature;\n}\n\nif (T1.targetHeatCoolState == 1){\n    if (T1.temperature >= T1.target_temperature) {\n        OutMsg.payload = { \n            CurrentHeatingCoolingState: 0\n        };\n    } else {\n        OutMsg.payload = { \n            CurrentHeatingCoolingState: 1\n        };\n    }\n} else if (T1.targetHeatCoolState === 0){\n    OutMsg.payload = {\n        CurrentHeatingCoolingState: 0\n    };\n}\n\ncontext.set(\"T1\",T1);\n\nreturn OutMsg;\n","outputs":1,"noerr":0,"x":635,"y":440,"wires":[["6f5a9630.00aa48"]],"l":false},{"id":"518332d5.fbb68c","type":"inject","z":"f4eb4999.3608c8","name":"Check every 5 sec","topic":"","payload":"","payloadType":"date","repeat":"5","crontab":"","once":true,"onceDelay":0.1,"x":635,"y":500,"wires":[["547f25a0.48f0ac"]],"l":false},{"id":"6be4f0dc.c5e6","type":"change","z":"f4eb4999.3608c8","name":"Преобразование","rules":[{"t":"move","p":"payload","pt":"msg","to":"payload.TargetTemperature","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":515,"y":360,"wires":[["6f5a9630.00aa48"]],"l":false},{"id":"65abb0c0.33338","type":"change","z":"f4eb4999.3608c8","name":"Преобразование","rules":[{"t":"move","p":"payload.TargetTemperature","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":735,"y":460,"wires":[["598d0402.c2cb6c"]],"l":false},{"id":"76b0acf2.8926a4","type":"change","z":"f4eb4999.3608c8","name":"Преобразование","rules":[{"t":"move","p":"payload","pt":"msg","to":"payload.CurrentTemperature","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":515,"y":420,"wires":[["6f5a9630.00aa48"]],"l":false},{"id":"e2ab33e3.7da14","type":"change","z":"f4eb4999.3608c8","name":"Преобразование","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"TargetHeatingCoolingState\":0}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":515,"y":500,"wires":[["6f5a9630.00aa48"]],"l":false},{"id":"ae5b73e.f1de79","type":"wb-input","z":"f4eb4999.3608c8","name":"Температура уставки","server":"9d631ffc.e111f","filter":"/devices/temp_103/controls/Temperature Set","x":320,"y":360,"wires":[["6be4f0dc.c5e6"]]},{"id":"9e0dbcec.e88a6","type":"wb-input","z":"f4eb4999.3608c8","name":"Текущая температура","server":"9d631ffc.e111f","filter":"/devices/temp_103/controls/Current temperature","x":320,"y":420,"wires":[["76b0acf2.8926a4"]]},{"id":"c68eb8a5.076388","type":"wb-input","z":"f4eb4999.3608c8","name":"Вкл/Откл","server":"9d631ffc.e111f","filter":"/devices/temp_103/controls/The thermostat works","x":280,"y":480,"wires":[["85be6c7a.3bbdb"]]},{"id":"598d0402.c2cb6c","type":"wb-output","z":"f4eb4999.3608c8","name":"Температура уставки","server":"9d631ffc.e111f","filter":"/devices/temp_103/controls/Temperature Set","command":"/on","commandType":"wb_cmd","payload":"payload","payloadType":"msg","x":920,"y":460,"wires":[]},{"id":"e0d38aff.c02008","type":"wb-output","z":"f4eb4999.3608c8","name":"Вкл/Откл","server":"9d631ffc.e111f","filter":"/devices/temp_103/controls/The thermostat works","command":"/on","commandType":"wb_cmd","payload":"payload","payloadType":"msg","x":960,"y":500,"wires":[]},{"id":"85be6c7a.3bbdb","type":"switch","z":"f4eb4999.3608c8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":410,"y":480,"wires":[["78659a3a.9836b4"],["e2ab33e3.7da14"]]},{"id":"78659a3a.9836b4","type":"change","z":"f4eb4999.3608c8","name":"Преобразование","rules":[{"t":"change","p":"payload","pt":"msg","from":"1","fromt":"str","to":"{\"TargetHeatingCoolingState\":1}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":515,"y":460,"wires":[["6f5a9630.00aa48"]],"l":false},{"id":"73315bf9.1ae444","type":"change","z":"f4eb4999.3608c8","name":"Преобразование","rules":[{"t":"move","p":"payload.CurrentHeatingCoolingState","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":735,"y":400,"wires":[["98d56767.ad4318"]],"l":false},{"id":"98d56767.ad4318","type":"switch","z":"f4eb4999.3608c8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":830,"y":400,"wires":[["b07d3991.f4f0a8"],["b07d3991.f4f0a8"]]},{"id":"8aa31c7.9446de","type":"change","z":"f4eb4999.3608c8","name":"Преобразование","rules":[{"t":"move","p":"payload.TargetHeatingCoolingState","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":735,"y":500,"wires":[["2997cb74.a81404"]],"l":false},{"id":"2997cb74.a81404","type":"switch","z":"f4eb4999.3608c8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":830,"y":500,"wires":[["e0d38aff.c02008"],["e0d38aff.c02008"]]},{"id":"b07d3991.f4f0a8","type":"debug","z":"f4eb4999.3608c8","name":"На реле","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","x":960,"y":400,"wires":[]},{"id":"9d631ffc.e111f","type":"wb-server","z":0,"name":"WB","url":"192.168.88.143","allowuntrusted":true}]

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

Дальнейшее развитие этой темы будет после выхода релиза Sprut.Hub. Где можно будет, минуя Node-red, пробросить большинство возможностей термостата в Homekit.

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

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

  •  Управление климатом в комнатах с теплыми полами. 
  •  Управление котельной в Умном Доме

  • Управление вентиляцией в Умном Доме


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @Soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Дмитрий Батюшин (ReD)
    Дмитрий Батюшин (ReD) 2 месяца назад

    Отличная статья. не хватает ценника на устройство 

  2. (Tolchus)
    (Tolchus) 2 месяца назад

    Буду пробовать, как раз в изучении вопроса климата и управление котельной! Ждем продолжение!

  3. (nikita.yuryev)
    (nikita.yuryev) 2 месяца назад

    Тоже хочу управлять с помощью термостатов полами+батареи в комнате (коллекторная система отопления). Хочу строить УД на SprutHub/WirenBoard. Очень жду продолжения подобных тем и появления Spruthub. 

  4. (dibo)
    (dibo) 2 месяца назад

    Отличная практичная статья, спасибо!

    Жду продолжения. 

К списку статей

Скидки для сообщества

Wiren Board

+7 495 150-66-19
Промокод:
SPRUTDELIVERY
Размер скидки:
0%
Вы получите бесплатную доставку.

Разумный дом

+7 487 223-51-50
Промокод:
71
Размер скидки:
20%
Указывать в письме или комментарии к заказу

УЮТНЫЙ ДОМ

+7 495 797-21-74
Промокод:
SPRUT
Размер скидки:
5%

Z-Wave Ukraine

+380 68 641 9670
Промокод:
Sprut-UA
Размер скидки:
15%

Интернет-магазин yourhomekit.ru

+7 914 550-51-11
Промокод:
SPRUT-BLG
Размер скидки:
8%
Cамый большой ассортимент в России аксессуаров Apple HomeKit

Похожие статьи

04 сентября 2018, 12:14
Интеграция RGB ленты на ESP8266 с прошивкой tasmota в систему HomeBridge (HomeKit)
09 ноября 2018, 20:54
Кейс создания умного дома без каких либо прокладок в виде Raspberry pi
15 октября 2018, 09:05
Прошивка для Sonoff c нативным HomeKit
15 ноября 2018, 09:42
Способы автоматизации механических ворот
27 октября 2018, 12:20
Нативный Термостат для котла на ESP8266 с поддержкой Apple HomeKit
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
01 октября 2018, 07:43
Нативный HomeKit на ESP8266
15 июня 2018, 12:13
Охранная система в гараж на ESP8266 с интеграцией в Apple HomeKit
28 августа 2018, 09:48
От голого Raspbian до веб-интерфейса homebridge за четыре команды в терминале.
02 октября 2018, 18:41
Установка SDK для компиляции прошивок под HomeKit