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. Blockly
  5. Scriptfehler: Fenster zählen und Namen der offenen anzeigen

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    222

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

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

Scriptfehler: Fenster zählen und Namen der offenen anzeigen

Geplant Angeheftet Gesperrt Verschoben Blockly
1 Beiträge 1 Kommentatoren 175 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.
  • Y Offline
    Y Offline
    yakazaa
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen...
    woah ist mir das peinlich, aber ich hab hier aus dem Forum (meine ich zumindest) ein Script übernommen und finde den Thread leider nicht mehr wieder :man-facepalming:

    Worum es geht:
    Ich möchte für ein Dashboard die Anzahl und die Namen der geöffneten Fenster ausgeben.

    Was ich habe:

    /* 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
    02.07.2016 Regulärer Ausdruck (gierig) bei Aufbereitung für Ansage
    */
    
    
    function fensterstatus(zustand) {
        var meldung;
        
        switch (zustand) {
            case 1:
                meldung = ' ';
            break;
            case 2:
                meldung = ' ';
            break;
            case true:
                meldung = ' ';
            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  = $('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);
            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(',<br>'));    // 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;
        /* Test Nik
        text = text.replace(/RHS/g, 'Drehgriff');
        text = text.replace(/TFK/g, 'Reedkontakt');
        */
        text = (text.length > 1) ? 'Geöffnete Fenster: <br><br>' + text : 'Alle Fenster sind verschlossen';
        setState(idAnsage, text);
    });
    

    Was passiert:
    Fenster wird geöffnet: Nix passiert
    Fenster wird wieder geschlossen:

    • Fenster wird gezählt
    • Fenstername wird angezeigt

    Ich will aber nicht wissen welche Fenster zuletzt offen waren, sondern welche es aktuell sind ;-)
    Jemand ne Idee, was da schiefgegangen ist und wie ich das wieder in den Griff bekommen kann?

    Danke vorab und Grüße aus dem fast-Sauerland,
    Nik

    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

    600

    Online

    32.7k

    Benutzer

    82.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