NEWS
[gelöst]Fehler bei subscribe(channel:"…
-
hat sich noch ein kleiner Kopierfehler eingeschlichen:
! 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/[/spoiler]Code:
! ```
`// 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);
! // ################## 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 status = obj.state.val;if(status){ ++countOffen; countOffen= Math.min(arrFenster.length, countOffen); if(debug) log("Es sind "+countOffen +" Fenster offen"); } 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);
});// ############# 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);
}`
! nun werden die offen Fenster gezählt!
! Wie gross wäre der Aufwand den Text mit zu senden? (Analog Lowbat)
4746_x10.jpg
4746_x11.jpg [/i][/i] -
tempestas, das Script funktioniert vor Ort richtig, erhalte alle Zahlen richtig.
Danke dir!!
Wie gross wäre der Aufwand im Script den Text zu ergänzen?
-
Ich habe auch noch mal eine Frage zu diesem Thema. Ich habe ne ganze Reihe Homematic ipFensterkontakte(also die optischen) und jetzt Homematic ip Drehgriffe dazu gekeauft.
die "normalen geben 0 = geschlossen und 1 = geöffnet aus.
die Drehgriffe geben 0 = geschlossen und 1 = gekippt und 2 = geöffnet aus.
Im Moment habe ich das Script für mich so laufen das mir nur 1 und 2 als offen gezeigt wird. Kann ich die Funktion gekippt trotzdem irgendwie nutzen, oder müßte ich mir zwei verschiediene Gewerke dafür anlegen und zwei Scripte laufen lassen ?
Hier mein derzeitiges Script
! ````
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 === 1 || status === 2) { // wenn Zustand offen, dann wird die Anzahl der Fenster hochgezählt
++anzahlFensterauf;
textFensterauf.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);
log("Anzahl Fenster: " + anzahlFenster + " - davon Fenster auf: " + textFensterauf.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 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.length > 1) ? 'Geöffnete Fenster: ' + text : 'Alle Fenster sind geschlossen';
setState(idAnsage, text);
});In dem originalem 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?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564 05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php?f=21&t=473&start=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 = $('channel[state.id=*.STATE](functions="Fenster")'); >! 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); }); ````werden mir ja sonst alle Fenster als gekippt angezeigt. Hat Jemand eine Idee dazu ?
-
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 Fenster
machen
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 Fenster
machen
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); });