Навигация

    Forum

    • Зарегистрироваться
    • Войти
    • Поиск
    • Категории
    • Последние
    • Метки
    • Популярные
    • intraHouse Site
    1. Главная
    2. regabriel
    3. Сообщения
    R
    • Профиль
    • Подписки
    • Подписчики
    • Темы
    • Сообщения
    • Лучшие сообщения
    • Группы

    Сообщения regabriel

    • RE: Плагин E-Mail

      Моя борьба с плагиным закончена)))

      Пишу для других, возможно это сократит вам время.

      1. Если ящик через который отправляется находится на mail.ru, то данный сервис заблокирует ящик. Восстанавливать его сложно, так как у меня не был привязан телефон. Письма не отправляются. Даже создание нового ящика и отправка от него ничего не дает(никакой реакции вообще нет). Такое ощущение, что сервис просто банит и всё.
      2. Gmail. Отправит несколько писем но потом при входе укажет, что
      Предотвращена попытка входа в аккаунт
      Кто-то хотел войти в Ваш аккаунт из стороннего приложения, используя Ваш пароль, но мы заблокировали эту попытку. Рекомендуем Вам проверить действия в аккаунте и убедиться, что у посторонних нет доступа к нем
      

      При этом я не нашел возможности разрешить доступ стороннему приложению, гугл безжалостен :))
      Все письма отправленные от этого ящика попадают в спам.

      3.) yandex.ru всё нормально отправляет, и письма видны.

      Вот только и текст сообщения и тема дублируются.

      this.info("email","OWNER",'Протечка, протечка  22');
      this.info("email","OWNER",'Протечка!!!', 'Протечка в комнате 5');
      

      В письме выглядят одинаково

      написал в Плагины
      R
      regabriel
    • Зависание скриптов

      Здравствуйте. Проблема с зависанием периодически выполняющегося скрипта не исчезла. Пытаюсь понять как найти причину. Прошу помощи.

      Мульти скрипт выполняется раз в минуту. При этом некоторые из них могут зависнуть, а некоторые еще не зависали никогда. Раз в день есть вероятность, что один-два скрипта зависнут.

      Как найти причину такого поведения?
      На картинке видно, что два скрипта зависло
      alt text

      Скрипт:

      /** 
      * @name Опрос и считывание показаний по CNT меги 
      * @desc  
      * @version 4 
      */
      const count_mega = Device("SensorA","Предыдущее CNT меги"); 
      const count = Device("Meter","Счетчик"); 
      
      script({
          start() {
            // Связывание устройств с плагинами
            let name_plugin ='';
            let port_plugin = '';
            let pass_plugin = 'gos';
            
            switch (count_mega.id){
              case 'number_223_cnt_mega_electro':
                name_plugin = 'megad3';
                port_plugin = '0';
                break;
              case 'number_223_cnt_mega_waterCold':
                name_plugin = 'megad4';
                port_plugin = '0';
                break;
              case 'number_223_cnt_mega_waterHot':
                name_plugin = 'megad4';
                port_plugin = '1';
                break;
              case 'number_222_cnt_mega_waterCold':
                name_plugin = 'megad4';
                port_plugin = '2';
                break;
              case 'number_222_cnt_mega_waterHot':
                name_plugin = 'megad4';
                port_plugin = '3';
                break; 
              case 'number_221_cnt_mega_waterCold':
                name_plugin = 'megad4';
                port_plugin = '4';
                break;
              case 'number_221_cnt_mega_waterHot':
                name_plugin = 'megad4';
                port_plugin = '5';
                break;
                case 'stolovaya_cnt_mega_waterCold':
                name_plugin = 'megad2';
                port_plugin = '4';
                break;
              case 'stolovya_cnt_mega_waterHot':
                name_plugin = 'megad2';
                port_plugin = '5';
                break;
              default:
                this.log('не найден счетчик по id в скрипте '+count_mega.id);
                this.exit();
                break;
            }
              //this.pluginCommand({unit:'megad3', command:'/gos/?pt=0&cmd=get'}, 'onGetResponse');
               this.pluginCommand({unit: name_plugin + '', command:{url:'/'+pass_plugin +'/?pt='+port_plugin + '&cmd=get', onResponse:'raw'}},'onGetResponse');
              
        },
      
        onGetResponse(body) {
      //дальше уже обработаем ответ
              let cnt = 0;
              let weightImpulse = 1;
              let inaccuracy = 0;
              let weitType = 'default';
              let ElectroMercuri = ['number_223_cnt_mega_electro'];
              let Water10Litr = ['number_221_cnt_mega_waterHot','number_221_cnt_mega_waterCold','number_222_cnt_mega_waterHot','number_222_cnt_mega_waterCold','number_223_cnt_mega_waterHot','number_223_cnt_mega_waterCold','stolovaya_cnt_mega_waterCold','stolovya_cnt_mega_waterHot'];
              
              if (ElectroMercuri.indexOf(count_mega.id) != -1)
              {
                weightImpulse = 0.0003125;
                inaccuracy = 100;
              }else 
                if (Water10Litr.indexOf(count_mega.id) != -1){
                weightImpulse = 0.01;
                inaccuracy = 2;
              }
              
           if (body.substr(0,2) =='OF'){
            cnt = body.substr(4);
            }else if (body.substr(0,2) =='ON'){
            cnt = body.substr(3);
          }else
          {
            this.log('Ошибка данных от контроллера');
            this.exit();
          }
          cnt = Number(cnt);
         //this.log(cnt);
          let diff = Number(cnt) - Number(count_mega.value);
            if (diff === 0)
            {
              // this.log('скрипт - ок0');
              this.exit();
            }else if (diff > 0)
            {
              this.assign(count,"aval",(diff * weightImpulse ) + Number(count.value));
              // this.log('скрипт - ок1 =' + cnt); 
            }else{
              //сброс по питанию уже был, допустимый или нет?
              if (Number(count_mega.value) > (65535 - inaccuracy))
              { 
                let diff2 = cnt + (65536 - count_mega.value);
                if (diff2 !== 0)
                {
                this.assign(count,"aval",((diff2 * weightImpulse ) + Number(count.value)));
                }
                // this.log('скрипт - ок2');
              }else{
                //был сброс по питанию!!
                this.log('Был сброс счетчиков у контроллера ' + count_mega.id);
                if(cnt !== 0)
                {
                this.assign(count,"aval",((cnt * weightImpuls) + Number(count.value))); //нельзя присвоить тоже значение счетчику, зависнет, дальше работать не будет
                }
                
                
              }
            }
              if (Number(count_mega.value) != cnt){
                this.assign(count_mega,"value",cnt);
              }
          this.exit();
        }
      });
      
      
      
      написал в Сценарии
      R
      regabriel
    • RE: Вопросы по работе системы

      @regabriel

      То что смог откопать, скорее всего из-за этого и зависло:

      const count = Device("Meter","Счетчик");
      ...
      после этого момента скрипт не выполняется:
      this.assign(count,"aval", "тоже значение что и было раньше");
      

      Где-то ошибка в коде разрабов т.к. не очень правильно, чтобы скрипт просто зависал на таком моменте.

      написал в intraHouse V4 Cherry
      R
      regabriel
    • RE: Вопросы по работе системы

      Не могу понять это ошибка системы?? Почему некоторые скрипты не запускаются по времени? Где нибудь ошибка?

      alt text

      Возможно магия стоит в "запуске/остановке/заблакировке/разблокировке" сценария
      Видимо если ты запускаешь сценарий в ручную, то последующий действия по расписанию идти не будут? Пока его не разблокируешь? Они могут самозаблокироваться(ночью я точно скрипты не трогал)?

      написал в intraHouse V4 Cherry
      R
      regabriel
    • RE: Вопросы по работе системы

      @Alex_Jet пробовал на других браузерах?
      У меня например в Firefox выгрузка проекта в файл не работает, так, что от браузера могут быть различия...

      написал в intraHouse V4 Cherry
      R
      regabriel
    • RE: Вопросы по работе системы

      Пользователь @intrapro написал в Вопросы по работе системы:

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

      Похоже в виджете мнемосхема по умолчанию она стояла, из-за этого и ошибки. Я не заметил, наверное надо было изменить состояние по умолчанию и всё.

      Но я добавил 49.json в конфигах на сервере, а также скорректировал mnemoshemes.json, тем самым вернул её. После чего уже заметил, что мнемосхема по умолчанию отображает 49ую. И исправил это.))

      Спасибо за советы. Было бы здорово если бы сообщения об ошибках были бы более информативными.

      написал в intraHouse V4 Cherry
      R
      regabriel
    • RE: Вопросы по работе системы

      Столкнулся с ошибкой в системе.
      Была у меня мнемосхема 49, так же был возможность её выбора в некоторых навигаторах мнемосхем.
      Решил её удалить. Теперь ни один навигатор не работает, требует её. Ни удаление навигаторов, ни перезагрузка системы не помогает. В списке выбора мнемосхем её нигде нет.
      alt text

      Что делать?

      написал в intraHouse V4 Cherry
      R
      regabriel
    • RE: Вопросы по работе системы

      Пользователь @intrapro написал в Вопросы по работе системы:

      this.isChanged(shutter_small)

      Хорошо, а то я уже совсем голову сломал)) Спасибо.
      Только поясните еще один момент (isChanged когда оно равно true)

      const dev = Device("window");
      ...
      start() {
        	this.addTimer("T1");   
       //в этот момент времени dev закрыто
      this.startTimer("T1", 100, "finish_active"); 
      },
      
      finish_active(){
      // если до этого момента времени входа в start() не было, и dev открыто(т.е. изменилось)
      // то 
      this.isChanged(dev) == true  или false???
      
      // А если оно несколько раз менялось и осталось к этому моменту закрытым(т.е. не изменилось
      this.isChanged(dev) == true  или false???
      }
      // Или еще если говоря по русски, то isCanged()== true если значение изменилось, или менялось?
      написал в intraHouse V4 Cherry
      R
      regabriel
    • RE: Вопросы по работе системы

      Не пойму из-за чего могут не работать некоторые скрипты пишет что isChanged не функция, хотя это мультисценарий и у других норм:

      alt text

      Другой скрипт так же выдает при принудительном запуске:
      alt text

      Скажите из-за чего такое может выдавать? (перезагрузка не помогает)

      написал в intraHouse V4 Cherry
      R
      regabriel
    • RE: Вопросы по работе системы

      Пользователь @Alex_Jet написал в Вопросы по работе системы:

      системный виджет autocomplete

      Вот я тоже не понял как его настраивать.

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

      написал в intraHouse V4 Cherry
      R
      regabriel
    • RE: Плагин MegaD

      @Alex_Jet
      Делаю сценарий мульти и в зависимости от типов счетчиков, ставлю разное расписание(каждые 5-60 сек). Так же запуск его(их) при перезагрузке контроллера.

      написал в Плагины
      R
      regabriel
    • RE: Плагин MegaD

      @Alex_Jet
      У меня все получилось. Есть такой файлик в плагине CHANGELOG.md
      Так вот там описано как получать данные.

      #### 2. Добавлена функция-обработчик для pluginCommand
      
       При отправке команды плагину из сценария (любые запросы, которые принимает MegaD) ответ от контроллера можно получить и обработать прямо в сценарии 
      
         Например, было можно отправить команду из сценария:
        
         ```this.pluginCommand({unit:'megad1', command:{url:'/sec/?cmd=7:1', onResponse:[{id:"7",value:1}]});```
      
         Здесь отправляем запрос на включение выхода 7. 
      
         onResponse задает массив - какие каналы (и соответственно связанные с ними устройства) нужно установить после получения положительного ответа от MegaD 
        
        Теперь добавлена возможность отправлять запросы и анализировать ответ на уровне сценария
        Таким образом можем, например,  читать состояния портов внутри сценария
      
        ```this.pluginCommand({unit:'megad1', command:{url:'/sec/?pt=7&cmd=get', onResponse:'raw'}}, 'getResponse');```
        
        onResponse:'raw' означает, что нужно вернуть сценарию ответ контроллера напрямую 
        Второй параметр - имя функции обработчика
        
        Ответ придет, если контроллер доступен и вернул статус 200, иначе ответа не будет, функция-обработчик не сработает, а сценарий останется активным.
        Чтобы сценарий завершился, предусмотрен выход по таймауту.
      
          script({
            start() {
              // Передать запрос на megad1, ответ без обработки пусть придет в сценарий (onResponse:'raw')
              this.pluginCommand({unit:'megad1', command:{url:'/sec/?pt=7&cmd=get', onResponse:'raw'}}, 'getResponse');
              // Взвести таймер на случай, если ответа от контроллера нет
              this.startTimer('T1', 3, 'onTimeout');
            },
          
            getResponse(body) {
              // body 
              this.log('getResponse body= '+body);
              this.exit();
           },
          
            onTimeout() {
              this.log('Истек таймаут, ответ от megad1 не получен');
              this.exit();
            }
          });
      
      

      А @intrapro ошибся в строке
      this.pluginCommand({unit:'megad3', command:'/sec/?pt=0&cmd=get'}, 'onGetResponse');
      },
      нехватает onResponse:'raw'

      ну а дальше обработка полученных данных в скрипте, думаю все не сложно

      написал в Плагины
      R
      regabriel
    • RE: Вопросы по работе системы

      Здравствуйте. А как реализовать выпадающий список со списком действий?
      Например переход на экраны.

      Можно конечно в Html блок запихнуть, только как сделать обработку выбора элемента?

      написал в intraHouse V4 Cherry
      R
      regabriel
    • RE: Плагин MegaD

      Пользователь @intrapro написал в Плагин MegaD:

      Ну и по поводу CNT для счетчика - просто интересно, как решается вопрос, когда контроллер при потере питания сбрасывает значение?

      1. Опрос каждые несколько секунд.
      2. Так как при переходе через 65535 идет get запрос, то данный факт фиксируем
      3. Если текущее значение cnt меньше предыдущего(т.е. счет пошел заново),
        и был зафиксированн факт перехода
        или (мало-ли get запрос потерялся) предыдущее значение было больше 65XXX ( в зависимости от счетчиков, насколько допустима погрешность)
        то учитываем еще импульсы которые до 65535

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

      написал в Плагины
      R
      regabriel
    • RE: Плагин MegaD

      @Alex_Jet
      Ставлю канал - 223 (тоже и если поставить qweds)
      строку запроса /%pwd%/?pt=0&cmd=get

      функцию "function (val, depo) {
      let result = 34;
      return result;
      } "

      Лижи все равно не едут. Результат не изменился вообще ни по логам ни где.

      В плагине(v 1.1.16) Нет цифр 36-37-38 обычным поиском по содержимому файлов это легко проверяется.
      Т.е. я очень сомневаюсь "название канала указываете как 0 - 37" в истинности этой версии

      написал в Плагины
      R
      regabriel
    • RE: Плагин MegaD

      @Alex_Jet

      У меня даже банальная функция не работает (Либо я дурак, либо лижи не едут)))

      function (val, depo) {
         	let result = 34;
        	return result; 
           } 
      

      канал - 0
      Тип порта - AI Analog Input(ADC,Dsen)
      Устройство - аналоговый универсальный датчик. (number_223_cnt_mega_electro)
      Период опроса 2 сек
      Строка запроса /%pwd%/?pt=%adr%&cmd=get

      В самой меге настроен порт IN
      Отладчик показывает:

      30.07 11:59:18.007 megad3: localhost => 192.168.1.213 HTTP GET /gos/?pt=0&cmd=get
      30.07 11:59:18.014 megad3: localhost <= 192.168.1.213  response: statusCode=200 contentType = text/html
      30.07 11:59:18.015 megad3:  body: OFF/5242
      30.07 11:59:18.016 IH: get [ { id: '0', value: '0' } ]
      set { number_223_cnt_mega_electro: { aval: 0, err: 0 } }
      

      В исходниках модуля попытался разобраться, но быстро понять хитросплетения не получилось, времени жалко на полный разбор))

      написал в Плагины
      R
      regabriel
    • RE: Плагин MegaD

      Пользователь @Alex_Jet написал в Плагин MegaD:

      лучше сделайте по такому принципу

      Моя задача сделать максимально точные показания. Поэтому такой подход считаю неправильным, т.к. между получением Get от меги и получением мегой команды " http://192.168.0.14/sec/?pt=0&cnt=65435" пройдет некоторая дельта времени, что в свою очередь дает вероятность пропуска импульсов. Mute понятно и так использую.

      1. Вопрос в другом, как получить CNT по запросу, а не обработкой входящих?

      Можно было бы привязать к каналу аналоговый датчик и в формуле расчета входного значения добавить "value = CNT", но так не работает. Увы(к счастью) у меги нет специальной команды для получения только параметра CNT.

      2 Вообще "формула расчета входного значения работает "? Такое ощущение, что нет.

      написал в Плагины
      R
      regabriel
    • RE: Плагин MegaD

      Здравствуйте. Вопросы, вопросы по работе системы))) Мануальчика поописательней не хватает))

      Пытаюсь настроить нормально счетчики. Т.к. импульсы(пакеты) иногда теряются, да и реагировать на каждый импульс это немного бредово(можем получать по 10-40 импульсов в сек...)). Поэтому гораздо логичнее периодически считывать значение cnt и разницу записывать. И тут возникает вопросы:

      По идее на запрос
      /%pwd%/?pt=%adr%&cmd=get
      мега даст ответ
      OFF/61
      Можно было бы в функции обработки записать

      function (val, depo) {
      if (!depo.oldcnt) depo.oldcnt = 0;
      if (val.substr(0,2) =='OF'){
      cnt = val.substr(4));
      }else{
      cnt = val.substr(3));
      }
      //дальше обрабатываем cnt, был ли переход через 65535  и т.д.
           } 
      

      Но

      1. как понять какую ошибку выдает обработка скрипта? Где логи?
      2. Во вторых this.log(); сдесь не работает. Как понять в каком виде сейчас val ???

      Можно было бы пойти обходным путем, написать скрипт для опроса всех счетчиков в виде:

      let te = this.pluginCommand({unit:'megad3', command:'/sec/?pt=0&cmd=get'});
      //дальше уже обработаем ответ, но
              this.log('te = ' + te);
      

      но te в данном случае выдает = undefined , т.е. pluginCommand не выдает ответ от меги.

      Писать ради такого случая require('http').get('http://192.168.1.202/' ) и т.п. считаю крайне некрасивым вариантом.

      написал в Плагины
      R
      regabriel
    • RE: Вопросы по работе системы

      Ошибочка:
      На мнемосхеме:
      Добавляем устройство -> текстовое представление
      Элемент -> выравнивание по горизонтали и по вертикали не работает. Всегда текст остается в центре.

      написал в intraHouse V4 Cherry
      R
      regabriel
    • RE: Вопросы по работе системы

      Спасибо за развернутые ответы. Но возникают еще вопросы)))

      Выяснилось, что для отправки большого количества запросов с большой скоростью на мегад pluginCommand не справляется.
      (не знаю из-за чего, но скорость по сравнению с file_get_contents в скриптике из php в десятки раз медленнее)
      Из-за чего встает задачка проверки возможности самому отправлять запросы напрямую.

      Как подключать библиотеки express или request ?
      В плагине от меги нашел вариант:

      require("./lib/httpclient");
      

      Правильно ли я понимаю, что подключать нужно через ./lib/ , а список всех доступных модулей можно посмотреть в /opt/intrahouse-c/backend/node_modules ? Или есть тонкости?

      написал в intraHouse V4 Cherry
      R
      regabriel