Вопросы по работе системы



  • Так же вопрос:
    Как изменить текст лого при вводе пароля?



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

    Так же вопрос:
    Как изменить текст лого при вводе пароля?

    В config.json добавьте "header":"Ваш текст"

    Сохраните файл, перезагрузите сервер и страницу с интерфейсом.
    Если для учетной записи был вход с сохранением токена, может понадобиться операция
    Учетные записи (Выбрать запись) => Меню команд => Завершить сессии учетной записи



  • Коллеги! Решил я сэкономить пару портов в котельной...в общем было - два датчика уровня в емкости (нижний уровень и верхний). Они как обычные герконы подключались к портам MegaD. Когда оба датчика внизу (лог. 0), насос включается, когда оба вверху (лог.1) - насос выключается. Соответственно, для обоих датчиков были свои устройства (датчик открытия), которые были вынесены на мнемосхему и визуально отображали уровень воды в емкости.
    Подключил я оба таких датчика через резистивный делитель к порту АЦП MegaD:
    Датчик_уровня_накопительная_емкость.png
    MegaD легко настраивается на работу с таким датчиком:
    Порт_АЦП_гистерезис.png
    Все отлично работает автономно, отображение работы/простоя насоса сделано с помощью расширений плагина MegaD:
    Включение_Отключение_Насоса.png

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

    //Уровень воды стал верхним, насос выключился (автономный сценарий MegaD)
    08.07 16:40:01.041 megad4: 192.168.11.24 => localhost:11024 HTTP GET /mod_megad.php?pt=3&v=1008&dir=1&mdid=
    08.07 16:40:01.050 megad4: 192.168.11.24 => localhost:11024 HTTP GET /mod_megad.php?pt=25&v=0
    //Уровень воды стал нижним, насос включился (автономный сценарий MegaD)
    08.07 16:40:16.067 megad4: 192.168.11.24 => localhost:11024 HTTP GET /mod_megad.php?pt=3&v=316&dir=0&mdid=
    08.07 16:40:16.076 megad4: 192.168.11.24 => localhost:11024 HTTP GET /mod_megad.php?pt=25&v=1
    

    Хотел бы отображать уровень воды на мнемосхеме как было - два индикатора уровня:

    • если уровень высокий, то оба устройства зеленые
    • если уровень средний до верхнее устройство синее, нижнее зеленое
    • если уровень низкий, то оба устройства синие


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

    Хотел бы отображать уровень воды на мнемосхеме как было - два индикатора уровня:

    • если уровень высокий, то оба устройства зеленые
    • если уровень средний до верхнее устройство синее, нижнее зеленое
    • если уровень низкий, то оба устройства синие

    У вас у устройства 3 возможных значения.
    3 состояния для него в IH сделайте.



  • @Erik, вероятно вы недочитали... было два устройства и два "геркона". Стало - два устройства и один аналоговый датчик (АЦП), который теперь, вероятно, надо еще и опрашивать с периодичностью хотя бы 1 раз в минуту.



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

    @Erik, вероятно вы недочитали... было два устройства и два "геркона". Стало - два устройства и один аналоговый датчик (АЦП), который теперь, вероятно, надо еще и опрашивать с периодичностью хотя бы 1 раз в минуту.

    Было 2 датчика и 2 устройства в IH
    Стало 1 сложный датчик с 3 состояниями и 2 устройства в IH.

    На мой взгляд нужно:

    1. Создать 3-е устройство в IH для сложного датчика с 3 состояниями.
    2. Старые 2 устройства либо удалить, либо присваивать им значения 0-1, одному при переходе между 1 и 2 состоянием устройства 3, второму между 2 и 3 состоянием устройства 3.

    Но покрасить легко в 3 цвета как раз 3-е устройства в соответствии с его состояниями.



  • Вопрос, вероятно, как получить данные для аналогового датчика из входящего сообщения без опроса?
    Можно создать фиктивный порт L3, например. В расширениях слушать сообщение от pt=3

    /mod_megad.php?pt=3&v=*
    

    Установить состояние канала (значение v помещать в L3)

    L3=%v%
    

    Канал L3 привязать к аналоговому датчику. Для него задать, как предлагает @Erik, 3 состояния методом интервалов и их отображать. Или задача не в этом?



  • @intrapro, плохой из меня объясняющий. Пусть датчик мы будем опрашивать, поскольку он по сути имеет 3 состояний, а может прислать на сервер только 2 крайних. С этим датчиком я хочу поиметь ту же визуальную картину как и в случае с двумя датчиками-герконами:
    Емкость_с_датчиками.png

    Как это сделать?



  • @Alex_Jet
    Речь идет об отображении состояния датчика уровня?
    У вас есть датчик с 3 состояниями. Соответственно 3 картинки: зеленая, желтая и красная.
    Если хочется повторить как вы показали, то есть иметь две картинки для датчика уровня, то можно этот же датчик поставить на мнемосхему еще раз. И там свои картинки для состояний.



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

    Как это сделать?

    Старым объектам в IH, на которых сделана визуализация присваивать значения по изменению "нового" трехпозиционного датчика в соответствии со сделанной вами же таблицей.



  • Коллеги, всем спасибо! Действительно с помощью сценария я сделал то что хотел. Вопросы к @intrapro:

    1. Можно ли через функцию обработки значения канала MegaD установить привязанному устройству ошибку? Сейчас там такая функция:
    function (val)
    {  var result;
       if(val > 1000) result = 100;
       else if (val < 1000 && val > 500) result = 75; 
       else if (val < 500) result = 50;
       return result; //Возвращаем значение
    }
    

    Однако в нормальном режиме подключения аналогового датчика его максимальные значения достигают 1010. А вот если датчик отключен (нет контакта, например), то показания всегда максимальные - 1023. В этом случае хочется активировать индикатор ошибки у устройства.
    Или как это можно по другому сделать?
    2. Для достоверности измерений аналогового датчика требуется многократное измерение напряжения с откидыванием "бракованных" значений и их усреднением. Если массив еще не набрал 5 значений, можно ли из функции устанавливать интервал опроса канала? (в Berry это сделали, а вот в Cherry по моему нет). Нам надо получать значения с датчика 1 раз в минуту, но опросить его 5 раз через промежуток 1/2/3 или 5 секунд.



  • @Alex_Jet, к сожалению, прямой ответ на оба вопроса в данной версии - нет.

    Первая задача, на мой взгляд, решается штатными средствами

    Вариант 1. Если нужно установить ошибку и при этом исключить значение 1023 -
    можно использовать флажки на уровне устройства:

    • Не принимать значение вне диапазона
    • Установить ошибку при выходе из диапазона

    Err_outOfRange.png

    Здесь будет 3 состояния, использовать метод интервалов (не совсем понятно преобразование в функции канала в значения 50, 75, 100. Вероятно, есть какой- то функционал на уровне сценария?) Но если рассматривать поставленную задачу без преобразования, то в состояниях будет так:

    Номер состояния 0 Граница интервала 499
    Номер состояния 1 Граница интервала 999
    Номер состояния 2 Граница интервала - любое значение выше

    Если не принимать 1023, то для 1023 сохраняется предыдущее состояние, но будет ошибка

    Вариант 2. Можно организовать для 1023 отдельное состояние ошибки
    Тогда нужно это значение принимать (при этом можно устанавливать ошибку, одно другому не мешает)
    Номер состояния 0 Граница интервала 499
    Номер состояния 1 Граница интервала 999
    Номер состояния 2 Граница интервала. 1010
    Номер состояния 3 Граница интервала. - Состояние ошибка

    По второй задаче - да, в Berry было, в Cherry делать не стали 😞
    Используя метод чередования, в v5 планируем сделать такой функционал 🙂
    Причем для любого плагина, не только для MegaD



  • Здравствуйте. Как отвязать лицензию pro от одного компьютера и привязать к новому? Просто будет перенос системы для расширения и повышения надежности.



  • @regabriel На сайте в личном кабинете деактивируйте лицензию.
    После этого активируйте ее на новом сервере.



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

    не совсем понятно преобразование в функции канала в значения 50, 75, 100. Вероятно, есть какой- то функционал на уровне сценария?

    Это чтобы сразу на устройстве отображался объем воды в емкости в понятном % соотношении. Соответственно, в сценарии используются эти значения для управления старыми устройствами (датчик нижнего уровня воды и датчик верхнего уровня воды).
    Я понял ваши идеи. Попробую реализовать. В остальном - ждем версии 5.



  • @intrapro, вопрос по "Дельта сохранения" в свойствах БД устройства. Если датчику присваиваются значения 2,88...2,95, то чтобы в БД уменьшить количество записываемых значений, а значит аппроксимировать график, то мне нужно в качестве "Дельта сохранения" указать что-то типа 0,1?



  • @Alex_Jet, да, все верно



  • Здравствуйте. Для работы одного сложного устройства пришлось создать "библиотеку" в 600-1000 строк из объекта с методами.

    Если данное устройство будет использоваться в нескольких сценариях, как лучше организовать работу?

    Вставлять такой кусок кода в каждый сценарий, не удобно и будет сложно поддерживать, если придется в нем делать поправки, да и систему наверняка будет грузить из-за дублирования, распаковки и т.п. в зависимости от того как вы запускаете сценарии.



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

    Здравствуйте. Для работы одного сложного устройства пришлось создать "библиотеку" в 600-1000 строк из объекта с методами.

    Если данное устройство будет использоваться в нескольких сценариях, как лучше организовать работу?

    Вставлять такой кусок кода в каждый сценарий, не удобно и будет сложно поддерживать, если придется в нем делать поправки, да и систему наверняка будет грузить из-за дублирования, распаковки и т.п. в зависимости от того как вы запускаете сценарии.

    Добрый день!
    Можно вынести код объекта в отдельный файл в виде модуля

    // File mybigobject.js
    
    module.exports = {
      get() {
         ...
      },...
    
    };
    

    В сценарии делаете require - загрузка модуля:

    ... const myobj = require("путь к файлу/mybigobject");
        const x = myobj.get();
    

    Пропишите абсолютный путь - тогда не будет проблем с дефолтными путями.
    Если этот модуль разместить в node_modules, то путь прописывать не надо.

    Но есть 2 момента:

    • редактировать этот файл нужно будет не через систему - для 1000 строк это точно не минус 🙂
    • если будете менять код, то сервер нужно перезагружать, так как require кэширует модуль. Это тоже плюс для Вас - можете вызывать в разных сценариях, модуль загрузится только однажды


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

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

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

    require("./lib/httpclient");
    

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


Log in to reply