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. Fenster zählen auf verschiedenen Ebenen

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    818

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

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

Fenster zählen auf verschiedenen Ebenen

Scheduled Pinned Locked Moved Skripten / Logik
6 Posts 3 Posters 774 Views 1 Watching
  • 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.
  • C Offline
    C Offline
    Camuri
    wrote on last edited by
    #1

    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
    0
    • A Offline
      A Offline
      Adnim
      wrote on last edited by
      #2

      ! ````
      //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
      0
      • flkontaktF Online
        flkontaktF Online
        flkontakt
        wrote on last edited by
        #3

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

        Gesendet von meinem SM-G920F mit Tapatalk

        1 Reply Last reply
        0
        • A Offline
          A Offline
          Adnim
          wrote on last edited by
          #4

          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
          0
          • C Offline
            C Offline
            Camuri
            wrote on last edited by
            #5

            @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
            0
            • C Offline
              C Offline
              Camuri
              wrote on last edited by
              #6

              5264_fcc8a3d037bf64810f4b26d5037277d8.png

              1 Reply Last reply
              0

              Hello! It looks like you're interested in this conversation, but you don't have an account yet.

              Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

              With your input, this post could be even better 💗

              Register Login
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              574

              Online

              32.8k

              Users

              82.7k

              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