Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. If Then mehrfach [gelöst]

    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

    If Then mehrfach [gelöst]

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

      Hi,
      ich habe ein Ausrufezeichen im Script. Funktionieren tut es.

      Mein HMIP Windmesser soll mein VIS Dashboard mit textuellem Windinformationen in Beaufort versorgen. Wie gesagt, funktionieren tut es, aber...

          var Beaufort            = 'undefined';
          if (0 < windspeedakt && windspeedakt < 1) {var Beaufort='Windstill';}
          if (1 < windspeedakt && windspeedakt < 6) {var Beaufort='leiser Zug';}
          if (6 < windspeedakt && windspeedakt < 12) {var Beaufort='leichte Briese';}
          if (12 < windspeedakt && windspeedakt < 20) {var Beaufort='schwacher Wind';}
          if (20 < windspeedakt && windspeedakt < 29) {var Beaufort='mäßiger Wind';}
          if (29 < windspeedakt && windspeedakt < 39) {var Beaufort='frischer Wind';}
          if (39 < windspeedakt && windspeedakt < 50) {var Beaufort='starker Wind';}
          if (50 < windspeedakt && windspeedakt < 62) {var Beaufort='steifer Wind';}
          if (62 < windspeedakt && windspeedakt < 75) {var Beaufort='stürmischer Wind';}
          if (75 < windspeedakt && windspeedakt < 89) {var Beaufort='Sturm';}
          if (89 < windspeedakt && windspeedakt < 103) {var Beaufort='schwerer Sturm';}
          if (103 < windspeedakt && windspeedakt < 118) {var Beaufort='orkanartiger Sturm';}
          if (windspeedakt > 118) {var Beaufort='Orkan';}
          setState("status_Wind.Beaufort", Beaufort);    
      

      Vielen Dank
      Carsten

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

        ..........

        1 Reply Last reply Reply Quote 0
        • htrecksler
          htrecksler Forum Testing last edited by

          und wie lautet die Frage?

          ceng 1 Reply Last reply Reply Quote 0
          • ceng
            ceng @htrecksler last edited by

            @htrecksler
            Danke für die schnelle Antwort.

            Ist das die richtige Art, eine If-Then Abfrage zu machen? Gibt es eine "richtigere"? Wenn das Blockly schon sagt, "Ausrufezeichen", dann ist dort doch was im Argen, oder?

            1 Reply Last reply Reply Quote 0
            • htrecksler
              htrecksler Forum Testing last edited by

              ich hab jetzt gerade nicht so viel Zeit, und ich kenn ja den Rest des Scriptes nicht (wo wird aufgerufen, wie oft wird das benötigt...)

              In jedem Fall würde ich mir eine Funktion schreiben die den Text ermittelt. Der Funktion dann die aktuelle Windgeschwindigkeit übergeben und dann die einzelnen Stärken prüfen, angefangen bei Windstill. Bei einem Treffer dann aus der Funktion herausspringen....
              Und wenn es öfter gebraucht wird würde ich das dann in einem "globalen" script (aber das wirklich nur wenn man es häufiger in verschiedenen Scripten benötigt) umsetzen.

              Wie gesagt, ich muss weg, aber wenn bis heute Abend noch kein anderer reagiert hat (das ist eigentlich genau das richtige für Paul :-)) dann ...

              1 Reply Last reply Reply Quote 0
              • liv-in-sky
                liv-in-sky last edited by

                mach doch mal ein bild deines blockly

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

                  @ceng Die Variable Beaufort nur einmal deklarieren !

                  ceng 1 Reply Last reply Reply Quote 0
                  • bahnuhr
                    bahnuhr Forum Testing Most Active last edited by

                    Was machst du wenn der Wind = 20 ist.
                    Dann läuft das Script ins Leere.

                    Also mal ein <= oder >= setzen.

                    Weiterhin könntest du mit "else if" arbeiten, dann hast du nur jeweils eine Werteangabe.

                    Also ungefähr so:

                    if (windspeedakt < 1) { Beaufort = "Windstill"; } 
                    else if (windspeedakt < 6) { Beaufort = "leiser Zug"; } 
                    else if (windspeedakt < 12) { Beaufort = "leichte Brise"; } 
                    ...
                    else { Beaufort = "Orkan"};
                    

                    mfg

                    ceng bahnuhr 2 Replies Last reply Reply Quote 0
                    • ceng
                      ceng @bahnuhr last edited by ceng

                      @bahnuhr
                      Nachdem ich Dein Scriptschnipsel gesehen habe, passte ich mein Script folgendermassen an und siehe da, die Ausrufezeichen sind weg. Ich darf nur einmal "var beaufort" schreiben...

                      var aktuellerWind = getState("hm-rpc.2.0017D709AE3070.1.WIND_SPEED"/*HmIP-SWO-B 0017D709AE3070:1.WIND_SPEED*/).val;
                      var loggen = false;  // = false, wenn kein Logging gewünscht
                      var timestamp = Date();
                      var timestampUnix = Math.round(+new Date()/1000);
                      
                      createState('status_Wind.Windstatus', 'INITIAL', {type: 'string'});           // Wetterstatus
                      createState('status_Wind.Beaufort', 'INITIAL', {type: 'string'});           // Wetterstatus
                      
                      createState('status_Wind.timestampaktWind', 'INITIAL', {type: 'string'});       // Ausführungsdatum
                      createState('status_Wind.timestampaktWindUnix', timestampUnix, {type: 'number'});// Ausführungsdatum Unix Format
                      createState('status_Wind.windspeedakt', 0, {type: 'number'});                   // aktuelle Windgeschwindigkeit
                      
                      createState('status_Wind.timestamp1Wind', 'INITIAL', {type: 'string'});         // Ausführungsdatum
                      createState('status_Wind.windspeed1', 0, {type: 'number'});                     // letzte Windgeschwindigkeit
                      createState('status_Wind.timestamp2Wind', 'INITIAL', {type: 'string'});         // Ausführungsdatum
                      createState('status_Wind.windspeed2', 0, {type: 'number'});                     // vorletzte Windgeschwindigkeit
                      createState('status_Wind.timestamp3Wind', 'INITIAL', {type: 'string'});         // Ausführungsdatum
                      createState('status_Wind.windspeed3', 0, {type: 'number'});                     // vorvorletzte Windgeschwindigkeit
                      
                      
                      function windstate() {
                          var windspeedakt        = getState("hm-rpc.2.0017D709AE3070.1.WIND_SPEED"/*HmIP-SWO-B 0017D709AE3070:1.WIND_SPEED*/).val;             // Windgeschwindigkeit
                          var windspeed1          = getState("javascript.0.status_Wind.windspeedakt"/*status_Wind.windspeedakt*/).val;             // letzte Windgeschwindigkeit
                          var windspeed2          = getState("javascript.0.status_Wind.windspeed1"/*status_Wind.windspeedakt*/).val;             // vorletzte Windgeschwindigkeit
                          var windspeed3          = getState("javascript.0.status_Wind.windspeed2"/*status_Wind.windspeedakt*/).val;             // vorletzte Windgeschwindigkeit
                          var winddurchschnitt    = ( windspeedakt + windspeed1 + windspeed2 + windspeed3 ) / 4;
                          
                          var timestampaktWind    = timestamp;
                          var timestampaktWindUnix= getState("javascript.0.status_Wind.timestampaktWindUnix").val;
                          var timestamp1Wind      = getState("javascript.0.status_Wind.timestampaktWind"/*status_Wind.windspeedakt*/).val;        // Zeit letzte Windgeschwindigkeit
                          var timestamp2Wind      = getState("javascript.0.status_Wind.timestamp1Wind"/*status_Wind.windspeedakt*/).val;          // Zeit vorletzte Windgeschwindigkeit
                          var timestamp3Wind      = getState("javascript.0.status_Wind.timestamp2Wind"/*status_Wind.windspeedakt*/).val;          // Zeit vorvorletzte Windgeschwindigkeit
                          
                          var timediff            = timestampUnix-timestampaktWindUnix;
                          
                          var Beaufort            = 'undefined';
                          if (0 < windspeedakt && windspeedakt < 1) {Beaufort='Windstill';}
                          if (1 < windspeedakt && windspeedakt < 6) {Beaufort='leiser Zug';}
                          if (6 < windspeedakt && windspeedakt < 12) {Beaufort='leichte Briese';}
                          if (12 < windspeedakt && windspeedakt < 20) {Beaufort='schwacher Wind';}
                          if (20 < windspeedakt && windspeedakt < 29) {Beaufort='mäßiger Wind';}
                          if (29 < windspeedakt && windspeedakt < 39) {Beaufort='frischer Wind';}
                          if (39 < windspeedakt && windspeedakt < 50) {Beaufort='starker Wind';}
                          if (50 < windspeedakt && windspeedakt < 62) {Beaufort='steifer Wind';}
                          if (62 < windspeedakt && windspeedakt < 75) {Beaufort='stürmischer Wind';}
                          if (75 < windspeedakt && windspeedakt < 89) {Beaufort='Sturm';}
                          if (89 < windspeedakt && windspeedakt < 103) { Beaufort='schwerer Sturm';}
                          if (103 < windspeedakt && windspeedakt < 118) {Beaufort='orkanartiger Sturm';}
                          if (windspeedakt > 118) {Beaufort='Orkan';}
                          setState("status_Wind.Beaufort", Beaufort);                                 // Schreibt Beaufort Bezeichnung
                          
                          setState("status_Wind.timestampaktWind", timestampaktWind);                 // Schreibt Datum des Ausführung
                          setState("status_Wind.timestampaktWindUnix", timestampUnix);                // Schreibt Datum des Ausführung zur Berechung
                          setState("status_Wind.timestamp1Wind", timestamp1Wind);                     // überträgt Datum des letzten Ausführung
                          setState("status_Wind.timestamp2Wind", timestamp2Wind);                     // überträgt Datum des vorletzten Ausführung
                          setState("status_Wind.timestamp3Wind", timestamp3Wind);                     // überträgt Datum des vorvorletzten Ausführung
                          
                          setState("status_Wind.windspeedakt", windspeedakt);                         
                          setState("status_Wind.windspeed1", windspeed1);                          
                          setState("status_Wind.windspeed2", windspeed2);                         
                          setState("status_Wind.windspeed3", windspeed3); 
                          
                      
                          
                          if(loggen) log("Zeitdifferenz seit letztem Status: " + timediff);
                          if(loggen) log("Aktueller Wind: " + windspeedakt);
                          if(loggen) log("1 Wind: " + windspeed1);
                          if(loggen) log("2 Wind: " + windspeed2);
                          if(loggen) log("3 Wind: " + windspeed3);
                          if(loggen) log("Durchschnitt: " + winddurchschnitt);
                          
                          //if (windspeedakt>20){"status_Wind.Wetterstatus", 'Windig'}
                                  
                      }
                      
                      windstate();
                      
                      on(
                          {id: 'hm-rpc.2.0017D709AE3070.1.WIND_SPEED', change: "ne"}, function (obj) {
                              windstate();
                              console.log('Windspeed changed');
                      });
                      
                      1 Reply Last reply Reply Quote 0
                      • ceng
                        ceng @paul53 last edited by ceng

                        @paul53
                        Ok, was bedeutet "nur einmal deklarieren". Mit dem Beispiel von Bahnuhr wurde mir Deine Aussage dann klar.

                        paul53 1 Reply Last reply Reply Quote 0
                        • bahnuhr
                          bahnuhr Forum Testing Most Active @bahnuhr last edited by

                          @bahnuhr sagte in If Then mehrfach [gelöst]:

                          Was machst du wenn der Wind = 20 ist.
                          Dann läuft das Script ins Leere.

                          Das Problem hast du aber immer noch.

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

                            @ceng Die Abfrage kann vereinfacht werden, da nur eine Variable gesetzt wird, die beliebig oft überschrieben werden kann.

                                var Beaufort = 'Windstill';
                                if (1 < windspeedakt)  Beaufort = 'leiser Zug';
                                if (6 < windspeedakt)  Beaufort = 'leichte Briese';
                                if (12 < windspeedakt) Beaufort = 'schwacher Wind';
                                if (20 < windspeedakt) Beaufort = 'mäßiger Wind';
                                if (29 < windspeedakt) Beaufort = 'frischer Wind';
                                if (39 < windspeedakt) Beaufort = 'starker Wind';
                                if (50 < windspeedakt) Beaufort = 'steifer Wind';
                                if (62 < windspeedakt) Beaufort = 'stürmischer Wind';
                                if (75 < windspeedakt) Beaufort = 'Sturm';
                                if (89 < windspeedakt) Beaufort = 'schwerer Sturm';
                                if (103 < windspeedakt) Beaufort = 'orkanartiger Sturm';
                                if (windspeedakt > 118) Beaufort = 'Orkan';
                            
                            1 Reply Last reply Reply Quote 0
                            • bahnuhr
                              bahnuhr Forum Testing Most Active last edited by

                              Paul,
                              die Werte passen aber nicht zu den Werten vom TE.

                              Bei 5 wollte er z.B. "leiser Zug"; bei dir steht jetzt "leichte Briese"

                              Aber egal, muss er halt anpassen so wie er es will.

                              mfg

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

                                @bahnuhr sagte:

                                Bei 5 wollte er z.B. "leiser Zug"; bei dir steht jetzt "leichte Briese"

                                ??

                                1 Reply Last reply Reply Quote 0
                                • bahnuhr
                                  bahnuhr Forum Testing Most Active last edited by

                                  TE:

                                  if (0 < windspeedakt && windspeedakt < 1) {var Beaufort='Windstill';}
                                      if (1 < windspeedakt && windspeedakt < 6) {var Beaufort='leiser Zug';}
                                      if (6 < windspeedakt && windspeedakt < 12) {var Beaufort='leichte Briese';}
                                  

                                  Paul:

                                      if (1 < windspeedakt)  Beaufort = 'leiser Zug';
                                      if (6 < windspeedakt)  Beaufort = 'leichte Briese';
                                      if (12 < windspeedakt) Beaufort = 'schwacher Wind';
                                  

                                  Bei Wert 5 ergibt oben was anderes als unten.
                                  Oder lese ich falsch.
                                  Ist aber auch nicht schlimm, kann er ja ändern.

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

                                    @bahnuhr sagte:

                                    Bei Wert 5 ergibt oben was anderes als unten.

                                    Wirklich ? Wert 5 ergibt in beiden Fällen "leiser Zug".

                                    bahnuhr 1 Reply Last reply Reply Quote 0
                                    • bahnuhr
                                      bahnuhr Forum Testing Most Active @paul53 last edited by

                                      @paul53 sagte in If Then mehrfach [gelöst]:

                                      Wirklich ? Wert 5 ergibt in beiden Fällen "leiser Zug".

                                      Ok, hast recht. Hab falsch gelesen.
                                      Entschuldigung.

                                      1 Reply Last reply Reply Quote 0
                                      • G
                                        George_Best last edited by

                                        Wäre ein "switch - case" nicht die bessere Wahl?

                                        So in der Art:

                                        switch (windspeedakt) {
                                            case < 6:
                                                Beaufort = 'leichte Briese;
                                                break;
                                            case <12:
                                                Beaufort = 'schwacher Wind';  
                                                break;
                                            ...
                                        
                                            default:
                                               Beaufort = "irgendwas".;
                                             break;
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • bahnuhr
                                          bahnuhr Forum Testing Most Active last edited by

                                          case funktioniert auch.

                                          Aber vielleicht könnte mal ein Experte sagen, ob es da eine bessere Methode gibt.

                                          Für mich hätte "if", "else if" oder case den gleichen Effekt.
                                          Gibts da eine Auswahl "was ist besser ?"

                                          G 1 Reply Last reply Reply Quote 0
                                          • G
                                            George_Best @bahnuhr last edited by

                                            @bahnuhr sagte in If Then mehrfach [gelöst]:

                                            case funktioniert auch.

                                            Aber vielleicht könnte mal ein Experte sagen, ob es da eine bessere Methode gibt.

                                            Für mich hätte "if", "else if" oder case den gleichen Effekt.
                                            Gibts da eine Auswahl "was ist besser ?"

                                            "Switch - Case" ist in der Ausführung schneller, meinte ich mal gehört zu haben. Das liegt wohl daran, dass der Compiler beim Kompilieren den Code effizienter gestalten kann.

                                            Alternative wäre noch eine LookUp-Table, aber das funktioniert meines Wissens nicht mit Vergleichsoperatoren <, > sondern nur mit ===.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            899
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript security
                                            6
                                            20
                                            1159
                                            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