Рассмотрим ситуацию, когда у вас в доме около десятка датчиков задымления.
При сработке датчика необходимо отключить розетки, включить вытяжной вентилятор и послать сообщение.
Можно для каждого датчика сделать отдельный сценарий. К примеру, такой:
Код этого сценария показан ниже:
Таким образом мы сделали сценарий для группы конкретных устройств: 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.
Аналогично добавляем другие группы устройств.
Таким образом мы сделали один мультисценарий и используем его для неограниченного количества групп устройств.
Примечание:
Любые изменения в коде мультисценария приведут к изменению поведения устройств во всех группах.