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
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. If else if Anweisung

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.8k

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

If else if Anweisung

Scheduled Pinned Locked Moved Skripten / Logik
24 Posts 4 Posters 4.8k Views
  • 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.
  • T Offline
    T Offline
    thomson
    wrote on last edited by
    #1

    Moin zusammen.

    ich verzweifelt an meiner Logik. Könnt ihr mir bitte mein Problem erläutern?

    Habe die Sonoff Bridge mit ESPurna geflasht.

    Nun möchte ich mit der kleinen Sonoff Schlüsselfernbedienung draußen mehrere Lichter schalten. A= alle ein, B= alle aus. (im Skript steht nur Wohnzimmerlampe zum Testen)

    Bei einer zweiten if schaltet die die Lampe nur für einen Bruchteil einer Sek.

    Bei else if lässt sich die Lampe nicht ausschalten.

    Triggern wollte ich auf eine Veränderung vom rfin des MQTT Adapters. Die Signale kommen auch durch.

                                         // Außemlampen
    
    on({id: "mqtt.0.ESPURNA_CB3XXX.rfin"/*ESPURNA_CB3XXX/rfin*/, change: "any"}, function (obj) {
            var sA = "1EB402D0012C7F7XXX";                                                      //Taste A
            var sB = "1EB400FA03027F7XXX";                                                      //Taste B
            if( "sA" ){
            setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true);
            }
            else if ( "sB" ){
            setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false);
            }
        });
    

    Danke für die Unterstützung!

    1 Reply Last reply
    0
    • BuZZyB Offline
      BuZZyB Offline
      BuZZy
      wrote on last edited by
      #2

      Du vergleichst ja nirgends ob der neue Wert denn sA oder sB entspricht.

      Deine if Abfragen sind falsch formuliert.

      on({id: "mqtt.0.ESPURNA_CB3XXX.rfin"/*ESPURNA_CB3XXX/rfin*/, change: "any"}, function (obj) {
          const sA = "1EB402D0012C7F7XXX";        //Taste A
          const sB = "1EB400FA03027F7XXX";        //Taste B
          if(obj.state.val == sA){
              setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true);
          }
          else if (obj.state.val == sB) {
              setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false);
          }
      });
      

      Gruß

      1 Reply Last reply
      0
      • T Offline
        T Offline
        thomson
        wrote on last edited by
        #3

        Danke für die Antwort, okay das habe ich verstanden. Aber es funktioniert so leider nicht 😞

        Es ändert sich nichts

        1 Reply Last reply
        0
        • AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          wrote on last edited by
          #4

          Dann füge mal einen Log-Output vor deinen Bedingungen ein, damit du überprüfen kannst, was eigentlich ankommt

          log(obj.state.val);
          

          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

          1 Reply Last reply
          0
          • BuZZyB Offline
            BuZZyB Offline
            BuZZy
            wrote on last edited by
            #5

            Wo kommt denn das

                const sA = "1EB402D0012C7F7XXX";        //Taste A
                const sB = "1EB400FA03027F7XXX";        //Taste B
            

            her? Diese Zeichenketten? Werden die im Datenpunkt geschrieben wenn du die Fernbedienung drückst?

            EDIT: Füge die Zeile mit dem Log von AlCalzone ein und guck was überhaupt ankommt..

            Gruß

            1 Reply Last reply
            0
            • arteckA Offline
              arteckA Offline
              arteck
              Developer Most Active
              wrote on last edited by
              #6
              on({id: "mqtt.0.ESPURNA_CB3XXX.rfin"/*ESPURNA_CB3XXX/rfin*/, change: "ne"}, function (obj) {
                      var sA = "1EB402D0012C7F7XXX";                                                      //Taste A
                      var sB = "1EB400FA03027F7XXX";                                                      //Taste B
              
                      if (sA ===  getState("mqtt.0.ESPURNA_CB3XXX.rfin").val) {
                         setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true);
                      }
              
                      if (sB ===  getState("mqtt.0.ESPURNA_CB3XXX.rfin").val) {
                         setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false);
                      }
               });
              

              zigbee hab ich, zwave auch, nuc's genauso und HA auch

              1 Reply Last reply
              0
              • T Offline
                T Offline
                thomson
                wrote on last edited by
                #7

                log(obj.state.val);

                habe ich gemacht. Die Werte kommen richtig an

                1 Reply Last reply
                0
                • T Offline
                  T Offline
                  thomson
                  wrote on last edited by
                  #8

                  @arteck:

                  on({id: "mqtt.0.ESPURNA_CB3XXX.rfin"/*ESPURNA_CB3XXX/rfin*/, change: "ne"}, function (obj) {
                          var sA = "1EB402D0012C7F7XXX";                                                      //Taste A
                          var sB = "1EB400FA03027F7XXX";                                                      //Taste B
                  
                          if (sA ===  getState("mqtt.0.ESPURNA_CB3XXX.rfin").val) {
                             setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true);
                          }
                  
                          if (sB ===  getState("mqtt.0.ESPURNA_CB3XXX.rfin").val) {
                             setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false);
                          }
                   });
                  ```` `  
                  

                  Leider auch nicht 😞

                  1 Reply Last reply
                  0
                  • BuZZyB Offline
                    BuZZyB Offline
                    BuZZy
                    wrote on last edited by
                    #9

                    Damit wir uns richtig verstehen,

                    der Datenpunkt mqtt.0.ESPURNA_CB3XXX.rfin ändert sich auf den Wert 1EB402D0012C7F7XXX wenn du die Taste A auf der Fernbedienung drückst ja?

                    Gruß

                    1 Reply Last reply
                    0
                    • T Offline
                      T Offline
                      thomson
                      wrote on last edited by
                      #10

                      ~~![](</s><URL url=)https://ibb.co/nsnfLe" />

                      Ja bei dem Datenpunkt ESPURNA_CB3A71/rfin ändern sich die Werte. Wenn ich nur eine IF drin habe geht die Lapme auch an.

                      Bei der Variante aus dem Forum bsp.

                      on({id: 'hm-rpc.1.IEQ053xxxx.1.PRESS_SHORT‘}, function (obj) {
                      setState("hm-rpc.1.IEQ038xxxx.3.State",!getState("hm-rpc.1.IEQ038xxxx3.State").val);
                      setState("hm-rpc.1.IEQ056xxxx.3.State",!getState("hm-rpc.1.IEQ056xxxx.State").val);
                      });
                      

                      ging es.

                      Aber ich wollte gerne mit dieser FB alle Lampen draußen an oder Ausschalten. Egel was für einen Zustand die gerade haben.~~

                      1 Reply Last reply
                      0
                      • T Offline
                        T Offline
                        thomson
                        wrote on last edited by
                        #11

                        Sporadisch kamen gerade Signale an.. :?:

                        so ist es nun

                                                             // Außemlampen
                        
                        on({id: "mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/, change: "any"}, function (obj) {
                            const sA = "1EC802E401187F7CE2";        //Taste A
                            const sB = "1EC802E401187F7CE8";        //Taste B
                            log(obj.state.val);
                            if (sA ===  getState("mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/).val) {
                                setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true);
                            }
                             if (sB ===  getState("mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/).val) {
                                setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false);
                            }
                        });
                        
                        1 Reply Last reply
                        0
                        • T Offline
                          T Offline
                          thomson
                          wrote on last edited by
                          #12

                          Keiner eine Idee. Ich bin hier am verzweifeln

                          1 Reply Last reply
                          0
                          • T Offline
                            T Offline
                            thomson
                            wrote on last edited by
                            #13

                            @BuZZy:

                            Wo kommt denn das

                                const sA = "1EB402D0012C7F7XXX";        //Taste A
                                const sB = "1EB400FA03027F7XXX";        //Taste B
                            

                            her? Diese Zeichenketten? Werden die im Datenpunkt geschrieben wenn du die Fernbedienung drückst?

                            EDIT: Füge die Zeile mit dem Log von AlCalzone ein und guck was überhaupt ankommt..

                            Gruß `
                            Ja das steht bei dem Datenpunkt

                            1 Reply Last reply
                            0
                            • AlCalzoneA Offline
                              AlCalzoneA Offline
                              AlCalzone
                              Developer
                              wrote on last edited by
                              #14

                              @thomson:

                              Keiner eine Idee. Ich bin hier am verzweifeln `
                              Ich habe dich gebeten, eine Log-Ausgabe in dein Skript zu integrieren. Hast du die mal überprüft und kannst die hier posten? Ohne die zu sehen können wir hier genauso wenig nachvollziehen wie vorher.

                              on({id: "mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/, change: "any"}, function (obj) {
                                   //
                                  if (sA ===  getState("mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/).val) {
                                  // ...
                              
                              

                              Das erneute Abfragen des Werts von mqtt.0.ESPURNA_CB3A71.rfin ist nicht nötig und eventuell sogar ein Fehler, je nachdem wie schnell sich da was ändert. obj.state.val enthält den aktuellen Wert des Datenpunkts in dem Moment wo der Trigger ausgelöst wurde.

                              Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                              1 Reply Last reply
                              0
                              • T Offline
                                T Offline
                                thomson
                                wrote on last edited by
                                #15

                                Ja das habe ich gemacht. Ist das so Richtig?

                                on({id: "mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/, change: "any"}, function (obj) {
                                    const sA = "1EC800FA03027F7CE2";        //Taste A
                                    const sB = "1EC800FA03027F7CE8";        //Taste B
                                    log(obj.state.val);
                                    if (sA ===  getState("mqtt.0.ESPURNA_CB3A71.rfin")) {
                                        console.log(sA);
                                        setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true);
                                    }
                                     if (sB ===  getState("mqtt.0.ESPURNA_CB3A71.rfin")) {
                                           console.log(sB);
                                        setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false);
                                    }
                                });
                                

                                LOG

                                09:05:12.500	[info]	javascript.0 Stop script script.js.common.RF_Bridge
                                09:05:12.526	[info]	javascript.0 Start javascript script.js.common.RF_Bridge
                                09:05:12.527	[info]	javascript.0 script.js.common.RF_Bridge: registered 1 subscription and 0 schedules
                                09:05:13.918	[info]	javascript.0 script.js.common.RF_Bridge: 1EBE00FA03027F7CE2
                                09:05:18.273	[info]	javascript.0 script.js.common.RF_Bridge: 1EBE00FA03027F7CE8
                                

                                //edit

                                Habe in der if Bedingung die getState abfrage raus genommen. Dann schaltet die Lampe für einen Bruchteil einer Sek. Man hört nur ein schnelles klacken vom Relai. Beim Drücken der "aus" Taste passiert das selbe

                                Das steth dan im LOG - Habe nur einmal auf "A" gedrückt. Das kommt dabei raus. Beim drücken von "B" das selbe…

                                javascript.0	2018-08-07 09:09:45.284	info	script.js.common.RF_Bridge: 1EC800FA03027F7CE8
                                javascript.0	2018-08-07 09:09:45.284	info	script.js.common.RF_Bridge: 1EC800FA03027F7CE2
                                javascript.0	2018-08-07 09:09:45.283	info	script.js.common.RF_Bridge: 1EC800FA03027F7CE2
                                
                                1 Reply Last reply
                                0
                                • AlCalzoneA Offline
                                  AlCalzoneA Offline
                                  AlCalzone
                                  Developer
                                  wrote on last edited by
                                  #16

                                  Und da haben wirs schon…

                                  Laut log wird "1E<u>BE00</u>FA03027F7CE2" und "1E<u>BE00</u>FA03027F7CE8" empfangen, du vergleichst aber mit "1E<u>C800</u>FA03027F7CE2" und "1E<u>C800</u>FA03027F7CE8"

                                  Und wie ich schon sagte, nicht nochmal den State abfragen (getState), sondern den vorhandenen Wert (obj.state.val) nutzen!

                                  on({id: "mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/, change: "any"}, function (obj) {
                                      const sA = "1EBE00FA03027F7CE2";        //Taste A
                                      const sB = "1EBE00FA03027F7CE8";        //Taste B
                                      log(obj.state.val);
                                      if (sA ===  obj.state.val) {
                                          setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true);
                                      } else if (sB ===  obj.state.val) {
                                          setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false);
                                      }
                                  });
                                  

                                  Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                  1 Reply Last reply
                                  0
                                  • T Offline
                                    T Offline
                                    thomson
                                    wrote on last edited by
                                    #17

                                    ok. Jetzt habe ich es auch gesehen.

                                    Aber warum ändert sich der wert immer?

                                    Habe die Sonoff brige mit ESPurna 1.12.3.

                                    als FB SONOFF 433 mhz Fernbedienung

                                    Das ist mir vorher nicht aufegefallen das sich die Werte bei jedem Tastendruck ändern. Was kann ich dagegen tun?

                                    In ESPurna unter dem Punkt RFBRIDGE kann man Signale anlernen. Dort ändern sich der Wert auch

                                    1 Reply Last reply
                                    0
                                    • BuZZyB Offline
                                      BuZZyB Offline
                                      BuZZy
                                      wrote on last edited by
                                      #18

                                      Wenn es immer nur die ersten paar Zeichen sind die sich ändern könnte man einfach prüfen ob der letzte Teil stimmt und den Anfang des empfangen Codes weglassen..

                                      Gruß

                                      1 Reply Last reply
                                      0
                                      • T Offline
                                        T Offline
                                        thomson
                                        wrote on last edited by
                                        #19

                                        Das klingt gut. Wie kann ich das machen?

                                        Danke und gruß

                                        1 Reply Last reply
                                        0
                                        • BuZZyB Offline
                                          BuZZyB Offline
                                          BuZZy
                                          wrote on last edited by
                                          #20
                                          on({id: "mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/, change: "any"}, function (obj) {
                                              const sA = "FA03027F7CE2";        //Taste A
                                              const sB = "FA03027F7CE8";        //Taste B
                                              const val = obj.state.val;
                                              const code = val.substr(val.length - 12);
                                              if (code === sA) {
                                                  setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true);
                                              } else if (code === sB) {
                                                  setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false);
                                              }
                                          });
                                          

                                          So ungefähr - Prüfung auf die letzten 12 Zeichen im empfangenen Wert..

                                          Gruß

                                          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

                                          437

                                          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