Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. scriptedEnabled - Problem bei Abfrage

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    scriptedEnabled - Problem bei Abfrage

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @liv-in-sky last edited by

      @liv-in-sky sagte:

      nach iobroker neustart wurde die laufenden scipte als false angezeigt

      Ich könnte mir ein solches Verhalten nur dadurch erklären, dass das Script bereits ausgeführt wird, bevor der States-Puffer der JS-Instanz vollständig initialisiert ist. Das dürfte nicht sein.

      liv-in-sky 1 Reply Last reply Reply Quote 0
      • liv-in-sky
        liv-in-sky @paul53 last edited by

        @paul53
        vielleicht ist das im script_enabled ordner ein sonderfall ?

        leider weiß ich nicht, ob das nur bei mir so ist - oder allgemein

        paul53 1 Reply Last reply Reply Quote 0
        • C
          Chrunchy @liv-in-sky last edited by

          @liv-in-sky Setzte bei dem Script ein Timeout vor der Prüfung beim Script Start.

          Bei einem Neustart habe ich noch keine Regel festgestellt, in welcher Reihenfolge die vorhandenen Scripte gestartet werden. Bei Prüfungen die vom Status anderer Adapter oder Scripten abhängig sind, setzte ich beim Scriptstart einen Timeout, damit beim System-/Adapterstart die anderen Scripte vorher gestartet werden können.

          liv-in-sky 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @liv-in-sky last edited by paul53

            @liv-in-sky sagte:

            vielleicht ist das im script_enabled ordner ein sonderfall ?

            Habe mal getestet mit folgender Schleife (ohne Instanz-Neustart):

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

            Als Wert wird mir immer false angezeigt, obwohl 3 von 4 Skripte aktiviert sind.

            EDIT: Habe mal das 4. Script aktiviert: Nur bei diesem wird der Wert true ausgegeben, der Wert der anderen 3 aktiven Skripte bleibt false.

            liv-in-sky 1 Reply Last reply Reply Quote 0
            • liv-in-sky
              liv-in-sky @Chrunchy last edited by

              @Chrunchy hatte ich auch schon überlegt (und werd das auch def. so einbauen) - aber dann müßte ein instanz restart bei deaktivierten prüf-script helfen - das prüfscript wird erst nach dem restart der instanz von hand enabled - dann msollte eigentlich alles da sein (momentan habe ich keinen trigger dafür) - das bringt aber leider nicht das ergebnis

              oder anders: nach neustart wird das script ausgführt und hat falsches ergebnis - dann stoppe ich das prüfscript und aktiviere es wieder : und wieder ist die anzeige falsch - das wäre eine "händische" zeitverzögerung - die richtige anzeige kommt erst, wenn ich das zu prüfende script einmal neustarte und dann das prüfscript laufen lasse

              oder kann es sein : da das zu prüfende script ja einen falschen (nicht existierenden trigger-dp hat)

              1 Reply Last reply Reply Quote 0
              • liv-in-sky
                liv-in-sky @paul53 last edited by

                @paul53

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

                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @liv-in-sky last edited by

                  @liv-in-sky sagte:

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

                  Ja.

                  liv-in-sky 2 Replies Last reply Reply Quote 0
                  • liv-in-sky
                    liv-in-sky @paul53 last edited by

                    @paul53

                    bug oder feature ?

                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @liv-in-sky last edited by

                      @liv-in-sky sagte:

                      bug oder feature ?

                      ?? Entwickler fragen.

                      1 Reply Last reply Reply Quote 0
                      • liv-in-sky
                        liv-in-sky @paul53 last edited by

                        @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

                        paul53 1 Reply Last reply Reply Quote 0
                        • liv-in-sky
                          liv-in-sky last edited by

                          @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

                          AlCalzone 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @liv-in-sky last edited by paul53

                            @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)});
                            });
                            
                            1 Reply Last reply Reply Quote 0
                            • AlCalzone
                              AlCalzone Developer @liv-in-sky last edited by

                              @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-sky paul53 2 Replies Last reply Reply Quote 0
                              • liv-in-sky
                                liv-in-sky @AlCalzone last edited by

                                @AlCalzone

                                momentan 4.8.4

                                1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @AlCalzone last edited by

                                  @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-sky 1 Reply Last reply Reply Quote 0
                                  • liv-in-sky
                                    liv-in-sky @paul53 last edited by 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 ?

                                    paul53 1 Reply Last reply Reply Quote 0
                                    • paul53
                                      paul53 @liv-in-sky last edited by

                                      @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-sky 1 Reply Last reply Reply Quote 0
                                      • liv-in-sky
                                        liv-in-sky @paul53 last edited by

                                        @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

                                        AlCalzone 1 Reply Last reply Reply Quote 0
                                        • AlCalzone
                                          AlCalzone Developer @liv-in-sky last edited by 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-sky AlCalzone 4 Replies Last reply Reply Quote 0
                                          • liv-in-sky
                                            liv-in-sky @AlCalzone last edited by

                                            @AlCalzone

                                            jetzt sind alle true 😞

                                            Image 4.png

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            802
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            4
                                            51
                                            2444
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo