Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Javascript für JSON Tabelle

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Javascript für JSON Tabelle

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @AxelF1977 last edited by paul53

      @AxelF1977 sagte:

      von englisch auf deutsch

      Man kann das Jahr im $Selector auch unberücksichtigt lassen und im Namen bei gleichzeitiger Übersetzung unterbringen.

      const idTable = '0_userdata.0.Verbrauch.Gerätename.Monate.json'; // Vorschlag ID JSON-Tabelle
      const monate = ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'];
      
      var select = $('sourceanalytix.0.Geräte-ID.20*.consumed.months.*'); // Geräte-ID ersetzen
      var ids = []; 
      var table = [];
      select.each(function(id, i) {
          ids[i] = id;
          table[i] = {};
          let idx = parseInt(id.substring(id.lastIndexOf('.') + 1)) - 1;
          let monat = monate[idx];
          table[i].Name = monat + ' ' + id.split('.')[3]; // z.B. "Februar 2020"
          table[i].Wert = getState(id).val;
      });
      setState(idTable, JSON.stringify(table), true);
       
      on(ids, function(dp) {
          let idx = ids.indexOf(dp.id);
          table[idx].Wert = dp.state.val;
          setState(idTable, JSON.stringify(table), true);
      });
      
      AxelF1977 1 Reply Last reply Reply Quote 0
      • AxelF1977
        AxelF1977 @paul53 last edited by AxelF1977

        @paul53 Danke.

        Habe es mal eingebaut, funktioniert.

        ich konnte mir das alles nochmal genauer ansehen. Also der Ordner consumed enthält nur Werte die 0 sind. Evtl. taucht dort wirklich erst ein Wert auf, wenn der Monat/die Woche abgeschlossen ist. Aktuell ist der Monat 0. Das passt nicht wirklich zu dem, wie ich die Werte betrachten möchte. Also im Skript auf meterReadings geändert, und der aktuelle Wert ist da.

        Auch das umbenennen über das Script läuft klasse, danke.

        Was jetzt halt wirklich toll wäre, wenn das Script die Ordner unter 0_userdata.0.Verbrauch.Gerätename.Monate.json selbstständig anlegen würde.

        Also von jedem "Gerät" die Ordnerstruktur mit der json Datei anlegt, es dadurch nur ein Script gibt. Aktuell müsste ich 62 Skripte anlegen, und dazu alle Datenpunkte von Hand, was einfach ewig dauert. Und pflegen ist so wohl auch nicht drin. Wenn dann neue Steckdosen kommen, muss alles wieder von Hand geändert werden.

        Du wollstest ja noch einen Screenshot mit Daten, ich hoffe diesmal kannst Du mehr erkennen

        006232b7-637d-4fe5-9684-839b986fdea8-image.png

        paul53 2 Replies Last reply Reply Quote 0
        • paul53
          paul53 @AxelF1977 last edited by

          @AxelF1977 sagte in Javascript für JSON Tabelle:

          Du wollstest ja noch einen Screenshot mit Daten

          Es sind einfach noch zu wenige Daten.

          @AxelF1977 sagte in Javascript für JSON Tabelle:

          Also der Ordner consumed enthält nur Werte die 0 sind. Evtl. taucht dort wirklich erst ein Wert auf, wenn der Monat/die Woche abgeschlossen ist.

          Ja, sehr wahrscheinlich. Unter "meterReadings" werden sich die Zählerstände befinden, wobei der Juni-Wert bei Übergang zum Juli stehen bleiben wird und dann im Juli weiter gezählt wird. Man benötigt die Zählerstände, um die Differenz zwischen Monatsende und Monatsanfang (=Monats-Verbrauch) ermitteln zu können. Für die JSON-Tabelle wirst Du die Werte unter "consumed" benötigen, da diese den Verbrauch (Differenz) für den zugehörigen Zeitraum enthalten werden.

          AxelF1977 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @AxelF1977 last edited by paul53

            @AxelF1977 sagte:

            wenn das Script die Ordner unter 0_userdata.0.Verbrauch.Gerätename.Monate.json selbstständig anlegen würde.

            Statt Zeile 15:

            if(existsState(idTable)) setState(idTable, JSON.stringify(table), true);
            else createState(idTable, JSON.stringify(table), {type: 'string'});
            
            AxelF1977 1 Reply Last reply Reply Quote 0
            • AxelF1977
              AxelF1977 @paul53 last edited by

              @paul53 sagte in Javascript für JSON Tabelle:

              @AxelF1977 sagte in Javascript für JSON Tabelle:

              Du wollstest ja noch einen Screenshot mit Daten

              Es sind einfach noch zu wenige Daten.

              Welche Daten benötigst Du? Dann probiere natürlich diese zu zeigen. Auf dem Screenshot sind die Werte die ein Ordner eines Datenpunktes hergibt. Viel mehr gibt ein Ordner im sourceanalytix nicht her. Es sei denn ich kann noch weitere Optionen übers Admin Menü einblenden.

              @AxelF1977 sagte in Javascript für JSON Tabelle:

              Also der Ordner consumed enthält nur Werte die 0 sind. Evtl. taucht dort wirklich erst ein Wert auf, wenn der Monat/die Woche abgeschlossen ist.

              Ja, sehr wahrscheinlich. Unter "meterReadings" werden sich die Zählerstände befinden, wobei der Juni-Wert bei Übergang zum Juli stehen bleiben wird und dann im Juli weiter gezählt wird. Man benötigt die Zählerstände, um die Differenz zwischen Monatsende und Monatsanfang (=Monats-Verbrauch) ermitteln zu können. Für die JSON-Tabelle wirst Du die Werte unter "consumed" benötigen, da diese den Verbrauch (Differenz) für den zugehörigen Zeitraum enthalten werden.

              Verstehe. Dann scheint consumption richtig zu sein, auch wenn da gerade noch alle Werte 0 sind. Das müsste ich dann nächste Woche mal beobachten, der Monatswechsel ist jetzt nicht mehr weit.

              Ich leihe mir mal einen Screenshot aus dem Forum.

              Bild Text

              Hier ist wirklich zu sehen, das unter Meter_Radings die Werte aufaddiert werden, bei consumption jeder Monat einzeln betrachtet wird. Differenz von 03_March zu 04_April ist der Wert von Current_month bei consumption.

              1 Reply Last reply Reply Quote 0
              • AxelF1977
                AxelF1977 @paul53 last edited by

                @paul53 sagte in Javascript für JSON Tabelle:

                @AxelF1977 sagte:

                wenn das Script die Ordner unter 0_userdata.0.Verbrauch.Gerätename.Monate.json selbstständig anlegen würde. Statt Zeile 15:

                if(existsState(idTable)) setState(idTable, JSON.stringify(table), true);
                else createState(idTable, JSON.stringify(table), {type: 'string'});
                

                Cool 👍 Funktioniert super. Danke

                Da es toll wäre, wenn es nur ein Skript pro Monat und eines pro Wochen geben würde, kann das Script nicht jeden Ordner in SA durchgehen und dann für jede ID diese Ordnerstrucktur anlegen?

                54278e75-1c55-4e04-b7d8-548300665d0b-image.png

                0_userdata.0.Verbrauch.ID.Monate.json
                
                1 Reply Last reply Reply Quote 0
                • AxelF1977
                  AxelF1977 last edited by

                  Ich habe mal ein wenig gebastelt, und bin jetzt bei folgendem Ergebnis. Ist zwar jetzt viel Handarbeit, da die Scripte manuell kopiert und angelegt werden müssen (mal gucken wie lange das dauert), aber das Ergebnis zählt.

                  Script Monate

                  var d = new Date();
                  var n = d.getFullYear();
                  const idTable = '0_userdata.0.Verbrauch.AlleVerbauchertotal.' + n + '.consumed.Monate.json'; // Vorschlag ID JSON-Tabelle
                  const monate = ['01 Januar','02 Februar','03 März','04 April','05 Mai','06 Juni','07 Juli','08 August','07 September','10 Oktober','11 November','12 Dezember'];
                   
                  var select = $('sourceanalytix.0.0_userdata__0__Berechnungen__AlleVerbauchermitGosund.2020.consumed.months.*'); // Geräte-ID ersetzen
                  var ids = []; 
                  var table = [];
                  select.each(function(id, i) {
                      ids[i] = id;
                      table[i] = {};
                      let idx = parseInt(id.substring(id.lastIndexOf('.') + 1)) - 1;
                      let monat = monate[idx];
                      table[i].Name = monat + ' ' + id.split('.')[3]; // z.B. "Februar 2020"
                      table[i].Wert = getState(id).val;
                  });
                  if(existsState(idTable)) setState(idTable, JSON.stringify(table), true);
                  else createState(idTable, JSON.stringify(table), {type: 'string'});
                   
                  on(ids, function(dp) {
                      let idx = ids.indexOf(dp.id);
                      table[idx].Wert = dp.state.val;
                      setState(idTable, JSON.stringify(table), true);
                  });
                  

                  Script Wochen

                  var d = new Date();
                  var n = d.getFullYear();
                  const idTable = '0_userdata.0.Verbrauch.AlleVerbauchertotal.' + n + '.consumed.Weeks.json'; // Vorschlag ID JSON-Tabelle
                  //const monate = ['01 Januar','02 Februar','03 März','04 April','05 Mai','06 Juni','07 Juli','08 August','07 September','10 Oktober','11 November','12 Dezember'];
                   
                  var select = $('sourceanalytix.0.0_userdata__0__Berechnungen__AlleVerbauchermitGosund.2020.consumed.weeks.*'); // Geräte-ID ersetzen
                  var ids = []; 
                  var table = [];
                  select.each(function(id, i) {
                      ids[i] = id;
                      table[i] = {};
                      table[i].Name = getObject(id).common.name;
                      table[i].Wert = getState(id).val;
                  });
                  if(existsState(idTable)) setState(idTable, JSON.stringify(table), true);
                  else createState(idTable, JSON.stringify(table), {type: 'string'});
                   
                  on(ids, function(dp) {
                      let idx = ids.indexOf(dp.id);
                      table[idx].Wert = dp.state.val;
                      setState(idTable, JSON.stringify(table), true);
                  });
                  

                  Ordnerstruktur Scripte (das dann für aktuell 62 Ordner) mehr kommen noch dazu
                  d6bfd9e6-cdcc-4ff1-856d-3b4468573680-image.png

                  Ordnerstruktur nachdem alles angelegt ist
                  4a52bc7b-7b61-4f48-a342-2288154d991b-image.png

                  1 Reply Last reply Reply Quote 0
                  • etv
                    etv @paul53 last edited by

                    Hallo @paul53 ,

                    ich bin bei der Suche auf diesen Threat gestoßen und hab noch eine Frage dazu:

                    der Teil in der on(ids ...Funktion wird gebraucht um Änderungen der Datenpunkte in die Tabelle zu übernehmen, oder?

                    Und der erste Teil legt die Tabelle mit den aktuellen Inhalten der Datenpunkte an, oder?

                    Brauch für meinen 3d-Drucker auch eine Funktion, die meine Daten aus Octoprint und Energieverbrauch "tabellentauglich" für VIS aufbereitet, weil aktuell hab ich in jedem Datenpunkt nur mittels JSON.stringify eine "Daten-Wurst" im Format ["wert1","wert2","wert3"] liegen.

                    Liebe Grüße
                    Tom

                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @etv last edited by

                      @etv sagte:

                      der Teil in der on(ids ...Funktion wird gebraucht um Änderungen der Datenpunkte in die Tabelle zu übernehmen, oder?

                      Ja, wenn sich Werte ändern, wird darauf reagiert.

                      @etv sagte in Javascript für JSON Tabelle:

                      Und der erste Teil legt die Tabelle mit den aktuellen Inhalten der Datenpunkte an, oder?

                      Ja.

                      @etv sagte in Javascript für JSON Tabelle:

                      "Daten-Wurst" im Format ["wert1","wert2","wert3"]

                      Bitte komplettes JSON in Code tags posten. Wie soll die JsonTable aussehen ?

                      etv 1 Reply Last reply Reply Quote 0
                      • etv
                        etv @paul53 last edited by

                        @paul53, OK danke!

                        Tabelle ist noch im "Rohzustand" und nicht fertiggedacht.....wenn ich das Projekt angehe, dann poste ich das da - herzlichen Dank!!

                        Liebe Grüße
                        Tom

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        643
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        javascript monitoring
                        3
                        33
                        2005
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo