Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Gelöst: On Change

    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

    Gelöst: On Change

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

      Hallo ich habe einen Artikel gefunden, der die Verwendung von Globalen Variablen beschreibt.
      Ich habe von Paul53 folgendes geklaut:

      function variablen_holen() {
      var vAußenTemperatur = getState("hm-rpc.2.00185BE98B3FCA.1.ACTUAL_TEMPERATURE").val;
      var vTemperatur = getState("hm-rpc.0.OEQ0128317.1.TEMPERATURE").val;  //Wintergarten
      var vLux = getState("hm-rpc.2.00185BE98B3FCA.1.ILLUMINATION").val; //LUX Wetterstation
      var vLuxInnen = getState("hm-rpc.2.000D58A9915658.1.CURRENT_ILLUMINATION").val; //LUX Wintergarten
      var vRegen = getState("hm-rpc.2.00185BE98B3FCA.1.RAINING").val;
      var vWind = getState("hm-rpc.2.00185BE98B3FCA.1.WIND_SPEED").val;
      var vAnwesenheit = getState("javascript.0.Anwesenheitssteuerung.Userlist.JemandDa").val;
      
      return {
        AußenTemperatur: vAußenTemperatur,
        Temperatur: vTemperatur,
        Lux: vLux,
        LuxInnen: vLuxInnen,
        Regen: vRegen,
        Anwesenheit: vAnwesenheit,
        Wind: vWind,
          };
      }
      
      var variablen = variablen_holen();
      var Temperatur = variablen.Temperatur;
      var Regen = variablen.Regen;
      var Wind = variablen.Wind;
      var Lux = variablen.Lux;
      var Anwesenheit = variablen.Anwesenheit;
      

      Die variablen enthalten auch Werte. Ich möchte das mein Script auf "Temperatur" Änderung reagiert.

      var variablen = variablen_holen();
      var Temperatur = variablen.Temperatur;
      var Regen = variablen.Regen;
      var Wind = variablen.Wind;
      var Lux = variablen.Lux;
      var Anwesenheit = variablen.Anwesenheit;
      const idSW_Temp = 'javascript.0.Garten.Markisse.SW_Temp'; // Auslösewert Temp
      var SW_Temp = getState(idSW_Temp).val;
      log(Temperatur);
      on({ id: Temperatur, change: 'any' }, function () {
          if (Temperatur <= SW_Temp) {
              log("ist kleiner");
              setState("javascript.0.Garten.Markisse.Bedingung_2", 0)
          } else { setState("javascript.0.Garten.Markisse.Bedingung_2", 1)
           log("ist größer"); };
      });
      

      Leider reagiert das Script nicht. Wo ist der fehler?
      Gruß
      Michael

      htrecksler harrym 2 Replies Last reply Reply Quote 0
      • htrecksler
        htrecksler Forum Testing @michihorn last edited by

        @michihorn pack mal in code-tags...das lässt sich nur schwer lesen

        1 Reply Last reply Reply Quote 0
        • harrym
          harrym @michihorn last edited by

          @michihorn sagte in On Change:

          if (Temperatur <= SW_Temp)

          wo ist die Variable/Datenpunkt?

          bitte scripte/logs und co in die Tags (</>) packen ... ist leichter zu lesen 😉

          M 1 Reply Last reply Reply Quote 0
          • M
            michihorn @harrym last edited by

            @harrym hab ich

            harrym 1 Reply Last reply Reply Quote 0
            • harrym
              harrym @michihorn last edited by

              @michihorn

              if (Temperatur <= SW_Temp) <== wo hast du die Variable?

              M 1 Reply Last reply Reply Quote 0
              • M
                michihorn @harrym last edited by michihorn

                @harrym hab die VAR noch mal mit angefügt
                Aktuell ist die Temperatur 30 und SW_Temp 27

                Normalerweise sollte "on({ id: Temperatur, change: 'any' }, function () {" bei Änderung triggern, tut s aber nicht

                harrym 1 Reply Last reply Reply Quote 0
                • harrym
                  harrym @michihorn last edited by

                  @michihorn du triggerst auf ne variable?

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    michihorn @harrym last edited by

                    @harrym das war der Plan. Sobald sich der Wert der VAR ändert soll das Script laufen.

                    harrym 1 Reply Last reply Reply Quote 0
                    • harrym
                      harrym @michihorn last edited by

                      @michihorn schreib die variable in nen datenpunkt und trigger dann auf den datenpunkt

                      M 1 Reply Last reply Reply Quote 0
                      • M
                        michihorn @harrym last edited by

                        @harrym Ich habe ja extra mit den globalen Variablen experimentiert, so das ich nicht noch weitere DP anlegen muß, denn der DP ist ja über RPC2 angelegt. Um Schreibkram beim Programmieren zu minimieren wollte ich die Globalen Variablen nutzen

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

                          @michihorn sagte:

                          Um Schreibkram beim Programmieren zu minimieren wollte ich die Globalen Variablen nutzen

                          Man kann trotzdem nicht auf einen Wert triggern, sondern nur auf eine ID. Ändere es besser in eine Funktion ids_holen();

                          function ids_holen() {
                            let idAußenTemperatur = "hm-rpc.2.00185BE98B3FCA.1.ACTUAL_TEMPERATURE";
                            let idTemperatur ="hm-rpc.0.OEQ0128317.1.TEMPERATURE";  //Wintergarten
                            let idLux = "hm-rpc.2.00185BE98B3FCA.1.ILLUMINATION"; //LUX Wetterstation
                            let idLuxInnen = "hm-rpc.2.000D58A9915658.1.CURRENT_ILLUMINATION"; //LUX 
                            Wintergarten
                            let idRegen = "hm-rpc.2.00185BE98B3FCA.1.RAINING";
                            let idWind = "hm-rpc.2.00185BE98B3FCA.1.WIND_SPEED";
                            let idAnwesenheit = "javascript.0.Anwesenheitssteuerung.Userlist.JemandDa";
                            return {
                              AußenTemperatur: idAußenTemperatur,
                              Temperatur: idTemperatur,
                              Lux: idLux,
                              LuxInnen: idLuxInnen,
                              Regen: idRegen,
                              Anwesenheit: idAnwesenheit,
                              Wind: idWind,
                            };
                          }
                          
                          M 1 Reply Last reply Reply Quote 0
                          • M
                            michihorn @paul53 last edited by michihorn

                            @paul53 Und wie nehme ich im entsprechenden Script Bezug auf die Variablen? Genau wie vorher auch?

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

                              @michihorn sagte:

                              Bezug auf die Variablen? Genau wie vorher auch?

                              Ja, nur mit dem Unterschied, dass keine Werte, sondern IDs enthalten sind.

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

                                @paul53 sagte in On Change:

                                @michihorn sagte:

                                Bezug auf die Variablen? Genau wie vorher auch?

                                Ja, nur mit dem Unterschied, dass keine Werte, sondern IDs enthalten sind.

                                Danke das hilft mir weiter

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

                                  @michihorn
                                  Dein Script mit IDs könnte so aussehen:

                                  const ids = ids_holen();
                                  const idSW_Temp = 'javascript.0.Garten.Markisse.SW_Temp'; // Auslösewert Temp
                                  
                                  on(ids.Temperatur, function (dp) {
                                      if (dp.state.val <= getState(idSW_Temp).val) {
                                          log("ist kleiner");
                                          setState("javascript.0.Garten.Markisse.Bedingung_2", 0)
                                      } else { 
                                          setState("javascript.0.Garten.Markisse.Bedingung_2", 1)
                                          log("ist größer"); };
                                  });
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  736
                                  Online

                                  31.9k
                                  Users

                                  80.2k
                                  Topics

                                  1.3m
                                  Posts

                                  javascript
                                  4
                                  15
                                  387
                                  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