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 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); });
-
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 !