Управление вентиляцией, отоплением и кондиционированием по датчикам температуры и влажности.
Управление батареями отопления по датчикам температуры
Сценарий работает при включеном режиме АВТО
Выполнить:
— Управлять батареями отопления на основании показаний датчиков температуры
Дополнительные условия:
1. При снижении температуры ниже уставки на 0,5 градуса батарею включить.
2. При достижении значения уставки батарею выключить.
3. Дать возможность управлять значением уставки температуры в пользовательском интерфейсе.
4. Дать возможность отключить/включить автоматическое управление в пользовательском интерфейсе.
/** * @name Батареи по температуре АВТО * @desc Включение-выключение батареи по датчику температуры * Уставка на датчике температуры * Сценарий работает, если для устройства включен флаг АВТО * Сценарий должен использовать команды переключения, которые сохраняют АВТО (turnOnSaveAuto) * @version 4 */ const bat = Device("ActorD", "Батарея"); const dt = Device("SensorA", "Датчик температуры"); startOnChange([bat,dt], bat.auto && ( bat.isOff() && (dt.value <= dt.setpoint-0.5) || bat.isOn() && (dt.value > dt.setpoint))); script ({ start() { if (bat.isOff()) { bat.turnOnSaveAuto(); } else { bat.turnOffSaveAuto(); } } });
Управление вытяжным вентилятором
Вентилятор включается при сработке дискретного датчика (1 — сработка) и отключается через заданное время
Событие:
— Сработка любого дискретного датчика (движение, открытие двери …)
Выполнить:
— Включить вентилятор
— Выключить вентилятор через заданное время
Дополнительные условия:
1. Задавать время отключения в пользовательском интерфейсе в параметрах вентилятора.
2. Дать возможность отключить/включить автоматическое управление в пользовательском интерфейсе.
/** * @name Вентиляция по дискретному датчику * @desc Вентилятор включается при сработке дискретного датчика (1 - сработка) и отключается через заданное время * Сценарий работает, если для устройства включен флаг АВТО * @version 4 */ const actor = Device("ActorD", "Вентилятор", [ {"name":"timeOff", "note":"Отключить после сброса датчика через, сек", "type":"number", "val":5} ]); const sensor = Device("SensorD", "Датчик"); startOnChange([sensor,actor], actor.auto && (actor.isOff() && sensor.isOn() || actor.isOn() && sensor.isOff())); script ({ start() { this.addTimer("T1"); if (actor.isOff()) { actor.turnOnSaveAuto(); } else { // взводим таймер, чтобы отключить this.startTimer("T1", actor.getParam("timeOff"), "turnOff"); } // В любом случае следим за датчиком и вентилятором this.addListener(sensor, "onSensor"); this.addListener(actor , "onActor"); }, onSensor() { if (sensor.isOff() && this.timer.T1 == "off") { this.startTimer("T1", actor.getParam("timeOff"), "turnOff"); } if (sensor.isOn()) { this.stopTimer("T1"); } }, onActor() { // выключили другим способом или сбросили авто - просто выходим if (actor.isOff() || !actor.auto) this.exit(); }, turnOff() { actor.turnOffSaveAuto(); this.exit(); } });
Управление теплыми полами
Выполнить:
— Управление теплыми полами на основании показаний датчиков температуры
Дополнительные условия:
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 в выходные.
Кстати, эти режимы можно использовать и в других задачах, а не только в управлении теплыми полами.