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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. IF Vergleichsoperator als Variable

NEWS

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

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

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

IF Vergleichsoperator als Variable

Geplant Angeheftet Gesperrt Verschoben JavaScript
9 Beiträge 3 Kommentatoren 432 Aufrufe 3 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.
  • O Offline
    O Offline
    ostseeskipper
    schrieb am zuletzt editiert von ostseeskipper
    #1

    Moin Zusammen,

    ich möchte die funktionierende Prüfung

    if  (getState('0_userdata.0.Smartmeter.AVG3MinutenWirkleistung').val > 1000) { 
    

    mit Variablen bzw. aus einem Array aufbauen

    bis hierher bin ich schon gekommen

    if  (getState(myItems[i][2]).val > myItems[i][4]) {             
    

    leider schaffe ich es aber nicht auch den Vergleichsopetaror gegen eine Variable auszutauschen > oder später =< oder auch ==

    if  (getState(myItems[i][2]).val myItems[i][3] myItems[i][4]) {     
    

    In [i][3] ist '>' gesetzt

    EDIT:
    Alternativ würde ich gern auch eine Variable '>1000' nutzen

    bahnuhrB OliverIOO 2 Antworten Letzte Antwort
    0
    • O ostseeskipper

      Moin Zusammen,

      ich möchte die funktionierende Prüfung

      if  (getState('0_userdata.0.Smartmeter.AVG3MinutenWirkleistung').val > 1000) { 
      

      mit Variablen bzw. aus einem Array aufbauen

      bis hierher bin ich schon gekommen

      if  (getState(myItems[i][2]).val > myItems[i][4]) {             
      

      leider schaffe ich es aber nicht auch den Vergleichsopetaror gegen eine Variable auszutauschen > oder später =< oder auch ==

      if  (getState(myItems[i][2]).val myItems[i][3] myItems[i][4]) {     
      

      In [i][3] ist '>' gesetzt

      EDIT:
      Alternativ würde ich gern auch eine Variable '>1000' nutzen

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

      @ostseeskipper sagte in IF Vergleichsoperator als Variable:

      if (getState(myItems[i][2]).val myItems[i][3] myItems[i][4]) {

      Das verstehe ich überhaupt nicht.
      Schreib mal genauer, was du willst.


      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

      O 1 Antwort Letzte Antwort
      0
      • bahnuhrB bahnuhr

        @ostseeskipper sagte in IF Vergleichsoperator als Variable:

        if (getState(myItems[i][2]).val myItems[i][3] myItems[i][4]) {

        Das verstehe ich überhaupt nicht.
        Schreib mal genauer, was du willst.

        O Offline
        O Offline
        ostseeskipper
        schrieb am zuletzt editiert von ostseeskipper
        #3

        @bahnuhr
        ich möchte Vergleichsoperator in einer variable haben

        <

        ==
        <>
        =<
        =>

        um a < b in einer schleife in
        a > b
        a == b
        a <> b
        usw prüfen zu lassen

        EDIT
        in myItems[i][3] steht der Vergleichsoperator drin

        bahnuhrB 1 Antwort Letzte Antwort
        0
        • O ostseeskipper

          Moin Zusammen,

          ich möchte die funktionierende Prüfung

          if  (getState('0_userdata.0.Smartmeter.AVG3MinutenWirkleistung').val > 1000) { 
          

          mit Variablen bzw. aus einem Array aufbauen

          bis hierher bin ich schon gekommen

          if  (getState(myItems[i][2]).val > myItems[i][4]) {             
          

          leider schaffe ich es aber nicht auch den Vergleichsopetaror gegen eine Variable auszutauschen > oder später =< oder auch ==

          if  (getState(myItems[i][2]).val myItems[i][3] myItems[i][4]) {     
          

          In [i][3] ist '>' gesetzt

          EDIT:
          Alternativ würde ich gern auch eine Variable '>1000' nutzen

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von
          #4

          @ostseeskipper sagte in IF Vergleichsoperator als Variable:

          if (getState(myItems[i][2]).val myItems[i][3] myItems[i][4]) {

          Das funktioniert nicht.
          Du kannst keine Programmkonstrukte (also operatoren)
          gegen Variablen ersetzen.

          Wenn dann kannst du einen string zusammen bauen und mit eval interpretieren lassen,
          was aber allgemein als böse/nicht tun angesehen wird.
          du könntest über eine switch konstruktion alle operatoren aufführen, danach abfragen
          und dann jeweils den richtigen operator direkt angeben.

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          O 2 Antworten Letzte Antwort
          0
          • O ostseeskipper

            @bahnuhr
            ich möchte Vergleichsoperator in einer variable haben

            <

            ==
            <>
            =<
            =>

            um a < b in einer schleife in
            a > b
            a == b
            a <> b
            usw prüfen zu lassen

            EDIT
            in myItems[i][3] steht der Vergleichsoperator drin

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

            @ostseeskipper

            Tut mir leid, ich verstehs nicht.

            1000 hast du doch oben.


            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
            • OliverIOO OliverIO

              @ostseeskipper sagte in IF Vergleichsoperator als Variable:

              if (getState(myItems[i][2]).val myItems[i][3] myItems[i][4]) {

              Das funktioniert nicht.
              Du kannst keine Programmkonstrukte (also operatoren)
              gegen Variablen ersetzen.

              Wenn dann kannst du einen string zusammen bauen und mit eval interpretieren lassen,
              was aber allgemein als böse/nicht tun angesehen wird.
              du könntest über eine switch konstruktion alle operatoren aufführen, danach abfragen
              und dann jeweils den richtigen operator direkt angeben.

              O Offline
              O Offline
              ostseeskipper
              schrieb am zuletzt editiert von
              #6

              @oliverio

              // Arrryzeile [0-Prio, 1-Aktiv, 2-Bedingung DP, 3-Vergleichsoperator, 4-Bedingung Wert, 5-Schalten DP, 6-mit welchen Wert, 7-Kommentar]
              myItems[0] = [1,true,'0_userdata.0.Smartmeter.AVG3MinutenWirkleistung','>',1000,'javascript.0.Anel.1.R3.Rel_Status',1, 'wenn PVÜ > 1000 dann Relais3 einschalten'];
              myItems[1] = [1,true,'0_userdata.0.Smartmeter.AVG3MinutenWirkleistung','<',400,'javascript.0.Anel.1.R3.Rel_Status',0, 'wenn PVÜ < 400 dann Relais3 ausschalten'];
              

              heisst ich muss erst prüfen welcher Vergleichsoperator in der Arrayzeile gewünscht wird und muss dann in ein vorgefertigtes If .... gehen? Für jede Möglichkeit eine extra If Schleife bauen. Das ja unschön.

              Wie geht das mit eval

              if  (getState('0_userdata.0.Smartmeter.AVG3MinutenWirkleistung').val > 1000)] {            
              

              Kann den damit so vorgebaut damit zum Vergleich übergeben?

              1 Antwort Letzte Antwort
              0
              • OliverIOO OliverIO

                @ostseeskipper sagte in IF Vergleichsoperator als Variable:

                if (getState(myItems[i][2]).val myItems[i][3] myItems[i][4]) {

                Das funktioniert nicht.
                Du kannst keine Programmkonstrukte (also operatoren)
                gegen Variablen ersetzen.

                Wenn dann kannst du einen string zusammen bauen und mit eval interpretieren lassen,
                was aber allgemein als böse/nicht tun angesehen wird.
                du könntest über eine switch konstruktion alle operatoren aufführen, danach abfragen
                und dann jeweils den richtigen operator direkt angeben.

                O Offline
                O Offline
                ostseeskipper
                schrieb am zuletzt editiert von
                #7

                @oliverio said in IF Vergleichsoperator als Variable:

                Wenn dann kannst du einen string zusammen bauen und mit eval interpretieren lassen,
                > was aber allgemein als böse/nicht tun angesehen wird.
                du könntest über eine switch konstruktion alle operatoren aufführen, danach abfragen
                und dann jeweils den richtigen operator direkt angeben.

                Hab es jetzt mit eval lauffähig und es macht was es soll.
                Warum sollte man eval nicht nutzen?

                let myDebugLevel = "info";
                let myItems =[];
                
                // Arrryzeile [0-Prio, 1-Aktiv, 2-Bedingung DP, 3-Vergleichsoperator, 4-Bedingung Wert, 5-Schalten DP, 6-mit welchen Wert, 7-Kommentar]
                myItems[0] = [1,true,'0_userdata.0.Smartmeter.AVG3MinutenWirkleistung','>',1000,'javascript.0.Anel.1.R3.Rel_Status',1, 'wenn PVÜ > 1000 dann Relais3 einschalten'];
                myItems[1] = [1,true,'0_userdata.0.Smartmeter.AVG3MinutenWirkleistung','<',400,'javascript.0.Anel.1.R3.Rel_Status',0, 'wenn PVÜ < 400 dann Relais3 ausschalten'];
                
                function pvueL1(){
                
                    for (let i = 0; i < myItems.length; i++){
                        let myVergleich = '';
                        myVergleich = getState(myItems[i][2]).val +' '+ myItems[i][3]+' ' + myItems[i][4];
                        log("IF String "+ myVergleich,myDebugLevel);
                
                            if  (eval(myVergleich) == true) {
                                    log(("> Schwellwert wahr: Item "+ i +' '+ getState(myItems[i][2]).val)+' ' + myItems[i][3] +' '+ myItems[i][4],myDebugLevel);
                                     }
                                 else {
                                     log(("> ELSE Schwellwert falsch: Item "+ i+' ' + getState(myItems[i][2]).val)+' ' + myItems[i][3] +' '+ myItems[i][4],myDebugLevel);
                                     }   
                       };
                };             
                
                OliverIOO 1 Antwort Letzte Antwort
                0
                • O ostseeskipper

                  @oliverio said in IF Vergleichsoperator als Variable:

                  Wenn dann kannst du einen string zusammen bauen und mit eval interpretieren lassen,
                  > was aber allgemein als böse/nicht tun angesehen wird.
                  du könntest über eine switch konstruktion alle operatoren aufführen, danach abfragen
                  und dann jeweils den richtigen operator direkt angeben.

                  Hab es jetzt mit eval lauffähig und es macht was es soll.
                  Warum sollte man eval nicht nutzen?

                  let myDebugLevel = "info";
                  let myItems =[];
                  
                  // Arrryzeile [0-Prio, 1-Aktiv, 2-Bedingung DP, 3-Vergleichsoperator, 4-Bedingung Wert, 5-Schalten DP, 6-mit welchen Wert, 7-Kommentar]
                  myItems[0] = [1,true,'0_userdata.0.Smartmeter.AVG3MinutenWirkleistung','>',1000,'javascript.0.Anel.1.R3.Rel_Status',1, 'wenn PVÜ > 1000 dann Relais3 einschalten'];
                  myItems[1] = [1,true,'0_userdata.0.Smartmeter.AVG3MinutenWirkleistung','<',400,'javascript.0.Anel.1.R3.Rel_Status',0, 'wenn PVÜ < 400 dann Relais3 ausschalten'];
                  
                  function pvueL1(){
                  
                      for (let i = 0; i < myItems.length; i++){
                          let myVergleich = '';
                          myVergleich = getState(myItems[i][2]).val +' '+ myItems[i][3]+' ' + myItems[i][4];
                          log("IF String "+ myVergleich,myDebugLevel);
                  
                              if  (eval(myVergleich) == true) {
                                      log(("> Schwellwert wahr: Item "+ i +' '+ getState(myItems[i][2]).val)+' ' + myItems[i][3] +' '+ myItems[i][4],myDebugLevel);
                                       }
                                   else {
                                       log(("> ELSE Schwellwert falsch: Item "+ i+' ' + getState(myItems[i][2]).val)+' ' + myItems[i][3] +' '+ myItems[i][4],myDebugLevel);
                                       }   
                         };
                  };             
                  
                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  schrieb am zuletzt editiert von
                  #8

                  @ostseeskipper

                  https://stackoverflow.com/questions/86513/why-is-using-the-javascript-eval-function-a-bad-idea

                  Serien IFs immer mit demnhleichen Parameter ist dann besser mit switch
                  https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/switch

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  1 Antwort Letzte Antwort
                  0
                  • O Offline
                    O Offline
                    ostseeskipper
                    schrieb am zuletzt editiert von
                    #9

                    @oliverio
                    das Switch werd ich mir auf alle Fälle ansehen.

                    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

                    358

                    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