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 - Verständnisproblem mit if ...

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Javascript - Verständnisproblem mit if ...

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

      Hallo Sorry wenn ich hier mal was ganz simples fragen muss. Ich habe hier ein Problem mit einer If Abfrage.

      folgendes teste ich aber jedes mal bei false geht er trotzdem durch das if durch...:

      
      on({id: 'javascript.0.Visuobjekte.SoftSwitch.Timer_Solar_Plug1'/*Timer Solar Plug1*/, change: "ne"}, (obj) => {
      log(obj.state.val)
      
          if (getState('javascript.0.Visuobjekte.SoftSwitch.Timer_Solar_Plug1'))  {
          log("in if")
          }
          else {
              log("nothing")
          }
      
      
      })
      

      else ruft er bei false nicht auf. Was mache ich falsch?

      Gruß

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

        @ErazorVIP sagte:

        Was mache ich falsch?

        Du prüfst das gesamte Zustandsobjekt (state), was immer true liefert, wenn vorhanden. Richtig wäre

            if (getState('javascript.0.Visuobjekte.SoftSwitch.Timer_Solar_Plug1').val)  {
        

        oder besser

            if (obj.state.val)  {
        
        E K 2 Replies Last reply Reply Quote 0
        • E
          ErazorVIP @paul53 last edited by

          @paul53 DANKE!

          1 Reply Last reply Reply Quote 0
          • K
            klassisch Most Active @paul53 last edited by

            @paul53 sagte in Javascript - Verständnisproblem mit if ...:

            oder besser

                if (obj.state.val)  {
            

            warum ist das besser und wo finde ich mehr Informationen dazu?
            Erinnere mich ganz dunkel daran, daß man damit auch den vorherigen Status des Objscts abfragen kann, ohne das selbst zwischenspeichern zu müssen. Habe aber leider nichts mehr dazu gefunden.

            paul53 N 2 Replies Last reply Reply Quote 0
            • paul53
              paul53 @klassisch last edited by paul53

              @klassisch sagte:

              warum ist das besser

              Weil das in der lokalen Variablen obj bereits vorliegt und nicht erst durch eine Funktion abgeholt werden muss (Ressourcenverbrauch).

              @klassisch sagte in Javascript - Verständnisproblem mit if ...:

              wo finde ich mehr Informationen dazu?

              In der Funktions-Doku.

              @klassisch sagte in Javascript - Verständnisproblem mit if ...:

              daß man damit auch den vorherigen Status des Objscts abfragen kann

              Ja, bei on()

              obj.oldState
              
              K 1 Reply Last reply Reply Quote 1
              • N
                Nahasapee @klassisch last edited by Nahasapee

                @klassisch und wenn du in deinem else sowieso "nothing" machen willst und nur auf true reagieren willst kannst du es auch gleich in dein trigger setzen , dann brauchst du gar nix mehr prüfen.

                on({id: 'javascript.0.Visuobjekte.SoftSwitch.Timer_Solar_Plug1'/*Timer Solar Plug1*/, change: "ne" , val :true},(obj)=>{});
                
                1 Reply Last reply Reply Quote 0
                • K
                  klassisch Most Active @paul53 last edited by

                  @paul53

                  so langsam beginnt es zu dämmern.
                  Bisher habe ich verwendet

                  on({id: 'javascript.0.Visuobjekte.SoftSwitch.Timer_Solar_Plug1', change: "ne"}, function() {
                  	result = getState('javascript.0.Visuobjekte.SoftSwitch.Timer_Solar_Plug1').val;
                  });
                  

                  und mich gefragt, warum das Objekt zweimal anfassen muß.
                  Muß man aber nicht, geht auch so

                  on({id: 'javascript.0.Visuobjekte.SoftSwitch.Timer_Solar_Plug1', change: "ne"}, (obj){
                  	result = obj.state.val;	
                  });
                  

                  und es geht noch mehr wie zB. oldState.

                  Ist dabei obj ein fester Begriff oder köönte das auch data123 oder so heißen?

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

                    @klassisch sagte:

                    köönte das auch data123 oder so heißen?

                    Ja. Ich verwende dp, das es das statische Objekt und den Zustand (state, oldState) liefert.

                    on('javascript.0.Visuobjekte.SoftSwitch.Timer_Solar_Plug1', function(dp) { // triggert bei Wertänderung
                       let val = dp.state.val;	
                    });
                    
                    K 1 Reply Last reply Reply Quote 0
                    • K
                      klassisch Most Active @paul53 last edited by

                      @paul53 Danke, also dp als Abkürzung für data point. Muß man die unterscheiden, wenn man mehree "on" statements im Script hat, also dp01, dp02 ?

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

                        @klassisch sagte:

                        Muß man die unterscheiden, wenn man mehree "on" statements im Script hat, also dp01, dp02 ?

                        Nein, Funktionsparameter sind lokal, d.h. nur innerhalb der jeweiligen Callback-Funktion gültig.

                        K 1 Reply Last reply Reply Quote 0
                        • K
                          klassisch Most Active @paul53 last edited by

                          @paul53 Danke! Falls man das schachteln würde (wobei mir bei on jetzt nichts dazu einfiele), dann wäre eine andere Benennung wohl sinnvoll.

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

                            @klassisch sagte:

                            Falls man das schachteln würde (wobei mir bei on jetzt nichts dazu einfiele), dann wäre eine andere Benennung wohl sinnvoll.

                            I.d.R. nicht. Beim Schachteln von Triggern sollte man genau wissen, was man tut.

                            K 1 Reply Last reply Reply Quote 0
                            • K
                              klassisch Most Active @paul53 last edited by

                              @paul53 wenn wir schon bei solchen "Abkürzungen" sind: Kann man den Datenpunkt nach der Operation auch wieder vereinfacht zurückspeichern, also nicht mit setState(id, value), sondern mit dp. irgendwas?

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

                                @klassisch sagte:

                                Kann man den Datenpunkt nach der Operation auch wieder vereinfacht zurückspeichern,

                                Du meinst den Trigger-Datenpunkt ?

                                setState(dp.id, neuer_Wert);
                                

                                Damit löst man aber meist einen neuen Trigger aus.

                                K 1 Reply Last reply Reply Quote 0
                                • K
                                  klassisch Most Active @paul53 last edited by

                                  @paul53 sagte in Javascript - Verständnisproblem mit if ...:

                                  @klassisch sagte:

                                  Kann man den Datenpunkt nach der Operation auch wieder vereinfacht zurückspeichern,

                                  Du meinst den Trigger-Datenpunkt ?

                                  Ja, den Datenpunkt, auf den man getriggert hat, dessen Wert man dann entnommen und verarbeitet hat und dessen neuen Wert man dann zurückspeichern möchte.

                                  setState(dp.id, neuer_Wert);
                                  

                                  Damit löst man aber meist einen neuen Trigger aus.

                                  Oh, das könnte dann oszillieren bzw. in einer Endlosschleife enden.

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

                                    @klassisch sagte:

                                    Oh, das könnte dann oszillieren bzw. in einer Endlosschleife enden.

                                    Ja, wenn man es nicht abfängt.

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    787
                                    Online

                                    31.6k
                                    Users

                                    79.4k
                                    Topics

                                    1.3m
                                    Posts

                                    4
                                    16
                                    696
                                    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