Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Fenster zählen auf verschiedenen Ebenen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Fenster zählen auf verschiedenen Ebenen

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      Camuri last edited by

      Hallo das Script zum Fensterzählen habe ich schon gefunden nun habe ich auch der Raspimatic das Gewerke FensterEG und FensterOG angelegt, wo muss ich das denn jetzt alles im Script ändern er findet irgendwie keine Fenster bei mir da er ja das Gewerke Fenster eigentlich braucht.

      ! /* 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 … 79c1#p6564
      ! 05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=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 = '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('FensterEG #' + (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');
      ! text = text.replace(/TFK/g, 'Reedkontakt');
      ! text = (text.length > 1) ? 'Geöffnete Fenster: ' + text : 'Alle Fenster sind verschlossen';
      ! setState(idAnsage, text);
      ! });

      1 Reply Last reply Reply Quote 0
      • A
        Adnim last edited by

        ! ````
        //Add device rules
        addDeviceCounter("lowbat", $('channel[state.id=LOWBAT]'), true);
        addDeviceCounter("lowbat", $('channel[state.id=lowbat]'), true);
        addDeviceCounter("sticky_unreach", $('channel[state.id=
        .STICKY_UNREACH]'), true);
        addDeviceCounter("unreach", $('channel[state.id=
        .UNREACH]'), true);
        addDeviceCounter("config_pending", $('channel[state.id=.CONFIG_PENDING]'), true);
        addDeviceCounter("Motion", $('channel[state.id=
        .MOTION]'), true);
        addDeviceCounter("DutyCycle", $('channel[state.id=.DUTYCYCLE]'), true);
        addDeviceCounter("Spannungsüberwachung", $('channel[state.id=
        .VOLTAGE]'), function(state){return state<200;});
        addDeviceCounter("Auskühlschutz", $('channel[state.id=.ACTUAL_TEMPERATURE]'), function(state){return state<12;});
        addDeviceCounter("ERROR", $('channel[state.id=
        .ERROR*]'), function(state){return state>0;});
        addDeviceCounter("Heizbedarf", $('channel[state.id=.VALVE_STATE]'), function(state){return state>45;});
        addDeviceCounter("Alive", $('channel[state.id=alive]'), false);
        addDeviceCounter("CONNECTED", $('channel[state.id=
        .connected]'), false);
        addDeviceCounter("open_shutters", $('channel{TYPE=BLIND}[state.id=
        .LEVEL]'), function(state){return state>0;});
        addDeviceCounter("open_windows", $('channel{TYPE=SHUTTER_CONTACT}[state.id=.STATE]'), true);
        ! /
        *****************************************

        • Code - do not change anything bellow this line *
          ******************************************/

        ! function addDeviceCounter(name, selector, val_to_count) {
        ! //Total amount of devices found by selector
        var state_total = 'deviceCounter.' + name + '.total';
        createState(state_total, 0);
        //List of devices that match condition
        var state_list = 'deviceCounter.' + name + '.list';
        createState(state_list, "");
        //Number of devices that match condition
        var state_counter = 'deviceCounter.' + name + '.counter';
        ! createState(state_counter, 0);
        function countDevs(obj) {
        var d_count = 0;
        var d_list = [];
        ! selector.each(function (id, i) {
        var status = getState(id).val;
        var obj = getObject(id);
        if ((typeof val_to_count === 'function' && val_to_count(status)) ||
        (typeof val_to_count === 'boolean' && val_to_count == status)) {
        //Get parent object
        var parentChannelId = id.slice(id.lastIndexOf("."));
        var parentDevicelId = id.split(".").slice(0,-2).join(".");
        var deviceObject = getObject(parentDevicelId);
        //remember device name
        d_list.push(deviceObject.common.name);
        }
        ++d_count; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
        });
        ! //if ("state_counter" > 0) {event(name + "(" + d_count + "): " + d_list);
        //}
        ! setState(state_list, d_list.join('
        '));
        setState(state_counter, d_list.length);
        setState(state_total, d_count);
        }
        ! //Re-evaluate when a device status changes
        selector.on(function(obj) { // bei Zustandänderung . LOWBAT in allen Gewerken
        countDevs(obj);
        });
        ! //Re-evaluate each hour
        schedule("
        /60 * * * *", countDevs);

        //Evaluate for the first time
        countDevs();
        

        }

        ! ````

        Glaube der Devicecounter ist einfacher…(original gibt es bei den vorlagen, hier so wie ich es am laufen habe)

        Hier bin ich auch unsicher wie genau du den einfügen müsstest glaube so?

        addDeviceCounter("open_windows", $('channel{ROLE:DEINEGEWERKE}{TYPE=SHUTTER_CONTACT}[state.id=*.STATE]'), true);

        1 Reply Last reply Reply Quote 0
        • flkontakt
          flkontakt last edited by

          Ich habe das durch Anpassung des Script gelöst viewtopic.php?t=10820

          Gesendet von meinem SM-G920F mit Tapatalk

          1 Reply Last reply Reply Quote 0
          • A
            Adnim last edited by

            ok verstehe viele Wege führen nach Rom 🙂

            Vorteil des Device Counters hier trotzdem aus meiner Sicht: "all in one skript" und kann mehr

            1 Reply Last reply Reply Quote 0
            • C
              Camuri last edited by

              @flkontakt:

              Ich habe das durch Anpassung des Script gelöst viewtopic.php?t=10820

              Gesendet von meinem SM-G920F mit Tapatalk `

              scheint bei mir irgendwie immer noch nicht zu gehen 😞
              5264_e84cedd3395181fbe0489adced3635ac.png

              1 Reply Last reply Reply Quote 0
              • C
                Camuri last edited by

                5264_fcc8a3d037bf64810f4b26d5037277d8.png

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                548
                Online

                31.9k
                Users

                80.2k
                Topics

                1.3m
                Posts

                3
                6
                591
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo