Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Hilfe ;- Array anlegen oder Objekt im Objekt…?

    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

    Hilfe ;- Array anlegen oder Objekt im Objekt…?

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

      Hi zusammen,

      ich brauche einen kurzen Denkanstoss…

      In Anlehnung an den Beispielen von Bluefox habe ich bisher folgendes gemacht:

      context.global.fbVars = context.global.fbVars || {}; // wenn es das Objekt context.global.fbVars noch nicht gibt, wird dieses hier leer angelegt
      
      var callid	    = "callid."+msg.callid; // für das Objekt global.context.fbVars
      
      context.global.fbVars[callid+".callid"] = msg.callid;
      context.global.fbVars[callid+".calltype"] = msg.calltype;
      
      //...usw.
      
      

      Damit bin ich, für meine Verhältnisse, schon recht weit gekommen.

      Für verschiedene callids werden nun ein Haufen Variablen erzeugt:

      context.global.fbVars.callid.1.callid;
      context.global.fbVars.callid.1.calltype;
      ...
      
      

      Ergibt im Objekt:

       { "callid.1.callid": "1", "callid.1.date": "10.05.15 20:07:07", "callid.1.calltype": "DISCONNECT", 
      ... 
      

      Nun komme ich mit der weiteren Verarbeitung nicht so richtig weiter.

      Wahrscheinlich ist es besser, wenn die CallIDs als weitere Objekte hinter dem Hauptobjekt erzeugt werden (Array).

      Es müsste also so aussehen:

      "callid" : [
          { "callid": "1", "date": "10.05.15 20:07:07", "calltype": "DISCONNECT", 
      ... 
      
      

      Ich komme aber einfach nicht darauf, wie ich diese Struktur in Javascript erzeuge.

      Das Thema Objekte/Arrays ist mir da noch zu fern.

      Wie müsste das erste CODE-Kästchen dafür aussehen?

      Hilfe 😉

      Ich muss zwar alles umbauen (sind schon ein paar Stunden Arbeit bisher). Ich fürchte aber, dass es nicht anders geht.

      Woran ich in der bisherigen Struktur z.B. scheitere:

      • nur alle Infos zu einer Call ID als Objekt ausgeben

      • Zustände innerhalb des Arrays zählen (das bekomme ich wahrscheinlich aus so hin)

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Hallo ruhr70,

        das Thema Arrays bringt gleich eine Dimension mehr mit, das braucht etwas Training. Wenn der Groschen dann gefallen ist, erkennt man ein geniales System.

        Ein Array legst du so an:

        `var variablenname = [];[/code]`
        
        Du kannst auch gleich die Inhalte reinschreiben (hier mein Beispiel für die Erfassung der Fensterzustände)
        `~~[code]~~var status_zustand_rhs = ['geschlossen','gekippt','geöffnet'];
        
        /* **************************
           *  RHS Balkontür
           ************************** */
        on("hm-rpc.0.GEQ0129543.1.STATE"/*Balkontür.STATE*/, function (data) {
            log('Balkontür (RHS) ' + status_zustand_rhs[data.newState.val], 'info');
        });[/code]`
        Man zählt die Positionen im Array ab 0 aufwärts. Der RHS (Drehgriffkontakt) gibt die drei Positionen 0 bis 2 zurück, daher lässt sich jeder Fenster-Position leicht eine Array-Position zuordnen.
        
        Für die Fritzboxgeschichte brauchst du in der ersten Zeile (erster Anruf) nur eine genaue Reihenfolge, in der die Daten hintereinander gespeichert werden sollen, festzulegen:
        
        0   Callid = 0 -x | 1   calltype | 2   ... | 3 ....
        
        `~~[code]~~var context.global.fbVars.call = []; // Array "call" angelegt[/code]`
        
        Danach werden für jeden Anruf weitere Zeilen zugefügt, die du mit einer weiteren eckigen Klammer abfragen kannst. Zuerst die Zeile, dann die Spalte
        
        context.global.fbVars.call[0][1] ist Calltype (2\. Postion) vom ersten Anruf (1.Zeile)
        
        context.global.fbVars.call[5][0] ist CallID vom 6\. Anruf
        
        Ich kann es hier nicht testen, aber du füllst das Array mit den Werten einfach durch ansprechen der Position.
        
        Hoffe, das hilft etwas.
        
        Gruß
        
        Pix[/code]
        
        1 Reply Last reply Reply Quote 0
        • ruhr70
          ruhr70 last edited by

          Hi Pix,

          erst einmal ganz, ganz herzlichen Dank für die ausführliche Info!

          Beim Lesen bin ich mir noch nicht ganz sicher, ob ich damit auch das hinbekomme, was mir vorschwebt.

          Es hilft auf jeden Fall schon einmal, weiter zu probieren.

          Ich möchte am Ende eine Struktur haben, wie z.B. Tankerkönig die Daten zurück liefert:

          http://forum.iobroker.org/download/file … &mode=view

          Das heisst ein "Item" je Call ID.

          Die Werte darin sollen per, ja was eigentlich, Namen ("calltype": "DISCONNECT")identifiziert werden und nicht über ihre Position.

          Mit so einer Struktur, wie sie Tankerkönig, Google Maps, OpenWeather, usw. zurück liefert, komme ich prima klar.

          90% von dem, was ich erreichen will, hat mit der Vorgehensweise, wie ich sie oben beschrieben hatte, funktioniert (Anruferlisten, usw.).

          Z.B. alle Variablen werden in einer Baumstruktur in den ioBroker Objekten angezeigt.

          Nun brauche ich es doch anders.

          Wenn ich nachher wieder an den Rechner kann, arbeite ich Deine Infos im Detail durch und schau mal, ob ich das in die Richtung gebogen bekomme, wie ich es mir vorstelle.

          Danke Dir noch einmal. Klasse Infos!

          VG,

          Michael

          1 Reply Last reply Reply Quote 0
          • ruhr70
            ruhr70 last edited by

            so pix,

            jetzt probier ich mal, ob ich Deine Tipps mit meinem Ziel überein kriege 😉

            Hab gerade viel Zeit verschwendet und einen Fehler gesucht. In Node-red eine Test Node angelegt und so blöd auf dem Bildschirm gesetzt, dass ich sie einfach übersehen habe. Die Test Node hat mir alles durcheinander gehauen (globale Objekte). :oops:

            Jetzt geht es frisch ans Werk 😉

            Danke noch einmal!

            1 Reply Last reply Reply Quote 0
            • ruhr70
              ruhr70 last edited by

              .

              die Struktur, die ich mir vorstelle habe ich jetzt:

              msg.callid		= slices[2]; 
              var callid	    = msg.callid;
              msg.date 		= slices[0];
              msg.calltype   	= slices[1];
              
              context.global.fbVarsTest = context.global.fbVarsTest || {}; 
              context.global.fbVarsTest.callid = context.global.fbVarsTest.callid || [];
              context.global.fbVarsTest.callid[msg.callid] = context.global.fbVarsTest.callid[msg.callid] || {};
              
              // Werte je Call ID Objekt
              context.global.fbVarsTest.callid[callid].callid = msg.callid;
              context.global.fbVarsTest.callid[callid].date = msg.date;
              context.global.fbVarsTest.callid[callid].calltype = msg.calltype;
              
              

              ergibt:

              { "callid":
               [ { "callid": "0", "date": "10.05.15 20:06:58", "calltype": "RING" }, 
              { "callid": "1", "date": "10.05.15 20:07:07", "calltype": "DISCONNECT" } ]
              

              jetzt schauen mir mal, ob mir das in der weiteren Verarbeitung einen Vorteil bringt.

              Danke pix!

              p.s.: wahrscheinlich kann mann das auch eleganter anlegen.

              Die Variable callid kann ich mir sparen und dafür direkt msg.callid verwenden.

              1 Reply Last reply Reply Quote 0
              • Bluefox
                Bluefox last edited by

                Willst du einen Array sortiert nach Nummern, oder sortiert nach Zeit haben?

                1 Reply Last reply Reply Quote 0
                • ruhr70
                  ruhr70 last edited by

                  @Bluefox:

                  Willst du einen Array sortiert nach Nummern, oder sortiert nach Zeit haben? `
                  Nach Nummern.

                  Die Eindeutige Nummer ist die Call ID.

                  Scheint so, wie ich es oben gemacht habe, auch zu funktionieren.

                  Ich bin gestern nicht mehr dazu gekommen alles umzustellen. Werde ich jetzt machen.

                  Wenn als erstes eine Call ID mit 1 ankommt, wird davor ein Objekt mit null angelegt.

                  Kommt dann eine Call ID mit 0, wird das Objekt [0] gefüllt.

                  Da ich es noch nicht probiert habe, gehe ich davon aus, dass ich auf die Objekte wie folgt zugreifen kann:

                  context.global.fbVarsTest.callid[2].connectedNumber

                  Für den Wert Connected Number der dritten Call ID [2].

                  Die vorherige Vorgehensweise (ohne Array) hat soweit auch funktioniert. War aber (für mich) eine Sackgasse.

                  Ich möchte dann z.B. alle Call IDs durchgehen, und unter context.global.fbVarsTest.callid[2].calltype nachsehen, ob und wie viele Types mit "RING" dort aktiv sind.

                  Noch keine Ahnung, wie ich das mache. Stelle mir das aber einfacher vor, als den Haufen Variablen, den ich bisher habe.

                  1 Reply Last reply Reply Quote 0
                  • ruhr70
                    ruhr70 last edited by

                    @Bluefox:

                    Willst du einen Array sortiert nach Nummern, oder sortiert nach Zeit haben? `

                    Hi Bluefox,

                    das Array mit den Nummern (call ID) funktioniert prächtig 😉

                    Jetzt will ich innerhalb des Objekts ein zweites Array anlegen.

                    Hier wäre eine Sortierung nach Zeit sinnvoll, am besten noch, mit dem aktuellsten Eintrag an erster Stelle.

                    Die Frage ist, ob das geht und wie man das dann handhabt.

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    737
                    Online

                    31.8k
                    Users

                    80.0k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    2504
                    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