В связи с выходом крупного обновления 5.9.х, приглашаем вас принять участие в вебинаре 09.06.2022 в 15:00. Участвовать

Сценарии - новая версия API



  • @intrapro, спасибо, буду пробовать



  • Добрый день!
    Не работает команда операционной системы
    Вот сценарий

    const mon = Device("POWER_MIRROR");
    
    // Запускаем сценарий при изменении состояния выключателя зеркала
    startOnChange(mon);
    
    script({
        start() {
          if (mon.isOff()) // Если он выключен
            this.execOS(`/home/pi/mirror_off.sh`); // Даем команду на выключение монитора
          else
            this.execOS(`/home/pi/mirror_on.sh`); // Иначе - на включение
        }
    });
    

    В отладчике пишет

    04.01 15:56:49.463 Trigger POWER_MIRROR
    04.01 15:56:49.464 Started
    04.01 15:56:49.465 execOS: /home/pi/mirror_off.sh
    04.01 15:56:49.492 Stopped
    04.01 15:56:49.522 execOS error: Error: Command failed: /home/pi/mirror_off.sh
    No protocol specified
    xset: unable to open display ":0.0"

    04.01 15:56:49.523 stdout:
    04.01 15:56:49.524 stderr: No protocol specified
    xset: unable to open display ":0.0"

    Хотя из терминала все прекрасно срабатывает. Может кто-то подсказать куда копать?



  • Подскажите как можно вывести среднюю температуру с 3 датчиков температури в сценарии? Хочу чтобы рекуператор менял уставку в зависимости от температуры в помещении.



  • @amgstone, ну а в чем проблема? Подтягиваете в сценарий своих 3 датчика температуры, в переменную заносите среднюю температуру от них и присваиваете 4-му датчику усредненное значение, по которому будет работать рекуператор.



  • @Alex_Jet от непонимаю как ето сделать в ih.



  • @amgstone,

    let avr = (t1.value + t2.value + t3.value)/3; //Закон усреднения показаний от трех датчиков
    this.assign(t_avr, "value", avr); //Присвоение аналоговому датчику значения
    


  • @Alex_Jet спасибо, все получилось))))



  • Может хто показать сценарий для счетчика многотарифного, чтобы визуализировал расход електроенергии по тарифам. Прошивка tasmota, wemos, pzem-004, mqtt.



  • Добрый день!
    В коде моего сценария есть такая строка:
    const pump = Device(“pumpRecirculation_4”, [
    {"name":"timePumpOn", "note":" Время работы насоса после отключения света, сек ", "type":"number", "val":1800}]);

    Так вот, после первого срабатывания сценария в свойство timePumpOn прописалось значение 1800. Меняю в сценарии значение "val" на другое, сохраняю изменения, а в timePumpOn остается по прежнему 1800. Изменить его можно только из сценария командой setParam. Разве так и должно быть?



  • @Lost, эта уставка оперативно! меняется из веб-интерфейса через "Параметры" устройства (всплывающее меню устройства при долгом клике мышью).



  • @Alex_Jet, это я уже понял. Получается в самом сценарии значение val задается только первый раз, а дальше менять его либо командами либо из веб?



  • @Lost, просто из веб. Ну или в случае различных уставок в течении суток, то из сценария.



  • Понятно. Спасибо!



  • Добрый вечер!
    Столкнулся с интересной ситуацией. В сценарии был запущен таймер:
    this.startTimer("T1", 0.5, "onTimerT1").
    И так получилось, что до момента его срабатывания произошло выполнение следующей команды:
    this.startTimer("T1", 55, "turnOff").
    И после отработки выдержки 0.5 сек (задавалась в первой команде) выполнилась функция turnOff. Хотелось бы узнать, тут все верно или есть "косячок"?



  • @Lost, наверное логично поскольку в обоих случаях таймеры называются одинаково!



  • @Alex_Jet, получается не очень логично. Исполняемая функция изменилась, а время работы таймера - нет. Как то половинчато получается.



  • @Lost, пробовали таймеры называть своими именами? Или хотя бы явно объявлять их в начале сценария?



  • @Alex_Jet, да, таймер объявлен в самом начале сценария: this.addTimer('T1');
    А что это меняет?



  • @Lost, смысл в том что JS-многопоточный! Вы запускаете T1 на 0,5 секунды и параллельно тот же T1 запускается на 55 секунд (по идее его сработка на 0,5 секунд должна отмениться). Не знаю как движок системы в этом случае себя должен вести, но по мне - случайным образом... поэтому если нужно взводить несколько таймеров, то называйте их по разному.



  • Добрый вечер!
    Заметил, что если после команды this.exit() есть еще какой либо код, то он вполне себе исполняется. Вот пример:
    start() {
    this.off();
    },
    off() {
    this.log('сценарий запущен');
    this.exit();
    this.log('1');
    this.log('2');
    this.log('3');
    this.log('4');
    this.log('5');
    this.log('6');
    this.log(6 + 10);
    }
    });
    Лог отладчика:
    07.02 20:01:55.351 Started
    07.02 20:01:55.352 log: сценарий запущен
    07.02 20:01:55.369 exit
    07.02 20:01:55.370 Stopped
    07.02 20:01:55.371 log: 1
    07.02 20:01:55.375 log: 2
    07.02 20:01:55.377 log: 3
    07.02 20:01:55.380 log: 4
    07.02 20:01:55.383 log: 5
    07.02 20:01:55.385 log: 6
    07.02 20:01:55.388 log: 16
    Разве так и должно быть? Ранее в этой теме писалось, что по этой команде все таймеры и слушатели сценария удаляются и сценарий станет не активным. Я так понимаю, что после this.exit() сценарий должен сразу завершиться..


Log in to reply