Logo Logo ru
  • iRidi Pro
    Основные компоненты
    • Приложение i3 Pro
    • iRidi Pro Server
    • iRidi Studio
    • iRidium studio v. 1.3.8 (устаревшая версия)
    Java Script в iRidi
    • Руководство
    • Справочник
    • Примеры
    • JS драйвера
    другие
    • Личный Кабинет
    • iRidium Cloud
    • iRidium Transfer
    • Push-уведомления
    • Лучшая практика
    Лицензирование
    • Лицензирование и передача проекта
    • Оффлайн-лицензирование
    • Активация iRidi Pro Server
  • Продукты
    i3 lite
    • Приложение i3 lite
    • Регистрация и лицензирование
    • Сервер
    • Модули
    KNX Home Server
    • Приложение i3 KNX
    • KNX Home Server
    BUS77 HOME SERVER
    • Приложения Bus77 Home и Bus77 Lite
    • Bus77 Home Server
    Решения
    • BYOD - решение для гостиниц
    • Портал жителя - решение для МКД
    iRidi SCADA
    • iRidi SCADA
  • Bus77
    НАСТРОЙКА BUS77
    • Основы Bus77
    • Приложения Bus77 Home и Bus77 Lite
    • Работа с драйвером Bus77 в iRidi Studio
    • Настройка шины Bus77 в iRidi Studio
    ПРОТОКОЛ BUS77
    • Характеристики CAN (Bus77)
    • Описание протокола
    • Исходники на GitHub
    ОБОРУДОВАНИЕ BUS77
    • Каталог Bus77 Pro
    • Каталог Bus77 Lite
  • Поддерживаемое оборудование
    Драйверы
    • Список драйверов
    • ProAV драйвера
    • AV & Custom Systems
    • JS драйвера
    • Сторонние драйвера и фриланс
    Протоколы и интерфейсы
    • Голосовое управление
    • 1-Wire
    • BACnet IP
    • Bus77
    • KNX
    • KNX IP BAOS
    • Weinzierl kBerry
    • Microsoft Exchange
    • Modbus
    • MQTT
    • NFC
    • ODBC
    • Onvif
    • SIP
    • SNMP
    • Wake On Lan
    • Z-Wave
    • ZigBee
    Производители
    • AMX
    • AVCiT
    • Beckhoff ADS
    • Biamp Tesira
    • Bluesound
    • Casambi
    • BSS Harman
    • Clipsal
    • ControlArt 7Port
    • Crestron
    • DigiBird
    • Domintell
    • Duotecno
    • EIDE
    • EPSNET
    • Global Cache
    • HDL Buspro
    • Helvar
    • IEAST
    • INELS BUS
    • INELS Wireless
    • Intesis
    • Kleger
    • Kramer VIA
    • Kramer 3000
    • Larnitech
    • Legrand Netatmo
    • LG TV
    • Lutron
    • Lutron Homeworks QS
    • MyHome
    • Nest
    • Novastar
    • Panasоnic PTZ
    • Philips Dynalite
    • PJLink
    • Satel
    • SamsungTV
    • Sonos
    • Somfy
    • SpinetiX
    • Televic Conference
    • TIS
    • Tion
    • URRI
    • Velbus
    • Velocio
    • Vinteo
    • WyreStorm
    • WiiM
    • Xicato
    • Yamaha
    • ZONT
    • Z-Wave.me
    Протестированное оборудование
    • Панель HDL S57
    • Панель HDL S10
    • SIP-домофон
    • Akuvox
    • Arlight
    • Divus
    • QBic TD-1050 PRO
    • QBic TD-1060 Slim
    • QBic TD-1070
    • Sigur
    • Uni-Ubi
    • Velocio
  • Оборудование iRidi

    Серверы
    • HS Сервер
    • ProAV Control Processor Basic
    • ProAV Control Processor Advanced
    • Спецификация контроллеров UMC
    • Настройка контроллера UMC C2
    • Настройка контроллера UMC C3
    • Настройка контроллера HDL IntelliCenter 2 (UMC C4)
    Модули расширения
    • I-PX-RS1
    • I-PX-RS4
    • I-PX-IR3
    KNX
    • KNX Home Server
    • KNX IP Interface
    Панели управления
    • iRidium Panel 7
    • Touch Panel P3
    • Touch Panel P6
    • Touch Panel P8
    • Touch Panel P10
    • Tabletop Touch Panel 10
    • AV Remote Control
    ОБОРУДОВАНИЕ BUS77
    • Каталог Bus77 Pro
    • Каталог Bus77 Lite
    • Differences
