Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Offene Fenster in Übersicht als Anzahl anzeigen

    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

    Offene Fenster in Übersicht als Anzahl anzeigen

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

      Hallo Forum,

      ich bastele grade eine Übersicht für meine Automatisierung.

      Da gibt es eine Navi-Taste vom Typ Metro Tile Navigation.

      Ich möchte gerne auf dieser Navitaste so eine kleine Zahl anzeigen, wenn irgendwelche Fenster geöfnet sind.

      Die offenen Fenster zähle ich per script bei jeder Statusänderung eines Fensterkontaktes:

      //Überwachung der Fensterkontakte
      //Reaktion auf Statusänderung
      var openWindows=0;
      
      //Büro oben, Fenster Statusänderung
      on({id: 'hm-rpc.0.0000D3C99F0888.1.STATE'}, function (obj) {
          countOpenWindows();
      });
      
      //Büro unten, Fenster Statusänderung
      on({id: 'hm-rpc.0.0000D709954530.1.STATE'}, function (obj) {
          countOpenWindows();
      });
      
      function countOpenWindows(){
          openWindows = 0;
          if (getState("hm-rpc.0.0000D3C99F0888.1.STATE").val == true){openWindows +=1;}
          if (getState("hm-rpc.0.0000D709954530.1.STATE").val == true){openWindows +=1;}
          setState("Beckhoff.0.Variablen.offeneFenster", openWindows);
      }
      
      

      Wie zu sehen wird der ermittelte Wert in ein Objekt geschrieben.

      Jetzt kommt die Masterfrage:

      wie bekomme ich die Zahl in die Nav-Taste und wie ändere ich den Text von Fenster zu offene Fenster?

      Gleichzeitig muss (vermutlich) der Abzeichen-Hintergrund von "keins" auf "BG red" geändert werden.

      Beispielbild aus dem GitHub im Anhang

      Danke vorab,

      Gruß Carsten
      2196_damel.jpg

      1 Reply Last reply Reply Quote 0
      • T
        tempestas last edited by

        Su hast wie ich sehe homematic tfk.

        Dafür gibt's hier jede Menge Skripte, bei denen du auch nicht jeden tfk einzeln anlegen musst.

        Falls du sie nicht findest, stelle ich später gerne eins ein sibald ich daheim bin.

        1 Reply Last reply Reply Quote 0
        • T
          tempestas last edited by

          Deine Fenster müssen im Gewerk "Verschluss sein" oder du passt das Skript da , wo Verschluss steht, an dein Gewerk an.

          ! ````
          ! // ######## SKRIPT EINSTELLUNGEN ########
          ! var debug = false;
          ! // ######### STATES ANLEGEN #########
          ! createState('offene_Fenster.Gesamt.offeneFenster', 0);
          createState('offene_Fenster.Gesamt.Fenster', 0);
          createState('offene_Fenster.Gesamt.Text');
          ! var cacheSelectorFenster = $('channelstate.id=*.STATE');
          ! function countFenster(obj) {
          // Setzt die Zähler vor dem Durchlauf aller Elemente auf 0
          var anzahlFenster = 0;
          var anzahlFensterauf = 0;
          var textFensterauf = [];
          ! cacheSelectorFenster.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Verschluss
          var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)

          if(debug) log("Status ist: "+status);
          
              var obj    = getObject(id);
              if (status == 1 || status === true)  {    // wenn Zustand true (HM norm) oder "1" (bei HmIP), dann wird die Anzahl der Fenster hochgezählt
              ++anzahlFensterauf;
              textFensterauf.push(obj.common.name);    // Zu Array hinzufügen
              }                
          

          if(debug) log("Fenster Nr. " + i + ": " + getObject(id).common.name + ": " + status);
          ++anzahlFenster; // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
          });

          ! setState("offene_Fenster.Gesamt.offeneFenster", anzahlFensterauf); // Schreibt die aktuelle Anzahl
          setState("offene_Fenster.Gesamt.Fenster", anzahlFenster); // Schreibt die aktuelle Anzahl der vorhandene Elemente
          setState("offene_Fenster.Gesamt.Text", textFensterauf.join(',
          ')); // Schreibt die aktuelle Namen
          }
          ! cacheSelectorFenster.on(function(obj) { // bei Zustandänderung *. STATE im Gewerk Fenster
          countFenster(obj);
          });
          ! // START
          ! countFenster();
          ! ````

          1 Reply Last reply Reply Quote 0
          • T
            Telefisch last edited by

            Super, vielen Dank erstmal.

            Ich schaue mir das morgen nochmal an.

            Im Moment hab ich erstmal diese rote Kugel aus den Basic Widgets über den Naviknopf gelegt aber das müsste doch auch ohne diesen „Trick“ gehen.

            1 Reply Last reply Reply Quote 0
            • T
              Telefisch last edited by

              Hat niemand einen Tipp zur Darstellung?

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

                Hallo Telefisch,

                meine Lösung sieht wie folgt aus

                2 Widgets übereinander

                1.

                ! [{"tpl":"tplMetroTileStringDialogNumber","data":{"hm_id":65535,"digits":"","factor":1,"min":0,"max":1,"step":0.01,"hover":"true","transform":"true","dialog_fontSize":"12px","dialog_padding":"0px 0px 0px 0px","dialog_draggable":"true","icon_width":"80","icon_class":"","bg_class":"bg-cobalt","badge_bg_class":"bg-red","brand_bg_class":"ribbed-steel","dialog_icon_class":"","icon_src":"","dialog_title":"Offene Fenster u. Türen","dialog_width":"300","dialog_height":"300","label":"Offene Türen und Fenster","visibility-cond":"==","visibility-val":1,"icon_height":"81","icon_top":"15","icon_left":"30","content_oid":"","number_oid":"javascript.0.zählen_Fenster.anzahlFensterauf","dialog_oid":"javascript.0.zählen_Fenster.textFensterauf","dialog_shadow":false,"hide_on_0":false,"gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide","lc-type":"last-change","lc-is-interval":true,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-is-moment":false,"lc-zindex":0},"style":{"left":"25px","top":"615px","z-index":"3","border-width":"1px","border-style":"solid","border-color":"#FFFFFF","border-radius":"15px","width":"130px","height":"120px"},"widgetSet":"metro"}]

                ! [{"tpl":"tplStatefulImage8","data":{"oid":"javascript.0.zählen_Fenster.anzahlFensterauf","visibility-cond":"==","visibility-val":1,"refreshInterval":"0","src_0":"/vis.0/main/img/mfd/fts_window_1w.png","src_1":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_2":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_3":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_4":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_5":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_6":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_7":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","count":"20","gestures-offsetX":0,"gestures-offsetY":0,"src_8":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_9":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_10":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"locked":false,"src_11":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_12":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_13":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_14":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_15":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_16":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_17":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_18":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_19":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","src_20":"/vis.0/main/img/mfd/fts_window_1w_tilt.png","lc-type":"last-change","lc-is-interval":true,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-is-moment":false,"lc-zindex":0},"style":{"left":"50px","top":"608px","width":"92px","height":"92px","z-index":"4"},"widgetSet":"basic"}]

                und folgenden Script

                ! /* 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('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');
                ! text = text.replace(/TFK/g, 'Reedkontakt');
                ! text = (text.length > 1) ? 'Geöffnete Fenster: ' + text : 'Alle Fenster sind verschlossen';
                ! setState(idAnsage, text);
                ! });
                881_offene_fenster.png

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

                Support us

                ioBroker
                Community Adapters
                Donate

                937
                Online

                31.9k
                Users

                80.1k
                Topics

                1.3m
                Posts

                3
                6
                1721
                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