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

Задача

Выполнить:
— Управление теплыми полами на основании показаний датчиков температуры

Дополнительные условия:
1. При снижении температуры ниже уставки теплый пол включить. 
2. При достижении значения выше уставки теплый пол выключить.
3. Должны быть разные уставки температуры для четырех периодов: Утро, День, Вечер, Ночь
4. Иметь возможность изменять уставки температуры в пользовательском интерфейсе
5. Иметь возможность задать недельное расписание. 

Решение

Добавляем теплые полы (WarmFloor) и датчики температуры (STEMP):

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

Размещаем эти устройства на мнемосхеме:

Создаем новое виртуальное устройство типа «Переключатель». Присваиваем идентификатор ID — Regim и называем его «Переключатель режимов»:

Открываем нижнее окно состояний устройства:

По умолчанию новый переключатель имеет три состояния. В нашей задаче требуется четыре: Утро, День, Вечер, Ночь. 

Редактируем три состояния и кнопкой «Копировать» добавляем четвертое состояние:

Размещаем переключатель режимов на мнемосхеме:

В свойствах устройства на вкладке «Параметры» выбираем шаблон представления «Переключатель»:

Немного подправим внешний вид. Я подправил цвет и размер текста:

Настройки визуализации закончены. Переходим к сценариям.

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

Создаем новый мультисценарий:

Скрипт сценария приведен ниже:

/** 
* @name  Теплый пол с пятью уставками 
* @desc  
* @version 4 
*/
const temp = Device("SensorA","Датчик температуры"); 
const regim = Device("ActorE","Режим теплых полов"); 
const floor = Device("ActorD","Теплый пол",[
   {"name":"t0", "note":"Уставка температуры без расписания", "type":"number", "val":20},
   {"name":"schedu", "note":"Изменять уставку по расписанию", "type":"cb", "val":true},
   {"name":"t1", "note":"Уставка температуры: Утро", "type":"number", "val":24},
   {"name":"t2", "note":"Уставка температуры: День", "type":"number", "val":20},
   {"name":"t3", "note":"Уставка температуры: Вечер", "type":"number", "val":22},
   {"name":"t4", "note":"Уставка температуры: Ночь", "type":"number", "val":18}
  ]); 

startOnChange([regim, temp, floor], floor.auto); 

script({
    start() {
        let setpoint = floor.getParam('t0');
        if (floor.getParam('schedu')) {
          setpoint = floor.getParam('t'+String(regim.value+1));
        }
        if (temp.value < setpoint) {
          if (floor.isOff()) floor.turnOnSaveAuto();
        } else  if (temp.value > setpoint) {
          if (floor.isOn()) floor.turnOffSaveAuto();
        }
    } 
});

Некоторые комментарии:
Вероятно вы обратили внимание что в скрипте присутствуют строки:
{«name»:»t0″, «note»:»Уставка температуры без расписания», «type»:»number», «val»:20},
{«name»:»schedu», «note»:»Изменять уставку по расписанию», «type»:»cb», «val»:true},
Эти параметры (t0 и schedu) позволяют дополнить функционал следующим свойством: Разрешать менять уставку по расписанию или нет. И если не менять уставку по расписанию, применить уставку температуры без расписания.

Теперь осталось привязать устройства к нашему мультисценарию:

Выбираем «Запуск для устройств» и добавляем четыре записи с устройствами для наших четырех теплых полов.

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

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

Осталось создать недельное расписание.

Для переключения режимов по расписанию нам потребуется создать еще четыре простых сценария:

/** 
* @name Heating Regim - Morning 
* @desc  
* @version 4  
*/

const regim = Device("Regim"); 

script({
    start() {
       this.assign( regim, "value", 0);
    } 
});

Скрипт всех четырех сценариев одинаковый за исключением названия и параметра присваиваемого значения нашему виртуальному переключателю Regim в строке:
this.assign( regim, «value», 0);
Для утра — 0, день -1, вечер -2, ночь — 3

Переходим в раздел Расписание:

Составляем расписание запуска наших сценариев переключения режимов.

В примере выше показано расписание:
1. Перейти в режим «Утро» в 6 -00 по будням и в 9-00 в выходные.
2. Перейти в режим «День» в 11-00 по любым дням
3. Перейти в режим «Вечер» в 18-00 по любым дням
4. Перейти в режим «Ночь» в 22 -00 по будням и в 23-30 в выходные.

Кстати, эти режимы можно использовать и в других задачах, а не только в управлении теплыми полами.

Закрыть меню