Logo Logo en
  • Сервер
    Сервер
    • Основы
    Железо
    • iRidium server NUC
    • iRidium server UMC
    • iRidium server RPi
    • iRidium server for Linux
    iRidium studio
    • Первое знакомство
    • Создание серверного проекта
    • Работа с драйверами
    Отладка приложения
    • Запуск проекта на сервере
    • Веб-интерфейс
    Other
    • Интеграция панелей
    • Интеграция серверов
  • i3 pro
    i3 pro
    • Основы
    iRidium studio
    • Первое знакомство
    • Создание графического интерфейса
    • Работа с драйверами
    Отладка приложения
    • Эмулятор
    • iRidium Transfer
    • Логирование
    Конечный пользователь
    • Лицензирование
    • Установка и настройка приложения
    • Системное меню
    Other
    • Использование модулей i3 lite
    • Tips&Tricks
    JavaScript
    • Руководство
    • Справочник
    • Примеры
    • Готовые JS модули
  • Драйверы
    Драйверы
    • Основы
    Протоколы и интерфейсы
    • BACnet IP
    • KNX
    • KNX IP BAOS
    • Microsoft Exchange
    • Modbus
    • MQTT
    • ODBC
    • SIP
    • Yandex Alice
     
    • 1-Wire
    • Amazon Alexa
    • Z-Wave
    • Google Home
    • ZigBee
    Производители
    • AMX
    • Beckhoff ADS
    • Clipsal
    • Crestron
    • Domintell
    • Duotecno
    • INELS BUS
    • INELS Wireless
    • EPSNET
     
    • Global Cache
    • HDL Buspro
    • Helvar
    • Larnitech
    • Lutron
    Разработчикам
    • AV & Custom Systems
    • Готовые JS модули

  • Bus77





    • Преобразователь USB/Bus77
  • i3 lite


    i3 lite
    • Основы
    Конфигуратор i3 lite
    • Создание проекта i3 lite
    • iRidium server lite
    • Подготовка проекта для конечного пользователя
    • Object management through the internet
    • iRidium cloud gate
    • iRidium Server for Raspberry Pi
    Модули
    • Все модули
    • HDL bus-pro
    • KNX
    • Modbus TCP
    • iRidium Gate for Voice Control
    Разработка модулей
    • Основы
    • Справочник API
    • Smart API
    • Тестирование и публикация модулей
  • Сервисы




    • iRidium Cloud

    • Push-уведомления
    • Внешние push-уведомления

    • BYOD
iRidium mobile web-site
Содержание
    Инструменты‌
    • Сведения о странице
    • Постоянная ссылка
    • Версия для печати
    • Спецстраницы
    • Связанные правки
    • Ссылки сюда
    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) {
          for (var j = 0; j < LIMIT_TO_RECORD; 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=68254»
    About us
    Company
    Team
    History
    Philosophy
    Rewards
    Partnership
    Our partner
    Partnership Programs
    Apply for partnership
    products
    iRidium pro
    iRidium lite
    iRidium gate
    iRidium server
    Loads
    iRidium pro
    iRidium lite
    Other version
    Marketing materials
    Support
    On-line courses/Video
    Recommended equipment
    Other version
    iRidium pro
    Documentation
    FAQ
    Forum
    iRidium lite
    Documentation
    Forum
    Projects
    Standart projects
    Smart buildings
    Smart house
    Special solution
    Find a dealer
    News
    Facebook
    Youtube
    Twitter
    VK
    Logo
    Everything is under control


    Russia, Nizhny Tagil
    Mira Sstreet, 56 B
    +7 (343) 271-47-13 (2)

    Privacy policy
    2008-2018 iRidium LTD