Сценарии пользователей
-
Подскажите пожалуйста ещё
Вот в сценарии пишу
if (roulette.value > 70)
Видимо он видит не обработанные значения те что от датчика приходят
А как написать что бы сценарий видел нужное значения, обработанное ?
-
Если вы использовали способ корректировки значения в плагине, то в roulette проценты.
Если скрипт и актуатор, то нет. В этом случае % у актуатора, а у roulette исходное значение из диапазона 20-105.Если вам нужно работать с %, то в первом случае в скрипте используйте значение roulette, во втором - значение актуатора.
-
Значения в плагине
-
Пользователь @dre12007 написал в Сценарии пользователей:
Пользователь @Alex_Jet написал в Сценарии пользователей:
@dre12007, ну если MegaD. То тут есть два более легких варианта:
- Открываем свойства канала, переходим на вкладку "Обработка" и в поле "Формула расчета входного значения" вписываем
100 - (Number(value) - 20)*100/85
- То же, но на вкладке "Канал" включаем чек-боксом "Использовать функцию обработки при получении данных", а в ней вписываем:
function (val) { var result = ( 100 - (val - 20) *100/85 ).toFixed(2); return result; //Возвращаем значение }
Таким образом, входные данные с датчика сразу "скорректируются" и у устройства будет отображаться нужное значение.
А этот способ если сделать то не нужен actor получается?
Просто рулет в виджет добавляю и он рисует нужный процент ?Понаблюдал, все работает но, если удалить эту строку 100 - (Number(value) - 20)*100/85
С ней какие то неправильные цифры показывает
В отладчике 3 значения
1 Размер до обработки
2 Обработанный правильный
3 И какая то херь, которая выводится на экран
Без этой строки все норм
Спасибо за помощь
-
@dre12007, надеюсь вы сделали один из двух вариантов? Либо обработка входного значения, либо функция обработки! В конце-концов - покажите что отладчик лпагина показывает!
-
29.07 14:50:19.735 megad2: localhost => 192.168.0.241 HTTP GET /drept=30&dev=sr04 echo=31 29.07 14:50:19.754 megad2: localhost <= 192.168.0.241 response: statusCode=200 contentType = text/html 29.07 14:50:19.755 megad2: body: 52.83 29.07 14:50:19.759 IH: get [ { id: 3031', value: '61.38' } ] set { roulette: { aval: 61.38, err: 0 } }
-
Пользователь @dre12007 написал в Сценарии пользователей:
29.07 14:50:19.735 megad2: localhost => 192.168.0.241 HTTP GET /drept=30&dev=sr04 echo=31 29.07 14:50:19.754 megad2: localhost <= 192.168.0.241 response: statusCode=200 contentType = text/html 29.07 14:50:19.755 megad2: body: 52.83 29.07 14:50:19.759 IH: get [ { id: 3031', value: '61.38' } ] set { roulette: { aval: 61.38, err: 0 } }
А почему у Вас в отладчике запрос на MegaD выглядит так "/drept=30&dev=sr04 echo=31", а не так "/sec/?pt=30&dev=sr04&echo=31"???
А если в принципе, то конечное значение получается правильным. Так какой вариант использовали - 1 ("Формула расчета входного значения") или 2 ("Функция обработки...")???
-
Функция обработки при получении данных
-
/dre/?pt=30 на самом деле выглядит так
Просто гугл объектив так скопировал криво
-
Всем привет. Подскажите строки кода которые нужно добавить в сценарий, чтобы свет включался по датчика движения в заданное время. Кот ночью тоскается и включает свет! Сценарий из примеров на сайте. Спасибо.
-
@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');