Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Dynamisch erstellte Variablen.

NEWS

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

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

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

Dynamisch erstellte Variablen.

Geplant Angeheftet Gesperrt Verschoben JavaScript
43 Beiträge 7 Kommentatoren 2.8k Aufrufe 5 Watching
  • Ä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.
  • HomoranH Homoran

    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)?

    paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von paul53
    #21

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

    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

    HomoranH CodierknechtC 2 Antworten Letzte Antwort
    1
    • paul53P 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.

      HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von Homoran
      #22

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

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      1 Antwort Letzte Antwort
      0
      • paul53P 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.

        CodierknechtC Online
        CodierknechtC Online
        Codierknecht
        Developer Most Active
        schrieb am zuletzt editiert von
        #23

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

        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

        Proxmox 9.0.17 LXC|8 GB|Core i7-6700
        HmIP|ZigBee|Tasmota|Unifi
        Zabbix Cerrtified Specialist
        Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

        ArmilarA paul53P 2 Antworten Letzte Antwort
        0
        • HomoranH Homoran

          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)?

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von OliverIO
          #24

          @homoran sagte in Dynamisch erstellte Variablen.:

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

          ja klar

          var flights={}; //initialisieren der Hauptvariable, die alles enthält
          var flightnumber1="ab1234"; //schlüssel1
          var flightnumber2="cd5678";  //schlüssel2
          //zuweisen von daten
          flights[flightnumber1]="Meine Informationen 1"; // dies können einfache skalare Daten sein, aber auch wieder ein array oder ein Objekt. Eine Verschachtelung kann beliebig tief erfolgen
          flights[flightnumber2]={name: "Ich bin ein Objekt"};
          console.log(flights);  //ausgabe der daten auf der console zum prüfen
          //löschen der daten
          delete flights[flightnumber1];  //löschen der daten mit dem schlüssel flugnummer1
          console.log(flights);
          
          

          die flugnummer müssen eindeutig sein, da man ansonsten die alten daten wieder überschreiben würde.

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          HomoranH 1 Antwort Letzte Antwort
          0
          • OliverIOO OliverIO

            @homoran sagte in Dynamisch erstellte Variablen.:

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

            ja klar

            var flights={}; //initialisieren der Hauptvariable, die alles enthält
            var flightnumber1="ab1234"; //schlüssel1
            var flightnumber2="cd5678";  //schlüssel2
            //zuweisen von daten
            flights[flightnumber1]="Meine Informationen 1"; // dies können einfache skalare Daten sein, aber auch wieder ein array oder ein Objekt. Eine Verschachtelung kann beliebig tief erfolgen
            flights[flightnumber2]={name: "Ich bin ein Objekt"};
            console.log(flights);  //ausgabe der daten auf der console zum prüfen
            //löschen der daten
            delete flights[flightnumber1];  //löschen der daten mit dem schlüssel flugnummer1
            console.log(flights);
            
            

            die flugnummer müssen eindeutig sein, da man ansonsten die alten daten wieder überschreiben würde.

            HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von Homoran
            #25

            @oliverio neee,

            Danke, aber nicht so rum.
            der Variablenname soll dynamisch sein, also statt Flugnummer1 -> varRYR123
            und der sollen dann die Liste mit den JSON (timestamp, flugnummer, lat, long, height) zu dem Flug zugeordnet werden.

            die Variable wird eine Lebensdauer von wenigen Minuten (Überflugzeit) haben.

            Deine Variante mit 2-3 vordefinierten Variablen hatte ichvauch schon überlegt, alletdings keine Ahnung, wie ich diese blocken kann während sie in Nutzung ist um so lange #2 oder #3 zu nutzen (rollierend)

            efit: hast du was geändert?

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            CodierknechtC OliverIOO 2 Antworten Letzte Antwort
            0
            • HomoranH Homoran

              @oliverio neee,

              Danke, aber nicht so rum.
              der Variablenname soll dynamisch sein, also statt Flugnummer1 -> varRYR123
              und der sollen dann die Liste mit den JSON (timestamp, flugnummer, lat, long, height) zu dem Flug zugeordnet werden.

              die Variable wird eine Lebensdauer von wenigen Minuten (Überflugzeit) haben.

              Deine Variante mit 2-3 vordefinierten Variablen hatte ichvauch schon überlegt, alletdings keine Ahnung, wie ich diese blocken kann während sie in Nutzung ist um so lange #2 oder #3 zu nutzen (rollierend)

              efit: hast du was geändert?

              CodierknechtC Online
              CodierknechtC Online
              Codierknecht
              Developer Most Active
              schrieb am zuletzt editiert von
              #26

              @homoran
              In anderen Sprachen würde ich dafür eine Collection nehmen.
              Aber in JS stehe ich mindestens genau so auf dem Schlauch wie Du 😉

              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

              Proxmox 9.0.17 LXC|8 GB|Core i7-6700
              HmIP|ZigBee|Tasmota|Unifi
              Zabbix Cerrtified Specialist
              Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

              OliverIOO 1 Antwort Letzte Antwort
              0
              • CodierknechtC Codierknecht

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

                ArmilarA Offline
                ArmilarA Offline
                Armilar
                Most Active Forum Testing
                schrieb am zuletzt editiert von
                #27

                @codierknecht sagte in Dynamisch erstellte Variablen.:

                kann ich die mit recordoder struct vergleichen?

                Records und Tuples, wenn @Homoran denn mindestens eine Variable zuässt 😉

                let myRecord = #{ a: 1, b: 2, c: 2};
                let recordKeys = Object.keys(myRecord); // Returns ['a', 'b', 'c'];
                
                let myTuple = #[1, 2, 3, 4, 5];
                for(const i of myTuple) {
                    console.log(i);
                }
                

                Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
                https://github.com/joBr99/nspanel-lovelace-ui/wiki

                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                1 Antwort Letzte Antwort
                0
                • HomoranH Homoran

                  @oliverio neee,

                  Danke, aber nicht so rum.
                  der Variablenname soll dynamisch sein, also statt Flugnummer1 -> varRYR123
                  und der sollen dann die Liste mit den JSON (timestamp, flugnummer, lat, long, height) zu dem Flug zugeordnet werden.

                  die Variable wird eine Lebensdauer von wenigen Minuten (Überflugzeit) haben.

                  Deine Variante mit 2-3 vordefinierten Variablen hatte ichvauch schon überlegt, alletdings keine Ahnung, wie ich diese blocken kann während sie in Nutzung ist um so lange #2 oder #3 zu nutzen (rollierend)

                  efit: hast du was geändert?

                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  schrieb am zuletzt editiert von
                  #28

                  @homoran
                  und woher kommt die information wie die flugnummer genau lautet? die musst du ja in eine variable speichern, die dann weiterverwendet wird.
                  die beiden flugnummern habe ich nur beispielhaft vordefiniert, damit es klarer wird.
                  wenn du wiederverwendbaren code hast, dann hast du da nur eine variable

                  hier ein bisschen besser strukturierter code

                  var flights={}; //initialisieren der Hauptvariable, die alles enthält
                  addData("ab1234","Meine Informationen 1");
                  addData("cd5678",{name: "Ich bin ein Objekt"});
                  console.log(flights);
                  deleteData("ab1234");
                  console.log(flights);
                  
                  function addData(flightnumber,data) {
                      flights[flightnumber] = data;
                  }
                  function deleteData(flightnumber) {
                      delete flights[flightnumber];
                  }
                  
                  

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  HomoranH 1 Antwort Letzte Antwort
                  1
                  • CodierknechtC Codierknecht

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

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #29

                    @codierknecht sagte: Die "Objekte" von denen ihr hier sprecht ... kann ich die mit record oder struct vergleichen?

                    Ja.

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Antwort Letzte Antwort
                    1
                    • OliverIOO OliverIO

                      @homoran
                      und woher kommt die information wie die flugnummer genau lautet? die musst du ja in eine variable speichern, die dann weiterverwendet wird.
                      die beiden flugnummern habe ich nur beispielhaft vordefiniert, damit es klarer wird.
                      wenn du wiederverwendbaren code hast, dann hast du da nur eine variable

                      hier ein bisschen besser strukturierter code

                      var flights={}; //initialisieren der Hauptvariable, die alles enthält
                      addData("ab1234","Meine Informationen 1");
                      addData("cd5678",{name: "Ich bin ein Objekt"});
                      console.log(flights);
                      deleteData("ab1234");
                      console.log(flights);
                      
                      function addData(flightnumber,data) {
                          flights[flightnumber] = data;
                      }
                      function deleteData(flightnumber) {
                          delete flights[flightnumber];
                      }
                      
                      
                      HomoranH Nicht stören
                      HomoranH Nicht stören
                      Homoran
                      Global Moderator Administrators
                      schrieb am zuletzt editiert von Homoran
                      #30

                      @oliverio sagte in Dynamisch erstellte Variablen.:

                      und woher kommt die information wie die flugnummer genau lautet? d

                      die sendet mir der Flieger über Funk zu 🙂

                      { "now" : 1668369287.4, "messages" : 4842861, "aircraft" : [ {"hex":"406b0a","mlat":[],"tisb":[],"messages":9,"seen":13.0,"rssi":-26.7}, {"hex":"3c49ee","flight":"CFG069 ","alt_baro":9075,"alt_geom":9375,"gs":307.0,"ias":250,"tas":286,"mach":0.444,"track":259.7,"track_rate":0.00,"roll":0.7,"mag_heading":257.2,"baro_rate":-1568,"geom_rate":-1600,"squawk":"1000","nav_qnh":1013.3,"nav_altitude_mcp":7008,"lat":51.176225,"lon":7.089844,"nic":6,"rc":926,"seen_pos":2.2,"version":0,"nac_p":6,"nac_v":0,"sil":2,"sil_type":"unknown","mlat":[],"tisb":[],"messages":155,"seen":0.1,"rssi":-24.7}, {"hex":"44006c","flight":"AUA3SV ","alt_baro":31575,"alt_geom":32575,"gs":433.0,"ias":291,"tas":466,"mach":0.792,"track":124.9,"track_rate":0.00,"roll":0.0,"mag_heading":122.5,"baro_rate":1216,"geom_rate":1184,"squawk":"1000","category":"A3","nav_qnh":1012.8,"nav_altitude_mcp":35008,"lat":51.361771,"lon":7.286979,"nic":8,"rc":186,"seen_pos":16.6,"version":2,"nic_baro":1,"nac_p":9,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":1705,"seen":12.9,"rssi":-26.0}, {"hex":"3c4d68","flight":"DLH2MT ","alt_baro":34200,"alt_geom":35250,"gs":425.0,"ias":275,"tas":462,"mach":0.792,"track":135.7,"track_rate":0.00,"roll":0.2,"mag_heading":132.9,"baro_rate":736,"geom_rate":832,"squawk":"1000","category":"A3","nav_qnh":1012.8,"nav_altitude_mcp":36992,"nav_heading":132.2,"lat":51.045319,"lon":7.311773,"nic":8,"rc":186,"seen_pos":0.4,"version":2,"nic_baro":1,"nac_p":9,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":1170,"seen":0.0,"rssi":-21.1}, {"hex":"4ca27f","version":0,"sil_type":"unknown","mlat":[],"tisb":[],"messages":48,"seen":129.3,"rssi":-26.8}, {"hex":"4aca69","flight":"SAS51B ","alt_baro":35000,"alt_geom":36025,"gs":438.2,"ias":265,"tas":452,"mach":0.780,"track":40.7,"track_rate":0.03,"roll":-0.2,"mag_heading":46.1,"baro_rate":-64,"geom_rate":-64,"squawk":"5515","emergency":"none","category":"A3","nav_qnh":1013.6,"nav_altitude_mcp":35008,"nav_altitude_fms":35008,"nav_modes":["autopilot","vnav","tcas"],"lat":51.066036,"lon":6.481018,"nic":8,"rc":186,"seen_pos":2.2,"version":2,"nic_baro":1,"nac_p":10,"nac_v":2,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":3819,"seen":0.5,"rssi":-24.9}, {"hex":"89610a","category":"A5","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":382,"seen":49.8,"rssi":-26.6}, {"hex":"4cad39","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":705,"seen":111.8,"rssi":-27.0}, {"hex":"4d22e7","mlat":[],"tisb":[],"messages":28,"seen":212.1,"rssi":-28.3}, {"hex":"44034b","alt_baro":38025,"ias":247,"mach":0.780,"mag_heading":333.8,"baro_rate":128,"geom_rate":160,"version":0,"nac_p":8,"sil":2,"sil_type":"unknown","mlat":[],"tisb":[],"messages":82,"seen":0.1,"rssi":-26.8}, {"hex":"407cd4","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":631,"seen":193.6,"rssi":-26.6}, {"hex":"3c65d9","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":826,"seen":106.4,"rssi":-26.7}, {"hex":"4a0661","version":0,"sil_type":"unknown","mlat":[],"tisb":[],"messages":220,"seen":263.1,"rssi":-27.5}, {"hex":"4072ea","version":0,"sil_type":"unknown","mlat":[],"tisb":[],"messages":74,"seen":107.2,"rssi":-26.4}, {"hex":"4b1807","flight":"SWR70T ","alt_baro":35000,"alt_geom":36000,"gs":423.3,"ias":268,"tas":456,"mach":0.788,"track":149.3,"track_rate":0.00,"roll":-0.7,"mag_heading":143.1,"baro_rate":32,"geom_rate":-64,"squawk":"1000","category":"A3","nav_qnh":1012.8,"nav_altitude_mcp":35008,"nav_heading":143.4,"lat":50.553030,"lon":7.289800,"nic":8,"rc":186,"seen_pos":0.3,"version":2,"nic_baro":1,"nac_p":11,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":4456,"seen":0.0,"rssi":-23.0}, {"hex":"3964ec","flight":"TVF7449 ","alt_baro":38000,"alt_geom":38950,"gs":459.3,"ias":247,"tas":444,"mach":0.780,"track":218.2,"track_rate":0.00,"roll":-0.4,"mag_heading":211.3,"baro_rate":0,"geom_rate":0,"squawk":"3527","category":"A3","nav_qnh":1013.6,"nav_altitude_mcp":36992,"nav_altitude_fms":38000,"nav_heading":210.9,"lat":50.559586,"lon":6.376696,"nic":8,"rc":186,"seen_pos":12.8,"version":2,"nic_baro":1,"nac_p":9,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":6761,"seen":10.5,"rssi":-26.2}, {"hex":"471fa2","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":279,"seen":51.8,"rssi":-27.2}, {"hex":"471f6c","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":1540,"seen":201.5,"rssi":-26.6}, {"hex":"47c1f7","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":5932,"seen":83.6,"rssi":-25.8}, {"hex":"3c5ee1","alt_baro":14525,"alt_geom":15575,"gs":339.1,"track":150.1,"baro_rate":-960,"squawk":"3417","category":"A3","nav_qnh":1012.8,"nav_altitude_mcp":10016,"lat":50.638081,"lon":7.644332,"nic":8,"rc":186,"seen_pos":43.4,"version":2,"nic_baro":1,"nac_p":9,"nac_v":1,"sil":3,"sil_type":"perhour","mlat":[],"tisb":[],"messages":4361,"seen":10.3,"rssi":-26.9}, {"hex":"c027d1","flight":"ACA7211 ","alt_baro":30000,"alt_geom":30850,"gs":502.5,"ias":296,"tas":462,"mach":0.780,"track":292.0,"track_rate":0.00,"roll":-0.2,"mag_heading":290.7,"baro_rate":0,"geom_rate":0,"squawk":"2501","emergency":"none","category":"A5","nav_qnh":1013.6,"nav_altitude_mcp":30016,"nav_altitude_fms":30000,"nav_heading":291.1,"lat":51.033263,"lon":6.121445,"nic":8,"rc":186,"seen_pos":33.7,"version":2,"nic_baro":1,"nac_p":11,"nac_v":2,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":8930,"seen":0.9,"rssi":-26.5}, {"hex":"06a2e2","category":"A5","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":1410,"seen":237.1,"rssi":-25.1}, {"hex":"471f51","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":1032,"seen":287.4,"rssi":-22.6}, {"hex":"3c55c3","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":1134,"seen":276.4,"rssi":-26.6}, {"hex":"471f96","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":3065,"seen":295.1,"rssi":-26.2}, {"hex":"400942","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":1542,"seen":174.5,"rssi":-26.0}, {"hex":"4ca569","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":1605,"seen":126.2,"rssi":-26.5}, {"hex":"a826e9","category":"A5","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":3619,"seen":162.4,"rssi":-24.2} ] } 
                      

                      daraus extrahiere und berechne ich

                       },
                        {
                          "Kennung": "BPO140  ",
                          "Hoehe": 419,
                          "Bodenabstand": 4397,
                          "Entfernung": 4417,
                          "Position": "50.xyz44,7.abc498"
                        },
                      

                      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                      OliverIOO 1 Antwort Letzte Antwort
                      0
                      • CodierknechtC Codierknecht

                        @homoran
                        In anderen Sprachen würde ich dafür eine Collection nehmen.
                        Aber in JS stehe ich mindestens genau so auf dem Schlauch wie Du 😉

                        OliverIOO Offline
                        OliverIOO Offline
                        OliverIO
                        schrieb am zuletzt editiert von
                        #31

                        @codierknecht sagte in Dynamisch erstellte Variablen.:

                        In anderen Sprachen würde ich dafür eine Collection nehmen.

                        collection entspricht in js einem set
                        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set?retiredLocale=de

                        Meine Adapter und Widgets
                        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                        Links im Profil

                        1 Antwort Letzte Antwort
                        1
                        • HomoranH Homoran

                          @oliverio sagte in Dynamisch erstellte Variablen.:

                          und woher kommt die information wie die flugnummer genau lautet? d

                          die sendet mir der Flieger über Funk zu 🙂

                          { "now" : 1668369287.4, "messages" : 4842861, "aircraft" : [ {"hex":"406b0a","mlat":[],"tisb":[],"messages":9,"seen":13.0,"rssi":-26.7}, {"hex":"3c49ee","flight":"CFG069 ","alt_baro":9075,"alt_geom":9375,"gs":307.0,"ias":250,"tas":286,"mach":0.444,"track":259.7,"track_rate":0.00,"roll":0.7,"mag_heading":257.2,"baro_rate":-1568,"geom_rate":-1600,"squawk":"1000","nav_qnh":1013.3,"nav_altitude_mcp":7008,"lat":51.176225,"lon":7.089844,"nic":6,"rc":926,"seen_pos":2.2,"version":0,"nac_p":6,"nac_v":0,"sil":2,"sil_type":"unknown","mlat":[],"tisb":[],"messages":155,"seen":0.1,"rssi":-24.7}, {"hex":"44006c","flight":"AUA3SV ","alt_baro":31575,"alt_geom":32575,"gs":433.0,"ias":291,"tas":466,"mach":0.792,"track":124.9,"track_rate":0.00,"roll":0.0,"mag_heading":122.5,"baro_rate":1216,"geom_rate":1184,"squawk":"1000","category":"A3","nav_qnh":1012.8,"nav_altitude_mcp":35008,"lat":51.361771,"lon":7.286979,"nic":8,"rc":186,"seen_pos":16.6,"version":2,"nic_baro":1,"nac_p":9,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":1705,"seen":12.9,"rssi":-26.0}, {"hex":"3c4d68","flight":"DLH2MT ","alt_baro":34200,"alt_geom":35250,"gs":425.0,"ias":275,"tas":462,"mach":0.792,"track":135.7,"track_rate":0.00,"roll":0.2,"mag_heading":132.9,"baro_rate":736,"geom_rate":832,"squawk":"1000","category":"A3","nav_qnh":1012.8,"nav_altitude_mcp":36992,"nav_heading":132.2,"lat":51.045319,"lon":7.311773,"nic":8,"rc":186,"seen_pos":0.4,"version":2,"nic_baro":1,"nac_p":9,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":1170,"seen":0.0,"rssi":-21.1}, {"hex":"4ca27f","version":0,"sil_type":"unknown","mlat":[],"tisb":[],"messages":48,"seen":129.3,"rssi":-26.8}, {"hex":"4aca69","flight":"SAS51B ","alt_baro":35000,"alt_geom":36025,"gs":438.2,"ias":265,"tas":452,"mach":0.780,"track":40.7,"track_rate":0.03,"roll":-0.2,"mag_heading":46.1,"baro_rate":-64,"geom_rate":-64,"squawk":"5515","emergency":"none","category":"A3","nav_qnh":1013.6,"nav_altitude_mcp":35008,"nav_altitude_fms":35008,"nav_modes":["autopilot","vnav","tcas"],"lat":51.066036,"lon":6.481018,"nic":8,"rc":186,"seen_pos":2.2,"version":2,"nic_baro":1,"nac_p":10,"nac_v":2,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":3819,"seen":0.5,"rssi":-24.9}, {"hex":"89610a","category":"A5","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":382,"seen":49.8,"rssi":-26.6}, {"hex":"4cad39","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":705,"seen":111.8,"rssi":-27.0}, {"hex":"4d22e7","mlat":[],"tisb":[],"messages":28,"seen":212.1,"rssi":-28.3}, {"hex":"44034b","alt_baro":38025,"ias":247,"mach":0.780,"mag_heading":333.8,"baro_rate":128,"geom_rate":160,"version":0,"nac_p":8,"sil":2,"sil_type":"unknown","mlat":[],"tisb":[],"messages":82,"seen":0.1,"rssi":-26.8}, {"hex":"407cd4","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":631,"seen":193.6,"rssi":-26.6}, {"hex":"3c65d9","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":826,"seen":106.4,"rssi":-26.7}, {"hex":"4a0661","version":0,"sil_type":"unknown","mlat":[],"tisb":[],"messages":220,"seen":263.1,"rssi":-27.5}, {"hex":"4072ea","version":0,"sil_type":"unknown","mlat":[],"tisb":[],"messages":74,"seen":107.2,"rssi":-26.4}, {"hex":"4b1807","flight":"SWR70T ","alt_baro":35000,"alt_geom":36000,"gs":423.3,"ias":268,"tas":456,"mach":0.788,"track":149.3,"track_rate":0.00,"roll":-0.7,"mag_heading":143.1,"baro_rate":32,"geom_rate":-64,"squawk":"1000","category":"A3","nav_qnh":1012.8,"nav_altitude_mcp":35008,"nav_heading":143.4,"lat":50.553030,"lon":7.289800,"nic":8,"rc":186,"seen_pos":0.3,"version":2,"nic_baro":1,"nac_p":11,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":4456,"seen":0.0,"rssi":-23.0}, {"hex":"3964ec","flight":"TVF7449 ","alt_baro":38000,"alt_geom":38950,"gs":459.3,"ias":247,"tas":444,"mach":0.780,"track":218.2,"track_rate":0.00,"roll":-0.4,"mag_heading":211.3,"baro_rate":0,"geom_rate":0,"squawk":"3527","category":"A3","nav_qnh":1013.6,"nav_altitude_mcp":36992,"nav_altitude_fms":38000,"nav_heading":210.9,"lat":50.559586,"lon":6.376696,"nic":8,"rc":186,"seen_pos":12.8,"version":2,"nic_baro":1,"nac_p":9,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":6761,"seen":10.5,"rssi":-26.2}, {"hex":"471fa2","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":279,"seen":51.8,"rssi":-27.2}, {"hex":"471f6c","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":1540,"seen":201.5,"rssi":-26.6}, {"hex":"47c1f7","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":5932,"seen":83.6,"rssi":-25.8}, {"hex":"3c5ee1","alt_baro":14525,"alt_geom":15575,"gs":339.1,"track":150.1,"baro_rate":-960,"squawk":"3417","category":"A3","nav_qnh":1012.8,"nav_altitude_mcp":10016,"lat":50.638081,"lon":7.644332,"nic":8,"rc":186,"seen_pos":43.4,"version":2,"nic_baro":1,"nac_p":9,"nac_v":1,"sil":3,"sil_type":"perhour","mlat":[],"tisb":[],"messages":4361,"seen":10.3,"rssi":-26.9}, {"hex":"c027d1","flight":"ACA7211 ","alt_baro":30000,"alt_geom":30850,"gs":502.5,"ias":296,"tas":462,"mach":0.780,"track":292.0,"track_rate":0.00,"roll":-0.2,"mag_heading":290.7,"baro_rate":0,"geom_rate":0,"squawk":"2501","emergency":"none","category":"A5","nav_qnh":1013.6,"nav_altitude_mcp":30016,"nav_altitude_fms":30000,"nav_heading":291.1,"lat":51.033263,"lon":6.121445,"nic":8,"rc":186,"seen_pos":33.7,"version":2,"nic_baro":1,"nac_p":11,"nac_v":2,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":8930,"seen":0.9,"rssi":-26.5}, {"hex":"06a2e2","category":"A5","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":1410,"seen":237.1,"rssi":-25.1}, {"hex":"471f51","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":1032,"seen":287.4,"rssi":-22.6}, {"hex":"3c55c3","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":1134,"seen":276.4,"rssi":-26.6}, {"hex":"471f96","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":3065,"seen":295.1,"rssi":-26.2}, {"hex":"400942","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":1542,"seen":174.5,"rssi":-26.0}, {"hex":"4ca569","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":1605,"seen":126.2,"rssi":-26.5}, {"hex":"a826e9","category":"A5","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":3619,"seen":162.4,"rssi":-24.2} ] } 
                          

                          daraus extrahiere und berechne ich

                           },
                            {
                              "Kennung": "BPO140  ",
                              "Hoehe": 419,
                              "Bodenabstand": 4397,
                              "Entfernung": 4417,
                              "Position": "50.xyz44,7.abc498"
                            },
                          
                          OliverIOO Offline
                          OliverIOO Offline
                          OliverIO
                          schrieb am zuletzt editiert von
                          #32

                          @homoran sagte in Dynamisch erstellte Variablen.:

                          {                                                                                                                                                                                "Kennung": "BPO140  ",                                                                                                                                                                                "Hoehe": 419,                                                                                                                                                                                "Bodenabstand": 4397,                                                                                                                                                                                "Entfernung": 4417,                                                                                                                                                                                "Position": "50.xyz44,7.abc498"                                                                                                                                                                              },
                          

                          ja, da liest man dann die kennung aus für den schlüssel und speichert genau das abgebildete wie oben gezeigt dem flights zu.
                          dem ausschnitt nach sieht es so aus das es aus einem array of objects stammt.
                          willst du die dann der reihe nach abarbeiten?

                          Meine Adapter und Widgets
                          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                          Links im Profil

                          HomoranH 1 Antwort Letzte Antwort
                          0
                          • OliverIOO OliverIO

                            @homoran sagte in Dynamisch erstellte Variablen.:

                            {                                                                                                                                                                                "Kennung": "BPO140  ",                                                                                                                                                                                "Hoehe": 419,                                                                                                                                                                                "Bodenabstand": 4397,                                                                                                                                                                                "Entfernung": 4417,                                                                                                                                                                                "Position": "50.xyz44,7.abc498"                                                                                                                                                                              },
                            

                            ja, da liest man dann die kennung aus für den schlüssel und speichert genau das abgebildete wie oben gezeigt dem flights zu.
                            dem ausschnitt nach sieht es so aus das es aus einem array of objects stammt.
                            willst du die dann der reihe nach abarbeiten?

                            HomoranH Nicht stören
                            HomoranH Nicht stören
                            Homoran
                            Global Moderator Administrators
                            schrieb am zuletzt editiert von Homoran
                            #33

                            @oliverio im Moment bekomme ich alle 10 Sekunden einen Datensatz (ggf. zwei oder drei, wenn sich z.b. noch so ein Polizeihubschrauber im Auswahlbereich befindet).
                            diese logge und konseviere ich. Ist aber zu viel.
                            Screenshot_20221113-211711_Firefox.jpg
                            daher möchte ich nur den Datensatz (je Flug) in den DP schreiben, bei dem sich der Flieger am dichtesten bei mir befindet. um Flugnumner, Höhe und Timestamp zu dokumentieren.
                            dafür schreibe ich (wollte ich schreiben) diese Datensätze in ein Array je Flug.
                            Das kann dann nach der Auswertung verworfen werden.

                            so mein Plan.

                            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                            OliverIOO 1 Antwort Letzte Antwort
                            1
                            • HomoranH Homoran

                              @oliverio im Moment bekomme ich alle 10 Sekunden einen Datensatz (ggf. zwei oder drei, wenn sich z.b. noch so ein Polizeihubschrauber im Auswahlbereich befindet).
                              diese logge und konseviere ich. Ist aber zu viel.
                              Screenshot_20221113-211711_Firefox.jpg
                              daher möchte ich nur den Datensatz (je Flug) in den DP schreiben, bei dem sich der Flieger am dichtesten bei mir befindet. um Flugnumner, Höhe und Timestamp zu dokumentieren.
                              dafür schreibe ich (wollte ich schreiben) diese Datensätze in ein Array je Flug.
                              Das kann dann nach der Auswertung verworfen werden.

                              so mein Plan.

                              OliverIOO Offline
                              OliverIOO Offline
                              OliverIO
                              schrieb am zuletzt editiert von
                              #34

                              @homoran
                              kannst du auch machen.
                              der direktzugriff auf einen bestimmten datensatz
                              https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex

                              oder
                              das entfernen eines bestimmten datensatzes ist dann ein wenig aufwändiger
                              https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice?retiredLocale=de

                              Meine Adapter und Widgets
                              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                              Links im Profil

                              HomoranH 1 Antwort Letzte Antwort
                              1
                              • OliverIOO OliverIO

                                @homoran
                                kannst du auch machen.
                                der direktzugriff auf einen bestimmten datensatz
                                https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex

                                oder
                                das entfernen eines bestimmten datensatzes ist dann ein wenig aufwändiger
                                https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice?retiredLocale=de

                                HomoranH Nicht stören
                                HomoranH Nicht stören
                                Homoran
                                Global Moderator Administrators
                                schrieb am zuletzt editiert von
                                #35

                                @oliverio danke! das sehe ich mir morgen mal an

                                kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                1 Antwort Letzte Antwort
                                0
                                • OliverIOO OliverIO

                                  ok, er scheint das Interesse verloren zu haben.

                                  P Offline
                                  P Offline
                                  ptr
                                  schrieb am zuletzt editiert von
                                  #36

                                  @oliverio @Armilar
                                  so, habe das Problem jetzt nochmal als übersichtliches Skript zusammengestellt. Das Skript funktioniert, puh.
                                  Die Vielzahl der "var"s bitte ignorieren, werden aktuell noch nicht verwendet.

                                  Die Frage ist nun: Ich habe 4 Lautsprecher mit denen das gleiche passieren soll (nur mit anderen Timerwerten, Lautstärkewerten).
                                  So wie das Skript das jetzt transparent macht. Wie kann ich das elegant zusammenfassen? Der Zweck ist: jede case-Ausführung wird noch deutlich länger werden. Da wird der Code dann sehr unübersichtlich wenn ich immer alles bei jedem case hinschreiben muss - wenn es ja eh gleich ist.
                                  sobald ich alles aus den cases per function rausziehe, klappt es nichtmehr. Wenn das hilft, kann ich das natürlich auch nochmal schicken.
                                  So das mal der Zwischenstand.

                                  var trigger, elemente_von_trigger, trig_raum, trig_raum_timer1, raum_timer_definition, trig_lautsprecher_pfad, trig_lautsprecher_volume_aktueller_wert, timeout, timeout2, timeout3, timeout4, trig_lautsprecher_volume, volume_standard;
                                  
                                  
                                  on({id: [].concat(Array.prototype.slice.apply($("channel[state.id=alias.0.*.Lautsprecher1.state]"))), change: "ne", ack: true}, async function (obj) {
                                    var value = obj.state.val;
                                    var oldValue = obj.oldState.val;
                                    console.log(obj.id);
                                  
                                    switch (obj.id) {
                                    	case 'alias.0.OG.Yunes_Zimmer.Lautsprecher1.state':
                                      if ((obj.state ? obj.state.val : "") == 'play') {
                                        setStateDelayed('alias.0.OG.Yunes_Zimmer.Lautsprecher1.volume', 14, false, parseInt(((0) || "").toString(), 10), true);
                                        (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
                                        timeout = setTimeout(async function () {
                                          setStateDelayed(obj.id, 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                        }, 1800000);
                                      }
                                  
                                    		break;
                                    	case 'alias.0.OG.Minas_Zimmer.Lautsprecher1.state':
                                      if ((obj.state ? obj.state.val : "") == 'play') {
                                        setStateDelayed('alias.0.OG.Minas_Zimmer.Lautsprecher1.volume', 14, false, parseInt(((0) || "").toString(), 10), true);
                                        (function () {if (timeout2) {clearTimeout(timeout2); timeout2 = null;}})();
                                        timeout2 = setTimeout(async function () {
                                          setStateDelayed(obj.id, 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                        }, 1800000);
                                      }
                                  
                                    		break;
                                    	case 'alias.0.KG.Hobbyraum.Lautsprecher1.state':
                                      if ((obj.state ? obj.state.val : "") == 'play') {
                                        setStateDelayed('alias.0.KG.Hobbyraum.Lautsprecher1.volume', 14, false, parseInt(((0) || "").toString(), 10), true);
                                        (function () {if (timeout3) {clearTimeout(timeout3); timeout3 = null;}})();
                                        timeout3 = setTimeout(async function () {
                                          setStateDelayed(obj.id, 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                        }, 14400000);
                                      }
                                  
                                    		break;
                                    	case 'alias.0.EG.Wohnzimmer.Lautsprecher1.state':
                                      if ((obj.state ? obj.state.val : "") == 'play') {
                                        setStateDelayed('alias.0.EG.Wohnzimmer.Lautsprecher1.volume', 14, false, parseInt(((0) || "").toString(), 10), true);
                                        (function () {if (timeout4) {clearTimeout(timeout4); timeout4 = null;}})();
                                        timeout4 = setTimeout(async function () {
                                          setStateDelayed(obj.id, 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                        }, 14400000);
                                      }
                                  
                                    		break;
                                    }
                                  });
                                  
                                  CodierknechtC OliverIOO 2 Antworten Letzte Antwort
                                  0
                                  • P ptr

                                    @oliverio @Armilar
                                    so, habe das Problem jetzt nochmal als übersichtliches Skript zusammengestellt. Das Skript funktioniert, puh.
                                    Die Vielzahl der "var"s bitte ignorieren, werden aktuell noch nicht verwendet.

                                    Die Frage ist nun: Ich habe 4 Lautsprecher mit denen das gleiche passieren soll (nur mit anderen Timerwerten, Lautstärkewerten).
                                    So wie das Skript das jetzt transparent macht. Wie kann ich das elegant zusammenfassen? Der Zweck ist: jede case-Ausführung wird noch deutlich länger werden. Da wird der Code dann sehr unübersichtlich wenn ich immer alles bei jedem case hinschreiben muss - wenn es ja eh gleich ist.
                                    sobald ich alles aus den cases per function rausziehe, klappt es nichtmehr. Wenn das hilft, kann ich das natürlich auch nochmal schicken.
                                    So das mal der Zwischenstand.

                                    var trigger, elemente_von_trigger, trig_raum, trig_raum_timer1, raum_timer_definition, trig_lautsprecher_pfad, trig_lautsprecher_volume_aktueller_wert, timeout, timeout2, timeout3, timeout4, trig_lautsprecher_volume, volume_standard;
                                    
                                    
                                    on({id: [].concat(Array.prototype.slice.apply($("channel[state.id=alias.0.*.Lautsprecher1.state]"))), change: "ne", ack: true}, async function (obj) {
                                      var value = obj.state.val;
                                      var oldValue = obj.oldState.val;
                                      console.log(obj.id);
                                    
                                      switch (obj.id) {
                                      	case 'alias.0.OG.Yunes_Zimmer.Lautsprecher1.state':
                                        if ((obj.state ? obj.state.val : "") == 'play') {
                                          setStateDelayed('alias.0.OG.Yunes_Zimmer.Lautsprecher1.volume', 14, false, parseInt(((0) || "").toString(), 10), true);
                                          (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
                                          timeout = setTimeout(async function () {
                                            setStateDelayed(obj.id, 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                          }, 1800000);
                                        }
                                    
                                      		break;
                                      	case 'alias.0.OG.Minas_Zimmer.Lautsprecher1.state':
                                        if ((obj.state ? obj.state.val : "") == 'play') {
                                          setStateDelayed('alias.0.OG.Minas_Zimmer.Lautsprecher1.volume', 14, false, parseInt(((0) || "").toString(), 10), true);
                                          (function () {if (timeout2) {clearTimeout(timeout2); timeout2 = null;}})();
                                          timeout2 = setTimeout(async function () {
                                            setStateDelayed(obj.id, 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                          }, 1800000);
                                        }
                                    
                                      		break;
                                      	case 'alias.0.KG.Hobbyraum.Lautsprecher1.state':
                                        if ((obj.state ? obj.state.val : "") == 'play') {
                                          setStateDelayed('alias.0.KG.Hobbyraum.Lautsprecher1.volume', 14, false, parseInt(((0) || "").toString(), 10), true);
                                          (function () {if (timeout3) {clearTimeout(timeout3); timeout3 = null;}})();
                                          timeout3 = setTimeout(async function () {
                                            setStateDelayed(obj.id, 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                          }, 14400000);
                                        }
                                    
                                      		break;
                                      	case 'alias.0.EG.Wohnzimmer.Lautsprecher1.state':
                                        if ((obj.state ? obj.state.val : "") == 'play') {
                                          setStateDelayed('alias.0.EG.Wohnzimmer.Lautsprecher1.volume', 14, false, parseInt(((0) || "").toString(), 10), true);
                                          (function () {if (timeout4) {clearTimeout(timeout4); timeout4 = null;}})();
                                          timeout4 = setTimeout(async function () {
                                            setStateDelayed(obj.id, 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                          }, 14400000);
                                        }
                                    
                                      		break;
                                      }
                                    });
                                    
                                    CodierknechtC Online
                                    CodierknechtC Online
                                    Codierknecht
                                    Developer Most Active
                                    schrieb am zuletzt editiert von Codierknecht
                                    #37

                                    @ptr
                                    Grundregel: Don't repeat yourself!
                                    Alles was sich immer wieder wiederholt (copy & paste) ist ein Kandidat für das Auslagern in eine Funktion.

                                    Hab' gerade gesehen, dass Du da mit verschiedenen Timern arbeitest.
                                    Muss ich mir mal genauer anschauen ...

                                    P.S.: Ich will ja nicht meckern, aber bei der Einrückung kann man den Code fast nicht lesen 😉

                                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                                    Proxmox 9.0.17 LXC|8 GB|Core i7-6700
                                    HmIP|ZigBee|Tasmota|Unifi
                                    Zabbix Cerrtified Specialist
                                    Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                                    1 Antwort Letzte Antwort
                                    0
                                    • P ptr

                                      @oliverio @Armilar
                                      so, habe das Problem jetzt nochmal als übersichtliches Skript zusammengestellt. Das Skript funktioniert, puh.
                                      Die Vielzahl der "var"s bitte ignorieren, werden aktuell noch nicht verwendet.

                                      Die Frage ist nun: Ich habe 4 Lautsprecher mit denen das gleiche passieren soll (nur mit anderen Timerwerten, Lautstärkewerten).
                                      So wie das Skript das jetzt transparent macht. Wie kann ich das elegant zusammenfassen? Der Zweck ist: jede case-Ausführung wird noch deutlich länger werden. Da wird der Code dann sehr unübersichtlich wenn ich immer alles bei jedem case hinschreiben muss - wenn es ja eh gleich ist.
                                      sobald ich alles aus den cases per function rausziehe, klappt es nichtmehr. Wenn das hilft, kann ich das natürlich auch nochmal schicken.
                                      So das mal der Zwischenstand.

                                      var trigger, elemente_von_trigger, trig_raum, trig_raum_timer1, raum_timer_definition, trig_lautsprecher_pfad, trig_lautsprecher_volume_aktueller_wert, timeout, timeout2, timeout3, timeout4, trig_lautsprecher_volume, volume_standard;
                                      
                                      
                                      on({id: [].concat(Array.prototype.slice.apply($("channel[state.id=alias.0.*.Lautsprecher1.state]"))), change: "ne", ack: true}, async function (obj) {
                                        var value = obj.state.val;
                                        var oldValue = obj.oldState.val;
                                        console.log(obj.id);
                                      
                                        switch (obj.id) {
                                        	case 'alias.0.OG.Yunes_Zimmer.Lautsprecher1.state':
                                          if ((obj.state ? obj.state.val : "") == 'play') {
                                            setStateDelayed('alias.0.OG.Yunes_Zimmer.Lautsprecher1.volume', 14, false, parseInt(((0) || "").toString(), 10), true);
                                            (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
                                            timeout = setTimeout(async function () {
                                              setStateDelayed(obj.id, 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                            }, 1800000);
                                          }
                                      
                                        		break;
                                        	case 'alias.0.OG.Minas_Zimmer.Lautsprecher1.state':
                                          if ((obj.state ? obj.state.val : "") == 'play') {
                                            setStateDelayed('alias.0.OG.Minas_Zimmer.Lautsprecher1.volume', 14, false, parseInt(((0) || "").toString(), 10), true);
                                            (function () {if (timeout2) {clearTimeout(timeout2); timeout2 = null;}})();
                                            timeout2 = setTimeout(async function () {
                                              setStateDelayed(obj.id, 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                            }, 1800000);
                                          }
                                      
                                        		break;
                                        	case 'alias.0.KG.Hobbyraum.Lautsprecher1.state':
                                          if ((obj.state ? obj.state.val : "") == 'play') {
                                            setStateDelayed('alias.0.KG.Hobbyraum.Lautsprecher1.volume', 14, false, parseInt(((0) || "").toString(), 10), true);
                                            (function () {if (timeout3) {clearTimeout(timeout3); timeout3 = null;}})();
                                            timeout3 = setTimeout(async function () {
                                              setStateDelayed(obj.id, 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                            }, 14400000);
                                          }
                                      
                                        		break;
                                        	case 'alias.0.EG.Wohnzimmer.Lautsprecher1.state':
                                          if ((obj.state ? obj.state.val : "") == 'play') {
                                            setStateDelayed('alias.0.EG.Wohnzimmer.Lautsprecher1.volume', 14, false, parseInt(((0) || "").toString(), 10), true);
                                            (function () {if (timeout4) {clearTimeout(timeout4); timeout4 = null;}})();
                                            timeout4 = setTimeout(async function () {
                                              setStateDelayed(obj.id, 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                            }, 14400000);
                                          }
                                      
                                        		break;
                                        }
                                      });
                                      
                                      OliverIOO Offline
                                      OliverIOO Offline
                                      OliverIO
                                      schrieb am zuletzt editiert von OliverIO
                                      #38

                                      @ptr

                                      so mal ein schnellschuss ohne es selbst geprüft zu haben
                                      da können noch fehler drin sein, aber das grundprinzip müsste klar werden.
                                      das was @Codierknecht sagte ist korrekt.
                                      jede wiederholung birgt gefahren neuer fehler. wahrscheinlich hast du dich selbst mit dem code schon schwer getan dich zurecht zu finden.
                                      auch hier könnte man noch weiter optimieren (die timerbehandlung gefällt mir da noch nicht. sieht aus wie ein codeschnipsel den du irgendwo gefunden und da reinkopiert hast. dürfte aber schon funktionieren.

                                      var rooms = {
                                          "Yunes_Zimmer": {
                                              "volume": 14,
                                              "volume_dp":"alias.0.OG.Yunes_Zimmer.Lautsprecher1.volume",
                                              "state_dp": "alias.0.OG.Yunes_Zimmer.Lautsprecher1.state",
                                              "timer": null
                                          },
                                          "Minas_Zimmer": {
                                              "volume": 14,
                                              "volume_dp":"alias.0.OG.Minas_Zimmer.Lautsprecher1.volume",
                                              "state_dp": "alias.0.OG.Minas_Zimmer.Lautsprecher1.state",
                                              "timer": null
                                          },
                                          "Hobbyraum": {
                                              "volume": 14,
                                              "volume_dp":"alias.0.KG.Hobbyraum.Lautsprecher1.volume",
                                              "state_dp": "alias.0.KG.Hobbyraum.Lautsprecher1.state",
                                              "timer": null
                                          },
                                          "Wohnzimmer": {
                                              "volume": 14,
                                              "volume_dp":"alias.0.EG.Wohnzimmer.Lautsprecher1.volume",
                                              "state_dp": "alias.0.EG.Wohnzimmer.Lautsprecher1.state",
                                              "timer": null
                                          }
                                      }
                                      function doSleep(room) {
                                          var room_config = rooms[room];
                                          setStateDelayed(room_config['volume_dp'], room_config['volume'], false, parseInt(((0) || "").toString(), 10), true);
                                          (function () { if (room_config['timer']) { clearTimeout(room_config['timer']); room_config['timer'] = null; } })();
                                          room_config['timer'] = setTimeout(async function () {
                                              setStateDelayed(room_config['state_dp'], 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                          }, 1800000);
                                      }
                                      
                                      on({ id: [].concat(Array.prototype.slice.apply($("channel[state.id=alias.0.*.Lautsprecher1.state]"))), change: "ne", ack: true }, async function (obj) {
                                          var value = obj.state.val;
                                          var oldValue = obj.oldState.val;
                                          console.log(obj.id);
                                          var room = obj.id.split(".")[3];
                                          if ((obj.state ? obj.state.val : "") == 'play') {
                                              doSleep(room);
                                          }
                                      }
                                      
                                      

                                      die entwicklungsumgebung zu javascript im javascript adapter ist nicht ideal. erst recht nicht für anfänger.
                                      evtl. liest du dir mal das durch und wechselst zu vs code
                                      https://forum.iobroker.net/topic/40633/tester-gesucht-visual-studio-code-extension-für-iobroker

                                      in vs code kann man viel besser debuggen und entwickeln.
                                      ich selbst hab die extension noch nicht getestet. aber es gibt welche die das gut finden

                                      Meine Adapter und Widgets
                                      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                                      Links im Profil

                                      CodierknechtC 1 Antwort Letzte Antwort
                                      0
                                      • OliverIOO OliverIO

                                        @ptr

                                        so mal ein schnellschuss ohne es selbst geprüft zu haben
                                        da können noch fehler drin sein, aber das grundprinzip müsste klar werden.
                                        das was @Codierknecht sagte ist korrekt.
                                        jede wiederholung birgt gefahren neuer fehler. wahrscheinlich hast du dich selbst mit dem code schon schwer getan dich zurecht zu finden.
                                        auch hier könnte man noch weiter optimieren (die timerbehandlung gefällt mir da noch nicht. sieht aus wie ein codeschnipsel den du irgendwo gefunden und da reinkopiert hast. dürfte aber schon funktionieren.

                                        var rooms = {
                                            "Yunes_Zimmer": {
                                                "volume": 14,
                                                "volume_dp":"alias.0.OG.Yunes_Zimmer.Lautsprecher1.volume",
                                                "state_dp": "alias.0.OG.Yunes_Zimmer.Lautsprecher1.state",
                                                "timer": null
                                            },
                                            "Minas_Zimmer": {
                                                "volume": 14,
                                                "volume_dp":"alias.0.OG.Minas_Zimmer.Lautsprecher1.volume",
                                                "state_dp": "alias.0.OG.Minas_Zimmer.Lautsprecher1.state",
                                                "timer": null
                                            },
                                            "Hobbyraum": {
                                                "volume": 14,
                                                "volume_dp":"alias.0.KG.Hobbyraum.Lautsprecher1.volume",
                                                "state_dp": "alias.0.KG.Hobbyraum.Lautsprecher1.state",
                                                "timer": null
                                            },
                                            "Wohnzimmer": {
                                                "volume": 14,
                                                "volume_dp":"alias.0.EG.Wohnzimmer.Lautsprecher1.volume",
                                                "state_dp": "alias.0.EG.Wohnzimmer.Lautsprecher1.state",
                                                "timer": null
                                            }
                                        }
                                        function doSleep(room) {
                                            var room_config = rooms[room];
                                            setStateDelayed(room_config['volume_dp'], room_config['volume'], false, parseInt(((0) || "").toString(), 10), true);
                                            (function () { if (room_config['timer']) { clearTimeout(room_config['timer']); room_config['timer'] = null; } })();
                                            room_config['timer'] = setTimeout(async function () {
                                                setStateDelayed(room_config['state_dp'], 'stop', false, parseInt(((0) || "").toString(), 10), true);
                                            }, 1800000);
                                        }
                                        
                                        on({ id: [].concat(Array.prototype.slice.apply($("channel[state.id=alias.0.*.Lautsprecher1.state]"))), change: "ne", ack: true }, async function (obj) {
                                            var value = obj.state.val;
                                            var oldValue = obj.oldState.val;
                                            console.log(obj.id);
                                            var room = obj.id.split(".")[3];
                                            if ((obj.state ? obj.state.val : "") == 'play') {
                                                doSleep(room);
                                            }
                                        }
                                        
                                        

                                        die entwicklungsumgebung zu javascript im javascript adapter ist nicht ideal. erst recht nicht für anfänger.
                                        evtl. liest du dir mal das durch und wechselst zu vs code
                                        https://forum.iobroker.net/topic/40633/tester-gesucht-visual-studio-code-extension-für-iobroker

                                        in vs code kann man viel besser debuggen und entwickeln.
                                        ich selbst hab die extension noch nicht getestet. aber es gibt welche die das gut finden

                                        CodierknechtC Online
                                        CodierknechtC Online
                                        Codierknecht
                                        Developer Most Active
                                        schrieb am zuletzt editiert von
                                        #39

                                        @oliverio
                                        Ah, Du verwaltest die Timer mit im jeweiligen Raum 👍

                                        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                                        Proxmox 9.0.17 LXC|8 GB|Core i7-6700
                                        HmIP|ZigBee|Tasmota|Unifi
                                        Zabbix Cerrtified Specialist
                                        Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                                        OliverIOO 1 Antwort Letzte Antwort
                                        0
                                        • CodierknechtC Codierknecht

                                          @oliverio
                                          Ah, Du verwaltest die Timer mit im jeweiligen Raum 👍

                                          OliverIOO Offline
                                          OliverIOO Offline
                                          OliverIO
                                          schrieb am zuletzt editiert von
                                          #40

                                          @codierknecht
                                          ja dann ist alles beieinander und im debuggingfall lässt sich das leicht ausgeben

                                          Meine Adapter und Widgets
                                          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                                          Links im Profil

                                          P 1 Antwort Letzte Antwort
                                          1
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          725

                                          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
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe