Управление ПВК через openhab

Share:

С учетом наличия в инфраструктуре дома уже установленного контроллера openhab2 – когда встал вопрос о некотором упрощении и улучшении удобства использования пароводяного котла для пива и дистиллятов, было решено не городить автономную систему управления, а встроить ее в умный дом.

Ведется постоянная доработка и модификация, но вот то, что работает на настоящий момент:

1. Управление нагревом пароводяного котла. Управляется твердотельным реле на 40 ампер, схему с симистром и опторазвязкой поленился собирать, раз было в наличии неиспользованное реле. Охлаждение – компьютерным кулером на 12 вольт, вентилятором не управляю, сразу после включение блока – вентилятор крутится. При  нагрузке в виде 3х киловаттного тэне в ПВК – нагрева радиатора не чувствуется рукой.

2. Подача воды. Стоит 12 вольтовый клапан на 1/2 дюйма, в зависимости от этапа приготовления охлаждает либо колонну, либо само содержимое ПВК. Переключаю вводы вручную, подумываю о более полной автоматизации, но нужны еще клапаны.

3. Мешалка – из старого 18 вольтового шуруповерта. Из шуруповерта вывел контакты питания, и ATX блока питания хватает и для шуруповерта, и для питания всей схемы.

4. И в качестве основого контроллера модуль Wemos D1 на основе ESP8266 с  ПО ESPEasy. Функции поддержания температуры выполняются автономно на стороне ESP8266, чтобы при потере связи с openhab не случилось бабахинга.

И далее – уже этапы автоматизации.

  • Поддержание температуры в кубе с таймером и без него. Подходит как для затора, так и для выбраживания сусла при определенной температуре.
  • Охлаждение до определенной температуры.
  • Пишу алгоритм первичного перегона. Пока – простейший. Нагрев до 99 градусов, отключение нагрева, пауза пару минут и отключение подачи воды.

Взаимодействие между openhab и esp8266 происходит по протоколу mqtt.

Вид интерфейса со стороны openhab, basicui. На мобильном телефоне все выглядит так же. Установлено мобильное приложение openhab, и я отовсюду могу управлять и отслеживать статус операции, плюс в openhab каждые три минуты в отдельном разделе обновляется картинка  с ip камеры, установленной рядом с самогонным оборудованием.

Интерфейс openhabВыдержка из файла .items

Switch PVKHeat "Нагрев ПВК" (FGPVK) {mqtt=">[mqtt:/PVK/gpio/15:command:*:MAP(onoff.map)],<[mqtt:/PVK/Heat/Switch:state:MAP(onoff.map)]"}
Switch PVKWater "Подача воды"(FGPVK) {mqtt=">[mqtt:/PVK/gpio/4:command:*:MAP(onoff.map)],<[mqtt:/PVK/Water/Switch:state:MAP(onoff.map)]"}
Number PVKTemp "Температура в кубе [%.0f °C]" <temperature> (FGPVK, gTemperature) {mqtt="<[mqtt:/PVK/cube/Temperature:state:default]"}
Number PVKDHTTemp "Температура снаружи [%.0f °C]" <temperature> (FGPVK, gTemperature) {mqtt="<[mqtt:/PVK/dht/temperature:state:default]"}
Number PVKDHTHumid "Влажность снаружи [%.0f ] " <temperature> (FGPVK, gTemperature) {mqtt="<[mqtt:/PVK/dht/humidity:state:default]"}
Rollershutter PVKThermostat "Термостат [%.1f °C]" <temperature> (FGPVK, gTemperature) ["TargetTemperature"] 
Number PVKThermostatTemp "Термостат [%.1f °C]" <temperature> (FGPVK)
Switch PVKThermostatOn "Термостат включен" (FGPVK) { mqtt="<[mqtt:/PVK/vars/thermostaton:state:ON:1],<[mqtt:/PVK/vars/thermostaton:state:OFF:2]" }
Switch PVKThermostatTimeOn "Темп пауза" (FGPVK) 
Number PVKThermostatTime "Продолжительность паузы" (FGPVK)


Number PVKCoolTemp "Охлаждение [%.1f °C]" <temperature> (FGPVK)
Switch PVKCoolOn "Охлаждение включено" (FGPVK)

Switch PVKDistillOn "Дистилляция" (FGPVK)

