Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Meine ersten schritte mit JavaScript

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Meine ersten schritte mit JavaScript

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      RedOne last edited by

      dankeschön erstmal

      JavaScript einführung kenne ich

      die Doku zu hab ich noch nicht gelesen bin aber jetzt dabei.

      Gesendet von meinem SM-G935F mit Tapatalk

      1 Reply Last reply Reply Quote 0
      • R
        RedOne last edited by

        hab jetzt die Einführungs Doku komplett durchgelesen vieles hab ich auch denk ich erst mal verstanden.

        die Github doku na ja mein Englisch ist nicht das aller beste aber ich bin noch dran.

        auf jeden fall ich verstehe die "on" function nicht. kann mir die vll. jemand für blöde erklären.

        grus chris

        Gesendet von meinem SM-G935F mit Tapatalk

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

          @RedOne:

          ich verstehe die "on" function nicht. `
          Wäre schön, wenn Du spezifizierst, was Du nicht verstehst.

          Allgemein: on(Muster, callback) reagiert auf Ereignisse von Datenpunkten und führt bei Eintreffen des im Muster spezifizierten Ereignisses die callback-Funktion aus. Es gibt bezüglich des Musters eine Besonderheit:

          on('ID-String', callback);
          

          triggert auf jede Wertänderung des Datenpunktes (Aktualisierung von lc).

          on({id: 'ID-String'}, callback);
          

          triggert bei jeder Aktualisierung des Zeitstempels (ts) vom Datenpunkt, auch wenn sich dabei der Wert nicht ändert.

          An die callback-Funktion wird das komplette Datenpunkt-Objekt übergeben, das sowohl den statischen Teil (.id, .common, .native, …) als auch den dynamischen Teil / Zustand (.state, .oldState) enthält.

          Bei weiteren Verständnisproblemen zu "on" bitte konkret fragen.

          1 Reply Last reply Reply Quote 0
          • R
            RedOne last edited by

            nehmen wir z.b function (dp)

            für was ist die Zuständig oder function(obj)

            bei fhem zb. lief das das immer

            machte man mit doif was man wollte und das script lief automatisch immer wenn ein zustand geändert wurde

            also quasi wie in arduino die loop scheife.

            also sorry immoment steh ich total auf dem schlauch ich mein mein script läuft ja dank dir und auch danke dafür aber ich weis nicht wie es funktioniert

            nur was es tut zumindest denk ich das.

            der on befehl lauscht ob der schalter idVorheizen gedrückt wurde und schaltet danach das was in der Funktion steht

            warum frägt jetzt aber noch mal dp.state.val

            Gesendet von meinem SM-G935F mit Tapatalk

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

              @RedOne:

              nehmen wir z.b function (dp)

              für was ist die Zuständig oder function(obj) `
              Mit function(dp) {…} wird die Callback-Funktion als anonyme Funktion (ohne Namen) deklariert, wobei dp den Namen für das übergebene Datenpunktobjekt angibt, damit innerhalb der Funktion darauf zugegriffen werden kann. Der Name kann beliebig gewählt werden.
              @RedOne:

              warum frägt jetzt aber noch mal dp.state.val `
              Die Skriptvariable SchalterBadVorheizen muss mit dem neuen (.state) Wert (.val) des Datenpunktes (dp) aktualisiert werden, damit die if-Abfrage innerhalb der anschließend aufgerufenen Funktion heizen() richtig funktioniert.

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

                Vielleicht wird es leichter verständlich, wenn ich das Skript ohne die Skriptvariable SchalterBadVorheizen und mit anderen Namen verändere:

                const idVorheizen = 'javascript.0.VirSchalterBadVorheizen';
                
                function heizen(zustand) {
                   if (zustand.val === "on") {
                      setState("javascript.0.testSchalter", false);
                      log("Schalter ist an");
                   } else {
                      setState ("javascript.0.testSchalter", true);
                      log("Schalter ist aus");
                   }
                }
                
                heizen(getState(idVorheizen)); // Skriptstart
                
                // Trigger bei Wertänderung des Schalters
                on(idVorheizen, function(datenpunkt) {
                   heizen(datenpunkt.state);
                });
                
                1 Reply Last reply Reply Quote 0
                • R
                  RedOne last edited by

                  also ich glaub ich hab es zu 80 % verstanden bleiben wir mal bei dem mit den variablen.

                  ich sag im in dem on befehl pass auf ob sich der verändert in idVorheizen wenn er sich ändert schreib den wert in die namenlose funktion und führe in aus richtig ?

                  Gesendet von meinem SM-G935F mit Tapatalk

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

                    @RedOne:

                    ich sag im in dem on befehl pass auf ob sich der verändert in idVorheizen wenn er sich ändert schreib den wert in die namenlose funktion und führe in aus richtig ? `
                    Im Prinzip ja: … wenn sich der Wert ändert, Übergebe das Datenpunkt-Objekt unter dem gewählten Namen an die anonyme Funktion und führe die Funktion aus.

                    1 Reply Last reply Reply Quote 0
                    • R
                      RedOne last edited by

                      okay dann glaub ich hab ich es jetzt.

                      und wie funktioniert das wenn ich 2 und mehr States überwachen möchte muss ich dann mehrere on funktionen in eine Funktion schreiben und wieder rum dann diese Funktion überwachen?

                      und wenn ich auf zeit triggern möchte statt auf zustand wechsel mach ich die geschweiften klammern rein?

                      grus Chris

                      Gesendet von meinem SM-G935F mit Tapatalk

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

                        @RedOne:

                        und wenn ich auf zeit triggern möchte statt auf zustand wechsel mach ich die geschweiften klammern rein? `
                        Welche geschweifeten Klammern meinst Du ? Wenn eine anonyme Funktion deklariert wird, muss der Code der Funktion immer in geschweifte Klammern. Bei Triggern auf Zeit (schedule) wird allerdings kein Datenpunkt-Objekt übergeben, d.h. es ist auch kein Name zu übergeben:

                        // Triggern jede Minute
                        schedule('* * * * *', function() {
                           hier kommt der Code der Funktion rein
                        });
                        

                        @RedOne:

                        und wie funktioniert das wenn ich 2 und mehr States überwachen möchte `
                        Beispiel: Mittelwert aus 3 Datenpunkten:

                        const idMittel = '...';  // ID des Datenpunktes für Mittelwert
                        var a, b, c;
                        
                        function mittel() {
                           setState(idMittel, (a + b + c) / 3):
                        }
                        
                        on('ID Datenpunkt a', function(dp) {
                           a = dp.state.val;
                           mittel();
                        });
                        on('ID Datenpunkt b', function(dp) {
                           b = dp.state.val;
                           mittel();
                        });
                        on('ID Datenpunkt c', function(dp) {
                           c = dp.state.val;
                           mittel();
                        });
                        
                        1 Reply Last reply Reply Quote 0
                        • R
                          RedOne last edited by

                          on ({idVorheizen}, function (dp){
                          
                          });
                          
                          

                          jetzt schaut er wohl laut log im Sekundentakt ob sich ein Wert geändert hat anhand vom Zeitstempel.

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

                            @RedOne:

                            jetzt schaut er wohl laut log im Sekundentakt ob sich ein Wert geändert `
                            :?: Dieses Konstrukt (ID in Klammern) habe ich noch nicht probiert. Die Klammern sind jedenfalls falsch. Richtig:

                            on (idVorheizen, function (dp){
                            
                            });
                            
                            
                            1 Reply Last reply Reply Quote 0
                            • AlCalzone
                              AlCalzone Developer last edited by

                              @paul53:

                              Dieses Konstrukt (ID in Klammern) habe ich noch nicht probiert `
                              Das macht auch keinen Sinn.

                              {idVorheizen}
                              

                              ist in ES6 eine Abkürzung für

                              {idVorheizen: idVorheizen}
                              
                              1 Reply Last reply Reply Quote 0
                              • S
                                starfish last edited by

                                @paul53:

                                Die https://github.com/ioBroker/ioBroker.javascript/blob/master/README.md kennst Du ? Und auch die http://www.iobroker.net/docu/?page_id=5385&lang=de ? `
                                Diese Einführung ist in der Tat sehr gut und empfehlenswert. Was ich aber nicht finde, sind genauere Erläuterungen zu Arrays. Habe ich etwas übersehen - oder ist die Einführung einfach noch nicht fertig? (….Was das ist, schauen wir uns im Abschnitt über Arrays im Detail an ...)

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

                                  @starfish:

                                  Diese Einführung ist in der Tat sehr gut und empfehlenswert. Aber leider fehlerhaft, die Tabelle zu den logischen Operatoren betreffend: > Eingabe Ergebnis

                                  A B A && B A || B !A

                                  false false true false true

                                  false true false true false

                                  true false false true false

                                  true true true true false `
                                  Richtig:

                                  Eingabe      Ergebnis
                                  A     B      A && B A || B !A
                                  false false  false  false  true
                                  false true   false  true   true
                                  true  false  false  true   false
                                  true  true   true   true   false
                                  

                                  Bitte korrigieren !

                                  1 Reply Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators last edited by

                                    @paul53:

                                    Bitte korrigieren ! `

                                    Jawoll 😉

                                    erledigt.

                                    Bitte kontrollieren!

                                    Rainer

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

                                      @Homoran:

                                      Bitte kontrollieren! `
                                      Passt 😄 Super schnelle Reaktion 8-)

                                      1 Reply Last reply Reply Quote 0
                                      • R
                                        RedOne last edited by

                                        so weit bin ich noch nicht.

                                        um mit Arrays zu arbeiten.

                                        ich hab mein Script ja jetzt am Laufen mit dem BadVorheizen und mir fiel da was auf.

                                        
                                        var BadVorheizenSchalter = "javascript.0.VirSchalterBadVorheizen";      //Virtueller Schalter muss erstellt sein
                                        var BadVorheizenSchalterZustand = getState(BadVorheizenSchalter).val;   // Status aus Virtuellem schaltter lesen
                                        
                                        // Funktion wo sie heizung aktivirt wenn BadVorheizenschalter True gesetzt wird
                                        function BadVorheizenAktivieren(){
                                            switch(BadVorheizenSchalterZustand)
                                            {
                                                case true: setState("hm-rpc.0.BidCoS-RF.1.PRESS_SHORT");
                                                            setStateDelayed(BadVorheizenSchalter, false, 2000);
                                                break;
                                        
                                            }
                                        }
                                        
                                        // Überwachung des schalters und bei True wird geschaltet
                                        on(BadVorheizenSchalter, function(dp)
                                        {
                                            BadVorheizenSchalterZustand = dp.state.val;
                                            BadVorheizenAktivieren();
                                        
                                        });
                                        
                                        

                                        Da ich das mit dem schedule noch nicht hinbekomme bzw. noch nicht mit befasst habe.

                                        habe ich das ganze über ein programm in der ccu gemacht das dann die Heizung nach 20min wieder ausgeht.

                                        funktioniert auch alles wenn ich sage Alexa Bad Vorheizen springt die Heizung an und geht nach 20 min wieder aus aber nur 2 Tage lang wenn ich es dann mache sagt Alexa okay aber es passiert nichts mehr.

                                        Wenn ich den schalter BadVorheizen händisch auf True setze passiert auch nichts mehr.

                                        Der schalter wieder rum in der CCU funktioniert aber noch.

                                        wenn ich dann aber hingehe und das Script stoppe und wieder starte funktioniert es wieder und dann plötzlich nicht mehr nach ca 2 Tagen.

                                        Habt ihr eine Lösung? oder eine Idee?

                                        hab es jetzt erst mal mit Blockly nach gestellt.

                                        und jetzt läuft es seit gestern mal schauen ob es wieder aussteigt.

                                        Gesendet von meinem SM-G935F mit Tapatalk

                                        1 Reply Last reply Reply Quote 0
                                        • AlCalzone
                                          AlCalzone Developer last edited by

                                          Nicht sicher, ob das was damit zu tun hat, aber sollte

                                          setState("hm-rpc.0.BidCoS-RF.1.PRESS_SHORT");
                                          

                                          nicht

                                          setState("hm-rpc.0.BidCoS-RF.1.PRESS_SHORT", true);
                                          

                                          heißen?

                                          1 Reply Last reply Reply Quote 0
                                          • R
                                            RedOne last edited by

                                            ähm ja bei meinen schaltern muss es so heisen

                                            bei der ccu weis ich gerade nicht.

                                            werd ich gleich mal reinschrieben

                                            Gesendet von meinem SM-G935F mit Tapatalk

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            811
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            22
                                            2679
                                            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