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



  • Извините за задержку с ответом. Сначала по второму вопросу:

    То есть создать переменную Hst и прибавлять/убавлять ее от defval.

    Да, в шаблонном сценарии это можно сделать. Для этого используется раздел userparam.

    "maindev":"#RAD#",
    
    "userparam": {"prop":"hst", "defval":1, "type":"num", "note":"Значение гистерезиса "}
    
    
    

    Таким образом мы добавляем новое свойство для главного устройства. Оно появится в пользовательском интерфейсе в окне настройки (кнопка инструменты).

    prop - имя свойство, которое появится у главного устройства сценария - #RAD#.hst

    note - текст, которой появится в окне настройки этого устройства в пользовательском интерфейсе (молотки)

    type - тип, может принимать значения: "num" - число, "cb" - checkbox, "time" - время (для ввода интервалов)

    defval - значение переменной по умолчанию (в данном случае #RAD#.hst будет равно 1, если его не поменять через интерфейс)

    Теперь это свойство можно использовать в сценарий:

    "if":"(#DT#.aval > #DT#.defval + #RAD#.hst )"
    
    
    


  • как отключать газовый котёл если насос 1, насос 2, насос 3, насос 4 выключены (дом прогрет), иначе будет включен и работает в автомате.

    То есть в поведении необходима возможность выбора нужных рециркуляционных насосов.

    Нужно сделать сценарий, триггерами для которого будут насосы и сам котел:

    {
    	"patname":"kotel",
    	"patnote":"Управление котлом",
    	"param":{
    		"KOTEL":{"note":"Котел","type":"500,550,610,620,630,710"},
    		"R1":{"note":"Насос 1","type":"500,550,610,620,630,710"},
    		"R2":{"note":"Насос 2","type":"500,550,610,620,630,710"},
    		"R3":{"note":"Насос 3","type":"500,550,610,620,630,710"},
    		"R4":{"note":"Насос 4","type":"500,550,610,620,630,710"}
    	},
    
    	"maindev":"#KOTEL#",
    
    	"start":{
    		"event":"#KOTEL#,#R1#,#R2#,#R3#,#R4#",
    		"if":"(#KOTEL#.auto==1)"
    	},
    
    	"functions":{	 
    		"start":{
    			"if":"(#R1#.dval == 0)&&(#R2#.dval == 0)&&(#R3#.dval == 0)&&(#R4#.dval == 0)",
    			"exec":{"do":"#KOTEL#.aoff"}, 
    			"else"{"do":"#KOTEL#.aon"}
    		}	
    	}			
     }
    
    
    

    Если автомат у котла отключить, сценарий работать не будет

    <quote>> Ещё в дальнейшем потребуется скрипт отключения насоса коллектора если 7 контуров коллектора отключены. Вероятно я его могу сделать из первого скрипта.

    Абсолютно верно, нужно будет сделать шаблон на 7 реле. Если реле меньше - можно выбирать одно и то же несколько раз.



  • @intrapro:

    Да, в шаблонном сценарии это можно сделать. Для этого используется раздел userparam.

    В принципе получилось. Но! По мне так неправильно:

    1. Что у насоса/радиатора теперь есть настройка "Гистерезис температуры включения/выключения насоса/радиатора". Эта настройка должна быть у датчика температуры, по которому работает насос/радиатор.

    2. Обычный пользователь сможет из веба менять гистерезис для включения/отключения отопления.

    Можно эту настройку сделать при настройке самого поведения в PM? То есть в том месте где мы выбираем датчик температуры, по которому включаем/отключаем насос/радиатор.



  • @intrapro:

    Нужно сделать сценарий, триггерами для которого будут насосы и сам котел

    Ок, вроде получилось. Подскажите что такое в сценариях (например, для радиаторов)

    "scengroup": 3,
    
    

    И можно где-нибудь расписать индексы типов устройств ("type":500 и прочие)?



  • В принципе получилось. Но! По мне так неправильно:

    1. Что у насоса/радиатора теперь есть настройка "Гистерезис температуры включения/выключения насоса/радиатора". Эта настройка должна быть у датчика температуры, по которому работает насос/радиатор.

    Это вопрос спорный 🙂 По одному датчику температуры могут несколько устройств работать.

    В версии Berry свойства добавляются к главному устройству сценария, которое управляется.

    <quote>> 2. Обычный пользователь сможет из веба менять гистерезис для включения/отключения отопления.

    Можно эту настройку сделать при настройке самого поведения в PM? То есть в том месте где мы выбираем датчик температуры, по которому включаем/отключаем насос/радиатор.

    Настройку можно скрыть, тогда пользователь ее не увидит - добавить свойство hide:

    "userparam": {"prop":"hst", "defval":1, "type":"num", "note":"Значение гистерезиса ", "hide":1}
    
    
    

    При настройке поведения редактирование параметров пока не предусмотрено.

    Изменять настройку можно в PM - пункт Установки, который стандартно не задействован.

    Для этого нужно будет создать два дополнительных файла. Если такой вариант устроит - завтра выложим пример.



  • Подскажите что такое в сценариях (например, для радиаторов) "scengroup": 3

    Это было предусмотрено для группировки сценариев при просмотре. Для шаблонных сценариев сейчас это свойство не используется.

    <quote>> И можно где-нибудь расписать индексы типов устройств ("type":500 и прочие)?

    500 - Универсальный дискретный актуатор

    Вы правы, добавим список типов устройств как таблицу для просмотра в PM.

    В Cherry типы можно будет добавлять и изменять интерактивно



  • @intrapro:

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

    Да, Вы правы. Тогда логичнее всего делать настройку гистерезиса (как тонкая настройка при ПНР) именно при выборе датчика температуры. Пытался сделать:) прописав в param:

    "HST":{"note":"Гистерезис температуры включения/выключения насоса", "type":"num", "defval":"1"}
    
    

    Понял, что обработчик не понимает меня…что вы и подтверждаете.
    @intrapro:

    Настройку можно скрыть, тогда пользователь ее не увидит - добавить свойство hide:

    Это конечно хорошо, но в Berry (в Cherry вроде Вы хотели реализовать редактирование скриптов через веб) надо значит по ssh лезть на сервер и ручками править defval. Не комильфо это для администратора системы, которая почти полностью настраивается через веб!
    @intrapro:

    Изменять настройку можно в PM - пункт Установки, который стандартно не задействован.

    Для этого нужно будет создать два дополнительных файла. Если такой вариант устроит - завтра выложим пример.

    Спасибо, но, думаю, не стоит заморачиваться раз все так "сложно". Было бы этих уставок как на большом промышленном объекте, тогда да.



  • @intrapro:

    Это было предусмотрено для группировки сценариев при просмотре. Для шаблонных сценариев сейчас это свойство не используется.

    Значит можно удалить.
    @intrapro:

    500 - Универсальный дискретный актуатор

    Вы правы, добавим список типов устройств как таблицу для просмотра в PM.

    В Cherry типы можно будет добавлять и изменять интерактивно

    Как вариант разместить в вики, тут ну или справочно в РМ. Главное не "перегрузить" РМ. А то меня вот этот перечень - 500,550,610,620,630,710 - заинтересовал. Кроме 500 ничего не знаю. А, кстати, в Berry было бы логично размещать коды устройств тут:
    Коды_Устройств.png
    Cherry пока не использовал.



  • @Alex_Jet:

    А, кстати, в Berry было бы логично размещать коды устройств тут:

    Да, наверно это логично. Но при разработке Berry была основная идея - как можно меньше всяческих кодов, как можно проще делать простые вещи. В Cherry упор на универсальность, будем надеяться, не в ущерб простоте.

    @Alex_Jet:

    Как вариант разместить в вики, тут ну или справочно в РМ.

    Дело в том, что набор типов устройств а) пополняется, б) зависит от конфигурации (Scada, Smart Home). Поэтому поступили проще - добавили в PM табличку "Типы устройств" сразу после "Устройства". Табличка только для просмотра, редактировать типы интерактивно в Berry нельзя.

    Можно обновиться и посмотреть.



  • В принципе все информативно стало - иконки - это те, которые по умолчанию назначены? Только в списке нет 550 и 620.



  • @Alex_Jet:

    иконки - это те, которые по умолчанию назначены?

    Да

    @Alex_Jet:

    Только в списке нет 550 и 620.

    Эти устройства есть в расширенной конфигурации, которая используется для наших инсталляций:

    550 - Управляемая розетка

    620 - Теплый пол

    Когда делали стандартный список типов - почистили. Ну а шаблоны сценариев общие для всех конфигураций, и в результате копипаста в примере типы которых нет в стандартной.



  • @intrapro:

    Эти устройства есть в расширенной конфигурации, которая используется для наших инсталляций:

    550 - Управляемая розетка

    620 - Теплый пол

    Да, кстати, недавно задумывался - "а почему же нет таких стандартных устройств". И мне не понятно почему Вы исключили их из стандартной версии…можно как-то поиметь для Berry? Или не заморачиваться и выбирать универсальный актюатор?



  • @Alex_Jet:

    Или не заморачиваться и выбирать универсальный актюатор?

    Можно не заморачиваться



  • Задача - управлять резервным (электрическим) котлом в зависимости от состояния насосов и температуры подачи основного котла. Поскольку пока не имею возможности вывести сигнал неисправности с основного газового котла Baxi, то как временное решение - определять его неисправность измеряя температуру на его подаче когда он включен. Он же включен когда включен хотя бы один насос контуров отопления. Правильно ли я написал скрипт или можно как-то лаконичнее?

            "start":{
                    "event":"#BOILER#,#DT#",
                    "if":"(#BOILER#.auto == 1) && (#DT#.aval < #BOILER#.temp)"
            },
    
            "functions":{
                    "start":{
                            "if":"(#PUMP1#.dval == 1)&&(#PUMP2#.dval == 1)&&(#PUMP3#.dval == 1)&&(#PUMP4#.dval == 1)",
                            "exec":{"do":"#BOILER#.aon"},
                            "else":{"do":"#BOILER#.aoff"}
                    }
            }
    
    
    

    Температуру включения резервного котла задаю в его настройках - свойство temp.



  • Задача - управлять резервным (электрическим) котлом в зависимости от состояния насосов и температуры на подаче основного котла. Поскольку пока не имею возможности вывести сигнал неисправности с основного газового котла Baxi, то как временное решение - определять его неисправность измеряя температуру на его подаче когда он включен. Он же включен когда включен хотя бы один насос контуров отопления. Правильно ли я написал скрипт или можно как-то лаконичнее?

            "start":{
                    "event":"#BOILER#,#PUMP1#,#PUMP2#,#PUMP3#,#PUMP4#",
                    "if":"(#BOILER#.auto == 1) && ( (#PUMP1#.dval == 1)&&(#PUMP2#.dval == 1)&&(#PUMP3#.dval == 1)&&(#PUMP4#.dval == 1) )"
            },
    
            "timeout":60,
    
            "functions":{
                    "start":{
                            "if":"(#DT#.aval < #BOILER#.temp)",
                            "exec":{"do":"#BOILER#.aon"},
                            "else":{"do":"#BOILER#.aoff"}
                    }
            }
    
    
    

    Температуру включения резервного котла задаю в его настройках - свойство temp.

    PS: разрешите на форуме удалять/редактировать свои сообщения. А то выходит таймаут и отредактировать уже нельзя. Написал новое и предыдущее удалить уже нельзя:(



  • Заменил

    "if":"(#BOILER#.auto == 1) && ( (#PUMP1#.dval == 1)&&(#PUMP2#.dval == 1)&&(#PUMP3#.dval == 1)&&(#PUMP4#.dval == 1) )"
    
    

    на правильное условие:

    "if":"(#BOILER#.auto == 1) && ( (#PUMP1#.dval == 1) || (#PUMP2#.dval == 1) || (#PUMP3#.dval == 1) || (#PUMP4#.dval == 1) )"
    
    

    Вроде работает как задумано. Я правильно полагаю, что эти условия должны быть стартовыми? А далее проводим проверку только по температуре?



  • Поскольку при включении насосов рециркуляции не выполняется условие "if":"(#DT#.aval < #BOILER#.temp)", то резервный котел (электрический) отключается:

    Температура уменьшилась:
    04.12.2017 07:23:41 localhost => 192.168.11.24:80 HTTP GET /sec/?cmd=19:1 - НАСОС ТП1
    04.12.2017 07:23:41 localhost => 192.168.11.24:80 HTTP GET /sec/?cmd=28:1 - Газовый котел
    04.12.2017 07:23:41 localhost => 192.168.11.24:80 HTTP GET /sec/?cmd=27:0 - Электрический котел
    04.12.2017 07:23:41 localhost => 192.168.11.24:80 HTTP GET /sec/?cmd=21:1 - НАСОС ТП2
    04.12.2017 07:23:41 localhost => 192.168.11.24:80 HTTP GET /sec/?cmd=28:1 - Газовый котел
    04.12.2017 07:23:47 localhost => 192.168.11.24:80 HTTP GET /sec/?cmd=27:0 - Электрический котел
    
    

    1. Где и как правильно добавить условие чтобы не выполнялась бесполезная команда 27:0 если условие #DT#.aval < #BOILER#.temp соответствует false?

    2. То же по основному котлу (газовый) - где и как правильно добавить условие чтобы во второй и последующие разы (события по 4-м насосам) не выполнялась бесполезная команда 28:1?



  • @Alex_Jet:

    1. Где и как правильно добавить условие чтобы не выполнялась бесполезная команда 27:0 если условие #DT#.aval < #BOILER#.temp соответствует false?

    2. То же по основному котлу (газовый) - где и как правильно добавить условие чтобы во второй и последующие разы (события по 4-м насосам) не выполнялась бесполезная команда 28:1?

    Можно задать несколько команд - массив команд, и в каждой проверять условие:

    • если нужно включить котел, а он выключен - то включить. И наоборот.
    "functions":{
                    "start":[
                            { "if":"(#DT#.aval < #BOILER#.temp) && (#BOILER#.dval == 0)", "exec":{"do":"#BOILER#.aon", "exit":1 }},
                            { "if":"(#DT#.aval > #BOILER#.temp) && (#BOILER#.dval == 1)", "exec":{"do":"#BOILER#.aoff"}}
    
                    ]
            }
    
    
    

    Все команды будут выполняться подряд. После включения можно сразу выйти: "exit":1

    <quote>> Я правильно полагаю, что эти условия должны быть стартовыми? А далее проводим проверку только по температуре?

    Если идея в том, что сценарий должен срабатывать (запускать блок start), когда хотя бы один из насосов включен, то абсолютно верно.



  • @intrapro:

    Можно задать несколько команд - массив команд, и в каждой проверять условие:

    • если нужно включить котел, а он выключен - то включить. И наоборот.

    Все команды будут выполняться подряд. После включения можно сразу выйти: "exit":1

    Спасибо за ответы! Сразу выйти - это чтобы не проверять следующее условие? Или какое-то еще значение несет?



  • @Alex_Jet:

    Сразу выйти - это чтобы не проверять следующее условие? Или какое-то еще значение несет?

    Да, в данном случае этого можно не делать, т.к. температура не может быть одновременно и меньше и больше.

    Но если сделать например так:

                   { "if":"(условие истинное) && (#BOILER#.dval == 0)", "exec":{"do":"#BOILER#.aon" }}, 
                   { "if":"(условие истинное) && (#BOILER#.dval == 1)", "exec":{"do":"#BOILER#.aoff"}}  
    
    
    

    То могут выполниться обе команды, так как #BOILER#.dval == 1 на момент проверки второго условия может быть уже true


Авторизуйтесь, чтобы ответить