Рассмотрим ситуацию, когда у вас в доме около десятка датчиков задымления.
При сработке датчика необходимо отключить розетки, включить вытяжной вентилятор и послать сообщение.
Можно для каждого датчика сделать отдельный сценарий. К примеру, такой:
Код этого сценария показан ниже:
Таким образом мы сделали сценарий для группы конкретных устройств: SFIRE_1_1, SOCKET1 и VENT1
Что делать, когда таких групп много? Можно сделать отдельный сценарии для каждой группы. Будем иметь кучу однотипных сценариев. В случае необходимости внести изменения в код, придется это сделать во всех сценариях.
Лучше сделать один сценарий и применить его для разных комбинаций устройств.
Немного изменим код сценария:
/**
* @name Smoke
* @desc Send message when smoke
* @version 4
*/
const d_smoke = Device("SensorD","Smoke Detector");
const a_socket = Device("ActorD","Socket");
const a_vent = Device("ActorD","Fan");
startOnChange([d_smoke]);
script({
start() {
if (d_smoke.isOn()) {
a_socket.off();
a_vent.on();
this.info("email","OWNER",`Attention! Smoke! \n ${d_smoke.placeName}/${d_smoke.zoneName}`);
}
}
})
В чем отличие?
Мы заменили конкретные устройства переменными и классами устройств.
Вместо SFIRE_1_1 поставили переменную d_smoke.
Вместо Device(«SFIRE_1_1«) написали Device(«SensorD«,»Датчик дыма»).
Аналогично и для других устройств (SOCKET1, VENT1)
Кроме этого в строку передачи сообщения опционально можно вписать наименования уровня и зоны:
this.info("email","OWNER",`Attention! Smoke! \n ${d_smoke.placeName} / ${d_smoke.zoneName}`);
Мультисценарий подготовили. Теперь его можно привязать к группам устройств:
Выбираем пункт «Запустить для устройств». Кнопкой «+» добавляем группу устройств для нашего сценария и заполняем поля, которые были определены в коде сценария: Smoke Detector, Socket и Fan.
Аналогично добавляем другие группы устройств.
Таким образом мы сделали один мультисценарий и используем его для неограниченного количества групп устройств.
Примечание:
Любые изменения в коде мультисценария приведут к изменению поведения устройств во всех группах.