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. Fenster offen Script, Drehgriffkontakte einbinden

NEWS

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

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

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

Fenster offen Script, Drehgriffkontakte einbinden

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 3 Kommentatoren 2.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.
  • coyoteC Offline
    coyoteC Offline
    coyote
    Most Active
    schrieb am zuletzt editiert von
    #1

    Bräuchte etwas Hilfe von den Script Profis ;-)

    Ich nutze mometan folgendes Script (ist hier aus dem Forum), um die offenen Fenster zu zählen und unter anderem in Vis anzuzeigen.

    Jetzt habe ich noch Drehgriffkontakte und würde die gerne mit einbinden. Wenn die Drehgriffe in Stellung offen sind funktioniert schon (im Script status ===2) aber wie muss ich das Script weiter ändern, damit mir auch die Fenster im Zustand "gekippt" (status===1) angegeben bzw. der gekippt Status mit in das Array geschrieben wird

    createState('zählen_Fenster.anzahlFenster', 0);    // wenn benötigt: Anzahl der vorhandenen Fenster
    createState('zählen_Fenster.anzahlFensterauf', 0);  // Anzahl der Fenster, die an sind als Variable unter Javascript.0 anlegen
    createState('zählen_Fenster.textFensterauf', " ");  // Anzahl der Fenster, die an sind als Variable unter Javascript.0 anlegen
    
    var cacheSelector = $('channel[state.id=*.STATE](functions=Fenster)');
    
    var cacheSelectorState  = $('channel[state.id=*.STATE](functions=Fenster)');
    
    function countFenster(obj) {
         // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Fenster auf 0
        var anzahlFenster = 0;
        var anzahlFensterauf = 0;
        var textFensterauf = [];
    
       log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val);    // Info im Log, welcher Zustand sich geändert hat
    
       cacheSelectorState.each(function (id, i) {                       // Schleife für jedes gefundenen Element *.STATE im Gewerk Fenster
            var status = getState(id).val;                          // Zustand *.STATE abfragen (jedes Element)
            var obj    = getObject(id);
            if (status === true || status === 2) {    // wenn Zustand = true, dann wird die Anzahl der Fenster hochgezählt/Zustand 2 ist für Drehgriff offen
                 textFensterauf.push(obj.common.name);    // Zu Array hinzufügen
            }                
            log("Fenster Nr. " + i + ": " + getObject(id).common.name + ": " + status);
            ++anzahlFenster;                                        // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
        }); 
    
        // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
            log("Text: " + anzahlFensterauf);
            log("Anzahl Fenster: " + anzahlFenster + " # davon Fenster offen: " +  anzahlFensterauf);
    
        // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
       setState("zählen_Fenster.textFensterauf", textFensterauf.join(',
    '));    // Schreibt die aktuelle Namen der offenen Fenster
       setState("zählen_Fenster.anzahlFensterauf", textFensterauf.length);    // Schreibt die aktuelle Anzahl der offenen Fenster
       setState("zählen_Fenster.anzahlFenster", anzahlFenster);        // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Fenster
    }
    
    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pix
      schrieb am zuletzt editiert von
      #2

      Hallo,

      ich nutze dieses Skript:

      ! ````
      /* System Zahl Fenster
      ! zählt die Fenster in allen Räumen und meldet die offenen Fenster namentlich
      Daten kommen vom Gewerk 'Fenster'
      ! erstellt: 17.06.2015 nach diesem Vorbild: http://forum.iobroker.net/viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
      05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php?f=21&t=473&start=20#p9267
      02.12.2015 Fehler beseitigt bei Anzahl Fenster, wenn offen (Unterscheidung RHS und TFK)
      Überprüfung des Zustandes (function fensterstatus) und Übergabe an Text
      25.01.2016 Fenster Nummer in Log korrigiert (+1)
      02.03.2016 Ansage für TTS aufbereitet
      */
      ! function fensterstatus(zustand) {
      var meldung;
      switch (zustand) {
      case 1:
      meldung = 'RHS gekippt';
      break;
      case 2:
      meldung = 'RHS offen';
      break;
      case true:
      meldung = 'TFK offen';
      break;
      default:
      meldung = 'geschlossen';
      break;
      }
      return(meldung);
      }
      ! createState('zählen_Fenster.anzahlFenster', { // wenn benötigt: Anzahl der vorhandenen Fenster
      type: 'number',
      min: 0,
      def: 0,
      role: 'value'
      });
      createState('zählen_Fenster.anzahlFensterauf', { // Anzahl der Fenster, die auf sind als Variable unter Javascript.0 anlegen
      type: 'number',
      min: 0,
      def: 0,
      role: 'value'
      });
      createState('zählen_Fenster.textFensterauf', { // Anzahl der offenen Fenster und deren Namen als Variable unter Javascript.0 anlegen
      type: 'string',
      def: ' ',
      role: 'value'
      });
      ! var cacheSelectorState = $('channelstate.id=*.STATE');
      ! function countFenster(obj) {
      // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Fenster auf 0
      var anzahlFenster = 0;
      var anzahlFensterauf = 0;
      var textFensterauf = [];
      ! log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val); // Info im Log, welcher Zustand sich geändert hat

      cacheSelectorState.each(function (id, i) {                                  // Schleife für jedes gefundenen Element *.STATE im Gewerk Fenster
          var status = getState(id).val;                                          // Zustand *.STATE abfragen (jedes Element)
          var obj    = getObject(id);
          var name = getObject(id).common.name;
          var devicename = name.substring(0, name.indexOf(".STATE"));             //.state aus Text entfernen
          if (status /*TFK*/ || status === 1 || status === 2 /*RHS*/) {  // wenn Zustand offen, dann wird die Anzahl der Fenster hochgezählt
               ++anzahlFensterauf;
               textFensterauf.push(devicename + ' (' + fensterstatus(status) + ')');  // Name und Zustand zum Array hinzufügen
          }                
          log('Fenster #' + (i+1) + ': ' + devicename + ' ' + fensterstatus(status)/* + ' (' + status + ' / ' + typeof status + ')'*/);
          ++anzahlFenster;                                                        // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
      }); 
      
      // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
          log("Text: " + textFensterauf);
          log("Anzahl Fenster: " + anzahlFenster + " - davon Fenster auf: " +  anzahlFensterauf);
      

      ! // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
      setState("zählen_Fenster.textFensterauf", textFensterauf.join(',
      ')); // Schreibt die aktuelle Namen der offenen Fenster
      setState("zählen_Fenster.anzahlFensterauf", textFensterauf.length); // Schreibt die aktuelle Anzahl der offenen Fenster
      setState("zählen_Fenster.anzahlFenster", anzahlFenster); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Fenster
      }
      ! cacheSelectorState.on(function(obj) { // bei Zustandänderung *. STATE im Gewerk Fenster
      countFenster(obj);
      });
      ! // Variable für Ansage aufbereiten
      createState('zählen_Fenster.textFensteraufAnsage', {
      type: 'string',
      def: ' ',
      role: 'value'
      });
      // Anzahl der Fenster, die auf sind, für Ansage aufbereitet
      var idQuelle = 'javascript.0.zählen_Fenster.textFensterauf',
      idAnsage = 'javascript.0.zählen_Fenster.textFensteraufAnsage';
      ! on(idQuelle, function (obj) {
      var text = obj.state.val;
      text = text.replace(/RHS/g, 'Drehgriff'); // RegEx Suche greedy
      text = text.replace(/TFK/g, 'Reedkontakt'); // soll alle Vorkommen ersetzen
      text = (text.length > 1) ? 'Geöffnete Fenster: ' + text : 'Alle Fenster sind verschlossen';
      setState(idAnsage, text);
      });
      ! ````

      Gruß

      Pix

      Editiert am 2.7.2016 (Replace mit regex-Suche)

      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

      1 Antwort Letzte Antwort
      0
      • coyoteC Offline
        coyoteC Offline
        coyote
        Most Active
        schrieb am zuletzt editiert von
        #3

        Hi Pix,

        erst mal danke, sieht schon gut aus soweit. Am Schluss des Scripts wird der Text aufbereitet für die Ansage, jedoch wird bei mir nur jeweils der erste TFK durch Reedkontakt und der erste RHS durch Drehgriff ersetzt. Bei den weiteren Aufzählungen steht noch TFK bzw. RHS drin

        1 Antwort Letzte Antwort
        0
        • P Offline
          P Offline
          pix
          schrieb am zuletzt editiert von
          #4

          Hallo coyote,

          du hast Recht. Habe das Skript oben geändert. Der replace-Befehl war falsch angewendet. Bei einfacher Suche nach einem String, wird nur dessen erstes Vorkommen ersetzt. Man muss Reguläre Ausdrücke (gierig) verwenden, dann gehts 8-)

          text = text.replace(/RHS/g, 'Drehgriff'); // RegEx Suche greedy
          

          Gruß

          Pix

          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

          1 Antwort Letzte Antwort
          0
          • D Offline
            D Offline
            deifel
            schrieb am zuletzt editiert von
            #5

            Hallo,

            sorry, dass ich dieses alte Thema ausgrabe, aber ich bin aktuell an meinen Fensterabfragen dran und muss mich (leider) als völliger Laie jetzt mit Scripten auseinandersetzen.

            Ich möchte dabei nur das ein Metro Dialog Widget nutzen, um beim Anklicken einen zusätzlichen Dialog zu bekommen mit den aktuell geöffneten Fenstern.

            Alle Fenster sind in Homematic dem Gewerk "Fenster" zugeordnet.

            Meine Frage (sorry für die Anfängerfragen):

            Wo und wie muss ich das Script erstellen? Brauche ich z. B. Blockly dazu oder kann ich das irgendwie im Widget oder allgemein einbauen?

            Blockly habe ich zwar installiert, aber da stehe ich völlig vor dem Berg und weiß nicht mal, wie ich es starten kann (über den Web-Adapter)?

            Nochmals sorry für meine Fragen und bitte keine Links zur Doku von IOBroker - die hab ich versucht zu lesen - aber wenn man kein Programmierer ist und nur einige einfache Dinge umsetzen möchte, dann ist das nicht so einfach…

            Grüße

            Frank

            1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              pix
              schrieb am zuletzt editiert von
              #6

              Hallo Frank,

              dieser Thread ist gelöst. Bitte öffne einen neuen Thread mit deinem Anliegen.

              Allerdings mache ich mir wenig Hoffnung, dass dir ohne Dokumentation geholfen werden kann. Denn hier können wir nur ergänzende Hilfe zu den Dokus geben. Wenn dir die Doku, nicht ausreicht, mache einen Thread auf "Frage zur Doku: THEMA".

              Trotzdem Doku-Links:

              Einsteiger: http://www.iobroker.net/docu/?page_id=6317&lang=de

              Einführung Programmieren mit Javascript http://www.iobroker.net/docu/?page_id=2786&lang=de

              Adapter JavaScript Script http://www.iobroker.net/docu/?page_id=6818&lang=de

              Gruß

              Pix

              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

              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

              614

              Online

              32.4k

              Benutzer

              81.5k

              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