NEWS
[gelöst]Fehler bei subscribe(channel:"…
- 
					
					
					
					
 DSL-Raser, versuchs mal so. Eventuell wieder Fehler drin, im Forum übersehe ich gerne mal was. ! ```` 
 ! 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'
 });
 ! createState('zählen_Fenster.anzahlFensterKipp', { // Anzahl der gekippten Fenster als Variable unter Javascript.0 anlegen
 type: 'number',
 min: 0,
 def: 0,
 role: 'value'
 });
 createState('zählen_Fenster.textFensterKipp', { // Anzahl der gekippten 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 anzahlFensterKipp = 0;var textFensterauf = []; 
 var textFensterKipp = [];! 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 === 2 ) { // wenn Zustand offen (2), dann wird die Anzahl der Fenster hochgezählt
 ++anzahlFensterauf;
 textFensterauf.push(devicename ); // Name und Zustand zum Array hinzufügen
 }
 else {
 if( status === 1 ) { // wenn Zustand gekippt (1), dann wird die Anzahl der Fenster hochgezählt
 ++anzahlFensterKipp;
 textFensterKipp.push(devicename ); // Name und Zustand zum Array hinzufügen
 }
 }log('Fenster #' + (i+1) + ': ' + devicename + ' ' /* + ' (' + 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 + "gekippt: "+ textFensterKipp) ;
 log("Anzahl Fenster: " + anzahlFenster + " - davon Fenster auf: " + textFensterauf.length +". Anzahl gekippter Fenster :" +textFensterKipp.length);
 ! // 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 FenstersetState("zählen_Fenster.textFenstrKipp, textFensterKipp.join(', ')); // Schreibt die aktuelle Namen der gekippten Fenster 
 setState("zählen_Fenster.anzahlFensterKipp", textFensterKipp.length); // Schreibt die aktuelle Anzahl der gekippten FenstersetState("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);
 });
 ! ````Die Ansage habe ich mal ignoriert. 
- 
					
					
					
					
 Dali3: ! ``` 
 `// Skript zum prüfen, wieviele Fenster offen sind
 // Lösung für Xiaomi Kontakte, die nicht via $-Selector ansprechbar zu sein scheinen
 // Status: 4.1.2018
 ! // ############ ALLGEMEINE SKRIPTEINSTELLUNGEN ###############
 ! // debugging
 ! var debug = false;
 ! // states
 ! createState('Fenster.Total', 0);
 createState('Fenster.Offen', 0);
 createState('Fenster.Text',"");
 ! // ################## Fenster Kontakte #####################
 ! // Variablen / IDs deklarieren
 ! var idFenster1 = "mihome.0.devices.magnet_158d0001dacfc1.state"/Is opened Fenster Küche offen/, // ids eintragen, geht rechts oben im JS Editor, "id einfügen". Dort auf den "open" state verlinken.
 idFenster2 = "mihome.0.devices.magnet_158d0001dacfc7.state"/Is opened Fenster Wohnzimmer offen/; // du kannst die Variablen auch "FensterKueche" usw nennen, es muss nicht "idFenster1" sein
 // idFenster3 = [HIER DIE ID DEINER MAGNETEN EINFÜGEN] , // die IDs kannst du beliebig benennen. Müssen aber nachfolgend entsprechend eingetragen sein
 // idFensterN = [HIER DIE ID DEINER MAGNETEN EINFÜGEN] ; // die letzte ID muss mit einem Semikolon beendet werden, dazwischen Kommas
 ! var arrFenster = [idFenster1, idFenster2]; // hier musst du die gleichen Namen eintragen, wie du direkt hierüber eingestellt hast
 ! // Variablenvar countOffen = 0; 
 countTotal =arrFenster.length;! // ######## FUNKTIONEN ######## 
 ! on(arrFenster, function(obj){
 ! var textFenster= [];
 var status = obj.state.val;
 ! var name = getObject(id).common.name;
 var devicename = name.replace("Is opened ",""); //
 devicename = devicename.replace(" offen", ""); // Hier wird das "is opened " und am Ende das "offen" rausgenommen, damit nur die Raumbezeichnungen übrig bleibenif(status){ ++countOffen; countOffen= Math.min(arrFenster.length, countOffen); if(debug) log("Es sind "+countOffen +" Fenster offen"); textFenster.push(devicename); } else{ --countOffen; countOffen = Math.max(0, countOffen); if(debug) log("Es sind "+countOffen +" Fenster offen"); }! setState("javascript.0.Fenster.Offen", countOffen); 
 setState("javascript.0.Fenster.Total", countTotal);
 setState("javascript.0.Fenster.Text", textFenster.join(',
 '));});// ############# BEI SKIRPTSTART DIE COUNTER RICHTIG SETZEN ################### ! for (var i = 0; i< arrFenster.length; i++) { 
 var objekt = arrFenster[i];
 var value = getState(objekt).val;
 if(debug) log(arrFenster[i] + " ist " +value);
 if(value) ++countOffen;
 setState("javascript.0.Fenster.Offen", countOffen);
 }` [/i][/i]
- 
					
					
					
					
 Hallo tempestas Habe es nun getestet. Jedoch taucht kein Text auf, nur folgende Fehlermeldungen. Sowie werden die Textwerte / Zahlen nicht sofort angepasst. Siehe Bilder: Dali3: ! ``` 
 `// Skript zum prüfen, wieviele Fenster offen sind
 // Lösung für Xiaomi Kontakte, die nicht via $-Selector ansprechbar zu sein scheinen
 // Status: 4.1.2018
 ! // ############ ALLGEMEINE SKRIPTEINSTELLUNGEN ###############
 ! // debugging
 ! var debug = false;
 ! // states
 ! createState('Fenster.Total', 0);
 createState('Fenster.Offen', 0);
 createState('Fenster.Text',"");
 ! // ################## Fenster Kontakte #####################
 ! // Variablen / IDs deklarieren
 ! var idFenster1 = "mihome.0.devices.magnet_158d0001dacfc1.state"/Is opened Fenster Küche offen/, // ids eintragen, geht rechts oben im JS Editor, "id einfügen". Dort auf den "open" state verlinken.
 idFenster2 = "mihome.0.devices.magnet_158d0001dacfc7.state"/Is opened Fenster Wohnzimmer offen/; // du kannst die Variablen auch "FensterKueche" usw nennen, es muss nicht "idFenster1" sein
 // idFenster3 = [HIER DIE ID DEINER MAGNETEN EINFÜGEN] , // die IDs kannst du beliebig benennen. Müssen aber nachfolgend entsprechend eingetragen sein
 // idFensterN = [HIER DIE ID DEINER MAGNETEN EINFÜGEN] ; // die letzte ID muss mit einem Semikolon beendet werden, dazwischen Kommas
 ! var arrFenster = [idFenster1, idFenster2]; // hier musst du die gleichen Namen eintragen, wie du direkt hierüber eingestellt hast
 ! // Variablenvar countOffen = 0; 
 countTotal =arrFenster.length;! // ######## FUNKTIONEN ######## 
 ! on(arrFenster, function(obj){
 ! var textFenster= [];
 var status = obj.state.val;
 ! var name = getObject(id).common.name;
 var devicename = name.replace("Is opened ",""); //
 devicename = devicename.replace(" offen", ""); // Hier wird das "is opened " und am Ende das "offen" rausgenommen, damit nur die Raumbezeichnungen übrig bleibenif(status){ ++countOffen; countOffen= Math.min(arrFenster.length, countOffen); if(debug) log("Es sind "+countOffen +" Fenster offen"); textFenster.push(devicename); } else{ --countOffen; countOffen = Math.max(0, countOffen); if(debug) log("Es sind "+countOffen +" Fenster offen"); }! setState("javascript.0.Fenster.Offen", countOffen); 
 setState("javascript.0.Fenster.Total", countTotal);
 setState("javascript.0.Fenster.Text", textFenster.join(',
 '));});// ############# BEI SKIRPTSTART DIE COUNTER RICHTIG SETZEN ################### ! for (var i = 0; i< arrFenster.length; i++) { 
 var objekt = arrFenster[i];
 var value = getState(objekt).val;
 if(debug) log(arrFenster[i] + " ist " +value);
 if(value) ++countOffen;
 setState("javascript.0.Fenster.Offen", countOffen);
 }! [4746_x1.jpg](/assets/uploads/files/4746_x1.jpg) [4746_x2.jpg](/assets/uploads/files/4746_x2.jpg) [4746_x3.jpg](/assets/uploads/files/4746_x3.jpg) [4746_x4.jpg](/assets/uploads/files/4746_x4.jpg) [4746_x5.jpg](/assets/uploads/files/4746_x5.jpg) [/i][/i] ```
- 
					
					
					
					
 hmpf, hab ich nicht aufgepasst. Bitte aus var name = getObject(id).common.name;das hier machen var name = getObject(obj).common.name;in Zeile 43 mir fällt aber auf, dass die "Total Fenster" immer 0 sind. Das soll natürlich nicht sein 
- 
					
					
					
					
 DSL-Raser, versuchs mal so. Eventuell wieder Fehler drin, im Forum übersehe ich gerne mal was. ! ```` 
 ! 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'
 });
 ! createState('zählen_Fenster.anzahlFensterKipp', { // Anzahl der gekippten Fenster als Variable unter Javascript.0 anlegen
 type: 'number',
 min: 0,
 def: 0,
 role: 'value'
 });
 createState('zählen_Fenster.textFensterKipp', { // Anzahl der gekippten 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 anzahlFensterKipp = 0;var textFensterauf = []; 
 var textFensterKipp = [];! 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 === 2 ) { // wenn Zustand offen (2), dann wird die Anzahl der Fenster hochgezählt
 ++anzahlFensterauf;
 textFensterauf.push(devicename ); // Name und Zustand zum Array hinzufügen
 }
 else {
 if( status === 1 ) { // wenn Zustand gekippt (1), dann wird die Anzahl der Fenster hochgezählt
 ++anzahlFensterKipp;
 textFensterKipp.push(devicename ); // Name und Zustand zum Array hinzufügen
 }
 }log('Fenster #' + (i+1) + ': ' + devicename + ' ' /* + ' (' + 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 + "gekippt: "+ textFensterKipp) ;
 log("Anzahl Fenster: " + anzahlFenster + " - davon Fenster auf: " + textFensterauf.length +". Anzahl gekippter Fenster :" +textFensterKipp.length);
 ! // 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 FenstersetState("zählen_Fenster.textFenstrKipp, textFensterKipp.join(', ')); // Schreibt die aktuelle Namen der gekippten Fenster 
 setState("zählen_Fenster.anzahlFensterKipp", textFensterKipp.length); // Schreibt die aktuelle Anzahl der gekippten FenstersetState("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);
 });
 ! ````Die Ansage habe ich mal ignoriert. ` probiere ich die nächsten Tage mal aus, danke Dir. 
- 
					
					
					
					
 Habe es angepasst, jedoch ändert sich nichts  hmpf, hab ich nicht aufgepasst. Bitte aus var name = getObject(id).common.name;das hier machen var name = getObject(obj).common.name;in Zeile 43 mir fällt aber auf, dass die "Total Fenster" immer 0 sind. Das soll natürlich nicht sein ` 
 4746_x13.jpg
 4746_x14.jpg
- 
					
					
					
					
 hmm da zeigt sich jetzt, dass ich nur interessierter Laie bin… die wirklich guten hier können das bestimmt sofort lösen. Ich muss mir das genauer ansehen 
- 
					
					
					
					
 Habe es angepasst, jedoch ändert sich nichts  hmpf, hab ich nicht aufgepasst. Bitte aus var name = getObject(id).common.name;das hier machen var name = getObject(obj).common.name;in Zeile 43 mir fällt aber auf, dass die "Total Fenster" immer 0 sind. Das soll natürlich nicht sein Hi, ohne es testen zu können, da ich keine Kontakte habe und darum nicht testen kann. Probier mal var name = getObject(obj).common.name;durch```` 
 var name = obj.common.name;zu ersetzen
- 
					
					
					
					
 doppel Post 
- 
					
					
					
					
 Perfekt, hat geklappt! Nun funktioniert alles!!! Herzlichen Dank euch beiden für die tolle Unterstützung! Habe es angepasst, jedoch ändert sich nichts  hmpf, hab ich nicht aufgepasst. Bitte aus var name = getObject(id).common.name;das hier machen var name = getObject(obj).common.name;in Zeile 43 mir fällt aber auf, dass die "Total Fenster" immer 0 sind. Das soll natürlich nicht sein Hi, ohne es testen zu können, da ich keine Kontakte habe und darum nicht testen kann. Probier mal var name = getObject(obj).common.name;durch```` 
 var name = obj.common.name;zu ersetzen `
- 
					
					
					
					
 DSL-Raser, versuchs mal so. Eventuell wieder Fehler drin, im Forum übersehe ich gerne mal was. ! ```` 
 ! 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'
 });
 ! createState('zählen_Fenster.anzahlFensterKipp', { // Anzahl der gekippten Fenster als Variable unter Javascript.0 anlegen
 type: 'number',
 min: 0,
 def: 0,
 role: 'value'
 });
 createState('zählen_Fenster.textFensterKipp', { // Anzahl der gekippten 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 anzahlFensterKipp = 0;var textFensterauf = []; 
 var textFensterKipp = [];! 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 === 2 ) { // wenn Zustand offen (2), dann wird die Anzahl der Fenster hochgezählt
 ++anzahlFensterauf;
 textFensterauf.push(devicename ); // Name und Zustand zum Array hinzufügen
 }
 else {
 if( status === 1 ) { // wenn Zustand gekippt (1), dann wird die Anzahl der Fenster hochgezählt
 ++anzahlFensterKipp;
 textFensterKipp.push(devicename ); // Name und Zustand zum Array hinzufügen
 }
 }log('Fenster #' + (i+1) + ': ' + devicename + ' ' /* + ' (' + 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 + "gekippt: "+ textFensterKipp) ;
 log("Anzahl Fenster: " + anzahlFenster + " - davon Fenster auf: " + textFensterauf.length +". Anzahl gekippter Fenster :" +textFensterKipp.length);
 ! // 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 FenstersetState("zählen_Fenster.textFenstrKipp, textFensterKipp.join(', ')); // Schreibt die aktuelle Namen der gekippten Fenster 
 setState("zählen_Fenster.anzahlFensterKipp", textFensterKipp.length); // Schreibt die aktuelle Anzahl der gekippten FenstersetState("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);
 });
 ! ````Die Ansage habe ich mal ignoriert. probiere ich die nächsten Tage mal aus, danke Dir.läufts? 
- 
					
					
					
					
 Ich habe es noch nicht probiert, bin unterwegs. Aber ich gebe auf jeden Fall Rückmeldung. 
- 
					
					
					
					
 DSL-Raser, versuchs mal so. Eventuell wieder Fehler drin, im Forum übersehe ich gerne mal was. ! ```` 
 ! 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'
 });
 ! createState('zählen_Fenster.anzahlFensterKipp', { // Anzahl der gekippten Fenster als Variable unter Javascript.0 anlegen
 type: 'number',
 min: 0,
 def: 0,
 role: 'value'
 });
 createState('zählen_Fenster.textFensterKipp', { // Anzahl der gekippten 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 anzahlFensterKipp = 0;var textFensterauf = []; 
 var textFensterKipp = [];! 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 === 2 ) { // wenn Zustand offen (2), dann wird die Anzahl der Fenster hochgezählt
 ++anzahlFensterauf;
 textFensterauf.push(devicename ); // Name und Zustand zum Array hinzufügen
 }
 else {
 if( status === 1 ) { // wenn Zustand gekippt (1), dann wird die Anzahl der Fenster hochgezählt
 ++anzahlFensterKipp;
 textFensterKipp.push(devicename ); // Name und Zustand zum Array hinzufügen
 }
 }log('Fenster #' + (i+1) + ': ' + devicename + ' ' /* + ' (' + 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 + "gekippt: "+ textFensterKipp) ;
 log("Anzahl Fenster: " + anzahlFenster + " - davon Fenster auf: " + textFensterauf.length +". Anzahl gekippter Fenster :" +textFensterKipp.length);
 ! // 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 FenstersetState("zählen_Fenster.textFenstrKipp", textFensterKipp.join(', ')); // Schreibt die aktuelle Namen der gekippten Fenster 
 setState("zählen_Fenster.anzahlFensterKipp", textFensterKipp.length); // Schreibt die aktuelle Anzahl der gekippten FenstersetState("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);
 });
 ! ````Die Ansage habe ich mal ignoriert. probiere ich die nächsten Tage mal aus, danke Dir.läufts? ` läuft leider noch nicht. fehler im Log in zwei Zeilen 17:43:17.620 [info] javascript.0 script.js.Test.Fenstertest: Anzahl Fenster: 22 - davon Fenster auf: 0. Anzahl gekippter Fenster :1 17:43:17.620 [warn] javascript.0 at countFenster (script.js.Test.Fenstertest:75:2) 17:43:17.620 [warn] javascript.0 at Object. (script.js.Test.Fenstertest:82:2) 
- 
					
					
					
					
 jo waren wieder "Forum" Fehler. Ich sehs halt net beim Tippen hier. Da fehlen einmal Anführungszeichen Bitte aus setState("zählen_Fenster.textFenstrKipp, textFensterKipp.join(', ')); // Schreibt die aktuelle Namen der gekippten Fenstermachen setState("zählen_Fenster.textFenstrKipp", textFensterKipp.join(', ')); // Schreibt die aktuelle Namen der gekippten Fenster
- 
					
					
					
					
 es fehlte ein " und noch irgendwo ein r (bei Fenste<u>r</u>kipp) jetzt muß ich noch meinen Telegram Trigger umbauen. 
 3822_telegram.jpg
- 
					
					
					
					
 jo waren wieder "Forum" Fehler. Ich sehs halt net beim Tippen hier. Da fehlen einmal Anführungszeichen Bitte aus setState("zählen_Fenster.textFenstrKipp, textFensterKipp.join(', ')); // Schreibt die aktuelle Namen der gekippten Fenstermachen setState("zählen_Fenster.textFenstrKipp", textFensterKipp.join(', ')); // Schreibt die aktuelle Namen der gekippten Fenster ```` `Danke, auch gerade gefunden, Du warst schneller…. :lol: Edit: hier fehlt noch das <u>e</u> bei FensterKipp 
- 
					
					
					
					
 wie kann ich das jetzt wieder sinnvoll für kipp/offen und geschlossen verwenden und mit einbauen, hast Du ja erstmal weg gelassen ? // 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.length > 1) ? 'Geöffnete Fenster: ' + text : 'Alle Fenster sind geschlossen'; setState(idAnsage, text); });
- 
					
					
					
					
 so bekomme ich einen Fehler ? ! // Variable für Ansage aufbereiten createState('zählen_Fenster.textFensteraufAnsage', { type: 'string', def: '', role: 'value' }); // Variable für Ansage aufbereiten createState('zählen_Fenster.textFensterKippfAnsage', { 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'; ! // Anzahl der Fenster, die gekippt sind, für Ansage aufbereitet var idQuelle = 'javascript.0.zählen_Fenster.textFensterKipp', idAnsage = 'javascript.0.zählen_Fenster.textFensterKippAnsage'; ! on(idQuelle, function (obj) { var text = obj.state.val; text = (text.length > 1) ? 'Geöffnete Fenster: ' + text : 'Alle Fenster sind geschlossen'; setState(idAnsage, text); }); !18:32:24.107 [warn] javascript.0 at Object. (script.js.Test.Fenstertest:109:2) das ist diese Zeile hier ? setState(idAnsage, text); hier noch das Log javascript.0 2018-01-08 18:38:36.986 warn at Object. (script.js.Test.Fenstertest:109:2) javascript.0 2018-01-08 18:38:36.985 warn State "javascript.0.zählen_Fenster.textFensterKippAnsage" not found 
- 
					
					
					
					
 so wie das Script jetzt ist werden die Drehgriffe zwar richtig in den Objekten geschrieben, aber meine "normalen Fensterkontakte werden auch bei gekippt reingeschrieben. ! ```` 
 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'
 });
 ! createState('zählen_Fenster.anzahlFensterKipp', { // Anzahl der gekippten Fenster als Variable unter Javascript.0 anlegen
 type: 'number',
 min: 0,
 def: 0,
 role: 'value'
 });
 createState('zählen_Fenster.textFensterKipp', { // Anzahl der gekippten 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 anzahlFensterKipp = 0;var textFensterauf = []; 
 var textFensterKipp = [];! 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 === 2 ) { // wenn Zustand offen (2), dann wird die Anzahl der Fenster hochgezählt
 ++anzahlFensterauf;
 textFensterauf.push(devicename ); // Name und Zustand zum Array hinzufügen
 }
 else {
 if( status === 1 ) { // wenn Zustand gekippt (1), dann wird die Anzahl der Fenster hochgezählt
 ++anzahlFensterKipp;
 textFensterKipp.push(devicename ); // Name und Zustand zum Array hinzufügen
 }
 }log('Fenster #' + (i+1) + ': ' + devicename + ' ' /* + ' (' + 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 + "gekippt: "+ textFensterKipp) ;
 log("Anzahl Fenster: " + anzahlFenster + " - davon Fenster auf: " + textFensterauf.length +". Anzahl gekippter Fenster :" +textFensterKipp.length);
 ! // 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 FenstersetState("zählen_Fenster.textFensterKipp", textFensterKipp.join(', ')); // Schreibt die aktuelle Namen der gekippten Fenster 
 setState("zählen_Fenster.anzahlFensterKipp", textFensterKipp.length); // Schreibt die aktuelle Anzahl der gekippten FenstersetState("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'
 });
 // Variable für Ansage aufbereiten
 createState('zählen_Fenster.textFensterKippAnsage', {
 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';
 ! // Anzahl der Fenster, die gekippt sind, für Ansage aufbereitet
 var idQuelle = 'javascript.0.zählen_Fenster.textFensterKipp',
 idAnsage = 'javascript.0.zählen_Fenster.textFensterKippAnsage';
 ! on(idQuelle, function (obj) {
 var text = obj.state.val;
 text = (text.length > 1) ? 'Gekippte Fenster: ' + 'Geöffnete Fenster: ' + text : 'Alle Fenster sind geschlossen';
 setState(idAnsage, text);
 });
 */
- 
					
					
					
					
 ich werde das jetzt einfach mit zwei Gewerken machen, z.B. Fensterkontakte und Fensterdrehgiffe. Ich glaube das ist dann einfacher für mich. Aber trotzdem Danke an tempestas ! 
 
		
	 
		
	 
			
		