NEWS
Offene Fenster in Übersicht als Anzahl anzeigen
-
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 -
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.
-
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();
! ```` -
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.
-
Hat niemand einen Tipp zur Darstellung?
-
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