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



  • @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



  • Вопрос. Имеем такое "предусловие":

            "start":{
                    "event":"#BOILER#,#PUMP1#,#PUMP2#,#PUMP3#,#PUMP4#",
                    "if":"(#BOILER#.auto == 1) && ( (#PUMP1#.dval == 1) || (#PUMP2#.dval == 1) || (#PUMP3#.dval == 1) || (#PUMP4#.dval == 1) )"
            },
    
    

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



  • @Alex_Jet:

    Получаем что если котел был включен и все насосы вдруг выключились, то основное условие не отработает - значит котел не выключиться.

    Но раньше было:

    @Alex_Jet:

    Он же включен когда включен хотя бы один насос контуров отопления.

    и
    @intrapro:

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

    Возможно, не полностью понимаю Вашу задачу. Но можно же убрать предусловие, а условия проверять внутри.

    И наверно нужно добавить в триггеры датчик температуры

    "start":{
                "event":"#BOILER#,#PUMP1#,#PUMP2#,#PUMP3#,#PUMP4#,#DT#",
                 "if":"(#BOILER#.auto == 1)"
     },
    
    "functions":{
    
         "start":[
             // если котел включен, все насосы выключены - выключить котел и выйти
           	{ "if":"(#BOILER#.dval == 1)&&(#PUMP1#.dval == 0)&&(#PUMP2#.dval == 0)&&(#PUMP3#.dval == 0)&&(#PUMP4#.dval == 0)", 
           			 	"exec":{"do":"#BOILER#.aoff", "exit":1 }}, 
    
            // если все насосы выключены - просто выйти 
           	{ "if":"(#PUMP1#.dval == 0)&&(#PUMP2#.dval == 0)&&(#PUMP3#.dval == 0)&&(#PUMP4#.dval == 0)", "exec":{"exit":1 }}, 
    
           	//Дальше команды будут выполняться, если хотя бы один насос работает			 			 	
            { "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"}}
           ]
           }       
    
    
    


  • Задача - рулить резервным котлом в зависимости от:

    1. Нужно ли тепло в данный момент (включен хотя бы один насос рециркуляции)?

    2. Работает ли основной котел (косвенный признак его нормальной работы - температура на подаче равна 40+-5градусов)

    Поэтому не вижу смысла постоянно отслеживать температуру подачи основного котла. Только состояние рециркуляционных насосов и auto-режима. Поймите, мне просто хочется глубже понять как работает синтаксис сценариев.

    Сейчас у меня основные условия такие:

        "start": {
            "event": "#BOILER#,#PUMP1#,#PUMP2#,#PUMP3#,#PUMP4#",
            "if": "(#BOILER#.auto == 1) && ( (#PUMP1#.dval == 1) || (#PUMP2#.dval == 1) || (#PUMP3#.dval == 1) || (#PUMP4#.dval == 1) )"
        },
            "functions": {
            "start": [
                {   "if": "(#DT#.aval < (#BOILER#.temp - #BOILER#.hst)) && (#BOILER#.dval == 0)",
                    "exec": { "do": "#BOILER#.aon"}
                },
                {   "if": "(#DT#.aval > (#BOILER#.temp + #BOILER#.hst)) && (#BOILER#.dval == 1)",
                    "exec": {"do": "#BOILER#.aoff"}
                }
            ]
        }
    
    

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

    Это как с последним запуском ракето-носителя Союз… - "несовершенный алгоритм программного обеспечения системы управления разгонного блока "Фрегат" и неверные азимуты пуска".



  • @Alex_Jet:

    Поэтому не вижу смысла постоянно отслеживать температуру подачи основного котла.

    Да, Вы правы, это излишне. По температуре работают насосы.

    @Alex_Jet:

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

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

    Предусловие тогда будет таким: Бойлер в авто И (один из насосов включен ИЛИ все насосы выключены И Бойлер включен)

      "if": "(#BOILER#.auto == 1) && ( (#PUMP1#.dval == 1) || (#PUMP2#.dval == 1) || (#PUMP3#.dval == 1) || (#PUMP4#.dval == 1) ||
              (#PUMP1#.dval == 0) && (#PUMP2#.dval == 0) && (#PUMP3#.dval == 0) &&(#PUMP4#.dval == 0)&&(#BOILER#.dval == 1))"
    
    // В функцию start добавим первую строку для обработки этой ситуации
    
     "functions": {
            "start": [
                 {   "if": " (#PUMP1#.dval == 0) && (#PUMP2#.dval == 0) && (#PUMP3#.dval == 0) &&(#PUMP4#.dval == 0)",
                    "exec": {"do": "#BOILER#.aoff", "exit":1}
                },
                {   "if": "(#DT#.aval < (#BOILER#.temp - #BOILER#.hst)) && (#BOILER#.dval == 0)",
                    "exec": { "do": "#BOILER#.aon"}
                },
                {   "if": "(#DT#.aval > (#BOILER#.temp + #BOILER#.hst)) && (#BOILER#.dval == 1)",
                    "exec": {"do": "#BOILER#.aoff"}
                }
            ]
        }
    
    
    

    Либо можно сделать всего две строки - объединить условия для выключения

    
            "functions": {
            "start": [
              {   "if": "(#BOILER#.dval == 1) && ((#DT#.aval > (#BOILER#.temp + #BOILER#.hst)) ||  
                  		|| (#PUMP1#.dval == 0) && (#PUMP2#.dval == 0) && (#PUMP3#.dval == 0) &&(#PUMP4#.dval == 0))",
                    "exec": {"do": "#BOILER#.aoff", "exit":1}
                },
    
                {   "if": "(#BOILER#.dval == 0)&&(#DT#.aval < (#BOILER#.temp - #BOILER#.hst))",
                    "exec": { "do": "#BOILER#.aon"}
                }
            ]
        }
    
    

    Обратите внимание, что перенос строки в условии не допускается. Также как и комментарии.

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

    @Alex_Jet:

    Это как с последним запуском ракето-носителя Союз… - "несовершенный алгоритм программного обеспечения системы управления разгонного блока "Фрегат" и неверные азимуты пуска".

    Короче, во всем виноваты проклятые программисты 😄



  • @intrapro:
    Вопрос на засыпку - в Berry возможно из скрипта, точнее сценария, выключить авторежим насоса/котла, на период действия условия, а потом снова включить?



  • Можно, почему нельзя?

    "do":"KOTEL.auto:1" - включить режим авто

    "do":"KOTEL.auto:0" - выключить режим авто



  • @intrapro:

    Можно, почему нельзя?

    "do":"KOTEL.auto:1" - включить режим авто

    "do":"KOTEL.auto:0" - выключить режим авто

    Да, спасибо! Это для шаблонных поведений (*.pat). В создаваемых из веба сценариев по событиям тоже это есть! Что мне и требовалось!

    Со сценариям "Таймер на входе учитывает основное условие" - это то, что можно выбрать из выпадающего списка "Событие"???



  • @Alex_Jet:

    Со сценариям "Таймер на входе учитывает основное условие" - это то, что можно выбрать из выпадающего списка "Событие"???

    Да, абсолютно верно.

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

    Основное условие - на первой вкладке, дополнительное - на вкладке "При Условии". Можно учитывать оба условия одновременно.



  • @intrapro:

    @Alex_Jet:

    Со сценариям "Таймер на входе учитывает основное условие" - это то, что можно выбрать из выпадающего списка "Событие"???

    Да, абсолютно верно.

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

    Основное условие - на первой вкладке, дополнительное - на вкладке "При Условии". Можно учитывать оба условия одновременно.

    Немного муторно сделано:

    1. Чтобы учитывались условия вкладки "При условии" - нужно обязательно активировать "Таймер…на входе при условии"?

    2. Если вообще не активировать кнопки "Таймер на входе учитывает...", то сценарий будет выполняться? Если будет то только по основному условию или по условия на вкладке "При условии" тоже?

    3. Как правильно сделать сценарии по этим формам? Я реально немного запутался.

    При включении насоса 1 и температуре <-20 спустя 5 секунд перевести насос 2 в ручной режим и принудительно отключить.

    При выключении насоса 1 и температуре <-20 без задержек перевести насос 2 в автоматический режим.



  • @Alex_Jet:

    1. Чтобы учитывались условия вкладки "При условии" - нужно обязательно активировать "Таймер…на входе при условии"?

    Нет, не обязательно.

    @Alex_Jet:

    2. Если вообще не активировать кнопки "Таймер на входе учитывает…", то сценарий будет выполняться? Если будет то только по основному условию или по условия на вкладке "При условии" тоже?

    Можно таймеры не использовать совсем, сценарий запустится сразу, если оба условия выполняются.

    Таймеры используются, если нужно чтобы условие непрерывно было верно в течение какого-то интервала, и если так, выполняется сценарий

    Приведу примеры использования таймеров:

    Сработал датчик протечки, сбросился через 2 сек (просто капнули при уборке) - если поставить таймер на входе по основному условию - можно SMS не посылать, нервы сберечь 🙂

    Другой пример

    Под охраной открыта входная дверь, 1 мин дается на снятие сигнализации. Если Охрана не снята - бить тревогу: сирена, SMS, световая сигнализация, …..

    Здесь основное условие - сработка геркона, дополнительное - Охрана установлена.

    Поставим таймер на дополнительное условие. Если в течение минуты снять охрану - тревога отменяется

    @Alex_Jet:

    3. Как правильно сделать сценарии по этим формам? Я реально немного запутался.

    При включении насоса 1 и температуре <-20 спустя 5 секунд перевести насос 2 в ручной режим и принудительно отключить.

    При выключении насоса 1 и температуре <-20 без задержек перевести насос 2 в автоматический режим.

    В ваших задачах можно обойтись без таймеров совсем.

    Во второй задаче таймеры точно не нужны

    В первой - температура вряд ли радикально изменится в течение 5 секунд, поэтому можно просто использовать задержку в действиях

    Основное условие - включение насоса 1

    При условии - T<-20

    Действия:

    • Задержка 5 сек

    • Насос 2 перевести в ручной режим

    • Насос 2 отключить



  • Есть. Некоторые шаблоны сценариев показаны здесь: https://intrahouse.ru/scenes-examples/



  • Прошу вопросы по системе intraHouse Cherry задавать на форуме intraHouse Cherry

    Вопрос по скриптам логично задать в теме https://frm.intrahouse.ru/viewtopic.php?f=18&t=5316


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