Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo
  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.1k

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

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

IF Vergleichsoperator als Variable

Scheduled Pinned Locked Moved JavaScript
9 Posts 3 Posters 432 Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • O Offline
    O Offline
    ostseeskipper
    wrote on last edited by 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 Replies Last reply
    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 Offline
      bahnuhrB Offline
      bahnuhr
      Forum Testing Most Active
      wrote on last edited by
      #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 Reply Last reply
      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
        wrote on last edited by 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 Reply Last reply
        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
          wrote on last edited by
          #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 Replies Last reply
          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 Offline
            bahnuhrB Offline
            bahnuhr
            Forum Testing Most Active
            wrote on last edited by
            #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 Reply Last reply
            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
              wrote on last edited by
              #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 Reply Last reply
              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
                wrote on last edited by
                #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 Reply Last reply
                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
                  wrote on last edited by
                  #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 Reply Last reply
                  0
                  • O Offline
                    O Offline
                    ostseeskipper
                    wrote on last edited by
                    #9

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

                    1 Reply Last reply
                    0
                    Reply
                    • Reply as topic
                    Log in to reply
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes


                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    311

                    Online

                    32.4k

                    Users

                    81.4k

                    Topics

                    1.3m

                    Posts
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    ioBroker Community 2014-2025
                    logo
                    • Login

                    • Don't have an account? Register

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • Recent
                    • Tags
                    • Unread 0
                    • Categories
                    • Unreplied
                    • Popular
                    • GitHub
                    • Docu
                    • Hilfe