Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. objekt-Werte in tabelle darstellen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    878

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

objekt-Werte in tabelle darstellen

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
6 Beiträge 3 Kommentatoren 56 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • Norwegen60N Online
    Norwegen60N Online
    Norwegen60
    schrieb am zuletzt editiert von
    #1

    Ich habe heute versucht Daten unter vis-2 in einer Tabelle darzustellen. Leider schlugen meine Versuche mit basic-tabelle, basic-valuelisttext und inventwo-tabelle fehl.
    Am liebsten wäre mir was in der Art:

     {
        "name": "Produktion",                         // 1. Spalte
        "power": "0_userdata.0.PV.rPV_Power_Total",   // 2. Spalte
        "day": "0_userdata.0.PV.rPV_Energy_Day"       // 3. Spalte ....
      },
      // 2. Zeile
      {
        "name": "Direktverbrauch",
        "power": "0_userdata.0.PV.rLoad_Power",
        "day": "0_userdata.0.PV.rUsed_Energy_Day"
      }
    

    d.h. ich definiere für jede Zeile die Objekte (9 Spalten, 36 Zeilen)
    In der Tabelle erfolgt dann die Werte-Ermittlung mit so was wie

    {{getState(power).val}}
    

    und die Formatierung (Dezimalstelle) pro Spalte

    Kann mir jemand sagen, wie bzw. mit was das funktioniert?

    OliverIOO fuzzy1955F 2 Antworten Letzte Antwort
    0
    • Norwegen60N Norwegen60

      Ich habe heute versucht Daten unter vis-2 in einer Tabelle darzustellen. Leider schlugen meine Versuche mit basic-tabelle, basic-valuelisttext und inventwo-tabelle fehl.
      Am liebsten wäre mir was in der Art:

       {
          "name": "Produktion",                         // 1. Spalte
          "power": "0_userdata.0.PV.rPV_Power_Total",   // 2. Spalte
          "day": "0_userdata.0.PV.rPV_Energy_Day"       // 3. Spalte ....
        },
        // 2. Zeile
        {
          "name": "Direktverbrauch",
          "power": "0_userdata.0.PV.rLoad_Power",
          "day": "0_userdata.0.PV.rUsed_Energy_Day"
        }
      

      d.h. ich definiere für jede Zeile die Objekte (9 Spalten, 36 Zeilen)
      In der Tabelle erfolgt dann die Werte-Ermittlung mit so was wie

      {{getState(power).val}}
      

      und die Formatierung (Dezimalstelle) pro Spalte

      Kann mir jemand sagen, wie bzw. mit was das funktioniert?

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb zuletzt editiert von OliverIO
      #2

      @Norwegen60 sagte in objekt-Werte in tabelle darstellen:

      So direkt klappt das nicht.
      vis1 und vis2 basiert darauf, das es states/datenpunkte beim server abonniert.
      Ab da wird dann vis über jede Änderung informiert, welche dann in widgets angezeigt werden.

      Bei vis-start (also wenn die webseite geladen wird), geht vis einmal durch alle views des projekts, sammelt alle datenpunkte aus den widgets und dem binding ein, abonniert diese.
      eine spätere Änderung der Anzahl der Datenpunkte geht dann nicht mehr. Erst nach ändern der Definition und Neuladen.

      Ein Befehl getState steht unter Vis nicht zur Verfügung.
      Man könnte ihn zwar umsetzen, aber den Wert regelmäßig pollen ist nicht sehr effizient.

      Du hast nun folgende Möglichkeiten:

      1. Mit dem html widget eine html tabelle definieren. Diese datenpunkte werden von iobroker erkannt und abonniert. (max 50 bindings pro widget)
      <table>
        <tr>
          <td>Produktion</td>
          <td>{0_userdata.0.PV.rPV_Power_Total}</td>
          <td>{0_userdata.0.PV.rPV_Energy_Day}</td>
        </tr>
      </table>
      
      1. Du sammelst die Daten auf dem Server mit einem javascript ein (da kannst du die Daten direkt aus den Datenpunkten ablesen.
        Dann erstellst du daraus dann
        a) entweder direkt html, was du mit dem html-widget+binding dan anzeigen lassen kannst
        b) ein json, was du in einem der bekannten json tabellen widgets dann ebenfalls anzeigen lassen kannst
        c) json auf dem server erstellen + etwas mehr Kontrolle, auch über meinen Adapter jsontemplate. da kannst du dann mit der ejs templatesprache selbst das html dynamisch erzeugen lassen.

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      1 Antwort Letzte Antwort
      0
      • Norwegen60N Online
        Norwegen60N Online
        Norwegen60
        schrieb zuletzt editiert von
        #3

        OK, dann waren die infos die ich so gesammelt hatte, komplett falsch.
        In dem Fall bleib ich bei meiner Tabelle, die aus lauter basic-string - Feldern besteht. Die sind drekt mit dem Objekt verknüpft. Ist nur etwas mühsam 324 Felder schön zu platzieren. Aber macht man ja nicht so oft. So hatte ich es in vis-1.

        Obiger Vorschlag, den ich mit ChatGPT recht lange verfolgt habe, sah eigentlich recht elegant aus. Nur funktioniert hat er nie.

        1 Antwort Letzte Antwort
        0
        • Norwegen60N Norwegen60

          Ich habe heute versucht Daten unter vis-2 in einer Tabelle darzustellen. Leider schlugen meine Versuche mit basic-tabelle, basic-valuelisttext und inventwo-tabelle fehl.
          Am liebsten wäre mir was in der Art:

           {
              "name": "Produktion",                         // 1. Spalte
              "power": "0_userdata.0.PV.rPV_Power_Total",   // 2. Spalte
              "day": "0_userdata.0.PV.rPV_Energy_Day"       // 3. Spalte ....
            },
            // 2. Zeile
            {
              "name": "Direktverbrauch",
              "power": "0_userdata.0.PV.rLoad_Power",
              "day": "0_userdata.0.PV.rUsed_Energy_Day"
            }
          

          d.h. ich definiere für jede Zeile die Objekte (9 Spalten, 36 Zeilen)
          In der Tabelle erfolgt dann die Werte-Ermittlung mit so was wie

          {{getState(power).val}}
          

          und die Formatierung (Dezimalstelle) pro Spalte

          Kann mir jemand sagen, wie bzw. mit was das funktioniert?

          fuzzy1955F Online
          fuzzy1955F Online
          fuzzy1955
          schrieb zuletzt editiert von
          #4

          @Norwegen60 sagte in objekt-Werte in tabelle darstellen:

          Kann mir jemand sagen, wie bzw. mit was das funktioniert?

          Kannst du auch mit Javascript und mysql-Datenbank ein bisschen umgehen? Da gibt es weitere elegante Möglichkeiten zur Automatisierung deiner Tabellen-Darstellung. Ich habe etwa dies (noch im Test mit der Befüllung):

          Tabelle1.jpg

          Raspberry PI5 mit Linux Debian 13, IoBroker v7.7.22, VIS-2, MariaDB (MySQL)
          Shellies: 1G4, 1MiniG3, PlusI4DC, PlusPlugS, Pro0110PM, ProSmoke. Modbus: Waveshare Relay 8 Channels, Waveshare RS485-TO-ETH.
          PV: 10 kWp Module, 2 x Deye WR SUN-10K, 2 x 10 kWh MeritSun LiFe Speicher, KEBA P30 Wallbox, Fronius Wattpilot home 11

          1 Antwort Letzte Antwort
          0
          • Norwegen60N Online
            Norwegen60N Online
            Norwegen60
            schrieb zuletzt editiert von
            #5

            SQL ist kein Problem auch wenn ich MsSql hinten dran hängen habe. Java krieg ich mit viel Nachschlagen meist hin. Problem bei deiner Lösung sehe ich darin, dass ich, um aktuelle Werte anzuzeigen, die DB immer wieder abfragen müsste und das ist resourcenaufwändig. Ich glaub ich belass es deshalb bei Text-Feldern. Da wird immer nur das upgedatet, das auch sich auch tatsächlich ändert. Danke trotzdem.

            Meins sieht mit vis-1 so aus und Ubuntu läuft mit 2% Auslastung in Hyper-V

            image.png
            Natürlich nur für jemand der Tabellen mag und sich nicht gleich überfrachtet fühlt :-)

            fuzzy1955F 1 Antwort Letzte Antwort
            0
            • Norwegen60N Norwegen60

              SQL ist kein Problem auch wenn ich MsSql hinten dran hängen habe. Java krieg ich mit viel Nachschlagen meist hin. Problem bei deiner Lösung sehe ich darin, dass ich, um aktuelle Werte anzuzeigen, die DB immer wieder abfragen müsste und das ist resourcenaufwändig. Ich glaub ich belass es deshalb bei Text-Feldern. Da wird immer nur das upgedatet, das auch sich auch tatsächlich ändert. Danke trotzdem.

              Meins sieht mit vis-1 so aus und Ubuntu läuft mit 2% Auslastung in Hyper-V

              image.png
              Natürlich nur für jemand der Tabellen mag und sich nicht gleich überfrachtet fühlt :-)

              fuzzy1955F Online
              fuzzy1955F Online
              fuzzy1955
              schrieb zuletzt editiert von fuzzy1955
              #6

              @Norwegen60 sagte in objekt-Werte in tabelle darstellen:

              um aktuelle Werte anzuzeigen, die DB immer wieder abfragen müsste und das ist resourcenaufwändig

              Wenn du mit MS SQL gut umgehen kannst, geht es auch anders. Ich habe ein Javascript, das kurz vor Mitternacht automatisch läuft und die Daten tageweise verdichtet. Dabei werden sie mit einer Stored Procedure direkt in der Datenbank
              in separate Tabellen geschrieben, die wenig Platz brauchen. Die Stored Procedure:

              DELIMITER $$

              CREATE OR REPLACE PROCEDURE iobroker.sp_tagesbilanz(
              OUT AnzDS INT
              )
              -- CALL iobroker.sp_tagesbilanz(@AnzDS);

              BEGIN

              -- Fehlerbehandlung
              DECLARE EXIT HANDLER FOR SQLEXCEPTION
              BEGIN
                  INSERT INTO iobroker.strombilanz_log (logtime, message)
                  VALUES (NOW(), 'SQLEXCEPTION in sp_strombilanz');
              END;
              
              SET SQL_SAFE_UPDATES = 0;
              
              SET AnzDS = (
              	SELECT Count(ID) AS Anz 
                  FROM iobroker.vw_number
              	WHERE id IN (119,179,180,181,182,183) AND DATE_FORMAT(tsDate, '%Y-%m-%d') NOT IN (
              		SELECT DATE_FORMAT(tag, '%Y-%m-%d') FROM iobroker.strombilanz));
              SELECT AnzDS;
              
              INSERT INTO iobroker.ofenlaufzeit (datum, wert)
              SELECT DATE_FORMAT(tsDate, '%Y-%m-%d') as datum, SUM(val) as wert
              FROM iobroker.vw_number
              WHERE id = 177 AND DATE_FORMAT(tsDate, '%Y-%m-%d') NOT IN (SELECT DATE_FORMAT(datum, '%Y-%m-%d') FROM iobroker.ofenlaufzeit)
              GROUP BY DATE_FORMAT(tsDate, '%Y-%m-%d')
              ORDER BY DATE_FORMAT(tsDate, '%Y-%m-%d');
              
              INSERT INTO iobroker.strombilanz (tag, pv, haus, eauto, gen, nots, akku, gesamt, autark)
              SELECT DATE_FORMAT(tsDate, '%Y-%m-%d'),
                  IFNULL(CAST(MAX(CASE WHEN id = 181  THEN val END) AS INT), 0) as pv,
                  IFNULL(CAST(MAX(CASE WHEN id = 183 THEN val END) AS INT) * -1, 0) as haus,
                  IFNULL(CAST(MAX(CASE WHEN id = 180 THEN val END) AS INT) * -1000, 0) as eauto,
                  IFNULL(CAST(MAX(CASE WHEN id = 179 THEN val END) AS INT) * -1000, 0) as gen,
                  IFNULL(CAST(MAX(CASE WHEN id = 182 THEN val END) AS INT) * -1, 0) as nots,
                  IFNULL(CAST(AVG(CASE WHEN id = 119 THEN val END) AS INT), 0) as akku, 0, 0
              FROM iobroker.vw_number
              WHERE id IN (119,179,180,181,182,183) AND DATE_FORMAT(tsDate, '%Y-%m-%d') NOT IN (SELECT DATE_FORMAT(tag, '%Y-%m-%d') FROM iobroker.strombilanz)
              GROUP BY DATE_FORMAT(tsDate, '%Y-%m-%d');
              
              UPDATE iobroker.strombilanz
              SET gesamt = (pv + haus + eauto + gen + nots),
                  autark = IF((pv + haus + eauto + gen + nots) > 0, 1, 0);
              
              -- Logging
              INSERT INTO iobroker.strombilanz_log (logtime, message)
              VALUES (NOW(), CONCAT('sp_strombilanz erfolgreich ausgeführt'));
              
              DELETE 
              FROM iobroker.strombilanz_log
              WHERE CAST(logtime AS DATETIME) < CAST(now() - INTERVAL 10 DAY AS DATETIME);
              
              SET SQL_SAFE_UPDATES = 1;
              

              END$$

              DELIMITER ;


              Die sehr detaillierten Ursprungsdaten werden dann gelöscht. Dieses Skript schreibt dann die gewünschten Analysedaten als JSON in Datenpunkte. Ein Auszug daraus:


              //-------- Tagesbilanz erstellen ----------------------------------------------
              async function sendToAsync() {
              return new Promise((resolve, reject) => {
              sendTo('sql.0', 'query', 'CALL iobroker.sp_tagesbilanz(@AnzDS);', result => {
              if (result.error) {reject(result.error);}
              else {resolve(result.result)}
              });
              });
              }

              try {
                  const result = await sendToAsync()
                  console.log('Die sp_tagesbilanz hat ' + JSON.stringify(result) + ' Datensätze erstellt'); // ' + getAttr(JSON.parse(result),'AnzDS') + '
              
                  //-------- Strombilanz gesamt ----------------------------------------------------------------------------------------
                  strSQL = "SELECT DATE_FORMAT (tag, '%Y-%m-%d') AS Tag, " +
                          "ROUND(SUM(pv) / 1000.0,1) AS PV, " +
                          "ROUND(SUM(haus) / 1000.0,1) AS Haus, " +
                          "ROUND(SUM(eauto) / 1000.0,1) AS eAuto, " +
                          "ROUND(SUM(gen) / 1000.0,1) AS Gen, " +
                          "ROUND(SUM(nots) / 1000.0,1) AS Nots, " +
                          "ROUND(SUM(gesamt) / 1000.0,1) AS gesamt, " +
                          "ROUND(AVG(akku)) AS Hausakku,  " +
                          "ROUND(AVG(autark)) AS autark " +
                          "FROM iobroker.strombilanz " +
                          "GROUP BY DATE_FORMAT (tag, '%Y-%m-%d') " +
                          "ORDER BY DATE_FORMAT (tag, '%Y-%m-%d') desc;";
                      sendTo('sql.0', 'query', strSQL, function (result) {
                          if (result.error) {
                              console.error(result.error);
                          } else {
                              MyTrigger (idStrombilanzTage,JSON.stringify(result.result));
                          }
                      });
              

              [Nachtrag1]
              Ich habe als Selbständiger 30 Jahre lang MS SQL-Datenbanken entwickelt und bin heute noch begeistert vom Automatisierungsgrad, der Datenkonsistenz, der Ressourcenschonung, etc.

              [Nachtrag2]
              Zur Darstellung im VIS-2 verwende ich das Widget "Basic Table".

              Raspberry PI5 mit Linux Debian 13, IoBroker v7.7.22, VIS-2, MariaDB (MySQL)
              Shellies: 1G4, 1MiniG3, PlusI4DC, PlusPlugS, Pro0110PM, ProSmoke. Modbus: Waveshare Relay 8 Channels, Waveshare RS485-TO-ETH.
              PV: 10 kWp Module, 2 x Deye WR SUN-10K, 2 x 10 kWh MeritSun LiFe Speicher, KEBA P30 Wallbox, Fronius Wattpilot home 11

              1 Antwort Letzte Antwort
              0
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate
              FAQ Cloud / IOT
              HowTo: Node.js-Update
              HowTo: Backup/Restore
              Downloads
              BLOG

              598

              Online

              32.6k

              Benutzer

              82.1k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe