Skip to content
  • Home
  • 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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. If-Bedienungen…

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

If-Bedienungen…

Scheduled Pinned Locked Moved Skripten / Logik
6 Posts 3 Posters 1.4k 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.
  • Y Offline
    Y Offline
    yron25
    wrote on last edited by
    #1

    Hallo Community,

    ich möchte gerne mehrere Schließkontakte auf einer Ebene zusammenfassen um zu prüfen ob die Etage in meinem Haus abgeschlossen sind. Die Variablen habe ich zwar erzeugt, leider setzt der Iobroker sie nicht bei jeder Veränderung des Türzustandes und schon gar nicht so wie ich es will…

    Ich hoffe einer von euch kann mir helfen. Meine Unfähigkeit hat mich diesen Abend schon wahnsinng gemacht :(

    PS: ich habe die ID meiner geräte etwas unkenntlich gemacht, man weiß ja nie wer mitliest :P.

    on({id: 'hm-rpc.0.OEQ143xxxx.1.STATE' || 'hm-rpc.0.NEQ088xxxx.1.STATE', change: "ne"}, function (obj) {
    
      if ('hm-rpc.0.OEQ143xxxx.1.STATE'== false && 'hm-rpc.0.NEQ088xxxx.1.STATE'== false) {
          setState('g_Verschluss_Keller', false);
      }
      else{
          setState('g_Verschluss_Keller', true);
      }
    }); 
    
    on({id: 'hm-rpc.0.OEQ143xxxy.1.STATE' || 'hm-rpc.0.OEQ143xxxz.1.STATE' ,  change: "any"}, function (obj) {
    
      if ('hm-rpc.0.OEQ143xxxy.1.STATE' == false && 'hm-rpc.0.OEQ143xxxz.1.STATE'== false) {
          setState('g_Verschluss_Dach', false);
      }
      else{
          setState('g_Verschluss_Dach', true);
      }
    })
    
    
    1 Reply Last reply
    0
    • MicM Offline
      MicM Offline
      Mic
      Developer
      wrote on last edited by
      #2

      Kurzer Blick auf Deinen Code: Was auffällt - ich würde immer jede Abfrage in if… separat in Klammern setzen.

      also das hier

      if ('hm-rpc.0.OEQ143xxxx.1.STATE' == false && 'hm-rpc.0.OEQ143xxxx.1.STATE'== false) {
      

      besser so

      if ( ('hm-rpc.0.OEQ143xxxx.1.STATE' === false) && ('hm-rpc.0.OEQ143xxxx.1.STATE'=== false) )
      

      Schafft Klarheit zur Isolation und vermeidet, dass hier Bedingungen falsch verbunden werden… Und gerne 3 "=" nehmen, also "===" statt "==".

      Nun zum Inhalt des Scripts:

      "hm-rpc.0.OEQ143xxxx.1.STATE" über obj.state.val abfragen. Denn sonst vergleichst Du nur den String-Inhalt.

      Also z.B.

         if(obj.state.val === true){
      
      1 Reply Last reply
      0
      • paul53P Offline
        paul53P Offline
        paul53
        wrote on last edited by
        #3

        @yron25:

        on({id: 'hm-rpc.0.OEQ143xxxx.1.STATE' || 'hm-rpc.0.NEQ088xxxx.1.STATE', `
        Das funktioniert nicht. Mehrere Datenpunkte als Trigger mit Array[id1,id2] oder RegExp. Da aber auch die Zustände verknüpft werden sollen, macht man das besser mit globalen Skriptvariablen und einer Funktion.
        @yron25:

        if ('hm-rpc.0.OEQ143xxxx.1.STATE'== false && 'hm-rpc.0.NEQ088xxxx.1.STATE'== false) { `
        Was soll der Vergleich eines Strings mit false ergeben ? (immer false)

        Vorschlag:

        const id1 = 'hm-rpc.0.OEQ143xxxx.1.STATE';
        const id2 = 'hm-rpc.0.NEQ088xxxx.1.STATE';
        const idAlle = 'g_Verschluss_Keller';
        
        var kontakt1 = getState(id1).val;
        var kontakt2 = getState(id2).val;
        
        function alleKontakte() { 
           if(kontakt1 || kontakt2) setState(idAlle, true, true);
           else setState(idAlle, false, true);
        }
        
        alleKontakte(); // Skriptstart
        
        on(id1, function(dp) {
           kontakt1 = dp.state.val;
           alleKontakte();
        });      
        on(id2, function(dp) {
           kontakt2 = dp.state.val;
           alleKontakte();
        });      
        
        

        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 Reply Last reply
        0
        • Y Offline
          Y Offline
          yron25
          wrote on last edited by
          #4

          Danke für die schnelle Hilfe, ihr rettet meinen Abend. Ich habe nicht gemerkt, dass 3 Kontakte den selben Namen haben, und ich hätte dazuschreiben können dass es sich um 2 Ebenen handelt. Wurde jetzt geändert.

          @ Paul53:

          Danke für das Skript. So sehen die also Professionell aus, mit den richtigen Konstanten geladen. Richtig gut.

          Nur wegen des Verständnisses:

          • dp ist die Variable die er als true oder false deklariert

          • Mit id1 und id 2 trennst du bei meiner "oder" on-function in 2 auf

          • Was ist in deinem Skript das 2te true bei setState?

          • Wo änderst du im Skript die Variable g_Verschluss_Keller global. Mit idAlle gibst du es es ja nur im Skript zurück oder?

          1 Reply Last reply
          0
          • paul53P Offline
            paul53P Offline
            paul53
            wrote on last edited by
            #5

            @yron25:

            • dp ist die Variable die er als true oder false deklariert `
              dp ist das Datenpunktobjekt, das ausgelöst(getriggert) hat. dp.state.val ist der Wert des auslösenden Datenpunktes
              @yron25:
            • Mit id1 und id 2 trennst du bei meiner "oder" on-function in 2 auf `
              Durch getrennte Trigger ist klar, welcher Wert mit dp.state.val übergeben wird, so dass die richtige Variable (kontakt1 / kontakt2) diesen Wert erhält.
              @yron25:
            • Was ist in deinem Skript das 2te true bei setState? `
              Das setzt ack = true (bestätigt), da ich davon ausgehe, dass der Wert nicht witer gesendet wird, sondern in ioBroker verwendet wird (VIS).
              @yron25:
            • Wo änderst du im Skript die Variable g_Verschluss_Keller global. Mit idAlle gibst du es es ja nur im Skript zurück oder? `
              Der Wert des Datenpunktes mit der ID "g_Verschluss_Keller" wird in der Funktion alleKontakte() mit setState(idAlle, Wert, ack) gesetzt.

            Die https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md kennst Du ?

            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 Reply Last reply
            0
            • Y Offline
              Y Offline
              yron25
              wrote on last edited by
              #6

              Hey, danke nein kannte ich nicht.

              Ich muss nochmal nachschauen. Dein Skript funktioniert leider auch nicht, er gibt den bei den Werte Kontakt1, Kontakt2= false den Wert für g_Verschluss_Keller true zurück.

              Danke für die Hilfe, die Tipps haben mich auf jeden Fall weiter gebracht

              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

              656

              Online

              32.6k

              Users

              82.3k

              Topics

              1.3m

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

              • Don't have an account? Register

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