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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. scriptedEnabled - Problem bei Abfrage

NEWS

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

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

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

scriptedEnabled - Problem bei Abfrage

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
51 Beiträge 4 Kommentatoren 3.6k 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.
  • paul53P paul53

    @liv-in-sky sagte:

    wenn du nun eines der scripte aus und einschaltest, wird dann auch bei dir das richtige angezeigt

    Ja.

    liv-in-skyL Offline
    liv-in-skyL Offline
    liv-in-sky
    schrieb am zuletzt editiert von
    #13

    @paul53

    das ist schade, das konzept dieses scriptes sollte sein - eine kleine , 2 mal am tag upgedatete , liste in der vis zu haben, die mir nur scripte anzeigt, die laufen und einen falschen trigger haben

    danke für deine hilfe

    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

    paul53P 1 Antwort Letzte Antwort
    0
    • liv-in-skyL Offline
      liv-in-skyL Offline
      liv-in-sky
      schrieb am zuletzt editiert von
      #14

      @apollon77

      hi ingo - du stehst in github als entwickler drin - weißt du, wieso das so ist - siehe bitte im ersten post ?

      zusammnegefaßt: selektor bekommt falsche states im script_enabled ordner beim prüfen, ob scripte enable/disabled sind

      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

      AlCalzoneA 1 Antwort Letzte Antwort
      0
      • liv-in-skyL liv-in-sky

        @paul53

        das ist schade, das konzept dieses scriptes sollte sein - eine kleine , 2 mal am tag upgedatete , liste in der vis zu haben, die mir nur scripte anzeigt, die laufen und einen falschen trigger haben

        danke für deine hilfe

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

        @liv-in-sky sagte:

        das ist schade

        Es funktioniert mit der asynchronen Version von getState(id, callback), ist also ein Puffer-Problem:

        const idsEnabled = $('javascript.*.scriptEnabled.aktiv.*');
        idsEnabled.each(function(id, i) {
            if(existsState(id)) getState(id, function(err, state) {log(id + ': ' + state.val)});
        });
        

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

        1 Antwort Letzte Antwort
        0
        • liv-in-skyL liv-in-sky

          @apollon77

          hi ingo - du stehst in github als entwickler drin - weißt du, wieso das so ist - siehe bitte im ersten post ?

          zusammnegefaßt: selektor bekommt falsche states im script_enabled ordner beim prüfen, ob scripte enable/disabled sind

          AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          schrieb am zuletzt editiert von
          #16

          @liv-in-sky Welche Adapter-Version setzt du denn ein? Wir haben vor kurzem das Verhalten von Wildcards im Selektor gefixt - ggf. hat das damit zu tun.

          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

          liv-in-skyL paul53P 2 Antworten Letzte Antwort
          0
          • AlCalzoneA AlCalzone

            @liv-in-sky Welche Adapter-Version setzt du denn ein? Wir haben vor kurzem das Verhalten von Wildcards im Selektor gefixt - ggf. hat das damit zu tun.

            liv-in-skyL Offline
            liv-in-skyL Offline
            liv-in-sky
            schrieb am zuletzt editiert von
            #17

            @AlCalzone

            momentan 4.8.4

            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

            1 Antwort Letzte Antwort
            0
            • AlCalzoneA AlCalzone

              @liv-in-sky Welche Adapter-Version setzt du denn ein? Wir haben vor kurzem das Verhalten von Wildcards im Selektor gefixt - ggf. hat das damit zu tun.

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

              @AlCalzone sagte:

              Wir haben vor kurzem das Verhalten von Wildcards im Selektor gefixt - ggf. hat das damit zu tun.

              Nein, damit hat es nichts zu tun, denn die IDs werden richtig selektiert. Die synchrone Version von getState(id) funktioniert bei diesen Datenpunkten nicht.

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

              liv-in-skyL 1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @AlCalzone sagte:

                Wir haben vor kurzem das Verhalten von Wildcards im Selektor gefixt - ggf. hat das damit zu tun.

                Nein, damit hat es nichts zu tun, denn die IDs werden richtig selektiert. Die synchrone Version von getState(id) funktioniert bei diesen Datenpunkten nicht.

                liv-in-skyL Offline
                liv-in-skyL Offline
                liv-in-sky
                schrieb am zuletzt editiert von liv-in-sky
                #19

                @paul53

                was ist hier falsch

                function lookForEnabled(pfad) {
                  let myEnabled=false;
                  let myselctor="javascript.*.scriptEnabled."+pfad
                  $(myselctor).each(function(id, i) {   
                
                    //if(existsState(id)) {if (getState(id).val) {myEnabled=true;}}
                    if(existsState(id)) {  getState(id, function(err, state){ if (state.val) { myEnabled=true; 
                                                                                               return myEnabled;}})
                    }
                });
                }
                

                ich nehme an, der return wert darf da nicht drin sein - wenn ich den aber rausnehme funktioniert es nicht ?

                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                paul53P 1 Antwort Letzte Antwort
                0
                • liv-in-skyL liv-in-sky

                  @paul53

                  was ist hier falsch

                  function lookForEnabled(pfad) {
                    let myEnabled=false;
                    let myselctor="javascript.*.scriptEnabled."+pfad
                    $(myselctor).each(function(id, i) {   
                  
                      //if(existsState(id)) {if (getState(id).val) {myEnabled=true;}}
                      if(existsState(id)) {  getState(id, function(err, state){ if (state.val) { myEnabled=true; 
                                                                                                 return myEnabled;}})
                      }
                  });
                  }
                  

                  ich nehme an, der return wert darf da nicht drin sein - wenn ich den aber rausnehme funktioniert es nicht ?

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

                  @liv-in-sky sagte:

                  was ist hier falsch

                  Man kann keine Rückgabe aus einer Callback-Funktion an die aufrufende Funktion machen, denn die Callback-Funktion läuft asynchron.

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

                  liv-in-skyL 1 Antwort Letzte Antwort
                  0
                  • paul53P paul53

                    @liv-in-sky sagte:

                    was ist hier falsch

                    Man kann keine Rückgabe aus einer Callback-Funktion an die aufrufende Funktion machen, denn die Callback-Funktion läuft asynchron.

                    liv-in-skyL Offline
                    liv-in-skyL Offline
                    liv-in-sky
                    schrieb am zuletzt editiert von
                    #21

                    @paul53
                    leidr weiß ich nicht, wie ich mit dieser function umgehen muss - letztlich gibt es doch ein promise - wenn das erfüllt/ausgeführt ist, soll der return gegeben werden

                    habe mit then() etwas versucht - klappt aber garnicht

                    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                    AlCalzoneA 1 Antwort Letzte Antwort
                    0
                    • liv-in-skyL liv-in-sky

                      @paul53
                      leidr weiß ich nicht, wie ich mit dieser function umgehen muss - letztlich gibt es doch ein promise - wenn das erfüllt/ausgeführt ist, soll der return gegeben werden

                      habe mit then() etwas versucht - klappt aber garnicht

                      AlCalzoneA Offline
                      AlCalzoneA Offline
                      AlCalzone
                      Developer
                      schrieb am zuletzt editiert von AlCalzone
                      #22

                      @liv-in-sky Probiers mal so:

                      async function lookForEnabled(pfad) {
                        let myselctor = "javascript.*.scriptEnabled." + pfad;
                        for (const id of $(myselctor)) {
                          if (existsState(id) && (await getStateAsync(id)).val) return true;
                        }
                        return false;
                      }
                      

                      Dazu musst du aber auf 4.9.4 updaten, da die das Iterieren des Selector-Ergebnisses ermöglicht.
                      Und du musst das aus der aufrufenden Funktion ebenfalls mit await aufrufen, oder das Ergebnis mit .then(...) verarbeiten.

                      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                      liv-in-skyL AlCalzoneA 4 Antworten Letzte Antwort
                      0
                      • AlCalzoneA AlCalzone

                        @liv-in-sky Probiers mal so:

                        async function lookForEnabled(pfad) {
                          let myselctor = "javascript.*.scriptEnabled." + pfad;
                          for (const id of $(myselctor)) {
                            if (existsState(id) && (await getStateAsync(id)).val) return true;
                          }
                          return false;
                        }
                        

                        Dazu musst du aber auf 4.9.4 updaten, da die das Iterieren des Selector-Ergebnisses ermöglicht.
                        Und du musst das aus der aufrufenden Funktion ebenfalls mit await aufrufen, oder das Ergebnis mit .then(...) verarbeiten.

                        liv-in-skyL Offline
                        liv-in-skyL Offline
                        liv-in-sky
                        schrieb am zuletzt editiert von
                        #23

                        @AlCalzone

                        jetzt sind alle true :-(

                        Image 4.png

                        nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                        1 Antwort Letzte Antwort
                        0
                        • AlCalzoneA AlCalzone

                          @liv-in-sky Probiers mal so:

                          async function lookForEnabled(pfad) {
                            let myselctor = "javascript.*.scriptEnabled." + pfad;
                            for (const id of $(myselctor)) {
                              if (existsState(id) && (await getStateAsync(id)).val) return true;
                            }
                            return false;
                          }
                          

                          Dazu musst du aber auf 4.9.4 updaten, da die das Iterieren des Selector-Ergebnisses ermöglicht.
                          Und du musst das aus der aufrufenden Funktion ebenfalls mit await aufrufen, oder das Ergebnis mit .then(...) verarbeiten.

                          liv-in-skyL Offline
                          liv-in-skyL Offline
                          liv-in-sky
                          schrieb am zuletzt editiert von
                          #24

                          @AlCalzone

                          sorry - das ist ein fehler im verarbeiten nach dem aufruf der function !!!!

                          muss noch testen

                          nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                          1 Antwort Letzte Antwort
                          0
                          • AlCalzoneA AlCalzone

                            @liv-in-sky Probiers mal so:

                            async function lookForEnabled(pfad) {
                              let myselctor = "javascript.*.scriptEnabled." + pfad;
                              for (const id of $(myselctor)) {
                                if (existsState(id) && (await getStateAsync(id)).val) return true;
                              }
                              return false;
                            }
                            

                            Dazu musst du aber auf 4.9.4 updaten, da die das Iterieren des Selector-Ergebnisses ermöglicht.
                            Und du musst das aus der aufrufenden Funktion ebenfalls mit await aufrufen, oder das Ergebnis mit .then(...) verarbeiten.

                            liv-in-skyL Offline
                            liv-in-skyL Offline
                            liv-in-sky
                            schrieb am zuletzt editiert von
                            #25

                            @AlCalzone

                            so wird die function jetzt aufgerufen:

                            lookForEnabled(myGoal[b][1]) ? myEnabled="⚠️(aktiv)" : myEnabled="⚫" 
                            
                            
                            async function lookForEnabled(pfad) {
                              pfad=pfad.replace(".js","")   
                              pfad=pfad.replace(/\//g,".")  
                             // let scriptPfad=""
                              //let myEnabled=false;
                            
                              
                              let myselctor="javascript.*.scriptEnabled."+pfad
                              for (const id of $(myselctor)) {
                                  log((await getStateAsync(id)).val+"  "+id)
                                if (existsState(id) && (await getStateAsync(id)).val) {return true;}
                              }
                              return false;
                            }
                            

                            das log in deiner function wird richtig angezeigt

                            muss ich lookForEnabled anders aufrufen

                            bei

                              log(lookForEnabled(myGoal[b][1]).toString())
                            

                            kommt das:

                            Image 6.png

                            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                            1 Antwort Letzte Antwort
                            0
                            • AlCalzoneA AlCalzone

                              @liv-in-sky Probiers mal so:

                              async function lookForEnabled(pfad) {
                                let myselctor = "javascript.*.scriptEnabled." + pfad;
                                for (const id of $(myselctor)) {
                                  if (existsState(id) && (await getStateAsync(id)).val) return true;
                                }
                                return false;
                              }
                              

                              Dazu musst du aber auf 4.9.4 updaten, da die das Iterieren des Selector-Ergebnisses ermöglicht.
                              Und du musst das aus der aufrufenden Funktion ebenfalls mit await aufrufen, oder das Ergebnis mit .then(...) verarbeiten.

                              AlCalzoneA Offline
                              AlCalzoneA Offline
                              AlCalzone
                              Developer
                              schrieb am zuletzt editiert von AlCalzone
                              #26

                              @liv-in-sky sagte in scriptedEnabled - Problem bei Abfrage:

                              muss ich lookForEnabled anders aufrufen

                              Ja, hab ich doch geschrieben:

                              @AlCalzone sagte in scriptedEnabled - Problem bei Abfrage:

                              Und du musst das aus der aufrufenden Funktion ebenfalls mit await aufrufen, oder das Ergebnis mit .then(...) verarbeiten.

                              z.B.

                              async function whatever() {
                              const result = await lookForEnabled("meine-id");
                              log(result);
                              }
                              

                              Ggf. empfiehlt sich die Lektüre von https://gist.github.com/AlCalzone/d14b854b69ce5e8a03718336cc650a95#

                              Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                              1 Antwort Letzte Antwort
                              0
                              • liv-in-skyL liv-in-sky

                                @paul53
                                hi - vielleicht weißt du warum das so ist?

                                ich versuche mich an einem script, welches alle scripte durchgeht und trigger punkte sucht - diese werden dann auf existenz geprüft und das ergebnis in ein json geschrieben

                                dabei teste ich auch, ob das script enabled ist. - es wird in allen instanzen geprüft, daher mache ich das über einen selector

                                function lookForEnabled(pfad) {
                                  pfad=pfad.replace(".js","")   
                                  pfad=pfad.replace(/\//g,".")  
                                  let myEnabled=false;
                                  
                                  let myselctor="javascript.*.scriptEnabled."+pfad
                                  $(myselctor).each(function(id, i) {   
                                    if(existsState(id)) {if (getState(id).val) {myEnabled=true;}}
                                });
                                //log(myEnabled.toString())
                                return myEnabled;
                                }
                                

                                das problem: nach einem iobroker neustart wird bei allen scripten als enabled false angezeigt, obwohl die meisten dp auf true stehen. erst wenn ich ein script disable und anschliessend enable, wird das ganze richtig angezeigt. auch wenn ich die js-instanz neustarte, werden meist die werte nicht richtig geschrieben.

                                muss ich die abfrage irgendwie anders programmieren ?

                                als output kommt dann sowas raus:

                                Image 2.png

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

                                @liv-in-sky sagte:

                                muss ich die abfrage irgendwie anders programmieren ?

                                Weshalb verwendest Du nicht die synchrone Funktion isScriptActive(name) ?

                                function lookForEnabled(pfad) {
                                  pfad=pfad.replace(".js","")   
                                  pfad=pfad.replace(/\//g,".")  
                                  return isScriptActive(pfad);
                                }
                                

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

                                liv-in-skyL 1 Antwort Letzte Antwort
                                0
                                • paul53P paul53

                                  @liv-in-sky sagte:

                                  muss ich die abfrage irgendwie anders programmieren ?

                                  Weshalb verwendest Du nicht die synchrone Funktion isScriptActive(name) ?

                                  function lookForEnabled(pfad) {
                                    pfad=pfad.replace(".js","")   
                                    pfad=pfad.replace(/\//g,".")  
                                    return isScriptActive(pfad);
                                  }
                                  
                                  liv-in-skyL Offline
                                  liv-in-skyL Offline
                                  liv-in-sky
                                  schrieb am zuletzt editiert von
                                  #28

                                  @paul53

                                  bin vor lauter frust in den regen raus und habe die blätter vom garten entsorgt - dieses await ... bekomme ich einfach nicht hin

                                  habe den link von @AlCalzone 20mal gelesen und das ganze script mit funktionen gemacht und wollte am ende eine .then kette machen

                                  die function kannte ich nicht - werd die sofort mal testen

                                  nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                                  paul53P AlCalzoneA 2 Antworten Letzte Antwort
                                  0
                                  • liv-in-skyL liv-in-sky

                                    @paul53

                                    bin vor lauter frust in den regen raus und habe die blätter vom garten entsorgt - dieses await ... bekomme ich einfach nicht hin

                                    habe den link von @AlCalzone 20mal gelesen und das ganze script mit funktionen gemacht und wollte am ende eine .then kette machen

                                    die function kannte ich nicht - werd die sofort mal testen

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

                                    @liv-in-sky sagte:

                                    die function kannte ich nicht

                                    Ich auch nicht: Ist erst seit 9. Oktober dokumentiert.

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

                                    1 Antwort Letzte Antwort
                                    0
                                    • liv-in-skyL liv-in-sky

                                      @paul53

                                      bin vor lauter frust in den regen raus und habe die blätter vom garten entsorgt - dieses await ... bekomme ich einfach nicht hin

                                      habe den link von @AlCalzone 20mal gelesen und das ganze script mit funktionen gemacht und wollte am ende eine .then kette machen

                                      die function kannte ich nicht - werd die sofort mal testen

                                      AlCalzoneA Offline
                                      AlCalzoneA Offline
                                      AlCalzone
                                      Developer
                                      schrieb am zuletzt editiert von
                                      #30

                                      @liv-in-sky sagte in scriptedEnabled - Problem bei Abfrage:

                                      bin vor lauter frust in den regen raus und habe die blätter vom garten entsorgt - dieses await ... bekomme ich einfach nicht hin

                                      Auch wenn es eine einfachere Lösung gibt, vielleicht zeigst du mal was du hattest. So schwer ist es eigentlich nicht.
                                      Wenn ne Funktion einen Promise zurückgibt, rufst du sie mit await davor auf. Dazu muss die Funktion, in der await verwendet wird, async sein. Ansonsten wird der Code geschrieben wie synchroner Code.

                                      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                      liv-in-skyL 1 Antwort Letzte Antwort
                                      1
                                      • AlCalzoneA AlCalzone

                                        @liv-in-sky sagte in scriptedEnabled - Problem bei Abfrage:

                                        bin vor lauter frust in den regen raus und habe die blätter vom garten entsorgt - dieses await ... bekomme ich einfach nicht hin

                                        Auch wenn es eine einfachere Lösung gibt, vielleicht zeigst du mal was du hattest. So schwer ist es eigentlich nicht.
                                        Wenn ne Funktion einen Promise zurückgibt, rufst du sie mit await davor auf. Dazu muss die Funktion, in der await verwendet wird, async sein. Ansonsten wird der Code geschrieben wie synchroner Code.

                                        liv-in-skyL Offline
                                        liv-in-skyL Offline
                                        liv-in-sky
                                        schrieb am zuletzt editiert von liv-in-sky
                                        #31

                                        @AlCalzone

                                        erst mal danke für deine hilfe für dein angebot - darauf komme ich noch zurück - brauch jetzt erstmal eine pause
                                        bei der anderen version, hatte ich das problem, dass ich eine function hatte, in der ich mit await getStateAsync(id)).val das enabled suche - dann wollte ich aber, dass diese function ein ein promise bringt, wenn sie fertig ist und dann erst der datenpunkt geschrieben wird - ich konnte kein new promise einfügen, weil dann await getStateAsync(id)).val einen fehler anzeigte

                                        ung. so:

                                         asyncfunction writeStuff() {
                                        return new Promise((resolve) => {......
                                                                       ....... await    lookForEnabled(pfad)                                        
                                         resolve()
                                        

                                        hier kam ein fehler und await war nicht mehr erlaubt

                                        meine jetzige lösung sieht so aus (hoffe, die ist richtig):

                                        sammleDaten().then(writeStuff).then( function() { setState("javascript."+instance+".CheckScript.jsonSubScript",JSON.stringify(mxJson))
                                                                                       log(JSON.stringify(mxJson))})
                                        

                                        sammleDaten (liest scripte aus filesystem und versucht die trigger daraus zu finden - schreibt ein arr mit gefundenen non-existent datenpunkten) und writeStuff (checkt script_enabled und macht json für vis-datenpunkt )- beide functionen haben ein promise bekommen und ein resolve

                                        damit der datenpunkt zum richtigen zeitpunkt geschrieben wird

                                        @paul53 - die function hat das ganze extrem vereinfacht - nochmals danke dafür

                                        ergebnis schaut richtig aus:

                                        Image 8.png

                                        nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                                        AlCalzoneA 1 Antwort Letzte Antwort
                                        0
                                        • liv-in-skyL liv-in-sky

                                          @AlCalzone

                                          erst mal danke für deine hilfe für dein angebot - darauf komme ich noch zurück - brauch jetzt erstmal eine pause
                                          bei der anderen version, hatte ich das problem, dass ich eine function hatte, in der ich mit await getStateAsync(id)).val das enabled suche - dann wollte ich aber, dass diese function ein ein promise bringt, wenn sie fertig ist und dann erst der datenpunkt geschrieben wird - ich konnte kein new promise einfügen, weil dann await getStateAsync(id)).val einen fehler anzeigte

                                          ung. so:

                                           asyncfunction writeStuff() {
                                          return new Promise((resolve) => {......
                                                                         ....... await    lookForEnabled(pfad)                                        
                                           resolve()
                                          

                                          hier kam ein fehler und await war nicht mehr erlaubt

                                          meine jetzige lösung sieht so aus (hoffe, die ist richtig):

                                          sammleDaten().then(writeStuff).then( function() { setState("javascript."+instance+".CheckScript.jsonSubScript",JSON.stringify(mxJson))
                                                                                         log(JSON.stringify(mxJson))})
                                          

                                          sammleDaten (liest scripte aus filesystem und versucht die trigger daraus zu finden - schreibt ein arr mit gefundenen non-existent datenpunkten) und writeStuff (checkt script_enabled und macht json für vis-datenpunkt )- beide functionen haben ein promise bekommen und ein resolve

                                          damit der datenpunkt zum richtigen zeitpunkt geschrieben wird

                                          @paul53 - die function hat das ganze extrem vereinfacht - nochmals danke dafür

                                          ergebnis schaut richtig aus:

                                          Image 8.png

                                          AlCalzoneA Offline
                                          AlCalzoneA Offline
                                          AlCalzone
                                          Developer
                                          schrieb am zuletzt editiert von AlCalzone
                                          #32

                                          @liv-in-sky sagte in scriptedEnabled - Problem bei Abfrage:

                                          async function writeStuff() {
                                          return new Promise((resolve) => {......

                                                                      ....... await    lookForEnabled(pfad)                                        
                                          

                                          resolve()

                                          Zwei Fehler hast du hier:

                                          1. Eine async-Funktion braucht nicht explizit einen Promise zurückgeben. In 99% der Fälle ist es sogar einfach nur falsch. Das was ich oben sehe, kannst du wie folgt eindampfen:
                                          async function writeStuff() {
                                            // ...
                                            await lookForEnabled(pfad);
                                          }
                                          
                                          1. Wenn es unbedingt sein muss, await doch in einem Promise zu kapseln (z.B. weil du zusätzlich eine Callback-API nutzt), muss die Promise-"Callback"-Funktion als async definiert werden, nicht die außenrum:
                                          function foobar() {
                                            return new Promise(async (resolve) => {
                                              await irgendwas;
                                              irgendwasMitCallback(() => resolve());
                                            });
                                          });
                                          

                                          Meistens lässt sich das aber eleganter trennen.


                                          meine jetzige lösung sieht so aus

                                          Würde ich in etwa so machen (besser lesbar und mischt nicht async/await mit .then()-Ketten):

                                          async function doStuff() {
                                          	await sammleDaten();
                                          	await writeStuff();
                                          	// ^ Hier sollten vermutlich Daten zwischen den Methoden übergeben werden,
                                          	// damit keine globalen Variablen missbraucht werden
                                          	// const daten = await sammleDaten();
                                          	// await writeStuff(daten)
                                          	const stringified = JSON.stringify(mxJson);
                                          	await setStateAsync("javascript."+instance+".CheckScript.jsonSubScript", stringified);
                                          	log(stringified);
                                          }
                                          

                                          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                          liv-in-skyL 3 Antworten Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          863

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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