Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Edit: JSON aus Objekten erstellen

    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

    Edit: JSON aus Objekten erstellen

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      michihorn last edited by michihorn

      Hallo ich habe vor mir die Werte einzelner Monate in eine JSON zu schreiben und zwar sobald sich ein Wert ändert.
      Die Objekte sehen so aus.
      solar.png
      Der Datenpunkt des JSON heißt Solar_Monate. Wie kann ich das Realisieren?
      Mein erster Ansatz sah so aus:

      const idTable = 'Solar_Monate'; // ID JSON-Tabelle
      const ids = ['0_userdata.0.Haus.Energie.Zählerstände.Monate.1','0_userdata.0.Haus.Energie.Zählerstände.Monate.2','0_userdata.0.Haus.Energie.Zählerstände.Monate.3','0_userdata.0.Haus.Energie.Zählerstände.Monate.4','0_userdata.0.Haus.Energie.Zählerstände.Monate.5','0_userdata.0.Haus.Energie.Zählerstände.Monate.6','0_userdata.0.Haus.Energie.Zählerstände.Monate.7','0_userdata.0.Haus.Energie.Zählerstände.Monate.8','0_userdata.0.Haus.Energie.Zählerstände.Monate.9','0_userdata.0.Haus.Energie.Zählerstände.Monate.10','0_userdata.0.Haus.Energie.Zählerstände.Monate.11','0_userdata.0.Haus.Energie.Zählerstände.Monate.12']; 
       
      var table = [];
      for(let i = 0; i < ids.length; i++) {
          table[i] = {};
          table[i].Name = getObject(ids[i]).common.name;
          table[i].Wert = getState(ids[i]).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);
      });
      

      Gruß Michael

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

        @michihorn sagte: Die Objekte sehen so aus.

        const idTable = '0_userdata.0.Haus.Energie.Zählerstände.Monate.Solar_Monate'; // ID JSON-Tabelle
        

        Bei deiner Deklaration wird das JSON in den DP "javascript.0.Solar_Monate" geschrieben, der vermutlich nicht existiert.

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

          @michihorn sagte: Mein erster Ansatz sah so aus:

          Ich würde auch die Liste ids in der Schleife erzeugen, etwa so:

          const path = '0_userdata.0.Haus.Energie.Zählerstände.Monate.';
          const idTable = path + 'Solar_Monate'; // ID JSON-Tabelle
          
          const ids = []; 
          const table = [];
          for(let i = 0; i < 12; i++) {
              const id = path + (i + 1);
              ids[i] = id;
              table[i] = {
                  Name: getObject(id).common.name,
                  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);
          });
          
          M 1 Reply Last reply Reply Quote 1
          • M
            michihorn @paul53 last edited by

            @paul53 Jetzt wäre noch interessant, die Tabelle zu aktuallisieren sobald sich einer der Werte in den Objekten 1-12 ändert.

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

              @michihorn sagte: die Tabelle zu aktuallisieren sobald sich einer der Werte in den Objekten 1-12 ändert.

              Das sollte durch den Trigger erfolgen:

              on(ids, function(dp) {
                  let idx = ids.indexOf(dp.id);
                  table[idx].Wert = dp.state.val;
                  setState(idTable, JSON.stringify(table), true);
              });
              
              1 Reply Last reply Reply Quote 0
              • L
                legro last edited by legro

                @michihorn sagte in JSON aus Objekten erstellen:

                Hallo ich habe vor mir die Werte einzelner Monate in eine JSON zu schreiben und zwar sobald sich ein Wert ändert.

                Hier habe ich u.a. genau zu solchem Vorhaben Datenstrukturen und Algorithmen entwickelt. Vielleicht hilft es dir als Ideensammlung.

                Leitideen/Strategien ..

                • Monatstabellen erstellen und mittels Trigger befüllen
                • Diese Tabellen mittels JSON.parse ins RAM als Objekt einlesen
                • Objekt mit JavaScript bearbeiten
                • Anschließend Objekt mittels JSON.stringify wieder in den Objektbaum schreiben
                • ..
                1 Reply Last reply Reply Quote 1
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                943
                Online

                31.9k
                Users

                80.1k
                Topics

                1.3m
                Posts

                javascript
                3
                6
                135
                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