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