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

                        923
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

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