Сайт iRidium mobile
Содержание
    Инструменты‌
    • Сведения о странице
    • Постоянная ссылка
    • Версия для печати
    • Спецстраницы
    • Связанные правки
    • Ссылки сюда
    Login / Create Account
    Материал из for iRidium developers
    Перейти к: навигация, поиск
    Эта страница является переводом страницы Log Journal. Перевод выполнен на 100%.

    Other languages:
    English • ‎русский

    Пример журнала событий

    iRidium server позволяет хранить в базе данных информацию о состоянии устройств в доме. Зачастую пользователь хочет видеть в интерфейсе журнал событий, произошедших в доме в течении дня (недели, месяца). В данном примере рассматривается способ создания такого журнала событий в панельном проекте.
    Для разработки журнала событий нам потребуется модифицировать серверный и панельный проект.

    Серверный проект

    1 Настройте запись значений тегов в базу данных

    ServerProjectTags.png

    2 Добавьте в проект два виртуальных канала Day и Month и виртуальный тег Data.
    3 Добавьте в проект скрипт

    var LIMIT_TO_RECORD = 300;  //Максимальное количество записей
    /**
     * Функция получения значений из базы данных
     * @param {string} Полное имя тега
     * @param {string} Значение тега
     */
    function makeDataFromDatabase(in_TagName, in_Value) {
       var Day = new iDate(); // Получаем iDate объект, из текущей даты и времени
       var l_oSql = IR.GetDatabase();  
       var l_oDate;
       var l_sTagID;
       var l_sTagName;
       var l_nGetDate;
       var l_nValue;
       var l_sMakeDate;
     
     
     
       if (in_Value == "day") {
          // Создаем iDate объект из последней даты
          l_oDate = new iDate(Day.year, Day.month, (Day.date - 1), Day.hours, Day.minutes, Day.seconds, Day.ms);
       }
       else if (in_Value == "month") {
          // Создаем iDate объект из последнего месяца
          l_oDate = new iDate(Day.year, (Day.month - 1), Day.date, Day.hours, Day.minutes, Day.seconds, Day.ms); 
       }
       // Обращаемся к базе данных, выбираем все события с указанной датой
       var l_oDataByDate = l_oSql.Request('SELECT TAG_ID, DATETIME, VALUE FROM INTEGER_TAG_HISTORY WHERE DATETIME > '
            +l_oDate.value+' ORDER BY DATETIME DESC'); 
       if (l_oDataByDate.Rows) {
          var l_nLimit = LIMIT_TO_RECORD > l_oDataByDate.Rows ? l_oDataByDate.Rows : LIMIT_TO_RECORD;
          for (var j = 0; j < l_nLimit; j++) {
             l_sTagID = l_oDataByDate.GetRowValue(0,j); //Получаем ID тега
             l_nGetDate = l_oDataByDate.GetRowValue(1,j); //Получаем время изменения значения тега
             l_nValue = l_oDataByDate.GetRowValue(2,j);  //Получаем значение тега
     
             // Создаем объект iDate из времени измененения значения тега
             var date = new iDate(l_nGetDate);
             //Создаем строку с датой и временем
             l_sMakeDate = '';
             if (date.date < 10)
                l_sMakeDate += "0" + date.date + ".";
             else l_sMakeDate += date.date + ".";
             if (date.month < 10)
                l_sMakeDate += "0" + date.month + "." + date.year + " [";
             else l_sMakeDate += date.month + "." + date.year + " [";  
             if (date.hours < 10)
                l_sMakeDate += "0" + date.hours + ":";   
             else l_sMakeDate += date.hours + ":";   
             if (date.minutes < 10)
                l_sMakeDate += "0" + date.minutes + ":"; 
             else l_sMakeDate += date.minutes + ":";   
             if (date.seconds < 10)
                l_sMakeDate += "0" + date.seconds + "] ";
             else l_sMakeDate += date.seconds + "] ";
     
             // Запрашиваем имя тега из базы данных по его ID
             var l_oDataByTagID = l_oSql.Request('SELECT NAME, TAG_ID FROM TAGS_PASSPORT WHERE TAG_ID = '+l_sTagID); 
             var l_oDataByTagIDRows = l_oDataByTagID.Rows;
             for (var k = 0; k < l_oDataByTagID.Rows; k++) {  //Добавляем к строке имя тего и его значение
                l_sTagName = l_oDataByTagID.GetRowValue(0,k);
                l_sMakeDate += l_sTagName + " is " + l_nValue;  
                IR.SetVariable("Server.Tags.Data", l_sMakeDate);  //Записываем значение в серверный тег
             }
          }
          l_oSql.Close()  
       }     
    }
    IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function(in_sName, in_sValue)
    {
       if (in_sValue == "day" || in_sValue == "month")  
          //Вызываем функцию генерации данных из базы данных
          makeDataFromDatabase(in_sName, in_sValue);
    });
     
    // Подписываемся на теги
    IR.SubscribeTagChange("Server.Channels.Month");
    IR.SubscribeTagChange("Server.Channels.Day");

    Панельный проект

    1 Далее откройте панельный проект, добавьте на него попап-шаблон с элементом Item1. Создайте также список List, на котором будет отображаться журнал событий. В свойствах списка укажите ранее созданный попап как шаблон для размещения списка. Создайте кнопки для отображения событий за день и за месяц.

    PanelProjectJournal.png

    2 Настройте кнопки "Day" и "Month" так, чтобы они отправляли на виртуальные каналы "Day" и "Month" тексты "day" и "month" соответственно.

    3 Добавьте скрипт

    IR.AddListener(IR.EVENT_START,0,function()
    {  
       var l_sAllData = '';
       var l_bTest = false;
       var l_oInterval = null;
       var l_aNewData;
       var INTERVAL_TO_REFRESH = 60000;  //значение интервала обновления данных
     
       //Интервал автообновления данных
       IR.SetInterval(INTERVAL_TO_REFRESH, function(){
          IR.GetDevice("iRidium Server").Set("Day", "day");   
       });
       IR.SetTimeout(500, function () {
          IR.GetDevice("iRidium Server").Set("Day", "day");     
       });
       //Слушатель для смены режима день\месяц
       IR.AddListener(IR.EVENT_CHANNEL_SET, IR.GetDevice("iRidium Server"), function (in_sName, in_sValue) {
          if (in_sName == "Day" || in_sName == "Month") {
             l_bTest = true;  
          } 
       });
     
       IR.AddListener(IR.EVENT_TAG_CHANGE, IR.GetDevice("iRidium Server"), function (in_sName, in_sValue) {      
          if (in_sName == "Data" && l_bTest) {
             IR.ClearInterval(l_oInterval);
             l_sAllData += (in_sValue + "\n");  
             IR.GetPage("Page 1").GetItem("Item 1").Clear();
             l_oInterval = IR.SetTimeout(1000, function () {  
                l_aNewData = l_sAllData.split("\n");  //Парсим строку по разделителю "\n"
                for (var i = 0; i < l_aNewData.length - 1; i++) {
                   IR.GetPage("Page 1").GetItem("Item 1").CreateItem(i, 1, {Text: l_aNewData[i]});   //заполняем список
                }
                l_bTest = false; 
                l_sAllData = '';
                l_aNewData = [];            
             })             
          }   
       });    
    });


    скачать пример серверного проекта
    скачать пример панельного проекта

    Источник — «https://dev.iridi.com/index.php?title=Log_Journal/ru&oldid=120767»
    О нас
    Компания
    Команда
    История
    Философия
    Награды
    Партнерство
    Наши партнеры
    Партнерские программы
    Подать заявку на партнерство
    Продукты
    iRidium pro
    iRidium lite
    iRidium gate
    iRidium server
    Загрузки
    iRidium pro
    iRidium lite
    Другие версии
    Маркетинговые материалы
    Поддержка
    Онлайн курсы/Видео
    Рекомендуемое оборудование
    Другие версии
    iRidium pro
    Документация
    FAQ
    Форум
    iRidium lite
    Документация
    Форум
    Проекты
    Типовые проекты
    Умные здания
    Умные дома
    Специальные решения
    Найти дилера
    Новости
    Youtube
    Twitter
    VK
    Logo
    contact@iridi.com
    +7 (499) 322-73-29

    Политика конфиденциальности