Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. JavaScript beenden mittels anderem Skript?

    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

    JavaScript beenden mittels anderem Skript?

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators @Hc-Yami last edited by

      @hc-yami sagte in JavaScript beenden mittels anderem Skript?:

      Hier wäre es nun mega cool, dass in dem jeweiligem Skript die anderen beiden Skripte deaktiviert werden. So müsste ich bspw. nur noch "Zuhause:" aktivieren.

      Bei Javascript werden Skripte nicht deaktiviert, um sie auszusetzen.
      Javascripte laufen eigentlich immer und reagieren auf Trigger(Änderungen)

      In deinem Fall könntest du wahrscheinlich mit einem Skript einen selbst erstellten Datenpunkt ändern, auf dessen Änderung die Ausführung der anderen Skripte unterbunden wird.
      Nach Rücksetzung würden die anderen Skripte dies "merken" und ihre Aufgabe wieder aufnehmen

      paul53 1 Reply Last reply Reply Quote 1
      • paul53
        paul53 @Homoran last edited by paul53

        @homoran sagte: Bei Javascript werden Skripte nicht deaktiviert, um sie auszusetzen.

        Richtig. Vorschlag für ein Script, das durch eigene Datenpunkte getriggert wird:

        // 0 = Wochenprogramm 1 (normales Wochenprogramm)
        // 1 = Wochenprogramm 2 (Urlaub- oder Feiertagsprogramm)
        // 2 = Wochenprogramm 3 (derzeit nicht genutzt)
        const idUrlaub  = '0_userdata.0.Heizung.Urlaub';
        const idZuhause = '0_userdata.0.Heizung.Zuhause';
        
        var urlaub, zuhause;
        if(existsState(idUrlaub)) urlaub = getState(idUrlaub).val;
        else createState(idUrlaub, false, {type: 'boolean', name: 'Urlaub', role: 'switch'});
        if(existsState(idZuhause)) zuhause = getState(idZuhause).val;
        else createState(idZuhause, false, {type: 'boolean', name: 'Zuhause', role: 'switch'});
        
        function setWeek() {
            let week = 0;
            if(urlaub) week = 1;
            else if(zuhause) week = 2;
            //Schlafzimmer
            sendTo('hm-rpc.1', 'putParamset', {ID: 'INT0000001', paramType: 'MASTER', params: {'WEEK_PROGRAM_POINTER': week}}, res => {
                log(JSON.stringify(res));
            });
            //Wohnzimmer
            sendTo('hm-rpc.1', 'putParamset', {ID: 'INT0000002', paramType: 'MASTER', params: {'WEEK_PROGRAM_POINTER': week}}, res => {
                log(JSON.stringify(res));
            });
            //Badezimmer groß
            sendTo('hm-rpc.1', 'putParamset', {ID: 'INT0000003', paramType: 'MASTER', params: {'WEEK_PROGRAM_POINTER': week}}, res => {
                log(JSON.stringify(res));
            });
        }
        
        setWeek(); // Script start
        on(idUrlaub, function(dp) {
            urlaub = dp.state.val;
            setWeek();
        });
        on(idZuhause, function(dp) {
            zuhause = dp.state.val;
            setWeek();
        });
        
        Homoran H 2 Replies Last reply Reply Quote 1
        • Homoran
          Homoran Global Moderator Administrators @paul53 last edited by

          @paul53 sagte in JavaScript beenden mittels anderem Skript?:

          {type: 'boolean', name: 'Urlaub', role: 'switch'})

          Was bewirkt (im allgemeinen!) die role "Switch"?
          ich habe als role bisher immer value verwendet

          paul53 1 Reply Last reply Reply Quote 1
          • paul53
            paul53 @Homoran last edited by

            @homoran sagte: ich habe als role bisher immer value verwendet

            "value" sind laut Doku "read only" Zahlen.

            1 Reply Last reply Reply Quote 2
            • H
              Hc-Yami @paul53 last edited by Hc-Yami

              @paul53 danke für deinen Skriptvorschlag. 🙂

              Ich benötige jedoch auch einen "Normal" Datenpunkt für iQontrol damit mir der Schieberegler "normal" als true angezeigt wird falls das Wochenprogramm "normal" ist.
              Wäre das so richtig?

              
              
              // 0 = Wochenprogramm 1 (normales Wochenprogramm)
              
              // 1 = Wochenprogramm 2 (Urlaub- oder Feiertagsprogramm)
              
              // 2 = Wochenprogramm 3 (derzeit nicht genutzt)
              
              const idUrlaub  = '0_userdata.0.Heizung.Urlaub';
              
              const idZuhause = '0_userdata.0.Heizung.Zuhause';
              
              const idNormal = '0_userdata.0.Heizung.Normal';
              
              var urlaub, zuhause, normal;
              
              if(existsState(idUrlaub)) urlaub = getState(idUrlaub).val;
              
              else createState(idUrlaub, false, {type: 'boolean', name: 'Urlaub', role: 'switch'});
              
              if(existsState(idZuhause)) zuhause = getState(idZuhause).val;
              
              else createState(idZuhause, false, {type: 'boolean', name: 'Zuhause', role: 'switch'});
              
              if(existsState(idNormal)) normal = getState(idNormal).val;
              
              else createState(idNormal, false, {type: 'boolean', name: 'Normal', role: 'switch'});
               
              function setWeek() {
              
                  if(normal) week = 0;
              
                  else if(urlaub) week = 1;
              
                  else if(zuhause) week = 2;
              
                  //Schlafzimmer
              
                  sendTo('hm-rpc.1', 'putParamset', {ID: 'INT0000001', paramType: 'MASTER', params: {'WEEK_PROGRAM_POINTER': week}}, res => {
              
                      log(JSON.stringify(res));
              
                  });
              
                  //Wohnzimmer
              
                  sendTo('hm-rpc.1', 'putParamset', {ID: 'INT0000002', paramType: 'MASTER', params: {'WEEK_PROGRAM_POINTER': week}}, res => {
              
                      log(JSON.stringify(res));
              
                  });
              
                  //Badezimmer groß
              
                  sendTo('hm-rpc.1', 'putParamset', {ID: 'INT0000003', paramType: 'MASTER', params: {'WEEK_PROGRAM_POINTER': week}}, res => {
              
                      log(JSON.stringify(res));
              
                  });
              
              }
              
              setWeek(); // Script start
              
              on(idUrlaub, function(dp) {
              
                  urlaub = dp.state.val;
              
                  setWeek();
              
              });
              
              on(idZuhause, function(dp) {
              
                  zuhause = dp.state.val;
              
                  setWeek();
              
              });
              
              on(idNormal, function(dp) {
              
                  normal = dp.state.val;
              
                  setWeek();
              
              });
              
              

              Ich denke ich habe den Aufbau des Skriptes verstanden, was ich nur nicht verstanden habe ist wofür folgender Schnipsel ist:

              on(idZuhause, function(dp) {
              
                  zuhause = dp.state.val;
              
                  setWeek();
              
              });
              

              Könntest du mir dafür noch eine Erläuterung geben?
              Auch dir @Homoran vielen Dank für deine Hilfe! 🙂

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Hc-Yami last edited by

                @hc-yami sagte Ich benötige jedoch auch einen "Normal" Datenpunkt für iQontrol

                Nein, wenn weder "Urlaub" noch "zu Hause" dann ist "Normal".

                @hc-yami sagte in JavaScript beenden mittels anderem Skript?:

                wofür folgender Schnipsel ist:

                Es wird bei Wertänderung des Datenpunktes "idZuhause" getriggert, dann der Wert des Trigger-Datenpunktes in die Variable zuhause geschrieben und anschließend die Funktion setWeek() aufgerufen, in der die Variablen zuhause und urlaub ausgewertet werden.

                H 1 Reply Last reply Reply Quote 1
                • H
                  Hc-Yami @paul53 last edited by

                  @paul53 ich benötige den Datenpunkt nicht für das Skript anfürsich, sondern für iQontrol dem ich ja was mitgeben muss:

                  c14397a8-52e0-41e2-a8ca-f632f25282c1-grafik.png

                  Hier kann ich jetzt leider nicht sagen "wenn Zuhause oder Urlaub an -> Normal" aus. Entsprechend wäre am sinnvollsten das auch über das Skript laufen zu lassen, oder?

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Hc-Yami last edited by paul53

                    @hc-yami
                    Entferne den "Knopf Normal". Der muss doch nicht vorhanden sein?
                    Weise den beiden anderen Knöpfen die Datenpunkte unter "0_userdata.0" zu.

                    H 1 Reply Last reply Reply Quote 0
                    • H
                      Hc-Yami @paul53 last edited by

                      @paul53 daran habe ich noch gar nicht gedacht. 😆

                      Gäbe es nun noch die Möglichkeit, dass wenn ich bspw. "Zuhause" auf true gesetzt habe und "Urlaub" auf true ist, "Urlaub" automatisch auf false gesetzt wird & andersherum?

                      Grüße 🙂

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @Hc-Yami last edited by paul53

                        @hc-yami sagte: Gäbe es nun noch die Möglichkeit, dass wenn ich bspw. "Zuhause" auf true gesetzt habe und "Urlaub" auf true ist, "Urlaub" automatisch auf false gesetzt wird & andersherum?

                        Ja, habe den unteren Teil des Scripts ergänzt:

                        on(idUrlaub, function(dp) {
                            urlaub = dp.state.val;
                            if(urlaub && zuhause) setState(idZuhause, false);
                            else setWeek();
                        });
                        on(idZuhause, function(dp) {
                            zuhause = dp.state.val;
                            if(urlaub && zuhause) setState(idUrlaub, false);
                            else setWeek();
                        });
                        
                        H 1 Reply Last reply Reply Quote 0
                        • H
                          Hc-Yami @paul53 last edited by

                          @paul53 das funktioniert mega, vielen Dank! 🙂

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          416
                          Online

                          31.9k
                          Users

                          80.1k
                          Topics

                          1.3m
                          Posts

                          3
                          12
                          534
                          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