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. Meine ersten schritte mit JavaScript

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    23
    1
    1.3k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

Meine ersten schritte mit JavaScript

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
22 Beiträge 5 Kommentatoren 3.5k Aufrufe
  • Ä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.
  • R Offline
    R Offline
    RedOne
    schrieb am zuletzt editiert von
    #1

    hallo ihr mittlerweile bin ich umgezogen von Fhem zu iobroker war ein holpriger weg (mit dem Bananapi) hab es aber geschafft.

    jetzt hab ich mich mal an Javascript probiert und mir mal zwei virtuelle schalter angelegt in ioBroker

    über Objekte -> hinzufügen -> Schalter

    habe darauf hin im JavaScript folgenden Code geschrieben

    var SchalterBadVorheizen = getState("javascript.0.VirSchalterBadVorheizen").val;
    
    if (SchalterBadVorheizen === "on")
    {
        setState("javascript.0.testSchalter", false);
        console.log("Schalter ist an");
    }
    else if (SchalterBadVorheizen === "off")
    {
        setState ("javascript.0.testSchalter", true);
        console.log("Schalter ist aus");
    } 
    

    wenn ich mein Script beende und wieder Starte funktioniert es .

    wenn ich es aber laufen lassen und den Status ändere ändert sich nicht der wert vom testSchalter.

    Kann mir jemand sagen was ich falsch mache?

    Achso wenn Das Script funktioniert wird ein schalter entfernt und eine Heizung kommt rein das man über die winter zeit das bad aufwärmen kann vorm baden.

    und der schalter BadVorheizen soll von Alex geschaltet werden gruS Chris

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      Das Skript wird nur einmal beim Start ausgeführt, denn es fehlt ein Trigger.

      const idVorheizen = 'javascript.0.VirSchalterBadVorheizen';
      var SchalterBadVorheizen = getState(idVorheizen).val;
      
      function heizen() {
         if (SchalterBadVorheizen === "on") {
            setState("javascript.0.testSchalter", false);
            log("Schalter ist an");
         } else {
            setState ("javascript.0.testSchalter", true);
            log("Schalter ist aus");
         } 
      }
      
      heizen(); // Skriptstart
      
      // Trigger bei Wertänderung des Schalters
      on(idVorheizen, function(dp) {
         SchalterBadVorheizen = dp.state.val;
         heizen();
      });
      
      

      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 ?

      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
      • R Offline
        R Offline
        RedOne
        schrieb am zuletzt editiert von
        #3

        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 Antwort Letzte Antwort
        0
        • R Offline
          R Offline
          RedOne
          schrieb am zuletzt editiert von
          #4

          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 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #5

            @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.

            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
            • R Offline
              R Offline
              RedOne
              schrieb am zuletzt editiert von
              #6

              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 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #7

                @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.

                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
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #8

                  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);
                  });
                  

                  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
                  • R Offline
                    R Offline
                    RedOne
                    schrieb am zuletzt editiert von
                    #9

                    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 Antwort Letzte Antwort
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #10

                      @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.

                      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
                      • R Offline
                        R Offline
                        RedOne
                        schrieb am zuletzt editiert von
                        #11

                        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 Antwort Letzte Antwort
                        0
                        • paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von
                          #12

                          @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();
                          });
                          

                          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
                          • R Offline
                            R Offline
                            RedOne
                            schrieb am zuletzt editiert von
                            #13
                            on ({idVorheizen}, function (dp){
                            
                            });
                            
                            

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

                            1 Antwort Letzte Antwort
                            0
                            • paul53P Offline
                              paul53P Offline
                              paul53
                              schrieb am zuletzt editiert von
                              #14

                              @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){
                              
                              });
                              
                              

                              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
                              • AlCalzoneA Offline
                                AlCalzoneA Offline
                                AlCalzone
                                Developer
                                schrieb am zuletzt editiert von
                                #15

                                @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}
                                

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

                                1 Antwort Letzte Antwort
                                0
                                • S Offline
                                  S Offline
                                  starfish
                                  schrieb am zuletzt editiert von
                                  #16

                                  @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 Antwort Letzte Antwort
                                  0
                                  • paul53P Offline
                                    paul53P Offline
                                    paul53
                                    schrieb am zuletzt editiert von
                                    #17

                                    @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 !

                                    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
                                    • HomoranH Nicht stören
                                      HomoranH Nicht stören
                                      Homoran
                                      Global Moderator Administrators
                                      schrieb am zuletzt editiert von
                                      #18

                                      @paul53:

                                      Bitte korrigieren ! `

                                      Jawoll ;-)

                                      erledigt.

                                      Bitte kontrollieren!

                                      Rainer

                                      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                      1 Antwort Letzte Antwort
                                      0
                                      • paul53P Offline
                                        paul53P Offline
                                        paul53
                                        schrieb am zuletzt editiert von
                                        #19

                                        @Homoran:

                                        Bitte kontrollieren! `
                                        Passt :D Super schnelle Reaktion 8-)

                                        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
                                        • R Offline
                                          R Offline
                                          RedOne
                                          schrieb am zuletzt editiert von
                                          #20

                                          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 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

                                          670

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          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