NEWS
Fenster zählen auf verschiedenen Ebenen
-
Hallo das Script zum Fensterzählen habe ich schon gefunden nun habe ich auch der Raspimatic das Gewerke FensterEG und FensterOG angelegt, wo muss ich das denn jetzt alles im Script ändern er findet irgendwie keine Fenster bei mir da er ja das Gewerke Fenster eigentlich braucht.
! /* System Zahl Fenster
! zählt die Fenster in allen Räumen und meldet die offenen Fenster namentlich
! Daten kommen vom Gewerk 'Fenster'
! erstellt: 17.06.2015 nach diesem Vorbild: http://forum.iobroker.net/viewtopic.php … 79c1#p6564
! 05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267
! 02.12.2015 Fehler beseitigt bei Anzahl Fenster, wenn offen (Unterscheidung RHS und TFK)
! Überprüfung des Zustandes (function fensterstatus) und Übergabe an Text
! 25.01.2016 Fenster Nummer in Log korrigiert (+1)
! 02.03.2016 Ansage für TTS aufbereitet
! 02.07.2016 Regulärer Ausdruck (gierig) bei Aufbereitung für Ansage
! */
! function fensterstatus(zustand) {
! var meldung;
! switch (zustand) {
! case 1:
! meldung = 'RHS gekippt';
! break;
! case 2:
! meldung = 'RHS offen';
! break;
! case true:
! meldung = 'TFK offen';
! break;
! default:
! meldung = 'geschlossen';
! break;
! }
! return(meldung);
! }
! createState('zählen_Fenster.anzahlFenster', { // wenn benötigt: Anzahl der vorhandenen Fenster
! type: 'number',
! min: 0,
! def: 0,
! role: 'value'
! });
! createState('zählen_Fenster.anzahlFensterauf', { // Anzahl der Fenster, die auf sind als Variable unter Javascript.0 anlegen
! type: 'number',
! min: 0,
! def: 0,
! role: 'value'
! });
! createState('zählen_Fenster.textFensterauf', { // Anzahl der offenen Fenster und deren Namen als Variable unter Javascript.0 anlegen
! type: 'string',
! def: ' ',
! role: 'value'
! });
! var cacheSelectorState = $('channelstate.id=*.STATE');
! function countFenster(obj) {
! // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Fenster auf 0
! var anzahlFenster = 0;
! var anzahlFensterauf = 0;
! var textFensterauf = [];
! log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val); // Info im Log, welcher Zustand sich geändert hat
! cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element .STATE im Gewerk Fenster
! var status = getState(id).val; // Zustand .STATE abfragen (jedes Element)
! var obj = getObject(id);
! var name = getObject(id).common.name;
! var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
! if (status /TFK/ || status === 1 || status === 2 /RHS/) { // wenn Zustand offen, dann wird die Anzahl der Fenster hochgezählt
! ++anzahlFensterauf;
! textFensterauf.push(devicename + ' (' + fensterstatus(status) + ')'); // Name und Zustand zum Array hinzufügen
! }
! log('FensterEG #' + (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);
! }); -
! ````
//Add device rules
addDeviceCounter("lowbat", $('channel[state.id=LOWBAT]'), true);
addDeviceCounter("lowbat", $('channel[state.id=lowbat]'), true);
addDeviceCounter("sticky_unreach", $('channel[state.id=.STICKY_UNREACH]'), true);
addDeviceCounter("unreach", $('channel[state.id=.UNREACH]'), true);
addDeviceCounter("config_pending", $('channel[state.id=.CONFIG_PENDING]'), true);
addDeviceCounter("Motion", $('channel[state.id=.MOTION]'), true);
addDeviceCounter("DutyCycle", $('channel[state.id=.DUTYCYCLE]'), true);
addDeviceCounter("Spannungsüberwachung", $('channel[state.id=.VOLTAGE]'), function(state){return state<200;});
addDeviceCounter("Auskühlschutz", $('channel[state.id=.ACTUAL_TEMPERATURE]'), function(state){return state<12;});
addDeviceCounter("ERROR", $('channel[state.id=.ERROR*]'), function(state){return state>0;});
addDeviceCounter("Heizbedarf", $('channel[state.id=.VALVE_STATE]'), function(state){return state>45;});
addDeviceCounter("Alive", $('channel[state.id=alive]'), false);
addDeviceCounter("CONNECTED", $('channel[state.id=.connected]'), false);
addDeviceCounter("open_shutters", $('channel{TYPE=BLIND}[state.id=.LEVEL]'), function(state){return state>0;});
addDeviceCounter("open_windows", $('channel{TYPE=SHUTTER_CONTACT}[state.id=.STATE]'), true);
! /*****************************************- Code - do not change anything bellow this line *
******************************************/
! function addDeviceCounter(name, selector, val_to_count) {
! //Total amount of devices found by selector
var state_total = 'deviceCounter.' + name + '.total';
createState(state_total, 0);
//List of devices that match condition
var state_list = 'deviceCounter.' + name + '.list';
createState(state_list, "");
//Number of devices that match condition
var state_counter = 'deviceCounter.' + name + '.counter';
! createState(state_counter, 0);
function countDevs(obj) {
var d_count = 0;
var d_list = [];
! selector.each(function (id, i) {
var status = getState(id).val;
var obj = getObject(id);
if ((typeof val_to_count === 'function' && val_to_count(status)) ||
(typeof val_to_count === 'boolean' && val_to_count == status)) {
//Get parent object
var parentChannelId = id.slice(id.lastIndexOf("."));
var parentDevicelId = id.split(".").slice(0,-2).join(".");
var deviceObject = getObject(parentDevicelId);
//remember device name
d_list.push(deviceObject.common.name);
}
++d_count; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
});
! //if ("state_counter" > 0) {event(name + "(" + d_count + "): " + d_list);
//}
! setState(state_list, d_list.join('
'));
setState(state_counter, d_list.length);
setState(state_total, d_count);
}
! //Re-evaluate when a device status changes
selector.on(function(obj) { // bei Zustandänderung . LOWBAT in allen Gewerken
countDevs(obj);
});
! //Re-evaluate each hour
schedule("/60 * * * *", countDevs);//Evaluate for the first time countDevs();
}
! ````
Glaube der Devicecounter ist einfacher…(original gibt es bei den vorlagen, hier so wie ich es am laufen habe)
Hier bin ich auch unsicher wie genau du den einfügen müsstest glaube so?
addDeviceCounter("open_windows", $('channel{ROLE:DEINEGEWERKE}{TYPE=SHUTTER_CONTACT}[state.id=*.STATE]'), true);
- Code - do not change anything bellow this line *
-
Ich habe das durch Anpassung des Script gelöst viewtopic.php?t=10820
Gesendet von meinem SM-G920F mit Tapatalk
-
ok verstehe viele Wege führen nach Rom
Vorteil des Device Counters hier trotzdem aus meiner Sicht: "all in one skript" und kann mehr
-
Ich habe das durch Anpassung des Script gelöst viewtopic.php?t=10820
Gesendet von meinem SM-G920F mit Tapatalk `
scheint bei mir irgendwie immer noch nicht zu gehen
5264_e84cedd3395181fbe0489adced3635ac.png -