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. If-Bedienungen…

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.3k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.6k

If-Bedienungen…

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 3 Kommentatoren 1.3k Aufrufe
  • Ä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.
  • Y Offline
    Y Offline
    yron25
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • MicM Offline
      MicM Offline
      Mic
      Developer
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • Y Offline
          Y Offline
          yron25
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • Y Offline
              Y Offline
              yron25
              schrieb am zuletzt editiert von
              #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 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

              755

              Online

              32.5k

              Benutzer

              81.7k

              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