Графики IH Pro



  • @intrapro:

    @sergeyygr:

    Может… как то сценариями решить? Два виртуальных устройства (получаем данные с канала, который тупо считает импульсы), в каждом устройстве свой делитель (количество импульсов на кВт/час), а время запуска сценариев уже реализовано 😛

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

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

    Примерно так:

    > /** 
    > * @name Двухтарифный счетчик для имульсного входа
    > * @desc  
    > * @version 4 
    > */
    > const meterDay = Device("Meter"); 
    > const meterNight = Device("Meter"); 
    > const pulse = Device("SensorD"); 
    > 
    > startOnChange(pulse); 
    > 
    > script({
    >     dayWeight:0.1, // дневной коэф-т
    >     nightWeight:0.05,  // ночной коэф-т
    >     start() {
    >         const dt = new Date();
    >         if (dt.getHours() < 7 || dt.getHours()>22) {  // c 22:00 - 7:00 ночной тариф 
    >           this.assign(meterNight, 'aval', meterNight.value+this.nightWeight);
    >         } else {
    >           this.assign(meterDay, 'aval', meterDay.value+this.dayWeight);
    >         }  
    >         this.assign( pulse, 'value', 0); // сброс импульса
    >     } 
    > });
    > 
    > 
    

    Только тип датчика в каналах надо поменять. Нужен просто дискретный датчик

    И виртуальным датчикам присвоить начальное значение через интерфейс

    Добрый день! Подскажите пожалуйста формат времени в строке if (dt.getHours() < 7 || dt.getHours()>22) { // c 22:00 - 7:00 ночной тариф если нужно время переключения 21 час 55 мин 34 сек ?



  • @sergeyygr:

    Добрый день! Подскажите пожалуйста формат времени в строке if (dt.getHours() < 7 || dt.getHours()>22) { // c 22:00 - 7:00 ночной тариф если нужно время переключения 21 час 55 мин 34 сек ?

    Добрый день!

    Вариант 1.

    (dt.getHours() < 7 || dt.getHours()>21 || (dt.getHours()==21 && (dt.getMinutes()>55 || dt.getMinutes()==55&&dt.getSeconds()>=34))

    Вариант 2. Сформировать временные точки, потом с ними сравнивать

    const dtD = new Date();

    dtN.setHours(7);

    dtN.setMinutes(0);

    dtN.setSeconds(0);

    const dtN = new Date();

    dtN.setHours(21);

    dtN.setMinutes(55);

    dtN.setSeconds(34);

    const dt = new Date(); // Это сейчас

    if (dt<=dtD || dt>=dtN ) // ночной тариф

    Первый вариант короче, второй проще сопровождать (менять)



  • @intrapro:

    @sergeyygr:

    Добрый день! Подскажите пожалуйста формат времени в строке if (dt.getHours() < 7 || dt.getHours()>22) { // c 22:00 - 7:00 ночной тариф если нужно время переключения 21 час 55 мин 34 сек ?

    Добрый день!

    Вариант 1.

    (dt.getHours() < 7 || dt.getHours()>21 || (dt.getHours()==21 && (dt.getMinutes()>55 || dt.getMinutes()==55&&dt.getSeconds()>=34))

    Вариант 2. Сформировать временные точки, потом с ними сравнивать

    const dtD = new Date();

    dtN.setHours(7);

    dtN.setMinutes(0);

    dtN.setSeconds(0);

    const dtN = new Date();

    dtN.setHours(21);

    dtN.setMinutes(55);

    dtN.setSeconds(34);

    const dt = new Date(); // Это сейчас

    if (dt<=dtD || dt>=dtN ) // ночной тариф

    Первый вариант короче, второй проще сопровождать (менять)

    Спасибо!



  • Немного дорабатывал отображение графиков и при изменении высоты timeline до 158 обнаружил что график "криво" загружается. Подробности в скриншоте:
    Графики_Timeline_Криво_загружается.png



  • @Alex_Jet:

    Немного дорабатывал отображение графиков и при изменении высоты timeline до 158 обнаружил что график "криво" загружается. Подробности в скриншоте:

    Графики_Timeline_Криво_загружается.png

    Добрый день, мы постараемся решить данную проблему, спасибо за помощь 😉



  • @intrapro:

    @homa:

    @intrapro:

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

    Их можно использовать в сценарии:

    > > > const meter = Device("METER1"); 
    > > > script({
    > > >     start() {
    > > >         this.log("На начало месяца:"+meter.getParam('uptoMonth')); 
    > > >         this.log("На начало дня:"+meter.getParam('uptoDay')); 
    > > >         this.log("На начало часа:"+meter.getParam('uptoHour')); 
    > > >     } 
    > > > });
    > > > 
    > > > 
    

    Супер! Получается можно из текущих показаний вычитать "на начало месяца" и умножать на стоимость. Спасибо!

    Да, но у вас с февраля только это будет работать, так как счетчики запустили в январе 🙂

    Добрый день!

    Пришел февраль, а параметр uptoMonth берет какие-то не те показания, явно не на полночь 1го февраля, либо на 30 дней назад, либо на 1 января. Как можно отдебажить и проверить?

    Строка скрипта такая:

    cwsum = (metercwv.value + metercwt.value - metercwv.getParam('uptoMonth') - metercwt.getParam('uptoMonth'))*this.cw;



  • @homa:

    Добрый день!

    Пришел февраль, а параметр uptoMonth берет какие-то не те показания, явно не на полночь 1го февраля, либо на 30 дней назад, либо на 1 января. Как можно отдебажить и проверить?

    Строка скрипта такая:

    cwsum = (metercwv.value + metercwt.value - metercwv.getParam('uptoMonth') - metercwt.getParam('uptoMonth'))*this.cw;

    Добрый день!

    С формулой на первый взгляд все в порядке.

    Для проверки можно сценарием вывести значения uptoMonth, uptoDay в лог, как в скрипте выше.

    Сценарий можно запустить вручную и посмотреть значения по каждому датчику отдельно

    Можно для начала вручную отредактировать uptoMonth в файле проекта:

    /var/lib/intrahouse-c/projects/<ваш проект>/operative/meters.json



  • @intrapro:

    @homa:

    Добрый день!

    Пришел февраль, а параметр uptoMonth берет какие-то не те показания, явно не на полночь 1го февраля, либо на 30 дней назад, либо на 1 января. Как можно отдебажить и проверить?

    Строка скрипта такая:

    cwsum = (metercwv.value + metercwt.value - metercwv.getParam('uptoMonth') - metercwt.getParam('uptoMonth'))*this.cw;

    Добрый день!

    С формулой на первый взгляд все в порядке.

    Для проверки можно сценарием вывести значения uptoMonth, uptoDay в лог, как в скрипте выше.

    Сценарий можно запустить вручную и посмотреть значения по каждому датчику отдельно

    Можно для начала вручную отредактировать uptoMonth в файле проекта:

    /var/lib/intrahouse-c/projects/<ваш проект>/operative/meters.json

    Там хранится неверное значение, причем если поменять его вручную, то оно не применяется без перезапуска IH



  • @homa:

    Там хранится неверное значение, причем если поменять его вручную, то оно не применяется без перезапуска IH

    Да, все верно, при редактировании файлов напрямую сервер нужно перезагрузить 😞

    А значения uptoDay, uptoHour тоже неверные?



  • @intrapro:

    @homa:

    Там хранится неверное значение, причем если поменять его вручную, то оно не применяется без перезапуска IH

    Да, все верно, при редактировании файлов напрямую сервер нужно перезагрузить 😞

    А значения uptoDay, uptoHour тоже неверные?

    uptoHour и uptoDay верные…



  • @intrapro:

    @homa:

    Там хранится неверное значение, причем если поменять его вручную, то оно не применяется без перезапуска IH

    Да, все верно, при редактировании файлов напрямую сервер нужно перезагрузить 😞

    А значения uptoDay, uptoHour тоже неверные?

    Не для всех счетчиков создался параметр uptoMonth, сегодня заводил новые и обратил внимание. Если дописать руками - то начинает работать. По тем, где uptomonth изначально был - проверил по графикам показания - они действительно далеко не на 1е число.
    meters1.JPG



  • @homa:

    Не для всех счетчиков создался параметр uptoMonth, сегодня заводил новые и обратил внимание. Если дописать руками - то начинает работать. По тем, где uptomonth изначально был - проверил по графикам показания - они действительно далеко не на 1е число.

    Проверим. Время до момента uptoMonth у нас еще есть 🙂



  • Добрый вечер. Создал отчет по расходу счетчиков. Расход округляется до целого числа. Что я не так делаю?Снимок.PNG



  • @sergeyygr:

    Добрый вечер. Создал отчет по расходу счетчиков. Расход округляется до целого числа. Что я не так делаю?Снимок.PNG

    После обновления работает как надо. Только в текущем состоянии можно задать устройства типа METER. У меня есть виртуальные счетчики, являющиеся устройствами SENSORA. Можно этим устройствам в следующем обновлении тоже внести в список устройств "Расход по счетчикам"?



  • Подскажите пожалуйста,

    имеются клапана теплого пола нормально открытые.

    Т.е. когда на них подается 0, петля открыта, пол работает, когда 1 - петля закрыта, пол выключен.

    А таймлайн строится по значению. И на графике выделеы периоды, когда петли выключены.

    Как инвертировать?



  • @Erik:

    Как инвертировать?

    В канале плагина на вкладке "Обработка"



  • Какую написать общую формулу, чтобы вместо 0 выдавало 1, а вместо 255 - ноль ?



  • @Erik:

    Какую написать общую формулу, чтобы вместо 0 выдавало 1, а вместо 255 - ноль ?

    (value == 255) ? 0 : 1



  • Спасибо!!!

    Простым перебором символов не зная заранее нужной длины строки я шел бы к решению лет 45.

    Может все таки оставить намеки в документации?

    🙂



  • @Erik:

    Простым перебором символов не зная заранее нужной длины строки я шел бы к решению лет 45.

    Может все таки оставить намеки в документации?

    Это стандартная тернарная операция https://ru.wikipedia.org/wiki/Тернарная_условная_операция#JavaScript

    В данном случае для JavaScript

    Но Вы правы, примеры надо будет показать.


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