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. [gelöst] if Abfrage will nicht

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    883

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

[gelöst] if Abfrage will nicht

Geplant Angeheftet Gesperrt Verschoben JavaScript
18 Beiträge 4 Kommentatoren 873 Aufrufe 1 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.
  • C CyberMicha

    Hi zusammen,
    ich habe vermutlich irgendwo nen ganz blöden Fehler. Folgendes Script triggert nicht richtig. Es gibt immer nur "zu Hause" aus.
    Die erste Log Zeile zeigt korrekt false an aber dennoch lande ich in der ersten if Schleife.

    on({id: 'iot.0.services.custom_atHome'/*Service for atHome*/}, function (obj) {
        log("State " + getState('iot.0.services.custom_atHome'/*Service for atHome*/).val)
        if (getState('iot.0.services.custom_atHome'/*Service for atHome*/).val)
        {
            log("Zu Hause");
            //setState('scene.0.szenenname', true); // Szene starten
        }
        if (!getState('iot.0.services.custom_atHome'/*Service for atHome*/).val) //&& !getState('scene.0.Feierabend'/*Feierabend*/)
        {
            log("Unterwegs");
            //setState('scene.0.szenenname', true); // Szene starten
        }
    });
    
    
    

    5746932b-0ff4-4536-8447-8a26850b0b5b-image.png

    Ich finde meinen fehler einfach nicht :(

    LG Michael

    UncleSamU Offline
    UncleSamU Offline
    UncleSam
    Developer
    schrieb am zuletzt editiert von
    #2

    @CyberMicha Geht es, wenn du einfach obj.val benutzt anstatt nochmals ein getState zu machen? Was ist der Typ des Datenpunktes?

    Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
    ♡-lichen Dank an meine Sponsoren

    1 Antwort Letzte Antwort
    0
    • C Offline
      C Offline
      CyberMicha
      schrieb am zuletzt editiert von
      #3

      669bea28-1dba-4b72-ba33-139623abc7cb-image.png
      Hab es schon umgestellt von "gemischt" auf "Logikwert"

      Wie meinst Du das mit einfach obj.val?

      htreckslerH 1 Antwort Letzte Antwort
      0
      • C CyberMicha

        669bea28-1dba-4b72-ba33-139623abc7cb-image.png
        Hab es schon umgestellt von "gemischt" auf "Logikwert"

        Wie meinst Du das mit einfach obj.val?

        htreckslerH Offline
        htreckslerH Offline
        htrecksler
        Forum Testing
        schrieb am zuletzt editiert von
        #4

        @CyberMicha

        on({id: "iot.0.services.custom_atHome"}, function (obj) {
            var value = obj.state.val;
            var oldValue = obj.oldState.val;
            log('atHome: ' + value + ' - ' + oldValue);
        });
        

        was bringt das bei dir?

        Gruss Hermann

        ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

        1 Antwort Letzte Antwort
        0
        • C Offline
          C Offline
          CyberMicha
          schrieb am zuletzt editiert von CyberMicha
          #5
          on({id: 'iot.0.services.custom_atHome'/*Service for atHome*/}, function (obj) {
              log("State " + getState('iot.0.services.custom_atHome'/*Service for atHome*/).val)
          
              var value = obj.state.val;
              var oldValue = obj.oldState.val;
              log('atHome: ' + value + ' - ' + oldValue);
          
              if (getState('iot.0.services.custom_atHome'/*Service for atHome*/).val)
              {
                  log("Zu Hause");
                  //setState('scene.0.szenenname', true); // Szene starten
              }
              if (!getState('iot.0.services.custom_atHome'/*Service for atHome*/).val) 
              {
                  log("Unterwegs");
                  //setState('scene.0.szenenname', true); // Szene starten
              }
          });
          

          Ergibt ( Einmal mit false und einmal true ) :

          16:34:41.627	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State false
          16:34:41.627	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: atHome: false - false
          16:34:41.628	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
          
          16:35:21.517	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State true
          16:35:21.517	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: atHome: true - false
          16:35:21.517	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
          

          Irgendwie crazy. Ist doch eigentlich total billig.

          htreckslerH paul53P 2 Antworten Letzte Antwort
          0
          • C CyberMicha
            on({id: 'iot.0.services.custom_atHome'/*Service for atHome*/}, function (obj) {
                log("State " + getState('iot.0.services.custom_atHome'/*Service for atHome*/).val)
            
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
                log('atHome: ' + value + ' - ' + oldValue);
            
                if (getState('iot.0.services.custom_atHome'/*Service for atHome*/).val)
                {
                    log("Zu Hause");
                    //setState('scene.0.szenenname', true); // Szene starten
                }
                if (!getState('iot.0.services.custom_atHome'/*Service for atHome*/).val) 
                {
                    log("Unterwegs");
                    //setState('scene.0.szenenname', true); // Szene starten
                }
            });
            

            Ergibt ( Einmal mit false und einmal true ) :

            16:34:41.627	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State false
            16:34:41.627	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: atHome: false - false
            16:34:41.628	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
            
            16:35:21.517	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State true
            16:35:21.517	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: atHome: true - false
            16:35:21.517	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
            

            Irgendwie crazy. Ist doch eigentlich total billig.

            htreckslerH Offline
            htreckslerH Offline
            htrecksler
            Forum Testing
            schrieb am zuletzt editiert von
            #6

            @CyberMicha warum machst du denn diese erneuten getState?
            Du hast doch den Wert mit dem Du arbeiten willst schon in "obj" (obj.state.val)
            Warum arbeitest du damit nicht einfach weiter?

            if value dann zu Hause sonst unterwegs

            Gruss Hermann

            ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

            1 Antwort Letzte Antwort
            0
            • C CyberMicha
              on({id: 'iot.0.services.custom_atHome'/*Service for atHome*/}, function (obj) {
                  log("State " + getState('iot.0.services.custom_atHome'/*Service for atHome*/).val)
              
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                  log('atHome: ' + value + ' - ' + oldValue);
              
                  if (getState('iot.0.services.custom_atHome'/*Service for atHome*/).val)
                  {
                      log("Zu Hause");
                      //setState('scene.0.szenenname', true); // Szene starten
                  }
                  if (!getState('iot.0.services.custom_atHome'/*Service for atHome*/).val) 
                  {
                      log("Unterwegs");
                      //setState('scene.0.szenenname', true); // Szene starten
                  }
              });
              

              Ergibt ( Einmal mit false und einmal true ) :

              16:34:41.627	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State false
              16:34:41.627	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: atHome: false - false
              16:34:41.628	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
              
              16:35:21.517	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State true
              16:35:21.517	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: atHome: true - false
              16:35:21.517	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
              

              Irgendwie crazy. Ist doch eigentlich total billig.

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

              @CyberMicha sagte:

              Ist doch eigentlich total billig.

              Ja eigentlich. Aber zu umständlich programmiert. Weshalb triggerst Du auf jede Aktualisierung ? Das sollte man nur in Ausnahmefällen (Taster) tun. Vorschlag:

              on('iot.0.services.custom_atHome'/*Service for atHome*/, function(dp) {
                  log("State " + dp.state.val);
                  if (dp.state.val) {
                      log("Zu Hause");
                      //setState('scene.0.szenenname', true); // Szene starten
                  } else {
                      log("Unterwegs");
                      //setState('scene.0.szenenname', true); // Szene starten
                  }
              });
              

              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
              • C Offline
                C Offline
                CyberMicha
                schrieb am zuletzt editiert von CyberMicha
                #8

                Okay dann mache ich es so. Verstehen tue ich es aber dennoch nicht, wieso es nicht funktioniert.

                Nur wie baue ich im false Fall noch eine Prüfung auf die szene ein. Also ob die schon true ist oder nicht? Macht ja keinen Sinn sie immer wieder neu zu starten.

                paul53P 2 Antworten Letzte Antwort
                0
                • C CyberMicha

                  Okay dann mache ich es so. Verstehen tue ich es aber dennoch nicht, wieso es nicht funktioniert.

                  Nur wie baue ich im false Fall noch eine Prüfung auf die szene ein. Also ob die schon true ist oder nicht? Macht ja keinen Sinn sie immer wieder neu zu starten.

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

                  @CyberMicha sagte:

                  Verstehen tue ich es aber dennoch nicht, wieso es nicht funktioniert.

                  Ich kann auch keinen Fehler entdecken. Vielleicht irgendwo ein unsichtbares Zeichen ? Aber dann würde wahrscheinlich der Compiler meckern.

                  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
                  • C CyberMicha

                    Okay dann mache ich es so. Verstehen tue ich es aber dennoch nicht, wieso es nicht funktioniert.

                    Nur wie baue ich im false Fall noch eine Prüfung auf die szene ein. Also ob die schon true ist oder nicht? Macht ja keinen Sinn sie immer wieder neu zu starten.

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

                    @CyberMicha sagte:

                    im false Fall noch eine Prüfung auf die szene ein.

                    Du meinst die kommentierte Abfrage ?

                        } else if (!getState('scene.0.Feierabend'/*Feierabend*/).val) { 
                    

                    Da fehlt im Original übrigens .val.

                    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
                    • C Offline
                      C Offline
                      CyberMicha
                      schrieb am zuletzt editiert von CyberMicha
                      #11

                      @paul53 sagte in if Abfrage will nicht:

                      ber zu umständlich programmiert. Weshalb triggerst Du auf jede Aktualisierung ? Das sollte man nur in Ausnahmefällen (Taster) tun. Vorschlag:

                      Jetzt verstehe ich gar nichts mehr. Dein Code liefert nun auch immer zu Hause. Egal was ich schicke.

                      17:16:29.347	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State true
                      17:16:29.347	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
                      17:16:46.040	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State false
                      17:16:46.041	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
                      
                      on('iot.0.services.custom_atHome'/*Service for atHome*/, function(dp) {
                          log("State " + dp.state.val);
                          if (dp.state.val) {
                              log("Zu Hause");
                              //setState('scene.0.szenenname', true); // Szene starten
                          } else {
                              log("Unterwegs");
                              //setState('scene.0.szenenname', true); // Szene starten
                          }
                      });
                      
                      UncleSamU paul53P 2 Antworten Letzte Antwort
                      0
                      • C CyberMicha

                        @paul53 sagte in if Abfrage will nicht:

                        ber zu umständlich programmiert. Weshalb triggerst Du auf jede Aktualisierung ? Das sollte man nur in Ausnahmefällen (Taster) tun. Vorschlag:

                        Jetzt verstehe ich gar nichts mehr. Dein Code liefert nun auch immer zu Hause. Egal was ich schicke.

                        17:16:29.347	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State true
                        17:16:29.347	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
                        17:16:46.040	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State false
                        17:16:46.041	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
                        
                        on('iot.0.services.custom_atHome'/*Service for atHome*/, function(dp) {
                            log("State " + dp.state.val);
                            if (dp.state.val) {
                                log("Zu Hause");
                                //setState('scene.0.szenenname', true); // Szene starten
                            } else {
                                log("Unterwegs");
                                //setState('scene.0.szenenname', true); // Szene starten
                            }
                        });
                        
                        UncleSamU Offline
                        UncleSamU Offline
                        UncleSam
                        Developer
                        schrieb am zuletzt editiert von UncleSam
                        #12

                        @CyberMicha kannst du mal log(JSON.stringify(obj.state.val)) ausgeben? Dann sehen wir, was der Datenpunkt tatsächlich für einen Typ hat.

                        Der Grund: wenn dort ein "false" als String drin steht, dann wird das als wahr angenommen; nur wenn wirklich ein Boolean drin steht, funktioniert es.

                        Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
                        ♡-lichen Dank an meine Sponsoren

                        C 1 Antwort Letzte Antwort
                        0
                        • C CyberMicha

                          @paul53 sagte in if Abfrage will nicht:

                          ber zu umständlich programmiert. Weshalb triggerst Du auf jede Aktualisierung ? Das sollte man nur in Ausnahmefällen (Taster) tun. Vorschlag:

                          Jetzt verstehe ich gar nichts mehr. Dein Code liefert nun auch immer zu Hause. Egal was ich schicke.

                          17:16:29.347	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State true
                          17:16:29.347	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
                          17:16:46.040	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State false
                          17:16:46.041	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
                          
                          on('iot.0.services.custom_atHome'/*Service for atHome*/, function(dp) {
                              log("State " + dp.state.val);
                              if (dp.state.val) {
                                  log("Zu Hause");
                                  //setState('scene.0.szenenname', true); // Szene starten
                              } else {
                                  log("Unterwegs");
                                  //setState('scene.0.szenenname', true); // Szene starten
                              }
                          });
                          
                          paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von paul53
                          #13

                          @CyberMicha sagte:

                          Dein Code liefert nun auch immer zu Hause. Egal was ich schicke.

                          Auch wenn das Log liefert: State false ?
                          Erweitere mal das Log:

                              log("State " + dp.state.val + ', Typ: ' + typeof dp.state.val);
                          

                          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

                          C 1 Antwort Letzte Antwort
                          0
                          • UncleSamU UncleSam

                            @CyberMicha kannst du mal log(JSON.stringify(obj.state.val)) ausgeben? Dann sehen wir, was der Datenpunkt tatsächlich für einen Typ hat.

                            Der Grund: wenn dort ein "false" als String drin steht, dann wird das als wahr angenommen; nur wenn wirklich ein Boolean drin steht, funktioniert es.

                            C Offline
                            C Offline
                            CyberMicha
                            schrieb am zuletzt editiert von
                            #14

                            @UncleSam sagte in if Abfrage will nicht:

                            false

                               log("JSON: " + JSON.stringify(dp.state.val))
                            
                            17:20:03.384	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: JSON: "false"
                            17:20:03.385	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State false
                            17:20:03.386	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
                            
                            paul53P 1 Antwort Letzte Antwort
                            0
                            • paul53P paul53

                              @CyberMicha sagte:

                              Dein Code liefert nun auch immer zu Hause. Egal was ich schicke.

                              Auch wenn das Log liefert: State false ?
                              Erweitere mal das Log:

                                  log("State " + dp.state.val + ', Typ: ' + typeof dp.state.val);
                              
                              C Offline
                              C Offline
                              CyberMicha
                              schrieb am zuletzt editiert von
                              #15

                              @paul53
                              17:21:30.448 info javascript.0 (1055501) script.js.Testing.Anwesenheit: State true, Typ: string
                              17:21:30.449 info javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause

                              Da ist wohl das Problem. Nur wie bekomme ich iobroker dazu, es als echten bool zu nehmen.

                              paul53P 1 Antwort Letzte Antwort
                              0
                              • C CyberMicha

                                @UncleSam sagte in if Abfrage will nicht:

                                false

                                   log("JSON: " + JSON.stringify(dp.state.val))
                                
                                17:20:03.384	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: JSON: "false"
                                17:20:03.385	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: State false
                                17:20:03.386	info	javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause
                                
                                paul53P Offline
                                paul53P Offline
                                paul53
                                schrieb am zuletzt editiert von
                                #16

                                @CyberMicha
                                Das ist ein String - kein Boolean.

                                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
                                • C CyberMicha

                                  @paul53
                                  17:21:30.448 info javascript.0 (1055501) script.js.Testing.Anwesenheit: State true, Typ: string
                                  17:21:30.449 info javascript.0 (1055501) script.js.Testing.Anwesenheit: Zu Hause

                                  Da ist wohl das Problem. Nur wie bekomme ich iobroker dazu, es als echten bool zu nehmen.

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

                                  @CyberMicha sagte in if Abfrage will nicht:

                                  Nur wie bekomme ich iobroker dazu, es als echten bool zu nehmen.

                                  on('iot.0.services.custom_atHome'/*Service for atHome*/, function(dp) {
                                      let val = toBoolean(dp.state.val);
                                      log("State " + val);
                                      if (val) {
                                          log("Zu Hause");
                                          //setState('scene.0.szenenname', true); // Szene starten
                                      } else {
                                          log("Unterwegs");
                                          //setState('scene.0.szenenname', true); // Szene starten
                                      }
                                  });
                                  

                                  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

                                  C 1 Antwort Letzte Antwort
                                  0
                                  • paul53P paul53

                                    @CyberMicha sagte in if Abfrage will nicht:

                                    Nur wie bekomme ich iobroker dazu, es als echten bool zu nehmen.

                                    on('iot.0.services.custom_atHome'/*Service for atHome*/, function(dp) {
                                        let val = toBoolean(dp.state.val);
                                        log("State " + val);
                                        if (val) {
                                            log("Zu Hause");
                                            //setState('scene.0.szenenname', true); // Szene starten
                                        } else {
                                            log("Unterwegs");
                                            //setState('scene.0.szenenname', true); // Szene starten
                                        }
                                    });
                                    
                                    C Offline
                                    C Offline
                                    CyberMicha
                                    schrieb am zuletzt editiert von
                                    #18

                                    @paul53
                                    Geht, danke! Man man man, hätte gedacht iobroker ist da pfiffiger :) bzw fehlt bei iot dann eine Möglichkeit bei custom services einen typen mitzugeben.

                                    Danke alle für die Zeit und die Nerven :)

                                    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

                                    735

                                    Online

                                    32.6k

                                    Benutzer

                                    82.1k

                                    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