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



  • В общем по новым наблюдениям: как только перезагружаю iH (из вебки), то после обновления страниц (открываю отладчик плагина и открываю отладчик сценария) в плагине сообщения от железки идут и есть сообщение о запуске сценария, но в отладчике сценария - пусто!

    Как только пересохраняю сценарий (добавляю и удаляю пробел, жму сохранить), то в его отладчике сразу появляются сообщения.

    Повторил несколько раз - картина одинаковая. Остальные сценарии вроде бы работают.

    У вас есть возможность сделать эксперимент с моим сценарием? По идее достаточно сохранить сценарий, установить плагин voiceterminal (слушающий порт 11052) и в браузере вбить http://адрес_сервера_iH:11052/api/method/name.method?music_volume=110&volume=120&username=voiceterminal&uptime=500&terminal=VT2



  • @Alex_Jet:

    В общем по новым наблюдениям: как только перезагружаю iH (из вебки), то после обновления страниц (открываю отладчик плагина и открываю отладчик сценария) в плагине сообщения от железки идут и есть сообщение о запуске сценария, но в отладчике сценария - пусто!

    Как только пересохраняю сценарий (добавляю и удаляю пробел, жму сохранить), то в его отладчике сразу появляются сообщения.

    Повторил несколько раз - картина одинаковая. Остальные сценарии вроде бы работают.

    У вас есть возможность сделать эксперимент с моим сценарием? По идее достаточно сохранить сценарий, установить плагин voiceterminal (слушающий порт 11052) и в браузере вбить http://адрес_сервера_iH:11052/api/method/name.method?music_volume=110&volume=120&username=voiceterminal&uptime=500&terminal=VT2

    Поэкспериментируем на следующей неделе 🙂

    А в строке сценария в таблице не выводится ошибка (столбец Ошибка)?



  • @intrapro:

    @Alex_Jet:

    В общем по новым наблюдениям: как только перезагружаю iH (из вебки), то после обновления страниц (открываю отладчик плагина и открываю отладчик сценария) в плагине сообщения от железки идут и есть сообщение о запуске сценария, но в отладчике сценария - пусто!

    Как только пересохраняю сценарий (добавляю и удаляю пробел, жму сохранить), то в его отладчике сразу появляются сообщения.

    Повторил несколько раз - картина одинаковая. Остальные сценарии вроде бы работают.

    У вас есть возможность сделать эксперимент с моим сценарием? По идее достаточно сохранить сценарий, установить плагин voiceterminal (слушающий порт 11052) и в браузере вбить http://адрес_сервера_iH:11052/api/method/name.method?music_volume=110&volume=120&username=voiceterminal&uptime=500&terminal=VT2

    Поэкспериментируем на следующей неделе 🙂

    А в строке сценария в таблице не выводится ошибка (столбец Ошибка)?

    Не обращал внимание. Сейчас глянул - сценарий по установке статуса работает исправно и у него нет ошибок. А у сценария управляющего терминалом есть ошибка и сценарий не работает. Заработал только после его очередного пересохранения. С чем может быть связана данная ошибка?
    Сценарии_Ошибка_Voiceterminal.png



  • @Alex_Jet:

    Не обращал внимание. Сейчас глянул - сценарий по установке статуса работает исправно и у него нет ошибок. А у сценария управляющего терминалом есть ошибка и сценарий не работает. Заработал только после его очередного пересохранения. С чем может быть связана данная ошибка?

    Получается, что при первоначальной загрузке сценария (на старте IH) еще не успевает создаться устройство - индикатор плагина.

    Действительно, процедура запуска плагинов менялась. Постараемся пофиксить этот момент в ближайшей версии.



  • Подскажите какой командой можно проверить все устройства в подсистеме на предмет ison of isoff.



  • Подскажите, а нет ли возможности вызывать сценарий из сценария? Что-то типа #include или может execute. Было бы местами удобно



  • @homa, пока такой возможности нет 😞



  • Коллеги! И все же как найти проблему - почему после перезагрузки системы у меня сценарии, которые вызываются плагином VoiceTerminal, не стартуют пока я их не "пересохраню"? При этом, простой сценарий-переключатель света (запускается плагином MegaD) работает всегда. Ошибок по сценариям нет. Достаточно в режиме редактирования в любом месте ввести, например, пробел чтобы появилась кнопка сохранить и после нажатия кнопки сценарий начинает стартовать!



  • Подскажите как сделать сценарий: включение/выключение нескольких лампочек, устройство MegeD, включение по выключателю одним кликом и выключение одним нажатием по выключателю.



  • @amgstone, сценарий не нужен если будет использоваться одна и та же MegaD (на ней входы с выключателями и выходы с лампами). Нужно прописать нужные "Расширения" в плагине. Писал об этом, например тут



  • Добрый день! Есть такой кусок кода:

          if (SENSOR1.isOn){ //Квартира на охране. отключаем автоматический режим
              ssa=speed.value - 1; //Вводим переменную для плавного понижения скорости
              tempv.setParam("setpoint",4);
              if (ssa<= 0) {
                ssa=0;
              }
             this.assign(speed, 'aval', ssa); //Выключаем вытяжку
             speed.setParam("setpoint",ssa); //Отображаем отключение
            return false;  //Завершение сценария
    

    Проблема в том, что он выполняется несмотря на состояние SENSOR1. И при On и при Off сценарий будет выполнен



  • Не могли бы вы сделать инструкцию по дополнительным параметрам устройств?
    Пытаюсь сделать числовой доп.параметр:

    const meterDay = Device("METER6", "Стоимость кВт", [
      {"name":"rkvt", "note":"Стоимость за кВт", "type":"Number", "val":4.47}
      ]); //Счетчик дневных показаний
    

    Параметр добавляется, но его нельзя редактировать. Кроме того, не получается обратиться к нему как к свойству из сценария. Например, meterD.rkvt недоступен.
    Подскажите как правильно объявить параметр, чтобы через боковое меню был доступен ввод значения, либо кнопки "включить/выключить", как использовать значение параметра в сценарии?



  • @homa
    Добрый день, добавьте скобки после isOn, isOff:

    if ( SENSOR1.isOn ) {   // должно вызывать ошибку, так как это не свойство, а функция 
    if ( SENSOR1.isOn() ) {   // Это правильный вариант
    

    Но действительно, без скобок ошибки нет, срабатывает в любом случае 😞



  • Каждый раз при создании мультисценария наступаю на одни и те же грабли.
    Нужно объявить тип устройства в первых строчках.
    И нигде в документации нет информации какое устройство к какому типу относится, и как этот тип правильно пишется.
    Ну сделайте пожалйста.

    А то при создании датчик открытия двери обзывается SGERKON, и в простом сценарии он тоже SGERKON, а в мультисценарии он оказывается должен быть SensorD.
    Ну вот как я это должен был узнать, кроме прямого перебора вариантов? Как?



  • @homa, вы сделали все верно, тип только должен быть с маленькой буквы, тогда редактирование будет работать:

    {"name":"rkvt", "note":"Стоимость за кВт", "type":"number", "val":4.47}
    

    По типам - пока реализовано только три типа для ввода:

    • "type": "number" (число, в том числе вещественное),
    • "type":"cb" (checkbox)
    • "type":"time" (для ввода временных интервалов).

    Любой другой тип, включая string, выводится как readOnly (без возможности редактирования)

    Из сценария доп. свойства доступны не напрямую, а через функции getParam, setParam:

    let x = meterD.getParam("rkvt");
    ......
    ..... 
    meterD.setParam("rkvt", x*0.9 );
    


  • @Erik
    Документация - это действительно наше слабое место. Но мы работаем над этим 🙂

    В данном случае все просто - объявляется не тип, а класс, и их всего 5:
    "SensorD" - Датчик дискретный
    "SensorA" - Датчик аналоговый
    "ActorD" - Актуатор дискретный
    "ActorA" - Актуатор аналоговый
    "Meter" - Счетчик

    Класс выводится в таблице устройств в столбце "Класс", а этот список можно найти в разделе Сценарии рубрика Классы устройств



  • А можно узнать такую вещь - когда мой голосовой терминал распознает фразу, то он кидает ее на сервер, плагин принимая команду терминала запускает сценарий:

    06.11 00:19:38.225 voiceterminal1: 192.168.11.51 => localhost:11051 HTTP GET /command.php?terminal=VT1&rms_max=2201&rms_min=987&username=aleksey&rms_avg=1293&qry=Включи+свет
    06.11 00:19:38.226 voiceterminal1: 192.168.11.51 <= localhost:11051 
    06.11 00:19:38.226 voiceterminal1: { type: 'startscene',
      id: 'VoiceTerminal_Temp',
      arg: '{"terminal":"VT1","rms_max":"2201","rms_min":"987","username":"aleksey","rms_avg":"1293","qry":"Включи свет"}' }
    06.11 00:19:38.228 IH: plugin command { unit: 'voiceterminal1',
      command: 'ask:Уточните название помещения!',
      type: 'command' }
    06.11 00:19:38.230 IH: startscene VoiceTerminal_Temp
    

    Тут видно, что сценарий запустился, отработал и плагину пошла команда 'ask:Уточните название помещения!'. Но почему после этого IH вдруг снова запускает сценарий (06.11 00:19:38.230 IH: startscene VoiceTerminal_Temp)?

    В итоге в отладчике сценария вижу вот это и моя задумка не работает...

    06.11 00:19:38.227 Started
    06.11 00:19:38.228 plugincCommand { unit: 'voiceterminal1',
      command: 'ask:Уточните название помещения!' }
    06.11 00:19:38.229 exit
    06.11 00:19:38.229 Stopped
    06.11 00:19:38.230 exit
    

    По идее последних Stopped и exit быть не должно. Такое ощущение, что IH принудительно запускает сценарий без входных данных и мои все переменные сценария обнуляются.



  • @Alex_Jet, Думаю, сценарий повторно не запускается, просто логирование происходит чуть позже запуска (на 3 мсек):

    06.11 00:19:38.226 voiceterminal1: { type: 'startscene',...   // Команда на запуск сценария
    06.11 00:19:38.227 Started // Запустили 
    06.11 00:19:38.228 IH: plugin command { unit: 'voiceterminal1',command: 'ask:Уточните...  // Работает сценарий
    06.11 00:19:38.230 IH: startscene VoiceTerminal_Temp // Фиксируем, что был запуск сценария
    

    То есть запустили сценарий, а потом зафиксировали в журнал. Возможно, фиксировать запуск правильнее до фактического запуска, но есть вероятность, что сценарий не запустится, поэтому сделано так

    Количество запусков можно посмотреть в Рабочих сценариях. После редактирования сценария этот счетчик сбрасывается

    Что касается Stopped и exit:
    Stopped в паре со Started один. Да, exit лишний, но там наверно есть прямой this.exit(), поэтому опять же особенность логирования



  • @intrapro а как одному устройству добавить несколько свойств? на разделить "запятая" ругается



  • И следом вопрос корректно ли объявлять одно и тоже свойство для одного и того же устройства в разных сценариях, или есть какие-то другие варианты обращения к ранее объявленным свойствам


Авторизуйтесь, чтобы ответить