Сценарии пользователей
-
Пользователь @dre12007 написал в Сценарии пользователей:
Добрый день
Помогите сделать сценарий
Я вообще не представляю как это сделать
Есть датчик который присылает на сервер расстояние в см
Мне нужно сантиметры перевести в проценты, от 0 до 100% и вывести их на экран
105 см = 0%
20 см = 100%
Это примерно точные сантиметры= 100 - (value - 20)*100/85
-
если не сложно можно подробнее?
-
- Узнаем сколько % составляет значение уменьшенное на 20 от верхней границы - 105 минус 20.
- "переворачиваем" проценты. Вам нужно минимальное значение - 100%, максимальное - 0. Поэтому от 100 отнимаем полученное в п.1
Стесняюсь спросить, вы в школе зачем учились то?
-
Причем тут школа, я понял что вы высчитали
Где это прописать в ih, как это сделать в самой программе?
Такого в школе не преподают
-
@amgstone Вот я сделал. У меня вроде работает.
-
Вот ещё один рабочий. При входе срабатывает геркон, если нет движения выключается свет.
-
@dre12007
Если ваше устройство sensor1, а % присваиваете actor1let newvalue = 100-(sensor1.value-20)*100/85;
actor1.setValue(newvalue);
-
Пользователь @Sergeus написал в Сценарии пользователей:
@amgstone Вот я сделал. У меня вроде работает.
Не, всё таки не работает. Где косяк, хз.
-
@Sergeus
Элемент AND в данном случае лишний. Он необходим при сравнении как минимум двух свойств.
Зачем элемент сравнения A>B, не понятно. Этот элемент имеет смысл когда сравниваете аналоговые величины. Например температура1 больше температуры2.Если цель выключить светильник (H20) через 600 сек. после прекращения движения (триггер smotion2), то логичней такой сценарий:
Хотя смысла у такого сценария нет. Можно было просто выключать светильник без проверки его состояния. Я просто показал применение блока AND
-
@intrahouse Понятно. А как его привязать к сценарию с герконом, чтоб был как один или нет в этом разницы?
-
const roulette = Device( "Roulette"); const actor = Device( "Аctor"); startOnChange ([roulette]); script({ start() { let newvalue = 100-(roulette.value-20)*100/85; actor.setValue(newvalue); } });
Что то не так я делаю
-
Актуатор в устройствах создали?
Он же не может быть просто actor, он actorаХХ (с цифрой на конце).
Вы же конкретному значение присваиваете.И что такое "roulette"?
У вас есть датчик. Он в "устройствах" как назван? Его ID?
И "актуатор универсальный аналоговый" в устройствах же создайте, и в скрипте используйте его ID.Если вы мультисценарий создаете, первым делом типы устройств указываются. Нет такого типа - "Roulette"
-
Да создал и назвал его actor
Roulette это датчик расстояния, в устройствах он так и назван
Не мульти сценарий
-
А что отладчик говорит?
-
@dre12007, вы уточните как у вас данные от датчика попадают на сервер? Какой плагин используется? Есть несколько вариантов, поэтому надо понять как лучше сделать. А так - входных данных никаких, но вы помогите...
-
Плагин мега
Датчик опрашивается каждые 15 секунд
Отладчик молчит
-
Пользователь @dre12007 написал в Сценарии пользователей:
Плагин мега
Датчик опрашивается каждые 15 секунд
Отладчик молчитзначит скрипт не запускается даже.
Изменения значения то есть у датчика?
-
Да вроде есть
Ну данные то после опроса точно приходят
-
@dre12007, ну если MegaD. То тут есть два более легких варианта:
1.Открываем свойства канала, переходим на вкладку "Обработка" и в поле "Формула расчета входного значения" вписываем100 - (Number(value) - 20)*100/85
2.То же, но на вкладке "Канал" включаем чек-боксом "Использовать функцию обработки при получении данных", а в ней вписываем:
function (val) { var result = ( 100 - (val - 20) *100/85 ).toFixed(2); return result; //Возвращаем значение }
Таким образом, входные данные с датчика сразу "скорректируются" и у устройства будет отображаться нужное значение.
-
@dre12007, с виду скрипт рабочий. Вы точно правильно внесли ID устройств в скрипт? И ваш "Actor" - это точно актуатор универсальный аналоговый? А "Roulette" - датчик аналоговый универсальный?
Данные смотрите через плагин или на мнемосхеме?