Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. If Then mehrfach [gelöst]

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.5k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.7k

If Then mehrfach [gelöst]

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascriptsecurity
20 Beiträge 6 Kommentatoren 1.5k Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • bahnuhrB Online
    bahnuhrB Online
    bahnuhr
    Forum Testing Most Active
    schrieb am zuletzt editiert von
    #8

    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


    Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
    Danke.
    gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
    ScreenToGif :https://www.screentogif.com/downloads.html

    cengC bahnuhrB 2 Antworten Letzte Antwort
    0
    • bahnuhrB bahnuhr

      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

      cengC Offline
      cengC Offline
      ceng
      schrieb am zuletzt editiert von ceng
      #9

      @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');
      });
      

      Diverse Raspies am Start

      1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @ceng Die Variable Beaufort nur einmal deklarieren !

        cengC Offline
        cengC Offline
        ceng
        schrieb am zuletzt editiert von ceng
        #10

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

        Diverse Raspies am Start

        paul53P 1 Antwort Letzte Antwort
        0
        • bahnuhrB bahnuhr

          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

          bahnuhrB Online
          bahnuhrB Online
          bahnuhr
          Forum Testing Most Active
          schrieb am zuletzt editiert von
          #11

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


          Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
          Danke.
          gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
          ScreenToGif :https://www.screentogif.com/downloads.html

          1 Antwort Letzte Antwort
          0
          • cengC ceng

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

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #12

            @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';
            

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            1 Antwort Letzte Antwort
            0
            • bahnuhrB Online
              bahnuhrB Online
              bahnuhr
              Forum Testing Most Active
              schrieb am zuletzt editiert von
              #13

              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


              Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
              Danke.
              gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
              ScreenToGif :https://www.screentogif.com/downloads.html

              paul53P 1 Antwort Letzte Antwort
              0
              • bahnuhrB bahnuhr

                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

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #14

                @bahnuhr sagte:

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

                ??

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                1 Antwort Letzte Antwort
                0
                • bahnuhrB Online
                  bahnuhrB Online
                  bahnuhr
                  Forum Testing Most Active
                  schrieb am zuletzt editiert von
                  #15

                  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.


                  Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                  Danke.
                  gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                  ScreenToGif :https://www.screentogif.com/downloads.html

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • bahnuhrB bahnuhr

                    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.

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #16

                    @bahnuhr sagte:

                    Bei Wert 5 ergibt oben was anderes als unten.

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

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    bahnuhrB 1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @bahnuhr sagte:

                      Bei Wert 5 ergibt oben was anderes als unten.

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

                      bahnuhrB Online
                      bahnuhrB Online
                      bahnuhr
                      Forum Testing Most Active
                      schrieb am zuletzt editiert von
                      #17

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


                      Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                      Danke.
                      gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                      ScreenToGif :https://www.screentogif.com/downloads.html

                      1 Antwort Letzte Antwort
                      0
                      • G Offline
                        G Offline
                        George_Best
                        schrieb am zuletzt editiert von
                        #18

                        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 Antwort Letzte Antwort
                        0
                        • bahnuhrB Online
                          bahnuhrB Online
                          bahnuhr
                          Forum Testing Most Active
                          schrieb am zuletzt editiert von
                          #19

                          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 ?"


                          Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                          Danke.
                          gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                          ScreenToGif :https://www.screentogif.com/downloads.html

                          G 1 Antwort Letzte Antwort
                          0
                          • bahnuhrB bahnuhr

                            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 Offline
                            G Offline
                            George_Best
                            schrieb am zuletzt editiert von
                            #20

                            @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 Antwort Letzte Antwort
                            0
                            Antworten
                            • In einem neuen Thema antworten
                            Anmelden zum Antworten
                            • Älteste zuerst
                            • Neuste zuerst
                            • Meiste Stimmen


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            776

                            Online

                            32.4k

                            Benutzer

                            81.4k

                            Themen

                            1.3m

                            Beiträge
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                            ioBroker Community 2014-2025
                            logo
                            • Anmelden

                            • Du hast noch kein Konto? Registrieren

                            • Anmelden oder registrieren, um zu suchen
                            • Erster Beitrag
                              Letzter Beitrag
                            0
                            • Home
                            • Aktuell
                            • Tags
                            • Ungelesen 0
                            • Kategorien
                            • Unreplied
                            • Beliebt
                            • GitHub
                            • Docu
                            • Hilfe