Сценарии пользователей
-
Всем привет. Подскажите строки кода которые нужно добавить в сценарий, чтобы свет включался по датчика движения в заданное время. Кот ночью тоскается и включает свет! Сценарий из примеров на сайте. Спасибо.
-
@Sergeus, вставьте в конец сценария функцию:
//Функция возвращает цифровое значение периода дня GetPeriodDay() { let date = new Date(); let hour = date.getHours(); let period = 0; if(hour > 6 && hour < 10) period = 0; // Период 7-9 else if(hour > 9 && hour < 20) period = 1; // Период 10-19 else if(hour > 19 && hour < 23) period = 2; // Период 20-22 else period = 3; // Период 23-6 return period; },
А в start обращайтесь к ней так:
if(this.GetPeriodDay() != 3) { //Тут выполняем то что нужно выполнять с утра и до самого вечера };
Или еще проще просто в start:
let date = new Date(); if(date.getHours() > 7 || date.getHours() < 23) { //Тут выполняем то что нужно выполнять с утра и до самого вечера }
-
@Alex_Jet Первый вариант будет поинтересней. Спасибо!
-
Это сообщение удалено!
-
Вам лучше чем нибудь гуманитарным заниматься. Катастрофами, например.
Добрый день
Подскажите пожалуйста?
Когда рулет присылает значения 105 это значит 0%
А когда больше 105 то ничего не присылает так как в устройстве стоит ограничение по минимальным и максимальным значениям 20 и 105
Проблема в том что датчик не всегда присылает точные данные и бывают редко глюки и из за этого получается такая херь
Воды 0% и даже меньше, датчик присылает один раз глючные данные, ну например что воды 5%
А потом присылает нормальные данные, но так как воды уже меньше чем 105, эти данные не учитываются и всегда висит 5%
Можно сделать так что бы 0% было когда датчик присылает 105 и больше? Ну и когда 20 и меньше это 100%Просто когда воды в баке остаётся меньше 2% у меня выключается насос повышающий давления, что бы он в холостую не работал и когда случается такой глюк он постоянно работает а воды нету
-
Пользователь @dre12007 написал в Сценарии пользователей:
Можно сделать так что бы 0% было когда датчик присылает 105 и больше? Ну и когда 20 и меньше это 100%
Добрый день. Да, можно:
(value>=20 && value<= 105) ? Math.round(100 - (Number(value) - 20)*100/85) : (value <20 ? 100 : 0)
Это тернарный оператор: условие ? значение_если_да : значение_если_нет
- первая скобка - проверяем, что значение в диапазоне от 20 до 105 включительно
- если да - выполняется расчет и округляется до целых (0-100 %)
- если нет - сработает часть после двоеточия - второй тернарный оператор
Если у вас прописана формула в канале, просто скопируйте ее
Если в сценарии - нужно присвоить
-
@intrapro
Спасибо огромнейшее
-
Добрый день.
В сценарии можно использовать метки и операторы перехода типа break и т.п. для перехода в нужную часть кода ?
-
Пользователь @fanagor написал в Сценарии пользователей:
Добрый день.
В сценарии можно использовать метки и операторы перехода типа break и т.п. для перехода в нужную часть кода ?Добрый день, break и continue в цикле конечно работает, label в принципе должно работать, система использует стандартный движок JS.
Мы не используем label, такой стиль не считается хорошей практикой: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/labelНо если очень хочется, почему бы и нет. Единственное, с циклами нужно быть внимательным - они не должны быть длительными, это влияет на производительность системы в целом. Ну и глухой цикл в сценарии повесит всю систему
-
У меня проблемка: в сценарии IH срабатівает 2 действия одновременно. Помогите разобратся:
/** * @name Виключення насоса тепла підлога * @desc * @version 4 */ const water_pump = Device("water_pump_for_hot_water"); const radiator8 = Device("RADIATOR8"); const radiator9 = Device("RADIATOR9"); const radiator10 = Device("RADIATOR10"); startOnChange([radiator8,radiator9,radiator10]); script({ start() { // if(radiator10.isOn()){ // this.log('radiator10 is On'); // }else{ // this.log('radiator10 is Off'); // } if(radiator8.isOff()||radiator9.isOff()||radiator10.isOff()){ this.log('start timer water_pump'); this.startTimer("T1",300,"onTimerT1"); } if(radiator8.isOn()&&radiator9.isOn()&&radiator10.isOn()){ this.log('off water_pump'); water_pump.turnOffSaveAuto(); } }, onTimerT1(){ water_pump.turnOnSaveAuto(); } });
При открытии заслонки теплого пола в плашине MegaD продалает статус устройства, пришет "-". В сценарии у меня on это закрыто а off это открыто. 1 принимает коректно а 0 пишет "-"
-
@amgstone
По логике вашего сценария у вас получается, что когда хотяб один клапан открыт, то включается таймер, а когда все клапаны закрыты, то насос выключается. Когда выключается насос, вам нужно добавить еще выключение таймера, иначе у вас насос включиться когда все клапаны уже закрыты. Команда на выключение this.stopTimer(‘T1’). Добавьте ее после this.log('off water_pump');
-
Пользователь @goodspeed1986 написал в Сценарии пользователей:
this.stopTimer(‘T1’)
/** * @name Виключення насоса тепла підлога * @desc * @version 4 */ const water_pump = Device("water_pump_for_hot_water"); const radiator8 = Device("RADIATOR8"); const radiator9 = Device("RADIATOR9"); const radiator10 = Device("RADIATOR10"); startOnChange([radiator8,radiator9,radiator10]); script({ start() { // if(radiator10.isOn()){ // this.log('radiator10 is On'); // }else{ // this.log('radiator10 is Off'); // } if(radiator8.isOff()||radiator9.isOff()||radiator10.isOff()){ this.log('start timer water_pump'); this.startTimer("T1",300,"onTimerT1"); } if(radiator8.isOn()&&radiator9.isOn()&&radiator10.isOn()){ this.log('off water_pump'); this.stopTimer(‘T1’); water_pump.turnOffSaveAuto(); } }, onTimerT1(){ water_pump.turnOnSaveAuto(); } });
Выдает ошибку: http://joxi.ru/82Q4bdkuwknbKm
-
@amgstone а то что значение с канала выдает "-" сможете поправить баг. На другом объекте у меня такая же проблема.
Поправил: this.stopTimer("T1"); ошибка ушла но насос дальше не выключает после етого как все сервопривода закрыты (On).