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. Skripten / Logik
  4. JavaScript
  5. Hilfe ;- Array anlegen oder Objekt im Objekt…?

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.6k

Hilfe ;- Array anlegen oder Objekt im Objekt…?

Geplant Angeheftet Gesperrt Verschoben JavaScript
8 Beiträge 3 Kommentatoren 2.6k Aufrufe
  • Ä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.
  • ruhr70R Offline
    ruhr70R Offline
    ruhr70
    schrieb am zuletzt editiert von
    #1

    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)

    Adapter: Fritzbox, Unify Circuit
    Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pix
      schrieb am zuletzt editiert von
      #2

      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]
      

      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

      1 Antwort Letzte Antwort
      0
      • ruhr70R Offline
        ruhr70R Offline
        ruhr70
        schrieb am zuletzt editiert von
        #3

        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

        Adapter: Fritzbox, Unify Circuit
        Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

        1 Antwort Letzte Antwort
        0
        • ruhr70R Offline
          ruhr70R Offline
          ruhr70
          schrieb am zuletzt editiert von
          #4

          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!

          Adapter: Fritzbox, Unify Circuit
          Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

          1 Antwort Letzte Antwort
          0
          • ruhr70R Offline
            ruhr70R Offline
            ruhr70
            schrieb am zuletzt editiert von
            #5

            .

            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.

            Adapter: Fritzbox, Unify Circuit
            Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

            1 Antwort Letzte Antwort
            0
            • BluefoxB Offline
              BluefoxB Offline
              Bluefox
              schrieb am zuletzt editiert von
              #6

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

              1 Antwort Letzte Antwort
              0
              • ruhr70R Offline
                ruhr70R Offline
                ruhr70
                schrieb am zuletzt editiert von
                #7

                @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.

                Adapter: Fritzbox, Unify Circuit
                Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                1 Antwort Letzte Antwort
                0
                • ruhr70R Offline
                  ruhr70R Offline
                  ruhr70
                  schrieb am zuletzt editiert von
                  #8

                  @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.

                  Adapter: Fritzbox, Unify Circuit
                  Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                  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

                  898

                  Online

                  32.4k

                  Benutzer

                  81.4k

                  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