Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    665

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    508

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    1.0k

objekt-Werte in tabelle darstellen

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
6 Beiträge 3 Kommentatoren 134 Aufrufe 3 Beobachtet
  • Ä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 Offline
    Norwegen60N Offline
    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 am 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 Offline
        Norwegen60N Offline
        Norwegen60
        schrieb am 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 Offline
          fuzzy1955F Offline
          fuzzy1955
          schrieb am 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

          Smart-Home-Automation unter IOB auf RASPI5, 16GB RAM, 50GB SSD, MariaSQL, VIS-2.
          Anfang 2025 war ich Newbie in Sachen RaspBerry, Linux und IOB.
          Jetzt läuft alles konstant gut und ich gebe gern meine Erfahrungen und mein Wissen an die Forums-User/Innen weiter.
          Großes Danke an alle tatkräftigen Helfer im Forum!

          1 Antwort Letzte Antwort
          0
          • Norwegen60N Offline
            Norwegen60N Offline
            Norwegen60
            schrieb am 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 Offline
              fuzzy1955F Offline
              fuzzy1955
              schrieb am 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".

              Smart-Home-Automation unter IOB auf RASPI5, 16GB RAM, 50GB SSD, MariaSQL, VIS-2.
              Anfang 2025 war ich Newbie in Sachen RaspBerry, Linux und IOB.
              Jetzt läuft alles konstant gut und ich gebe gern meine Erfahrungen und mein Wissen an die Forums-User/Innen weiter.
              Großes Danke an alle tatkräftigen Helfer im Forum!

              1 Antwort Letzte Antwort
              0

              Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

              Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

              Mit deinem Input könnte dieser Beitrag noch besser werden 💗

              Registrieren Anmelden
              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

              564

              Online

              32.8k

              Benutzer

              82.9k

              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