Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Dynamisch erstellte Variablen.

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    209

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

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

Dynamisch erstellte Variablen.

Dynamisch erstellte Variablen.

Scheduled Pinned Locked Moved JavaScript
43 Posts 7 Posters 2.8k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • 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 Do not disturb
    HomoranH Do not disturb
    Homoran
    Global Moderator Administrators
    wrote on last edited by 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 Replies Last reply
    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 Offline
      CodierknechtC Offline
      Codierknecht
      Developer Most Active
      wrote on last edited by
      #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 8.2.4 LXC|8 GB|Core i7-6700
      HmIP|ZigBee|Tasmota|Unifi + dies & das
      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

      OliverIOO 1 Reply Last reply
      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
        wrote on last edited by
        #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 Reply Last reply
        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
          wrote on last edited by
          #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 Reply Last reply
          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
            wrote on last edited by
            #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 Reply Last reply
            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 Do not disturb
              HomoranH Do not disturb
              Homoran
              Global Moderator Administrators
              wrote on last edited by 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 Reply Last reply
              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
                wrote on last edited by
                #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 Reply Last reply
                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
                  wrote on last edited by
                  #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 Reply Last reply
                  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 Do not disturb
                    HomoranH Do not disturb
                    Homoran
                    Global Moderator Administrators
                    wrote on last edited by 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 Reply Last reply
                    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
                      wrote on last edited by
                      #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 Reply Last reply
                      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 Do not disturb
                        HomoranH Do not disturb
                        Homoran
                        Global Moderator Administrators
                        wrote on last edited by
                        #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 Reply Last reply
                        0
                        • OliverIOO OliverIO

                          ok, er scheint das Interesse verloren zu haben.

                          P Offline
                          P Offline
                          ptr
                          wrote on last edited by
                          #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 Replies Last reply
                          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 Offline
                            CodierknechtC Offline
                            Codierknecht
                            Developer Most Active
                            wrote on last edited by 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 8.2.4 LXC|8 GB|Core i7-6700
                            HmIP|ZigBee|Tasmota|Unifi + dies & das
                            Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                            1 Reply Last reply
                            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
                              wrote on last edited by 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 Reply Last reply
                              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 Offline
                                CodierknechtC Offline
                                Codierknecht
                                Developer Most Active
                                wrote on last edited by
                                #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 8.2.4 LXC|8 GB|Core i7-6700
                                HmIP|ZigBee|Tasmota|Unifi + dies & das
                                Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                                OliverIOO 1 Reply Last reply
                                0
                                • CodierknechtC Codierknecht

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

                                  OliverIOO Offline
                                  OliverIOO Offline
                                  OliverIO
                                  wrote on last edited by
                                  #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 Reply Last reply
                                  1
                                  • OliverIOO OliverIO

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

                                    P Offline
                                    P Offline
                                    ptr
                                    wrote on last edited by
                                    #41

                                    @oliverio danke. ich schaue es mir an!

                                    P 1 Reply Last reply
                                    0
                                    • P ptr

                                      @oliverio danke. ich schaue es mir an!

                                      P Offline
                                      P Offline
                                      ptr
                                      wrote on last edited by
                                      #42

                                      @OliverIO: Warum wird die function ausfuehren_nach-timeout nie ausgeführt? wo liegt der Haken?
                                      & vielen Dank für das (eigentlich) gemachte Bettchen, dass ich als Vorlage verwendet habe.

                                      Es ist noch zuviel drin. timer_dp hat z.B. noch keinen Zweck.

                                      var timer_dauer_in_sek, timer_name, timer_dauer_in_millisek, timer_minuten, timer_sekunden, timer_trigger_array, timer1_name;
                                      
                                      async function multitimer_function(timer_name, timer_dauer_in_millisek) {
                                          console.log('...js-start');
                                      
                                          var multitimer = {
                                              "hobbyraum_timer": {
                                                  "timer_dp":"0_userdata.0.KG.Hobbyraum.Timer1",
                                                  "timer": null
                                              },
                                              "abstellraum_timer": {
                                                  "timer_dp":"0_userdata.0.KG.Abstellraum.Timer1",
                                                  "timer": null
                                              },
                                              "hauswirtschaftsraum_timer": {
                                                  "timer_dp":"0_userdata.0.KG.Hauswirtschaftsraum.Timer1",
                                                  "timer": null
                                              },
                                              "technikraum_timer": {
                                                  "timer_dp":"0_userdata.0.KG.Technikraum.Timer1",
                                                  "timer": null
                                              },
                                              "kg-flur_timer": {
                                                  "timer_dp":"0_userdata.0.KG.KG-Flur.Timer1",
                                                  "timer": null
                                              },
                                              "kg-treppe_timer": {
                                                  "timer_dp":"0_userdata.0.TR.KG-Treppe.Timer1",
                                                  "timer": null
                                              },
                                          }
                                          function tueroeffnung_ohne_bewegung(timer_name) {
                                              var timer_parameters = multitimer['hobbyraum_timer'];
                                              // stoppt den "timer":
                                              (function () { if (timer_parameters['timer']) { clearTimeout(timer_parameters['timer']); timer_parameters['timer'] = null; } })();
                                              // "timer" wird gesetzt:
                                              timer_parameters['timer'] = setTimeout(async function () {
                                                  await ausfuehren_nach_timeout(timer_name);
                                                  console.log('.........................');
                                              }, parseInt(timer_dauer_in_millisek));
                                          }
                                      
                                          console.log('...js-ende');
                                      }
                                      
                                      async function ausfuehren_nach_timeout(timer_name) {
                                        console.log((String(timer_name) + ' ist abgelaufen'));
                                      }
                                      
                                      
                                      timer_dauer_in_sek = 0.3;
                                      timer_dauer_in_millisek = parseFloat(timer_dauer_in_sek) * 1000;
                                      timer_trigger_array = ['hobbyraum_timer', 'abstellraum_timer', 'hauswirtschaftsraum_timer', 'technikraum_timer', 'kg-flur_timer', 'kg-treppe_timer'];
                                      for (var timer_name_index in timer_trigger_array) {
                                        timer_name = timer_trigger_array[timer_name_index];
                                        console.log(timer_name);
                                        timer_name = timer_name;
                                        await multitimer_function(timer_name, timer_dauer_in_sek);
                                        await wait(1000);
                                      }
                                      
                                      OliverIOO 1 Reply Last reply
                                      0
                                      • P ptr

                                        @OliverIO: Warum wird die function ausfuehren_nach-timeout nie ausgeführt? wo liegt der Haken?
                                        & vielen Dank für das (eigentlich) gemachte Bettchen, dass ich als Vorlage verwendet habe.

                                        Es ist noch zuviel drin. timer_dp hat z.B. noch keinen Zweck.

                                        var timer_dauer_in_sek, timer_name, timer_dauer_in_millisek, timer_minuten, timer_sekunden, timer_trigger_array, timer1_name;
                                        
                                        async function multitimer_function(timer_name, timer_dauer_in_millisek) {
                                            console.log('...js-start');
                                        
                                            var multitimer = {
                                                "hobbyraum_timer": {
                                                    "timer_dp":"0_userdata.0.KG.Hobbyraum.Timer1",
                                                    "timer": null
                                                },
                                                "abstellraum_timer": {
                                                    "timer_dp":"0_userdata.0.KG.Abstellraum.Timer1",
                                                    "timer": null
                                                },
                                                "hauswirtschaftsraum_timer": {
                                                    "timer_dp":"0_userdata.0.KG.Hauswirtschaftsraum.Timer1",
                                                    "timer": null
                                                },
                                                "technikraum_timer": {
                                                    "timer_dp":"0_userdata.0.KG.Technikraum.Timer1",
                                                    "timer": null
                                                },
                                                "kg-flur_timer": {
                                                    "timer_dp":"0_userdata.0.KG.KG-Flur.Timer1",
                                                    "timer": null
                                                },
                                                "kg-treppe_timer": {
                                                    "timer_dp":"0_userdata.0.TR.KG-Treppe.Timer1",
                                                    "timer": null
                                                },
                                            }
                                            function tueroeffnung_ohne_bewegung(timer_name) {
                                                var timer_parameters = multitimer['hobbyraum_timer'];
                                                // stoppt den "timer":
                                                (function () { if (timer_parameters['timer']) { clearTimeout(timer_parameters['timer']); timer_parameters['timer'] = null; } })();
                                                // "timer" wird gesetzt:
                                                timer_parameters['timer'] = setTimeout(async function () {
                                                    await ausfuehren_nach_timeout(timer_name);
                                                    console.log('.........................');
                                                }, parseInt(timer_dauer_in_millisek));
                                            }
                                        
                                            console.log('...js-ende');
                                        }
                                        
                                        async function ausfuehren_nach_timeout(timer_name) {
                                          console.log((String(timer_name) + ' ist abgelaufen'));
                                        }
                                        
                                        
                                        timer_dauer_in_sek = 0.3;
                                        timer_dauer_in_millisek = parseFloat(timer_dauer_in_sek) * 1000;
                                        timer_trigger_array = ['hobbyraum_timer', 'abstellraum_timer', 'hauswirtschaftsraum_timer', 'technikraum_timer', 'kg-flur_timer', 'kg-treppe_timer'];
                                        for (var timer_name_index in timer_trigger_array) {
                                          timer_name = timer_trigger_array[timer_name_index];
                                          console.log(timer_name);
                                          timer_name = timer_name;
                                          await multitimer_function(timer_name, timer_dauer_in_sek);
                                          await wait(1000);
                                        }
                                        
                                        OliverIOO Offline
                                        OliverIOO Offline
                                        OliverIO
                                        wrote on last edited by
                                        #43

                                        @ptr
                                        Im Detail muss ich das morgen mal ausprobieren.
                                        Generell sehe ich in deinem Code aber 2 Problembereiche zu dem du dir die Konzepte mal nochmal durchlesen solltest

                                        1. scope
                                          https://developer.mozilla.org/en-US/docs/Glossary/Scope?retiredLocale=de
                                          Du definierst manche variablen innerhalb von Funktionen (bspw multitimer) obwohl ich den Eindruck habe das sie außerhalb einer Funktion definiert werden sollte.
                                          Im verlinkten Artikel liest du, das variablen immer nur sichtbar innerhalb eines scopes sind und von außerhalb nicht adressierst ist.
                                          Dann gibt es noch den asynchronen Funktionsausfall, der ebenfalls eine andere Art von scope erzeugt, wie man eigentlich so erwartet.
                                          Wird ein scope verlassen, bspw weil die Funktion abgearbeitet ist, dann wird der scope zerstört und die Daten sind verloren. Beim erneuten Aufruf der Funktion wird ein neuer scope erzeugt. Die früheren darin verfügbaren Daten sind weg.

                                        Auch deine mehrfach ineinander verschachtelten Funktionen sind schon möglich. Als Anfänger würde ich das aber nicht machen, da sonst der Überblick über die scopes schwierig ist und uU den Kopf zur Explosion bringt.
                                        Mit einem guten debugger sieht man das (bspw vs Code). Aber die scriptoberfläche von Iobroker ist da nicht sought geeignet.

                                        1. Verwendung von promises, await und async
                                          https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise?retiredLocale=de
                                          https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
                                          https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

                                        Await kann nur bei Funktionen verwendet werden, die auch ein promise zurückgeben. Settimeout gibt aber nur das Timer Handle zurück. Daher funktioniert await da nicht.

                                        Wenn du eine strikte Reihenfolge bestimmter Schritte als Ergebnis von asynchroner Abarbeitung einhalten willst musst du dich erst recht noch mehr mit promises beschäftigen, da das der Mechanismus der Wahl dafür ist.

                                        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 Reply Last reply
                                        0
                                        Reply
                                        • Reply as topic
                                        Log in to reply
                                        • Oldest to Newest
                                        • Newest to Oldest
                                        • Most Votes


                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        99

                                        Online

                                        32.4k

                                        Users

                                        81.3k

                                        Topics

                                        1.3m

                                        Posts
                                        Community
                                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                        ioBroker Community 2014-2025
                                        logo
                                        • Login

                                        • Don't have an account? Register

                                        • Login or register to search.
                                        • First post
                                          Last post
                                        0
                                        • Recent
                                        • Tags
                                        • Unread 0
                                        • Categories
                                        • Unreplied
                                        • Popular
                                        • GitHub
                                        • Docu
                                        • Hilfe