Пульт.Онлайн /

Подключение JS-скриптов к мнемосхеме

Подключение
Переменные окружения
Жизненный цикл
Пример скрипта


Подключение

Пульт.Онлайн поддерживает подключение пользовательских JS-скриптов к мнемосхемам. Пользовательский скрипт подключается в секции head HTML-документа мнемосхемы в тегах script, а файл скрипта может быть размещен в ресурсах мнемосхемы или в файлах проекта.

  1. Создайте или загрузите файл скрипта в папку Ресурсы мнемосхемы или в папку Файлы проекта.
  2. В редакторе мнемосхемы на вкладке Код добавьте в код мнемосхемы тег script с указанием пути к скрипту (%resources% - подстановка пути к ресурсам мнемосхемы, %files% - подстановка пути к файлам проекта).

Например:

  • HTML-код мнемосхемы

      <!DOCTYPE HTML>
      <html>
          <head>
              ...
              <script src='%resources%/script.js'></script>
              ...
          </head>
          <body>
              ...
          </body>
      </html>	
    
  • Содержание папки Ресурсы

      resources/
      │
      ├── ...
      ├── script.js
      └── ...
    

Переменные окружения

Пользовательский скрипт выполняется в области видимости web-компонента мнемосхемы и имеет доступ к следующим переменным окружения:

  • pult - объект, предоставляющий JS API сервера
  • widget - web-компонент экрана, в котором отображается мнемосхема
  • self - web-компонент самой мнемосхемы

Работа с HTML-элементами должна выполняться через self.shadowRoot.

Жизненный цикл

  • функция oncreate - начало работы; инициализация интервалов, листенеров, подписок
  • функция ondestroy - завершение работы; освобождение интервалов, листенеров, подписок

Пример скрипта

В данном примере скрипт создает несколько контролов, а также манипулирет уже существующим контролом <control-mobile-label2>, который существовал в мнемосхеме на момент запуска скрипта.

let interval;

function oncreate(){
    console.log('created',self.shadowRoot);
    let sw=document.createElement('control-common-switch1');
    let lmp1=document.createElement('control-common-lamp1');
    let lmp2=document.createElement('control-common-lamp1');
    let lbl=document.createElement('control-common-label1');
    self.shadowRoot.appendChild(sw);
    self.shadowRoot.appendChild(lmp1);
    self.shadowRoot.appendChild(lmp2);
    self.shadowRoot.appendChild(lbl);
    
    let lbl2=self.shadowRoot.querySelector('control-mobile-label2');

    interval=setInterval(function(){
        lmp2.value=!lmp2.value;
        lbl.value=self.node1?.vars?.temperature?.value; // параметры мнемосхемы доступны как св-ва объекта self (self - это веб-компонет мнемосхемы)
    },1000);
    
    sw.onchange=function(e){
        pult.setVar(widget,'P3_N1_var1',sw.value);
    }

    pult.subscribeVars(widget,['P3_N1_var1'],function(data){
        for(let i=0; i<data.length; i++){
            let [name,time,value,error,payload]=data[i];
            lmp1.value=value;
            sw.value=value;
        }
    });

}

function ondestroy(){
    pult.unsubscribeVars(widget);
    clearInterval(interval); // всегда освобождайте интервалы, подписки, листенеры и пр. иначе память потечет
    console.log('destroed');
}

Пример на демо-сервере

  Email
  SMS
   fdb_list
   fdb_load
   fdb_move
   fdb_paths
   node_list
   subscribe
   var_get
   var_list
   var_set