Number PVKTime "Длительность процесса [%s мин]" <time> (FGPVK) { mqtt="<[mqtt:/PVK/vars/processtime:state:default]" }

Выдержка из файла .sitemap

Frame label="Самогоноварение" {
Text label="ПВК" {
Frame label="Статус" {
Default item=PVKTemp 
Default item=PVKDHTTemp 
Default item=PVKDHTHumid 
Default item=PVKTime
Default item=PVKOnline
}
Frame label="Управление" {
Default item=PVKHeat
Default item=PVKWater
}
Frame label="Термостат нагрева" {
Default item=PVKThermostatTimeOn
Selection item=PVKThermostatTime icon="time" mappings=[1="1",15="15", 30="30", 60="60", 90="90", 120="120", 180="180"] 
Setpoint item=PVKThermostatTemp step=1 minValue=10 maxValue=80 label="Температура"
Default item=PVKThermostatOn
}

Frame label="Термостат охлаждение" {
Setpoint item=PVKCoolTemp step=1 minValue=10 maxValue=80 label="Температура"
Default item=PVKCoolOn 
}

Frame label="Дистилляция" {
Default item=PVKDistillOn 
}


Frame label="Настройки" {
Text label="Настройки"
} 
}

Выдержка из файла .rules

rule "Thermo2"
when
Item PVKThermostatOn received command or 
Item PVKThermostatTemp changed
then
if (PVKThermostatOn.state==ON)
{
publish("mqtt","/PVK/cmd","1")
publish("mqtt","/PVK/param1",PVKThermostatTemp.state.toString)
if (PVKThermostatTimeOn.state==ON) {
publish("mqtt","/PVK/param2","1")
publish("mqtt","/PVK/param3",PVKThermostatTime.state.toString)
}
else {
publish("mqtt","/PVK/param2","0")
publish("mqtt","/PVK/param3","0")
}


}
if (PVKThermostatOn.state==OFF)
{
publish("mqtt","/PVK/cmd","2")
}
end

rule "Distillate"
when
Item PVKDistillOn received command 
then
if (PVKDistillOn.state==ON)
{
publish("mqtt","/PVK/cmd","3")
}
if (PVKDistillOn.state==OFF)
{
publish("mqtt","/PVK/cmd","4")
}
end

Страница Devices ESPEasy

ESPEasy Devices

Содержимое rules ESPEasy

on startheat do
gpio,15,1
endon

on stopheat do
gpio,15,0
endon

on mqtt#cmd=1 do
LCD,4,1,"Thermostat ON"
TaskValueSet 8,1,0
TaskValueSet 8,2,1
publish /PVK/vars/thermostaton,1
timerSet,1,10
if [mqtt#param2]=1
timerSet,8,60
endif
endon

on mqtt#cmd=2 do
LCD,4,1,"Thermostat OFF"
TaskValueSet 8,2,2
publish /PVK/vars/thermostaton,2
gpio,15,0 //stopheat 
timerSet,1,0
timerSet,8,0
endon

on Rules#Timer=1 do
if [cube#Temperature]>=[mqtt#param1]-3
gpio,15,0 //stopheat 
else 
gpio,15,1 //startheat
endif
timerSet,1,10
if [mqtt#param3]<=[vars#processtime] and [mqtt#param2]=1
gpio,15,0
timerSet,1,0
timerSet,8,0
LCD,4,1,"Thermostat OFF-Time over"
TaskValueSet 8,2,2
publish /PVK/vars/thermostaton,2
endif
endon

//cmd distillate
on mqtt#cmd=3 do
if [cube#Temperature]<99
gpio,15,1 //startheat
endif 
if [cube#Temperature]>60
gpio,4,1 //startwater
endif 
LCD,4,1,"Distillate ON"
timerSet,2,30
endon

//cmd distillate off
on mqtt#cmd=4 do
LCD,4,1,"Distillate OFF"
gpio,15,0 //stopheat 
timerSet,2,0
timerSet,3,300
endon

on Rules#Timer=2 do
if [cube#Temperature]>=99
gpio,15,0 //stopheat 
timerSet,3,300
else 
if [cube#Temperature]>60
gpio,4,1 //startwater
endif 
endif
timerSet,2,30
endon

on Rules#Timer=3 do
gpio,4,0 //stopwater
timerSet,3,0
endon

on Rules#Timer=8 do
TaskValueSet 8,1,[vars#processtime]+1
timerSet,8,60
endon

Leave a reply