NEWS
Raumlüftung einzeln loggen
-
@paul53 said in Raumlüftung einzeln loggen:
@martinschm sagte: Ähnlich könnte ich mir vermutlich auch alle Fenster eines speziellen Raums selektieren
Wenn alle Fenster(kontakte) unter "alias.0.Fenster" zu finden sind, kann man es auch anders eingrenzen.
Funktion formatDiff(ms, format):
return formatDate(ms, format);
Ist es auch möglich, den Selector dynamisch zu erstellen ?
Hatte überlegt, bei Änderung des windowstatus, den Raum des Sensors zu ermitteln und dann den Selector dynamisch mit dem Raumnamen zu versehen.
function listWindows(room) { const idsFenster = $('channel[state.id=*.ACTUAL](rooms='+ room +')(functions=windowstatus)'); log("Aktion in Raum " + room); idsFenster.each(function(id) { //if(getState(id).val) offen = true; log("Fenster im Raum " + id + " " + idsFenster[id]); }); } function registerSubscription() { $('state(functions=windowstatus)').on(function(obj) { //RaumErmitteln(obj); log(obj.channelId + " " + getObject(obj.channelId,"rooms").enumNames); listWindows (getObject(obj.channelId,"rooms").enumNames); }); }
Die Ermittlung des Raums klappt und wird auch korrekt übergeben. Ich bekomme dann aber keine Auflistung der Fenster ausgegeben. Ist bei meinem Selektor etwas falsch ?
-
@martinschm
.enumNames liefert ein Array. DeshalblistWindows (getObject(obj.channelId,"rooms").enumNames[0]);
Außerdem muss der Name exakt so geschrieben wie in der ID der Aufzählung (Groß- / Kleinschreibung). Beispiel ID: enum.rooms.Arbeitszimmer
-
@paul53 said in Raumlüftung einzeln loggen:
listWindows (getObject(obj.channelId,"rooms").enumNames[0]);
Hi,
das mit dem [0] habe ich angepasst. Die Exakte Schreibweise sollte ja sicher gestellt sein, da ich den Namen per Befehl auslese und dann als Parameter weiter gebe, da kann ja also kein Tippfehler oder so passieren.
Allerdings scheint der Selektor nicht zu funktionieren. idsFenster.lenght ist immer 0, habe beide Varianten probiert.
function listWindows(room) { const idsFenster = $('channel[state.id=*.ACTUAL](rooms='+ room +')(functions=windowstatus)'); //const idsFenster = $('alias.0.Fenster.*(rooms='+ room); log("Aktion in Raum " + room + " " + idsFenster.length); for(let i = 0; i < idsFenster.length; i++) { log("Fenster im Raum " + i + " " + idsFenster[i]); } } function registerSubscription() { $('state(functions=windowstatus)').on(function(obj) { //log(obj.channelId + " " + getObject(obj.channelId,"rooms").enumNames[0]); listWindows (getObject(obj.channelId,"rooms").enumNames[0]); }); }
-
@martinschm sagte: Die Exakte Schreibweise sollte ja sicher gestellt sein, da ich den Namen per Befehl auslese
Du verwendest den Namen, aber der Selektor braucht den letzten Teil der ID, der sich in Groß- / Kleinschreibung oder sogar in der Sprache vom Namen unterscheiden kann. Beispiel (Name: "Küche"):
Der Selektor braucht rooms=kitchen.
-
@paul53 said in Raumlüftung einzeln loggen:
@martinschm sagte: Die Exakte Schreibweise sollte ja sicher gestellt sein, da ich den Namen per Befehl auslese
Du verwendest den Namen, aber der Selektor braucht den letzten Teil der ID, der sich in Groß- / Kleinschreibung oder sogar in der Sprache vom Namen unterscheiden kann. Beispiel (Name: "Küche"):
Der Selektor braucht rooms=kitchen.
Ja ok, ich glaub ich versteh das "Problem". Kann ich mir denn statt dem "Klarnamen" auch die ID des Raums geben lassen, damit es besser funktioniert?
So hat es jetzt erstmal geklappt, das ich beide Fenster des einen Raums bekomme.
function listWindows(room) { //const idsFenster = $('channel[state.id=*.ACTUAL](rooms='+ room +')(functions=windowstatus)'); //const idsFenster = $('channel[state.id=*.ACTUAL](rooms=Arbeitszimmer)(functions=windowstatus)'); //const idsFenster = $('alias.0.Fenster.*(rooms='+ room); const idsFenster = $('alias.0.Fenster.*(rooms='+room+')(functions=windowstatus)'); log("Aktion in Raum " + room + " " + idsFenster.length); for(let i = 0; i < idsFenster.length; i++) { log("Fenster im Raum " + i + " " + idsFenster[i]); } }
-
@martinschm sagte: statt dem "Klarnamen" auch die ID des Raums geben lassen
Versuche mal:
listWindows(getObject(obj.channelId,"rooms").enumIds[0].split('.')[2]);
oder
listWindows(getObject(obj.channelId,"rooms").enumIds[0].substring(11));
-
@martinschm sagte: "Klarnamen"
Den Namen kann man innerhalb der Funktion wieder ermitteln, nachdem der Selektor gebildet wurde.
function listWindows(room) { const idsFenster = $('alias.0.Fenster.*.ACTUAL(rooms=' + room + ')'); room = getObject('enum.rooms.' + room).common.name; // Raumname
-
@martinschm sagte: möglich, den Selector dynamisch zu erstellen ?
Vorschlag:
$('alias.0.Fenster.*.ACTUAL').on(function(dp) { let room = getObject(dp.channelId,"rooms").enumIds[0]; const ids = $('alias.0.Fenster.*.ACTUAL(rooms=' + room.substring(11) + ')'); room = getObject(room).common.name; // Raumname const path = '0_userdata.0.Fenster.' + room; const idLueften = path + '.Lueftung'; let offen = false; ids.each(function(id) { if(getState(id).val) offen = true; }); if(!offen) { // letztes Fenster im Raum geschlossen let dauer = Date.now() - getState(idLueften).lc; setState(path + '.Offendauer', formatDate(dauer, 'hh:mm:ss'), true); }; setState(idLueften, offen, true); });
-
@martinschm said in Raumlüftung einzeln loggen:
ich habe in jedem Raum Fenster mit mindestens zwei Flügeln. An jedem habe ich einen eigenen Fensterkontakt angebracht. Ich würde gerne erfassen, wann das letzte mal gelüftet wurde und wie lange.
Ich hab oft Ideen, welche andere etwas merkwürdig finden.
Schön, dass es mir auch mal so geht, dann kann ich die Leute bei mir besser verstehenDa "Lüften" ja ein weder objektiv, noch subjektiv fassbares Ergebnisse (Daten) liefert, wenn man die Anzahl der Fenster und die Dauer nimmt (zumal - bisher - kein Durchzug erfasst wird), möchte ich mir die Freiheit erlauben und Dir einen Gedankenanstoß? Vorschlag? machen.
Was hälst Du von der Idee die allgemeine/gefühlte Luftqualität durch Messung von Luftfeuchte plus ggf Gas-/Partikel-Messung zu ermitteln? Da bräuchtest Du pro Zimmer nur 1 Sensoren-Set (Temp/Hum vermutlich eh schon je Zimmer vorhanden) und würdest im Mittel schnell sehen, welcher Raum der Übeltäter ist, so dass Dir kaskadiert vermittelt werden könnte, wo Lüften angesagt ist.
Gruss von der Ostsee
Chris -
@chris-1 said in Raumlüftung einzeln loggen:
@martinschm said in Raumlüftung einzeln loggen:
ich habe in jedem Raum Fenster mit mindestens zwei Flügeln. An jedem habe ich einen eigenen Fensterkontakt angebracht. Ich würde gerne erfassen, wann das letzte mal gelüftet wurde und wie lange.
Ich hab oft Ideen, welche andere etwas merkwürdig finden.
Schön, dass es mir auch mal so geht, dann kann ich die Leute bei mir besser verstehenDa "Lüften" ja ein weder objektiv, noch subjektiv fassbares Ergebnisse (Daten) liefert, wenn man die Anzahl der Fenster und die Dauer nimmt (zumal - bisher - kein Durchzug erfasst wird), möchte ich mir die Freiheit erlauben und Dir einen Gedankenanstoß? Vorschlag? machen.
Was hälst Du von der Idee die allgemeine/gefühlte Luftqualität durch Messung von Luftfeuchte plus ggf Gas-/Partikel-Messung zu ermitteln? Da bräuchtest Du pro Zimmer nur 1 Sensoren-Set (Temp/Hum vermutlich eh schon je Zimmer vorhanden) und würdest im Mittel schnell sehen, welcher Raum der Übeltäter ist, so dass Dir kaskadiert vermittelt werden könnte, wo Lüften angesagt ist.
Gruss von der Ostsee
ChrisHi Chris,
danke für den Impuls. Temp Sensoren hab ich in fast jedem Raum. Mir geht es allerdings auch so darum zu wissen wann in welchem Raum das letzte mal "frische" Luft rein gekommen ist. Außerdem soll in einem zweiten Schritt, darauf hingewiesen werden, wenn das Fenster vielleicht -bei Außentemperaturen unter 8 Grad - zu lange gelüftet wird und alles auskühlt.
Viele Grüße
Martin