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. Asynchrone Funktionen innerhalb eine Subscribtion aufrufen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    944

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Asynchrone Funktionen innerhalb eine Subscribtion aufrufen

Geplant Angeheftet Gesperrt Verschoben JavaScript
22 Beiträge 2 Kommentatoren 661 Aufrufe 1 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.
  • Ben1983B Ben1983

    @ticaki Also bei mir kommt da nur der log:

    Start
    Ende
    

    raus. den result logt er gar nicht.
    Als wäre er nicht da.

    T Nicht stören
    T Nicht stören
    ticaki
    schrieb am zuletzt editiert von ticaki
    #7

    @ben1983

    Hast du meinen Code genommen und diesen ausprobiert oder ist das mit deinem Code gewesen?

    10:17:59.554	info	javascript.0 (9472) Start javascript script.js.Test.Skript_122
    10:17:59.557	info	javascript.0 (9472) script.js.Test.Skript_122: Start
    10:17:59.557	info	javascript.0 (9472) script.js.Test.Skript_122: registered 0 subscriptions, 0 schedules, 1 message, 0 logs and 0 file subscriptions
    10:17:59.561	info	javascript.0 (9472) script.js.Test.Skript_122: Fri Nov 10 2023 10:15:10 GMT+0100 (Mitteleuropäische Normalzeit)
    10:17:59.562	info	javascript.0 (9472) script.js.Test.Skript_122: true
    10:17:59.562	info	javascript.0 (9472) script.js.Test.Skript_122: Ende
    

    EDIT: Ich vermute da das Problem eher in dem

    $(`state(${enumtypeFunctions}=${enumBewegungsmelder})(${enumtypeRooms}=${enumTreppenhaus})$`).on
    

    EDIT2: wofür ist das $ am Ende - kenne ich so nicht.

    $('state(functions=sensor)(functions=window)')
    

    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

    Spenden

    Ben1983B 1 Antwort Letzte Antwort
    0
    • T ticaki

      @ben1983

      Hast du meinen Code genommen und diesen ausprobiert oder ist das mit deinem Code gewesen?

      10:17:59.554	info	javascript.0 (9472) Start javascript script.js.Test.Skript_122
      10:17:59.557	info	javascript.0 (9472) script.js.Test.Skript_122: Start
      10:17:59.557	info	javascript.0 (9472) script.js.Test.Skript_122: registered 0 subscriptions, 0 schedules, 1 message, 0 logs and 0 file subscriptions
      10:17:59.561	info	javascript.0 (9472) script.js.Test.Skript_122: Fri Nov 10 2023 10:15:10 GMT+0100 (Mitteleuropäische Normalzeit)
      10:17:59.562	info	javascript.0 (9472) script.js.Test.Skript_122: true
      10:17:59.562	info	javascript.0 (9472) script.js.Test.Skript_122: Ende
      

      EDIT: Ich vermute da das Problem eher in dem

      $(`state(${enumtypeFunctions}=${enumBewegungsmelder})(${enumtypeRooms}=${enumTreppenhaus})$`).on
      

      EDIT2: wofür ist das $ am Ende - kenne ich so nicht.

      $('state(functions=sensor)(functions=window)')
      
      Ben1983B Offline
      Ben1983B Offline
      Ben1983
      schrieb am zuletzt editiert von Ben1983
      #8

      @ticaki ALso ich denke es liegt irgendwie hier:

      const automatikfreigabe = {
          beleuchtung: {
              aktiv: getState(idAutomatikfreigabeBeleuchtungAktiv).val,
              bypass: getState(idAutomatikfreigabeBeleuchtungBypass).val,
              zustand: getState(idAutomatikfreigabeBeleuchtungZustand).val,
              kinderSindDa : getState(idAutomatikfreigabeBeleuchtungKidnerSindDa).val,
              zeitAbendsWennKinderDa: getState(idAutomatikfreigabeBeleuchtungZeitAbendsWennKinderDaSind).val,
              checkRelease: async function(kinderSindDa){
                  // Es muss die Automatikfreigabe aktiv sein
                  return this.aktiv &&
                  // Entweder der Bypass ist gesetzt
                          (this.bypass ||
                  // Oder der Zustand wurde schon gesetzt
                          (this.zustand &&
                          (!kinderSindDa || (await messageToAsync("TimeAfterOrEqualNow",{time:"21:30"},{timeout:5000})).result)));           
              },
              functionstest: async function(){
                  return (await messageToAsync("TimeAfterOrEqualNow",{time:"21:30"},{timeout:5000})).result;
              }
      

      denn ein einfacher Test

      async function test(){
          log("start")
          if(await automatikfreigabe.beleuchtung.checkRelease(true)){
              log("Mitte")
          }
          log("Ende");
      };
      
      test();
      

      funktioniert nicht, jedoch mit der Testfunktion schon

      async function test(){
          log("start")
          if(await automatikfreigabe.beleuchtung.testfunktion()){
              log("Mitte")
          }
          log("Ende");
      };
      
      test();
      

      Selbst mit der Änderung

      checkRelease: async function(kinderSindDa){
                  //Zeit in Bereich zuweisen
                  const timeOK = await messageToAsync("TimeAfterOrEqualNow",{time:this.zeitAbendsWennKinderDa},{timeout:5000});
                  // Es muss die Automatikfreigabe aktiv sein
                  return this.aktiv &&
                  // Entweder der Bypass ist gesetzt
                          (this.bypass ||
                  // Oder der Zustand wurde schon gesetzt
                          (this.zustand &&
                          (!kinderSindDa || timeOK.result)));          
              }
      

      gehts bei mir nicht


      Ich muss erst mal weg.... versuche später nochmal ein einfaches beispiel zu generieren, wie es geht und wie nicht.
      Habe irhendwie das Gefühl, sobald Abfrage im Script sind, gehts nicht.

      denn ein

              checkRelease: async function(kinderSindDa){
                  return (await messageToAsync("TimeAfterOrEqualNow",{time:this.zeitAbendsWennKinderDa},{timeout:5000})).result;  
              }
      

      funktioniert

      T 2 Antworten Letzte Antwort
      0
      • Ben1983B Ben1983

        @ticaki ALso ich denke es liegt irgendwie hier:

        const automatikfreigabe = {
            beleuchtung: {
                aktiv: getState(idAutomatikfreigabeBeleuchtungAktiv).val,
                bypass: getState(idAutomatikfreigabeBeleuchtungBypass).val,
                zustand: getState(idAutomatikfreigabeBeleuchtungZustand).val,
                kinderSindDa : getState(idAutomatikfreigabeBeleuchtungKidnerSindDa).val,
                zeitAbendsWennKinderDa: getState(idAutomatikfreigabeBeleuchtungZeitAbendsWennKinderDaSind).val,
                checkRelease: async function(kinderSindDa){
                    // Es muss die Automatikfreigabe aktiv sein
                    return this.aktiv &&
                    // Entweder der Bypass ist gesetzt
                            (this.bypass ||
                    // Oder der Zustand wurde schon gesetzt
                            (this.zustand &&
                            (!kinderSindDa || (await messageToAsync("TimeAfterOrEqualNow",{time:"21:30"},{timeout:5000})).result)));           
                },
                functionstest: async function(){
                    return (await messageToAsync("TimeAfterOrEqualNow",{time:"21:30"},{timeout:5000})).result;
                }
        

        denn ein einfacher Test

        async function test(){
            log("start")
            if(await automatikfreigabe.beleuchtung.checkRelease(true)){
                log("Mitte")
            }
            log("Ende");
        };
        
        test();
        

        funktioniert nicht, jedoch mit der Testfunktion schon

        async function test(){
            log("start")
            if(await automatikfreigabe.beleuchtung.testfunktion()){
                log("Mitte")
            }
            log("Ende");
        };
        
        test();
        

        Selbst mit der Änderung

        checkRelease: async function(kinderSindDa){
                    //Zeit in Bereich zuweisen
                    const timeOK = await messageToAsync("TimeAfterOrEqualNow",{time:this.zeitAbendsWennKinderDa},{timeout:5000});
                    // Es muss die Automatikfreigabe aktiv sein
                    return this.aktiv &&
                    // Entweder der Bypass ist gesetzt
                            (this.bypass ||
                    // Oder der Zustand wurde schon gesetzt
                            (this.zustand &&
                            (!kinderSindDa || timeOK.result)));          
                }
        

        gehts bei mir nicht


        Ich muss erst mal weg.... versuche später nochmal ein einfaches beispiel zu generieren, wie es geht und wie nicht.
        Habe irhendwie das Gefühl, sobald Abfrage im Script sind, gehts nicht.

        denn ein

                checkRelease: async function(kinderSindDa){
                    return (await messageToAsync("TimeAfterOrEqualNow",{time:this.zeitAbendsWennKinderDa},{timeout:5000})).result;  
                }
        

        funktioniert

        T Nicht stören
        T Nicht stören
        ticaki
        schrieb am zuletzt editiert von ticaki
        #9

        @ben1983

        Dein Code haut mir regelmässig die Javascript Instanz kaputt. Mache mal in Zukunft um jeden await einen try{}catch(e){log(e.message)}. Eine Error Promise sollte zwar nur die Instanz abstürzen lassen, jedoch hauts bei mir mehr kaputtt. Wieso auch immer.

        Edit: Backup eingespielt geht wieder alles.

        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

        Spenden

        1 Antwort Letzte Antwort
        0
        • Ben1983B Ben1983

          @ticaki ALso ich denke es liegt irgendwie hier:

          const automatikfreigabe = {
              beleuchtung: {
                  aktiv: getState(idAutomatikfreigabeBeleuchtungAktiv).val,
                  bypass: getState(idAutomatikfreigabeBeleuchtungBypass).val,
                  zustand: getState(idAutomatikfreigabeBeleuchtungZustand).val,
                  kinderSindDa : getState(idAutomatikfreigabeBeleuchtungKidnerSindDa).val,
                  zeitAbendsWennKinderDa: getState(idAutomatikfreigabeBeleuchtungZeitAbendsWennKinderDaSind).val,
                  checkRelease: async function(kinderSindDa){
                      // Es muss die Automatikfreigabe aktiv sein
                      return this.aktiv &&
                      // Entweder der Bypass ist gesetzt
                              (this.bypass ||
                      // Oder der Zustand wurde schon gesetzt
                              (this.zustand &&
                              (!kinderSindDa || (await messageToAsync("TimeAfterOrEqualNow",{time:"21:30"},{timeout:5000})).result)));           
                  },
                  functionstest: async function(){
                      return (await messageToAsync("TimeAfterOrEqualNow",{time:"21:30"},{timeout:5000})).result;
                  }
          

          denn ein einfacher Test

          async function test(){
              log("start")
              if(await automatikfreigabe.beleuchtung.checkRelease(true)){
                  log("Mitte")
              }
              log("Ende");
          };
          
          test();
          

          funktioniert nicht, jedoch mit der Testfunktion schon

          async function test(){
              log("start")
              if(await automatikfreigabe.beleuchtung.testfunktion()){
                  log("Mitte")
              }
              log("Ende");
          };
          
          test();
          

          Selbst mit der Änderung

          checkRelease: async function(kinderSindDa){
                      //Zeit in Bereich zuweisen
                      const timeOK = await messageToAsync("TimeAfterOrEqualNow",{time:this.zeitAbendsWennKinderDa},{timeout:5000});
                      // Es muss die Automatikfreigabe aktiv sein
                      return this.aktiv &&
                      // Entweder der Bypass ist gesetzt
                              (this.bypass ||
                      // Oder der Zustand wurde schon gesetzt
                              (this.zustand &&
                              (!kinderSindDa || timeOK.result)));          
                  }
          

          gehts bei mir nicht


          Ich muss erst mal weg.... versuche später nochmal ein einfaches beispiel zu generieren, wie es geht und wie nicht.
          Habe irhendwie das Gefühl, sobald Abfrage im Script sind, gehts nicht.

          denn ein

                  checkRelease: async function(kinderSindDa){
                      return (await messageToAsync("TimeAfterOrEqualNow",{time:this.zeitAbendsWennKinderDa},{timeout:5000})).result;  
                  }
          

          funktioniert

          T Nicht stören
          T Nicht stören
          ticaki
          schrieb am zuletzt editiert von
          #10

          @ben1983

          Du mußt in jeder asynchronen Funktion die ein await benutzt ein try{}catch(){} drum rum machen. Auch wenn die Auswirkungen bei mir jetzt ungewöhnlich sind, werden Error in asynchronen Funktionen nicht abgefangen und werden immer den Javascript-Adapter anhalten.

          Wenn der timeout z.B. abläuft kommt ein Error und den mußt du behandeln.

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          Ben1983B 1 Antwort Letzte Antwort
          0
          • T ticaki

            @ben1983

            Du mußt in jeder asynchronen Funktion die ein await benutzt ein try{}catch(){} drum rum machen. Auch wenn die Auswirkungen bei mir jetzt ungewöhnlich sind, werden Error in asynchronen Funktionen nicht abgefangen und werden immer den Javascript-Adapter anhalten.

            Wenn der timeout z.B. abläuft kommt ein Error und den mußt du behandeln.

            Ben1983B Offline
            Ben1983B Offline
            Ben1983
            schrieb am zuletzt editiert von
            #11

            @ticaki ok. Verstehe trotzdem nicht, warum es nicht geht.

            T 1 Antwort Letzte Antwort
            0
            • Ben1983B Ben1983

              @ticaki ok. Verstehe trotzdem nicht, warum es nicht geht.

              T Nicht stören
              T Nicht stören
              ticaki
              schrieb am zuletzt editiert von ticaki
              #12

              @ben1983
              Mach deine Bespiele bitte einfacher :)

              const test = {
                  status: 'das geht',
                  neee: () => this.status
              }
              log(test.neee())
              
              class test2  {
                  status = 'das geht'
                  neee = () => this.status
              
                  constructor() {};
              }
              const testc = new test2();
              log(testc.neee())
              

              Ich bin mit scope jetzt nicht so firm, aber ein Json hat doch kein this oder? EDIT: ok this hat es das scheint aber nur bei Konstanten zu funktionieren.

              13:28:20.430	info	javascript.0 (651) Start javascript script.js.Test.Skript_122
              13:28:20.433	info	javascript.0 (651) script.js.Test.Skript_122: undefined
              13:28:20.433	info	javascript.0 (651) script.js.Test.Skript_122: das geht
              

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              Ben1983B 1 Antwort Letzte Antwort
              0
              • T ticaki

                @ben1983
                Mach deine Bespiele bitte einfacher :)

                const test = {
                    status: 'das geht',
                    neee: () => this.status
                }
                log(test.neee())
                
                class test2  {
                    status = 'das geht'
                    neee = () => this.status
                
                    constructor() {};
                }
                const testc = new test2();
                log(testc.neee())
                

                Ich bin mit scope jetzt nicht so firm, aber ein Json hat doch kein this oder? EDIT: ok this hat es das scheint aber nur bei Konstanten zu funktionieren.

                13:28:20.430	info	javascript.0 (651) Start javascript script.js.Test.Skript_122
                13:28:20.433	info	javascript.0 (651) script.js.Test.Skript_122: undefined
                13:28:20.433	info	javascript.0 (651) script.js.Test.Skript_122: das geht
                
                Ben1983B Offline
                Ben1983B Offline
                Ben1983
                schrieb am zuletzt editiert von
                #13

                Ich scheine es gefunden zu haben.
                Es war wieder mal, dass ich true oder false zurückgegeben habe, kein Objekt. :-(

                so geht es (Haben ein Objekt mit result zurückgegeben)

                const automatikfreigabe = {
                    beleuchtung: {
                        aktiv: false,
                        bypass: false,
                        checkRelease: async function(kinderSindDa){
                            try{
                                //Zeit in Bereich zuweisen
                                const timeOK = await messageToAsync("TimeAfterOrEqualNow",{time:this.zeitAbendsWennKinderDa},{timeout:5000});
                                return {result:(this.aktiv &&
                                // Entweder der Bypass ist gesetzt
                                        (this.bypass ||
                                // Oder der Zustand wurde schon gesetzt
                                        (this.zustand &&
                                        (!kinderSindDa || timeOK.result))))};  
                            }
                            catch(error){
                                log(error);
                            }
                        },
                    }
                }
                
                async function test(){
                    log("start")
                    try{
                        if(await automatikfreigabe.beleuchtung.checkRelease(true)){
                            log("Mitte")
                        }
                    }
                    catch(error){
                        log(error);
                    }
                    log("Ende");
                };
                
                test();
                
                
                
                
                
                
                
                
                
                
                
                
                T 1 Antwort Letzte Antwort
                0
                • Ben1983B Ben1983

                  Ich scheine es gefunden zu haben.
                  Es war wieder mal, dass ich true oder false zurückgegeben habe, kein Objekt. :-(

                  so geht es (Haben ein Objekt mit result zurückgegeben)

                  const automatikfreigabe = {
                      beleuchtung: {
                          aktiv: false,
                          bypass: false,
                          checkRelease: async function(kinderSindDa){
                              try{
                                  //Zeit in Bereich zuweisen
                                  const timeOK = await messageToAsync("TimeAfterOrEqualNow",{time:this.zeitAbendsWennKinderDa},{timeout:5000});
                                  return {result:(this.aktiv &&
                                  // Entweder der Bypass ist gesetzt
                                          (this.bypass ||
                                  // Oder der Zustand wurde schon gesetzt
                                          (this.zustand &&
                                          (!kinderSindDa || timeOK.result))))};  
                              }
                              catch(error){
                                  log(error);
                              }
                          },
                      }
                  }
                  
                  async function test(){
                      log("start")
                      try{
                          if(await automatikfreigabe.beleuchtung.checkRelease(true)){
                              log("Mitte")
                          }
                      }
                      catch(error){
                          log(error);
                      }
                      log("Ende");
                  };
                  
                  test();
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  T Nicht stören
                  T Nicht stören
                  ticaki
                  schrieb am zuletzt editiert von ticaki
                  #14

                  @ben1983
                  Ich vermute viel eher das das ergebnis vorher undefinied war und damit false, jetzt ist es ein Object und damit true.

                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                  Spenden

                  Ben1983B 1 Antwort Letzte Antwort
                  0
                  • T ticaki

                    @ben1983
                    Ich vermute viel eher das das ergebnis vorher undefinied war und damit false, jetzt ist es ein Object und damit true.

                    Ben1983B Offline
                    Ben1983B Offline
                    Ben1983
                    schrieb am zuletzt editiert von
                    #15

                    @ticaki ok. Verstehe trotzdem nicht, warum es nicht geht.
                    Nein, denn ein direkter log der Ergebnisses nach dem Aufruf führte zu nichts.
                    Naja jetzt geht es jedefalls

                    T 1 Antwort Letzte Antwort
                    0
                    • Ben1983B Ben1983

                      @ticaki ok. Verstehe trotzdem nicht, warum es nicht geht.
                      Nein, denn ein direkter log der Ergebnisses nach dem Aufruf führte zu nichts.
                      Naja jetzt geht es jedefalls

                      T Nicht stören
                      T Nicht stören
                      ticaki
                      schrieb am zuletzt editiert von
                      #16

                      @ben1983
                      Naja wenns geht gut, ich hätte es mit Klassen für Funktionen und Json für Konstanten gelöst :)

                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                      Spenden

                      Ben1983B 1 Antwort Letzte Antwort
                      0
                      • T ticaki

                        @ben1983
                        Naja wenns geht gut, ich hätte es mit Klassen für Funktionen und Json für Konstanten gelöst :)

                        Ben1983B Offline
                        Ben1983B Offline
                        Ben1983
                        schrieb am zuletzt editiert von
                        #17

                        @ticaki ???? Wie meinst Du das?

                        T 1 Antwort Letzte Antwort
                        0
                        • Ben1983B Ben1983

                          @ticaki ???? Wie meinst Du das?

                          T Nicht stören
                          T Nicht stören
                          ticaki
                          schrieb am zuletzt editiert von ticaki
                          #18

                          @ben1983
                          Ist schlecht ein Beispiel zu erstellen, da der Vorteil ja erst bei Gemeinsamkeiten zum Tragen kommt aber sowas z.B.:

                          // Prüfen,ob die angegebenen Zeit vor oder gleich der aktuellen ist
                          onMessage("TimeBeforeOrEqualNow",(messagedata,callback) => {
                              const now=new Date();
                              const inputTime=new Date(`${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}-${messagedata.time}`);
                              if (inputTime) {
                                  callback({ result: inputTime<=now });
                              }
                              else {
                                  callback({ result: false });
                              }
                          });
                          
                          const automatikfreigabe={
                              beleuchtung: {
                                  aktiv: idAutomatikfreigabeBeleuchtungAktiv,
                                  bypass: idAutomatikfreigabeBeleuchtungBypass,
                                  zustand: idAutomatikfreigabeBeleuchtungZustand,
                                  kinderSindDa: idAutomatikfreigabeBeleuchtungKidnerSindDa,
                                  zeitAbendsWennKinderDa: gidAutomatikfreigabeBeleuchtungZeitAbendsWennKinderDaSind,
                          
                              },
                          }
                          
                          var beleuchtung=null;
                          class Beleuchtung {
                              options={};
                              dpOptions = {};
                              // kein async für constructor möglich
                              constructor(options) {
                                  for (const a in options) {
                                      if (options[a]) this.dpOptions[a]=options[a];
                                  }
                              }
                              async updateDp() {
                                  for (const a in this.dpOptions[a]) {
                                      this.options[a]=getState(this.dpOptions[a]).val;
                                  }
                              }
                              async checkRelease(kinderSindDa) {
                                  // Es muss die Automatikfreigabe aktiv sein
                                  try {
                                      const result=this.options.aktiv&&
                                          // Entweder der Bypass ist gesetzt
                                          (this.options.bypass||
                                              // Oder der Zustand wurde schon gesetzt
                                              (this.options.zustand&&
                                                  (!kinderSindDa||(await messageToAsync("TimeAfterOrEqualNow",{ time: "21:30" },{ timeout: 5000 })).result)));
                                  } catch (e) {
                                      log(e)
                                      result={};
                                  }
                                  return result;
                              }
                          }
                          
                          async function main() {
                              beleuchtung=new Beleuchtung(automatikfreigabe.beleuchtung);
                              await beleuchtung.updateDp()
                              log(JSON.stringify(await beleuchtung.checkRelease(true)));
                          }
                          

                          habs auch nicht getestet, ist mehr ein "Muster"

                          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                          Spenden

                          Ben1983B 1 Antwort Letzte Antwort
                          0
                          • T ticaki

                            @ben1983
                            Ist schlecht ein Beispiel zu erstellen, da der Vorteil ja erst bei Gemeinsamkeiten zum Tragen kommt aber sowas z.B.:

                            // Prüfen,ob die angegebenen Zeit vor oder gleich der aktuellen ist
                            onMessage("TimeBeforeOrEqualNow",(messagedata,callback) => {
                                const now=new Date();
                                const inputTime=new Date(`${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}-${messagedata.time}`);
                                if (inputTime) {
                                    callback({ result: inputTime<=now });
                                }
                                else {
                                    callback({ result: false });
                                }
                            });
                            
                            const automatikfreigabe={
                                beleuchtung: {
                                    aktiv: idAutomatikfreigabeBeleuchtungAktiv,
                                    bypass: idAutomatikfreigabeBeleuchtungBypass,
                                    zustand: idAutomatikfreigabeBeleuchtungZustand,
                                    kinderSindDa: idAutomatikfreigabeBeleuchtungKidnerSindDa,
                                    zeitAbendsWennKinderDa: gidAutomatikfreigabeBeleuchtungZeitAbendsWennKinderDaSind,
                            
                                },
                            }
                            
                            var beleuchtung=null;
                            class Beleuchtung {
                                options={};
                                dpOptions = {};
                                // kein async für constructor möglich
                                constructor(options) {
                                    for (const a in options) {
                                        if (options[a]) this.dpOptions[a]=options[a];
                                    }
                                }
                                async updateDp() {
                                    for (const a in this.dpOptions[a]) {
                                        this.options[a]=getState(this.dpOptions[a]).val;
                                    }
                                }
                                async checkRelease(kinderSindDa) {
                                    // Es muss die Automatikfreigabe aktiv sein
                                    try {
                                        const result=this.options.aktiv&&
                                            // Entweder der Bypass ist gesetzt
                                            (this.options.bypass||
                                                // Oder der Zustand wurde schon gesetzt
                                                (this.options.zustand&&
                                                    (!kinderSindDa||(await messageToAsync("TimeAfterOrEqualNow",{ time: "21:30" },{ timeout: 5000 })).result)));
                                    } catch (e) {
                                        log(e)
                                        result={};
                                    }
                                    return result;
                                }
                            }
                            
                            async function main() {
                                beleuchtung=new Beleuchtung(automatikfreigabe.beleuchtung);
                                await beleuchtung.updateDp()
                                log(JSON.stringify(await beleuchtung.checkRelease(true)));
                            }
                            

                            habs auch nicht getestet, ist mehr ein "Muster"

                            Ben1983B Offline
                            Ben1983B Offline
                            Ben1983
                            schrieb am zuletzt editiert von
                            #19

                            @ticaki ok.
                            Erkenne jetzt nicht grad ein Vorteil, aber ok

                            T 1 Antwort Letzte Antwort
                            0
                            • Ben1983B Ben1983

                              @ticaki ok.
                              Erkenne jetzt nicht grad ein Vorteil, aber ok

                              T Nicht stören
                              T Nicht stören
                              ticaki
                              schrieb am zuletzt editiert von ticaki
                              #20

                              @ben1983
                              Glaube nicht das json oder klassen pauschal einen Vorteil haben. Hängt von den Umständen ab und persönlichen Vorlieben.

                              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                              Spenden

                              Ben1983B 1 Antwort Letzte Antwort
                              0
                              • T ticaki

                                @ben1983
                                Glaube nicht das json oder klassen pauschal einen Vorteil haben. Hängt von den Umständen ab und persönlichen Vorlieben.

                                Ben1983B Offline
                                Ben1983B Offline
                                Ben1983
                                schrieb am zuletzt editiert von
                                #21

                                @ticaki ok. Aber ist das Objekt bei mir kein JSON? Ist doch das gleiche, oder übersehe ich was? Ist halt nur noch die Funktion direkt drin.

                                T 1 Antwort Letzte Antwort
                                0
                                • Ben1983B Ben1983

                                  @ticaki ok. Aber ist das Objekt bei mir kein JSON? Ist doch das gleiche, oder übersehe ich was? Ist halt nur noch die Funktion direkt drin.

                                  T Nicht stören
                                  T Nicht stören
                                  ticaki
                                  schrieb am zuletzt editiert von
                                  #22

                                  @ben1983
                                  Du benutzt ein Json. Ich wollte damit sagen das weder deine Art, noch meine Art nicht pauschal besser sind.

                                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                  Spenden

                                  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

                                  677

                                  Online

                                  32.6k

                                  Benutzer

                                  82.2k

                                  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