Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Визуализация
  5. ioBroker.vis Драйвер
  6. Работа с Basic Table (Json)

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

Работа с Basic Table (Json)

Работа с Basic Table (Json)

Scheduled Pinned Locked Moved ioBroker.vis Драйвер
7 Posts 2 Posters 3.1k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    evgeny_nd
    wrote on last edited by
    #1

    Добрый день.

    Можете объяснить принцип заполнения в VIS объекта Basic Table (Json)?

    У меня есть значения температуры, которые считываются с датчиков и хранятся в Megadd.0.ХХХ

    Хотел использовать этот элемент, но что-то не получилось разобраться как туда вставить эти данные.

    Вручную в описании этого элемента в редакторе указать в описание колонок значения данных в виде Megadd.0.ХХХ указать нельзя.

    Нужно указать ID таблицы, а где эту таблицу хранить (видимо в объектах Admin) и как ее заполнять (видимо скриптом из значений Меги), не совсем понятно.

    Примеров по форуму (пошаговых) найти не смог.

    1 Reply Last reply
    0
    • A Offline
      A Offline
      andrey99986
      wrote on last edited by
      #2

      @evgeny_nd:

      Добрый день.

      Можете объяснить принцип заполнения в VIS объекта Basic Table (Json)?

      У меня есть значения температуры, которые считываются с датчиков и хранятся в Megadd.0.ХХХ

      Хотел использовать этот элемент, но что-то не получилось разобраться как туда вставить эти данные.

      Вручную в описании этого элемента в редакторе указать в описание колонок значения данных в виде Megadd.0.ХХХ указать нельзя.

      Нужно указать ID таблицы, а где эту таблицу хранить (видимо в объектах Admin) и как ее заполнять (видимо скриптом из значений Меги), не совсем понятно.

      Примеров по форуму (пошаговых) найти не смог. `

      Поработав с Basic Table (Json) быстро наткнулся на ограничение форматирования таблицы.

      Поэтому загоняю данные как html-таблицу из БД в обычный объект в скриптах, а затем вставляю этот объект в элементе Basic HTML.

      По количеству кода - почти одно и то же.

      Дать пример с html table или непременно через json table надо?

      1 Reply Last reply
      0
      • E Offline
        E Offline
        evgeny_nd
        wrote on last edited by
        #3

        ! @andrey99986:
        ! > @evgeny_nd:

        Добрый день.

        Можете объяснить принцип заполнения в VIS объекта Basic Table (Json)?

        У меня есть значения температуры, которые считываются с датчиков и хранятся в Megadd.0.ХХХ

        Хотел использовать этот элемент, но что-то не получилось разобраться как туда вставить эти данные.

        Вручную в описании этого элемента в редакторе указать в описание колонок значения данных в виде Megadd.0.ХХХ указать нельзя.

        Нужно указать ID таблицы, а где эту таблицу хранить (видимо в объектах Admin) и как ее заполнять (видимо скриптом из значений Меги), не совсем понятно.

        Примеров по форуму (пошаговых) найти не смог. `

        Поработав с Basic Table (Json) быстро наткнулся на ограничение форматирования таблицы.

        Поэтому загоняю данные как html-таблицу из БД в обычный объект в скриптах, а затем вставляю этот объект в элементе Basic HTML.

        По количеству кода - почти одно и то же.
        Дать пример с html table или непременно через json table надо?
        ! Json не обязательно, главное чтобы меньшими временными затратами, но тот же результат.
        ! Хотите сказать, что можно в скрипте сформировать каким-то образом таблицу и затем передать ее в интерфейс VIS?
        ! Конечно надо пример :). `

        1 Reply Last reply
        0
        • A Offline
          A Offline
          andrey99986
          wrote on last edited by
          #4

          Пример формирования таблицы из БД, подразумевая что включена запись состояний объектов ("megad.1.p11_Отополение_1_этаж" и "megad.1.p10_Отополение_2_этаж") в настройках.

          Скрипт :

           `createState("html_table");
          createState('spisok_journal_period',1440);
          
          if ( !Date.prototype.toMyString ) {
            ( function() {
          
              function pad(number) {
                var r = String(number);
                if ( r.length === 1 ) {
                  r = '0' + r;
                }
                return r;
              }
          
              Date.prototype.toMyString = function() {
                return this.getUTCFullYear()
                  + '-' + pad( this.getUTCMonth() + 1 )
                  + '-' + pad( this.getUTCDate() )
                  + ' ' + pad( this.getUTCHours() )
                  + ':' + pad( this.getUTCMinutes() )
                  + ':' + pad( this.getUTCSeconds() );
                 // + '.' + String( (this.getUTCMilliseconds()/1000).toFixed(3) ).slice( 2, 5 )
                 // + 'Z';
              };
          
            }() );
          }
          
          function table_climate(period){
          sendTo('sql.0', 'query', 'SELECT id FROM iobroker.datapoints WHERE name="megad.1.p11_Отополение_1_этаж" or name="megad.1.p10_Отополение_2_этаж"', function (result) {
              if (result.error) {
                  console.error(result.error);
              } else {
                  var now = new Date();
                  now.setMinutes(-period);
                  sendTo('sql.0', 'query', 'SELECT a.id,a.ts,a.val, b.name FROM iobroker.ts_bool as a INNER JOIN  iobroker.datapoints as b ON a.id = b.id WHERE ts >= ' + now.getTime() + ' AND a.id in (SELECT id FROM iobroker.datapoints WHERE name="megad.1.p11_Отопление_1_этаж" or name="megad.1.p10_Отополение_2_этаж") order by a.ts desc' , function (result) {
                      if (result.error) {
                          console.error(result.error);
                      } else {
                      var obj = JSON.stringify(result.result);
                      obj = JSON.parse(obj );    
                      var obj_html = "\"";
                      var table_head ="";
                      obj_html=obj_html+table_head;
                       if (obj.length>0)
                      {
                      for(var i=0;i<obj.length;i++) {/var/tr="<tr>" ;/tr2="</tr>" mydate="new" date(obj[i]["ts"]);/event_date="myDate.toMyString();" td1="<td>" +event_date+"</td="">";
                          var objn = getObject (obj[i]["name"],'name'); 
                          var id_name=objn.common.name;
                          var td2="</obj.length;i++)>";
                          var value = '';
                          if (obj[i]["val"]==1)
                             { value='Вкл';}
                          if (obj[i]["val"]===0)
                             { value='Откл';}
                          var td3="";
                          obj_html = obj_html + tr+td1+td2+td3+tr2;
                      }
                      }
                      obj_html = obj_html +"
          
           <colgroup><col width="\\\&quot;750\\\&quot;"><col width="\\\&quot;1500\\\&quot;"> <col width="\\\&quot;500\\\&quot;"></colgroup>
          | Дата | Устройство | Значение |
          | "+id_name+" | "+value+" |
          
          \"";
                      setState("html_table",obj_html);
                      }
                  });
              }
          });    
          
          }
          
          var period = getState("javascript.0.spisok_journal_period").val;
          table_climate(period);
          on({id: 'spisok_journal_period', change: 'any'}, function (objsp) {
          
          var period = getState("javascript.0.spisok_journal_period").val;  
           table_climate(period);   
          
             });` 
          
          Список для выбора временного периода (импортируй элемент в VIS):
          `~~[code]~~[{"tpl":"tplJquiSelectList","data":{"oid":"javascript.0.spisok_journal_period","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"values":"60;1440;10080;43200;525600","texts":"час;сутки;неделя;месяц;год","height":"144","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"open":false,"visibility-groups-action":"hide"},"style":{"left":"100px","top":"23px","width":"93px","height":"39px"},"widgetSet":"jqui"}]
          [/code]`
          
          Сама таблица создаётся в элементе basic -HTML:
          `~~[code]~~
          Таблица    
          
          [/code]`
          
          Есть нюанс - после создания таблицы в vis- редакторе она как бы не видна после задания параметров (у меня прячется в верхний левый угол). Это нормально. В просмотре будет отображаться нормально. Для поиска этого элемента и редактирования в vis-редакторе надо обращаться к этому элементу через список в меню "Выбранный элемент".[/i][/i][/i][/i]
          
          1 Reply Last reply
          0
          • E Offline
            E Offline
            evgeny_nd
            wrote on last edited by
            #5

            @andrey99986:

            Пример формирования таблицы из БД, подразумевая что включена запись состояний объектов ("megad.1.p11_Отополение_1_этаж" и "megad.1.p10_Отополение_2_этаж") в настройках.

            Скрипт :

            ! ```
            `createState("html_table");
            createState('spisok_journal_period',1440);
            ! if ( !Date.prototype.toMyString ) {
            ( function() {
            ! function pad(number) {
            var r = String(number);
            if ( r.length === 1 ) {
            r = '0' + r;
            }
            return r;
            }
            ! Date.prototype.toMyString = function() {
            return this.getUTCFullYear()
            + '-' + pad( this.getUTCMonth() + 1 )
            + '-' + pad( this.getUTCDate() )
            + ' ' + pad( this.getUTCHours() )
            + ':' + pad( this.getUTCMinutes() )
            + ':' + pad( this.getUTCSeconds() );
            // + '.' + String( (this.getUTCMilliseconds()/1000).toFixed(3) ).slice( 2, 5 )
            // + 'Z';
            };
            ! }() );
            }
            ! function table_climate(period){
            sendTo('sql.0', 'query', 'SELECT id FROM iobroker.datapoints WHERE name="megad.1.p11_Отополение_1_этаж" or name="megad.1.p10_Отополение_2_этаж"', function (result) {
            if (result.error) {
            console.error(result.error);
            } else {
            var now = new Date();
            now.setMinutes(-period);
            sendTo('sql.0', 'query', 'SELECT a.id,a.ts,a.val, b.name FROM iobroker.ts_bool as a INNER JOIN iobroker.datapoints as b ON a.id = b.id WHERE ts >= ' + now.getTime() + ' AND a.id in (SELECT id FROM iobroker.datapoints WHERE name="megad.1.p11_Отопление_1_этаж" or name="megad.1.p10_Отополение_2_этаж") order by a.ts desc' , function (result) {
            if (result.error) {
            console.error(result.error);
            } else {
            var obj = JSON.stringify(result.result);
            obj = JSON.parse(obj );
            var obj_html = """;
            var table_head ="";
            obj_html=obj_html+table_head;
            if (obj.length>0)
            {
            for(var i=0;i<obj.length;i++) {/var/tr="<tr>" ;/tr2="</tr>" mydate="new" date(obj[i]["ts"]);/event_date="myDate.toMyString();" td1="<td>" +event_date+"</td="">";
            var objn = getObject (obj[i]["name"],'name');
            var id_name=objn.common.name;
            var td2="</obj.length;i++)>";
            var value = '';
            if (obj[i]["val"]==1)
            { value='Вкл';}
            if (obj[i]["val"]===0)
            { value='Откл';}
            var td3="";
            obj_html = obj_html + tr+td1+td2+td3+tr2;
            }
            }
            obj_html = obj_html +"
            ! <colgroup><col width="\&quot;750\&quot;"><col width="\&quot;1500\&quot;"> <col width="\&quot;500\&quot;"></colgroup>
            | Дата | Устройство | Значение |
            | "+id_name+" | "+value+" |
            ! "";
            setState("html_table",obj_html);
            }
            });
            }
            });

            }

            ! var period = getState("javascript.0.spisok_journal_period").val;
            table_climate(period);
            on({id: 'spisok_journal_period', change: 'any'}, function (objsp) {
            ! var period = getState("javascript.0.spisok_journal_period").val;
            table_climate(period);

            });`

            ! Список для выбора временного периода (импортируй элемент в VIS):
            ~~[code]~~[{"tpl":"tplJquiSelectList","data":{"oid":"javascript.0.spisok_journal_period","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"values":"60;1440;10080;43200;525600","texts":"час;сутки;неделя;месяц;год","height":"144","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"open":false,"visibility-groups-action":"hide"},"style":{"left":"100px","top":"23px","width":"93px","height":"39px"},"widgetSet":"jqui"}] [/code]
            ! Сама таблица создаётся в элементе basic -HTML:
            ~~[code]~~ Таблица ! ! [/code]
            ! Есть нюанс - после создания таблицы в vis- редакторе она как бы не видна после задания параметров (у меня прячется в верхний левый угол). Это нормально. В просмотре будет отображаться нормально. Для поиска этого элемента и редактирования в vis-редакторе надо обращаться к этому элементу через список в меню "Выбранный элемент".
            ! Спасибо. Скрипт пока разобрал голову сломал :).
            ! После того как разобрался с вашим скриптом, нашел решение для элемента Json Table:
            ! `~~[code]~~createState("Баня_vis_table_of_temp");
            ! schedule("*/1 * * * *", function () { // запускаем каждую минуту

            var table_of_temp = [{"Помещение": "Прихожая", "Температура пола": getState("megadd.1.p30_B_Temp_Sens1").val + ' °C', "Температура воздуха": "n/a" + ' °C'},
            {"Помещение": "Туалет", "Температура пола": getState("megadd.1.p30_B_Temp_Sens1").val + ' °C', "Температура воздуха": getState("megadd.1.p34_Out_Pressure_Sens1").val + ' °C'},
            {"Помещение": "Комната отдыха", "Температура пола": getState("megadd.1.p31_B_Temp_Sens2").val + ' °C', "Температура воздуха": "n/a" + ' °C'},
            {"Помещение": "Мойка", "Температура пола": getState("megadd.1.p32_B_Temp_Sens3").val + ' °C', "Температура воздуха": "n/a" + ' °C'},
            {"Помещение": "Парилка", "Температура пола": getState("megadd.1.p33_B_Temp_Sens4").val + ' °C', "Температура воздуха": getState("megadd.2.p30_B_Temp_Sens5").val + ' °C'}]
            setState("Баня_vis_table_of_temp", JSON.stringify(table_of_temp));
            });[/code]`

            ! Значения выходят, все получилось. Теперь не могу понять почему так "криво" выходит форматирование. Значения ширины столбцов указанные в настройках не изменяют внешнего вида таблицы. И получается что первые два столбца узкие, третий широкий...
            1611____________________.png [/i][/i][/i][/i]
            ``` `

            1 Reply Last reply
            0
            • A Offline
              A Offline
              andrey99986
              wrote on last edited by
              #6

              @evgeny_nd:

              Значения выходят, все получилось. Теперь не могу понять почему так "криво" выходит форматирование. Значения ширины столбцов указанные в настройках не изменяют внешнего вида таблицы. И получается что первые два столбца узкие, третий широкий… `

              Так я ж написал - из-за ограничений возможности форматирования (или я просто не нашёл как это делается) перешёл на html-таблицу.

              1 Reply Last reply
              0
              • E Offline
                E Offline
                evgeny_nd
                wrote on last edited by
                #7

                @andrey99986:

                @evgeny_nd:

                Значения выходят, все получилось. Теперь не могу понять почему так "криво" выходит форматирование. Значения ширины столбцов указанные в настройках не изменяют внешнего вида таблицы. И получается что первые два столбца узкие, третий широкий… `

                Так я ж написал - из-за ограничений возможности форматирования (или я просто не нашёл как это делается) перешёл на html-таблицу. `

                Вот что я "раскопал": помогает установка знака процента после значения ширины колонки в настройках виджета, тогда таблица меняет внешний вид.
                1611___________.png

                1 Reply Last reply
                0
                Reply
                • Reply as topic
                Log in to reply
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes


                Support us

                ioBroker
                Community Adapters
                Donate

                610

                Online

                32.4k

                Users

                81.3k

                Topics

                1.3m

                Posts
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                ioBroker Community 2014-2025
                logo
                • Login

                • Don't have an account? Register

                • Login or register to search.
                • First post
                  Last post
                0
                • Recent
                • Tags
                • Unread 0
                • Categories
                • Unreplied
                • Popular
                • GitHub
                • Docu
                • Hilfe