Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Dynamisch erstellte Variablen.

NEWS

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

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

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

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.
  • 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.1.1 LXC|8 GB|Core i7-6700
                  HmIP|ZigBee|Tasmota|Unifi
                  Zabbix Certified 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 :+1:

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

                      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                      HmIP|ZigBee|Tasmota|Unifi
                      Zabbix Certified 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 :+1:

                        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
                        • OliverIOO OliverIO

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

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

                          @oliverio danke. ich schaue es mir an!

                          P 1 Antwort Letzte Antwort
                          0
                          • P ptr

                            @oliverio danke. ich schaue es mir an!

                            P Offline
                            P Offline
                            ptr
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            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
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              370

                              Online

                              32.5k

                              Benutzer

                              81.6k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Anmelden

                              • Du hast noch kein Konto? Registrieren

                              • Anmelden oder registrieren, um zu suchen
                              • Erster Beitrag
                                Letzter Beitrag
                              0
                              • Home
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe