Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Dynamisch erstellte Variablen.

    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

    Dynamisch erstellte Variablen.

    This topic has been deleted. Only users with topic management privileges can see it.
    • Armilar
      Armilar Most Active Forum Testing @ptr last edited by

      @ptr

      ich bin ebenfalls der Ansicht, dass hier wesentliche Informationen verschwiegen worden sind.

      Die Lösung ist aus meiner Sicht denkbar einfach und fern von deinen aktuellen Gedanken.

      Sage uns doch mal kurz "welche Speaker" du "wie" ansprechen möchtest bzw. verzögert ausschalten möchtest. Evtl. hast du bereits ein vollständiges Skript und "keine Code-Fragmente".

      Mach kein Rätsel draus. könnte die Lösung echt beschleunigen...

      Ich sag es mal so: mehrdimensionale Arrays sind sicher cool, aber für so eine Lösung in der Regel nicht erforderlich. Ich denke du hast dich da aktuell gedanklich verrannt.

      1 Reply Last reply Reply Quote 1
      • P
        ptr last edited by

        @BananaJoe: Danke Dir für den schnelle Rückmeldung
        @armilar & @OliverIO: hier möglichst genau der Zweck der Sache:

        Zweck:
        2. Ich habe mehrere Sonos-Lautsprecher mit eigenen Timern (Trigger: falls .state = "play"), die unabhängig gestoppt und gestartet werden können.
        2. Das Problem ist erweiterbar, da ich ähnliche Problemstellungen auch in anderen Skriptbereichen habe. z.B. soll pro Raum auch ein "RaumAnwesenheit"-Timer getriggert werden, sobald die DPs "0_userdata.0...Anwesenheit" auf "true" gehen.

        Ursprung des Problems:
        Eigentlich Blockly. Hier gibt es keinen Timer-Funktionsblock der den Timernamen an den Triggernamen anpassen könnte. Nur hardcodiertes schreiben von hier "timeout":
        e0d98f69-b53b-4017-bdf3-db60e71f3716-image.png
        -> Blockly-Forum ist hier leider ohne Lösung aktuell, daher der Weg zu JS selbst.
        https://forum.iobroker.net/topic/59816/timer-mit-variable-als-namen-möglich
        (hier ist es soweit ich das erkenne, das gleiche Problem, jedoch nicht ein individueller Lautsprecher-Timer, sondern ein Anwesenheits-Timer)

        Hoffe das beantwortet schonmal Fragen.
        Falls ich etwas bestimmtes detaillieren soll mache ich das gerne.

        Hier noch das JS des Sonos-Boxenskripts. Es ist aktuell nicht sehr elegant & funktioniert auch nur für EINEN Timer gleichzeitig. Ich hoffe dieser Zwischenstand verwirrt nicht:

        var timer_minuten, timer_name, triggernder_raum, elemente_von_trigger, triggernder_lautsprecher_pfad, volume_object, standardvolume, minas_zimmer_schlummern, hobbyraum_schlummern, aktuelles_volume;
        
        
        // Alle Boxen: Trigger auf Aktivitätsänderung
        on({id: [].concat(Array.prototype.slice.apply($("channel[state.id=alias.0.*.*.Box1.state]"))), change: "ne", ack: true}, async function (obj) {
          var value = obj.state.val;
          var oldValue = obj.oldState.val;
          elemente_von_trigger = obj.id.split('.');
          triggernder_raum = elemente_von_trigger[3];
          triggernder_lautsprecher_pfad = elemente_von_trigger.slice(0, elemente_von_trigger.length - 1).join('.');
          volume_object = String(triggernder_lautsprecher_pfad) + '.volume';
          if ((obj.state ? obj.state.val : "") == 'play') {
            // Standardlautstärke festlegen
        
            switch (triggernder_raum) {
            	case 'Yunes_Zimmer':
              standardvolume = 10;
        
            		break;
            	case 'Minas_Zimmer':
              standardvolume = 14;
              // immer Schlummertimer setzen:
              timer_minuten = 30;
              (function () {if (minas_zimmer_schlummern) {clearTimeout(minas_zimmer_schlummern); minas_zimmer_schlummern = null;}})();
              minas_zimmer_schlummern = setTimeout(async function () {
                // abgelaufen? dann ausfaden...
                while (getState(volume_object).val > 0) {
                  aktuelles_volume = getState(volume_object).val;
                  setStateDelayed(volume_object, (Math.floor(parseFloat(aktuelles_volume) * 0.9)), false, parseInt(((0) || "").toString(), 10), true);
                  await wait(1000);
                }
                setStateDelayed((String(triggernder_lautsprecher_pfad) + '.pause'), true, false, parseInt(((0) || "").toString(), 10), true);
                // anfaden beim nächsten play ermöglichen
                setStateDelayed(volume_object, (Math.floor(parseFloat(standardvolume) * 0.6)), false, parseInt(((0) || "").toString(), 10), true);
              }, parseInt((parseFloat(timer_minuten) * 60000)));
        
            		break;
            	case 'Wohnzimmer':
              standardvolume = 14;
        
            		break;
            	case 'Hobbyraum':
              standardvolume = 14;
              // immer Schlummertimer setzen:
              timer_minuten = 30;
              (function () {if (hobbyraum_schlummern) {clearTimeout(hobbyraum_schlummern); hobbyraum_schlummern = null;}})();
              hobbyraum_schlummern = setTimeout(async function () {
                // abgelaufen? dann ausfaden...
                while (getState(volume_object).val > 0) {
                  aktuelles_volume = getState(volume_object).val;
                  setStateDelayed(volume_object, (Math.floor(parseFloat(aktuelles_volume) * 0.9)), false, parseInt(((0) || "").toString(), 10), true);
                  await wait(1000);
                }
                setStateDelayed((String(triggernder_lautsprecher_pfad) + '.pause'), true, false, parseInt(((0) || "").toString(), 10), true);
                // anfaden beim nächsten play ermöglichen
                setStateDelayed(volume_object, (Math.floor(parseFloat(standardvolume) * 0.6)), false, parseInt(((0) || "").toString(), 10), true);
              }, parseInt((parseFloat(timer_minuten) * 60000)));
        
            		break;
            	default:
              // falls triggered Box nicht aufgezählt ist
              standardvolume = 14;
        
            		break;
            }
            setStateDelayed(volume_object, standardvolume, false, parseInt(((0) || "").toString(), 10), true);
          } else {
            // anfaden beim nächsten play ermöglichen
            setStateDelayed(volume_object, (Math.floor(parseFloat(standardvolume) * 0.6)), false, parseInt(((0) || "").toString(), 10), true);
          }
        });
        
        OliverIO 1 Reply Last reply Reply Quote 0
        • OliverIO
          OliverIO @ptr last edited by OliverIO

          @ptr
          Ok danke.
          Ich würde im Skript außerhalb der Funktion (also ganz oben)
          eine Array Variable anlegen.
          Immer wenn du einen neuen Timer anlegst prüfst du in diesem Array anhand des namen des timers ob da schon ein Eintrag vorhanden ist. Wenn ja dann löschst du anhand des timerhandles in diesem Array den timer, startest den neuen timer und speicherst das neue handle wieder in diesem Array mit dem Namen

          Eine 2. Funktion löscht einfach nur den timer, anhand des handles welches über den Namen im Array gefunden wird.

          Ich bin gerade nicht am Rechner, daher kann ich dir keinen Code vorgeben. Wenn du es nicht selber hinbekommst, könnte ich ab morgen Abend mal schauen. Sind meines Erachtens aber nur wenige Zeilen

          Falls du diese Funktionen aus mehreren Skripten aufrufen willst, dann wird das glaube ich mit dem Array nicht funktionieren, da die Skripte in global ja alle nur vor das. Orhandene Skript kopiert wird und damit es nicht nur einen gemeinsamen speicherkontext gibt.
          Dann muss man den Inhalt des arrays in einem datenpunkt speichern und bei jedem Aufruf wieder aus dem datenpunkt lesen,

          1 Reply Last reply Reply Quote 0
          • Armilar
            Armilar Most Active Forum Testing last edited by Armilar

            @ptr

            Du bist immer noch bei dem Problem und verschachtelst dein Problem auch noch.

            Ich würde dir gerne bei einer "Lösung" helfen, die wahrscheinlich komplett anders aussieht. Dazu brauchen wir aber die komplette Anforderung an die Lösung. Nicht das Problem...

            Fangen wir mal so an:

            • Du hast in mehreren Zimmern eine Sonos. Jede Sonos ist mit State unter Enums aufgeführt. Allerdings anscheinend auch ein gemeinsamer State mit einem Alias?
            • Du hast für jedes Zimmer eine Standardlautstärke definiert. Fading bei Play soll die Standardlautstärke auf max definieren.
            • Du hast jeweils für Anwesenheit einen Datenpunkt, je Zimmer in dem eine Sonos steht.
            • Du hast... etc.

            Was willst du in Abhängigkeit von welchen Ereignissen schalten und was ist der Auslöser mit welcher Aktion.

            Manchmal muss man seine Gedanken neu denken, wenn man fest steckt. "Keep it simple and smart"

            P 1 Reply Last reply Reply Quote 0
            • P
              ptr @Armilar last edited by

              Habe das Skript jetzt etwas angepasst.

              1. Schritt:
              Versuche mich der Sache nun - einen Schritt zurück - einfacher zu nähern.

              Ich erstelle also erstmal zwei getrennte Timer hobbyraum_schlummern und minas_zimmer_schlummern. Diesen gebe ich den gleichen Code in die "nach-TImout"-Ausführung. Nur die Timerbezeichnungen sind also anders.
              Jeder Timer funktioniert für sich.
              Jedoch wenn ich beide Lautsprecher hintereinander starte, dann laufen ja zwei Timer los. Jedoch werden dann beide Timer auf den zweiten Trigger(bzw. Lautsprecher) angewendet. (Was man am entsprechenden Springen der Laufstärke während des Fadens erkennen kann und weil der erste Lautsprecher nicht ausfadet.)
              -> Das verstehe ich nicht, da ich dachte, dass pro Trigger (objektorientiert) eine weitere Instanz des Skripts gestartet wird.

              2. Schritt:
              @OliverIO: Das Array-Prinzip würde ich gerne direkt über die Datenbank von ioB anwenden. Also habe ich DPs angelegt: 0_userdata.0.[etage].[raum].Timer1. Diese können nun den Timer aufnehmen, wenn ich den DP mit dem Timer "{...}" schreibe. ID by Selektor liefert dann denn Array.
              Hier fehlt mir jedoch noch die Verbindung zur letzendlichen Bezeichnung des setTimeout. Für mich ist das aktuell irgendwie noch eine parallele Struktur. Ich denke ich verstehe nicht genau "wo" der Timer ist. vllt etwas schwer zu verstehen... Da überlege ich noch.

              var raeume_array, timer_minuten, timer_name, trig_raum, elemente_von_trigger, trig_raum_timer1, trig_lautsprecher_pfad, trig_lautsprecher_volume, volume_standard, minas_zimmer_schlummern, hobbyraum_schlummern, trig_lautsprecher_volume_aktueller_wert;
              
              
              // Alle Boxen: Trigger auf Aktivitätsänderung
              
              on({id: [].concat(Array.prototype.slice.apply($("channel[state.id=alias.0.*.*.Box1.state]"))), change: "ne", ack: true}, async function (obj) {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
                // Elemente des Triggers rauslesen
                elemente_von_trigger = obj.id.split('.');
                // Raum ableiten
                trig_raum = elemente_von_trigger[3];
                trig_raum_timer1 = ['0_userdata.',elemente_von_trigger.slice(1, 4).join('.'),'.Timer1'].join('');
                // Lautsprechervariablen ableiten
                trig_lautsprecher_pfad = elemente_von_trigger.slice(0, elemente_von_trigger.length - 1).join('.');
                trig_lautsprecher_volume = String(trig_lautsprecher_pfad) + '.volume';
                // Differenzierung abh. von Raum:
                if ((obj.state ? obj.state.val : "") == 'play') {
              
                  switch (trig_raum) {
                  	case 'Yunes_Zimmer':
                    volume_standard = 10;
              
                  		break;
                  	case 'Minas_Zimmer':
                    volume_standard = 14;
                    timer_minuten = 0.05;
                    console.log(trig_raum_timer1);
                    console.log(getState(trig_raum_timer1).val);
                    // Raum-Schlummertimer stoppen
                    (function () {if (minas_zimmer_schlummern) {clearTimeout(minas_zimmer_schlummern); minas_zimmer_schlummern = null;}})();
                    setStateDelayed(trig_raum_timer1, null, true, parseInt(((0) || "").toString(), 10), true);
                    console.log(getState(trig_raum_timer1).val);
                    // Raum-Schlummertimer starten
                    minas_zimmer_schlummern = setTimeout(async function () {
                      // Timer abgelaufen
                      setStateDelayed(trig_raum_timer1, minas_zimmer_schlummern, true, parseInt(((0) || "").toString(), 10), true);
                      console.log(trig_raum_timer1);
                      console.log(getState(trig_raum_timer1).val);
                      // Ausfaden...
                      while (getState(trig_lautsprecher_volume).val > 0) {
                        trig_lautsprecher_volume_aktueller_wert = getState(trig_lautsprecher_volume).val;
                        setStateDelayed(trig_lautsprecher_volume, (Math.floor(parseFloat(trig_lautsprecher_volume_aktueller_wert) * 0.9)), false, parseInt(((0) || "").toString(), 10), true);
                        await wait(1000);
                      }
                      setStateDelayed((String(trig_lautsprecher_pfad) + '.pause'), true, false, parseInt(((0) || "").toString(), 10), true);
                      // Anfaden beim nächsten play vorbereiten
                      setStateDelayed(trig_lautsprecher_volume, (Math.floor(parseFloat(volume_standard) * 0.6)), false, parseInt(((0) || "").toString(), 10), true);
                    }, parseInt((parseFloat(timer_minuten) * 60000)));
              
                  		break;
                  	case 'Wohnzimmer':
                    volume_standard = 14;
              
                  		break;
                  	case 'Hobbyraum':
                    volume_standard = 14;
                    timer_minuten = 0.05;
                    console.log(trig_raum_timer1);
                    console.log(getState(trig_raum_timer1).val);
                    // Raum-Schlummertimer stoppen
                    (function () {if (hobbyraum_schlummern) {clearTimeout(hobbyraum_schlummern); hobbyraum_schlummern = null;}})();
                    setStateDelayed(trig_raum_timer1, null, true, parseInt(((0) || "").toString(), 10), true);
                    console.log(getState(trig_raum_timer1).val);
                    // Raum-Schlummertimer starten
                    hobbyraum_schlummern = setTimeout(async function () {
                      // Timer abgelaufen
                      setStateDelayed(trig_raum_timer1, hobbyraum_schlummern, true, parseInt(((0) || "").toString(), 10), true);
                      console.log(getState(trig_raum_timer1).val);
                      // Ausfaden...
                      while (getState(trig_lautsprecher_volume).val > 0) {
                        trig_lautsprecher_volume_aktueller_wert = getState(trig_lautsprecher_volume).val;
                        setStateDelayed(trig_lautsprecher_volume, (Math.floor(parseFloat(trig_lautsprecher_volume_aktueller_wert) * 0.9)), false, parseInt(((0) || "").toString(), 10), true);
                        await wait(1000);
                      }
                      setStateDelayed((String(trig_lautsprecher_pfad) + '.pause'), true, false, parseInt(((0) || "").toString(), 10), true);
                      // Anfaden beim nächsten play vorbereiten
                      setStateDelayed(trig_lautsprecher_volume, (Math.floor(parseFloat(volume_standard) * 0.6)), false, parseInt(((0) || "").toString(), 10), true);
                    }, parseInt((parseFloat(timer_minuten) * 60000)));
              
                  		break;
                  	default:
                    volume_standard = 14;
                    // falls triggered Box nicht aufgezählt ist
              
                  		break;
                  }
                  setStateDelayed(trig_lautsprecher_volume, volume_standard, false, parseInt(((0) || "").toString(), 10), true);
                } else {
                  // anfaden beim nächsten play ermöglichen
                  setStateDelayed(trig_lautsprecher_volume, (Math.floor(parseFloat(volume_standard) * 0.6)), false, parseInt(((0) || "").toString(), 10), true);
                }
              });
              
              Armilar OliverIO 2 Replies Last reply Reply Quote 0
              • Armilar
                Armilar Most Active Forum Testing @ptr last edited by

                @ptr sagte in Dynamisch erstellte Variablen.:

                0_userdata.0.[etage].[raum].Timer1

                Wohl eher anders herum.

                0_userdata.0.Timer mit einem Objekt oder JSON 😉 mixed-Type

                P 1 Reply Last reply Reply Quote 0
                • P
                  ptr @Armilar last edited by ptr

                  @armilar weißt Du warum Timer in dieser getrennten Form nicht funktioniert? Ist mir schleierhaft. Habe sogar das Skript aufgedoppelt und je eines pro Raum eingesetzt (also z.B. im Skript NUR Minas_Zimmer Auswahl möglich)-> das gleiche Ergebnis.... der Timer bleibt nicht bei seinem Raum, sondern geht immer auf den letzten Trigger... Wo hängen die Timer also zusammen??

                  Armilar 2 Replies Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @ptr last edited by

                    @ptr

                    puh, da muss man das ganze skript restrukturieren.
                    das skript soll doch für verschiedene räume gleich funktionieren,
                    allerdings ist da generischer und raumspezifischer code gemischt.
                    ausserdem würde ich einzelne funktionalitäten in eigene funktionen auslagern.
                    so ist das schwer lesbar. also geht schon, ist aber aufwändig und damit auch wieder fehleranfällig

                    was mir auf die schnelle aufgefallen ist:
                    also immer wenn jemand play drückt, dann sollen die standard lautstärken gesetzt werden?
                    und dann noch zusätzlich wenn schlummern gesetzt ist, die lautstärke nach und nach runtergefahren werden.
                    das sind für mich 2 unabhängige funktionen, die man auch über separate trigger ansteuert.
                    wobei minas_zimmer_schlummern nirgends gelesen wird oder ich habs übersehen

                    1 Reply Last reply Reply Quote 0
                    • Armilar
                      Armilar Most Active Forum Testing @ptr last edited by Armilar

                      @ptr

                      Weil ioBroker das so nicht vorgesehen hat und weil es auch keinen Sinn ergeben würde...

                      Beispiel:
                      Du legst einen Datenpunkt ("0_userdata.0.haus") an. Dieser Datenpunkt soll zum Beispiel ein komplettes JSON-Objekt aufnehmen, wie z.B. das nachfolgende (nur exemplarisch):

                      [
                         {
                            "etage":{
                               "EG":[
                                  {
                                     "zimmer":"Wohnzimmer",
                                     "anwesend":true,
                                     "bewegung":true,
                                     "sonos_ip": "192"
                                  },
                                  {
                                     "zimmer":"Hobbyraum",
                                     "anwesend":false,
                                     "bewegung":true,
                                     "sonos_ip": "174"
                                  }
                               ]
                            }
                         },
                         {
                            "etage":{
                               "OG":[
                                  {
                                     "zimmer":"Yunes",
                                     "anwesend":false,
                                     "bewegung":false,
                                     "sonos_ip": "203"
                                  },
                                  {
                                     "zimmer":"Mina",
                                     "anwesend":true,
                                     "bewegung":true,
                                     "sonos_ip": "188"
                                  }
                               ]
                            }
                         }
                      ]
                      

                      und exakt das schreibst du in den Datenpunkt...

                      Diese JSON lassen sich in Blockly, JavaScript oder TypeScript erstellen und auch wieder einlesen oder verändern...

                      Siehst du die Objektstruktur und Tiefe? Kann auch erweitert werden

                      Andererseits könntest du das gleiche auch als Einzelobjekte unter 0_userdata.haus anlegen. Und auf diese entsprechend eine Logik aufbauen.

                      Deshalb sage ich schon seit einer Weile... Schreibe mal alle Anforderungen zusammen. Danach ist es in der Regel ein Kinderspiel... also wenn du sie dann auch noch mitteilst, wäre es ein Traum...

                      1 Reply Last reply Reply Quote 0
                      • Armilar
                        Armilar Most Active Forum Testing @ptr last edited by Armilar

                        @ptr

                        Noch ein Beispiel in tieferer Objekt-Struktur mit zusätzlicher Lautstärke:

                        [
                           {
                              "etage":{
                                 "EG":[
                                    {
                                       "zimmer":{
                                          "Wohnzimmer":[
                                             {
                                                "anwesend":true,
                                                "bewegung":true,
                                                "lautstaerke":22,
                                                "sonos_ip":"192"
                                             }
                                          ]
                                       }
                                    },
                                    {
                                       "zimmer":{
                                          "Hobbyraum":[
                                             {
                                                "anwesend":false,
                                                "bewegung":true,
                                                "lautstaerke":18,
                                                "sonos_ip":"174"
                                             }
                                          ]
                                       }
                                    }
                                 ]
                              }
                           },
                           {
                              "etage":{
                                 "OG":[
                                    {
                                       "zimmer":{
                                          "Yunes":[
                                             {
                                                "anwesend":false,
                                                "bewegung":false,
                                                "lautstaerke":12,
                                                "sonos_ip":"203"
                                             }
                                          ]
                                       }
                                    },
                                    {
                                       "zimmer":{
                                          "Mina":[
                                             {
                                                "anwesend":true,
                                                "bewegung":true,
                                                "lautstaerke":10,
                                                "sonos_ip":"188"
                                             }
                                          ]
                                       }
                                    }
                                 ]
                              }
                           }
                        ]
                        
                        1 Reply Last reply Reply Quote 0
                        • OliverIO
                          OliverIO last edited by

                          ok, er scheint das Interesse verloren zu haben.

                          Armilar P 2 Replies Last reply Reply Quote 0
                          • Armilar
                            Armilar Most Active Forum Testing @OliverIO last edited by

                            @oliverio

                            hmm, sehe ich auch so 😉

                            1 Reply Last reply Reply Quote 0
                            • Homoran
                              Homoran Global Moderator Administrators last edited by

                              dann kann ich ja endlich diesen Thread kapern 😂

                              ich habe nichts verstanden, nur der Titel entspricht einem lang gehegten Wunsch von mir.

                              ich würde gerne eine Liste einer Variablen zuweisen, deren Name dynamisch erzeugt werden soll.
                              Idee gehört hier in den Thread: https://forum.iobroker.net/post/826534

                              so sol die Liste so lange erweitert werden, wie die Daten zu einer Flugnummer gehören, falls mehrere Flüge im Beobachtungsfenster sind, sollen die Daten jeweils der richtigen Liste zugeordnet werden. Die Variable sollte deshalb möglichst der Flugnummer entsprechen.

                              So ganz zu Ende gedacht ist die Idee noch nicht, ich bastel meist nach trial & error.

                              Die Kernfrage ist erst einmal kann ich prinzipiell so Variablen erstellen (und nach Benutzung wieder löschen)?

                              Armilar paul53 OliverIO 4 Replies Last reply Reply Quote 0
                              • Armilar
                                Armilar Most Active Forum Testing @Homoran last edited by

                                @homoran sagte in Dynamisch erstellte Variablen.:

                                Die Kernfrage ist erst einmal kann ich prinzipiell so Variablen erstellen

                                Natürlich nicht... Aber du kannst jederzeit einer Variable ein Objekt unterjubeln...

                                Der Titel ist definitiv nicht sinnvoll benannt, auch wenn es ein langersehnter Wunsch von dir ist 😂

                                Homoran 1 Reply Last reply Reply Quote 1
                                • Armilar
                                  Armilar Most Active Forum Testing @Homoran last edited by

                                  @homoran sagte in Dynamisch erstellte Variablen.:

                                  Idee gehört hier in den Thread

                                  Das könnte man aber doch mal zu Ende bringen.

                                  1 Reply Last reply Reply Quote 1
                                  • Homoran
                                    Homoran Global Moderator Administrators @Armilar last edited by

                                    @armilar sagte in Dynamisch erstellte Variablen.:

                                    @homoran sagte in Dynamisch erstellte Variablen.:

                                    Die Kernfrage ist erst einmal kann ich prinzipiell so Variablen erstellen

                                    Natürlich nicht... Aber du kannst jederzeit einer Variable ein Objekt unterjubeln...

                                    Der Titel ist definitiv nicht sinnvoll benannt, auch wenn es ein langersehnter Wunsch von dir ist 😂

                                    Danke!
                                    Auch wenn es nicht das ist was ich hören wollte. Immerhin erklärt es warum ich vergeblich versucht hatte "mein" Thema darin zu finden.

                                    Mit einer dynamisch benannten Variable hätte ich mich nur einfacher getan. Ich weiß ja nicht einmal wie man ein Objekt unterjubelt, geschweige denn wie ich relativ einfach prüfe in welche Variable ich schreiben müsste.

                                    Danke!

                                    Armilar 1 Reply Last reply Reply Quote 1
                                    • Armilar
                                      Armilar Most Active Forum Testing @Homoran last edited by Armilar

                                      @homoran

                                      Sehr gerne.

                                      Daher war mein Anliegen in diesem Topic ja auch, die Anforderungen zu finden um eine

                                      Ich würde dir gerne bei einer "Lösung" helfen, die wahrscheinlich komplett anders aussieht. Dazu brauchen wir aber die komplette Anforderung an die Lösung. Nicht das Problem...

                                      Lösung zu denken, die funktioniert 😉

                                      Edit: Evtl. Code der sich selbst schreibt, aber ich denke das geht jetzt doch etwas zu weit 😂

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

                                        @homoran sagte: Die Kernfrage ist erst einmal kann ich prinzipiell so Variablen erstellen (und nach Benutzung wieder löschen)?

                                        Nein. Ausweg: Array mit Objekten

                                        const obj = {Flugnummer: 'LH123', weitere_Attribute: 'abc'}
                                        

                                        Dann in einer Schleife die Objekte einlesen und die Flugnummer vergleichen.

                                        Homoran Codierknecht 2 Replies Last reply Reply Quote 1
                                        • Homoran
                                          Homoran Global Moderator Administrators @paul53 last edited by Homoran

                                          @paul53 sagte:

                                          @homoran sagte: Die Kernfrage ist erst einmal kann ich prinzipiell so Variablen erstellen (und nach Benutzung wieder löschen)?

                                          Nein. Ausweg: Array mit Objekten

                                          const obj = {Flugnummer: 'LH123', weitere_Attribute: 'abc'}
                                          

                                          Dann in einer Schleife die Objekte einlesen und die Flugnummer vergleichen.

                                          und genau solche komplexen Konstrukte wollte ich umgehen!

                                          weil:
                                          ich will es selber schaffen!
                                          ich weiß dass du immer gerne hilfst! Aber du hast keine Ahnung wie es mich ärgert dass ich es nicht (mehr) selber kann.

                                          Schleifen kommen noch genug.
                                          Dein Versuch mit dem speichern im Datenpunkt hatte nicht zuverlässig geklappt, daher muss alles über Variablen laufen und erst zum Schluss geschrieben werden.

                                          Im Moment habe ich den Beobachtunggsrahnen so klein wie möglich gestellt. Was aber andere "Probleme" mit sich bringt.

                                          Das sollten wir dann aber wieder im alten Thread fortsetzen

                                          ich würde diesen Teil dann rüberschieben.

                                          1 Reply Last reply Reply Quote 0
                                          • Codierknecht
                                            Codierknecht Developer Most Active @paul53 last edited by

                                            @paul53
                                            Nur mal so interessehalber, da ich ja von JS noch nicht so wirklich Plan habe:
                                            Die "Objekte" von denen ihr hier sprecht ... kann ich die mit recordoder struct vergleichen?
                                            Für ein lebendes "Objekt" fehlt mir hier igendwie die Instanziierung.

                                            Oder bin ich da (mal wieder) komplett auf dem Holzweg?

                                            Armilar paul53 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            716
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            7
                                            43
                                            1878
                                            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