/* Status Zahl Heizung
zählt die Heizung in allen Räumen und meldet die Eingeschalteten namentlich
Daten kommen vom Gewerk "Heizung"
23.12.2016 Vorlage von "pix" - geändert von bahnuhr auf Heizung
*/
var logging = false;
var idAnzahlEin = 'javascript.0.System.Zusammenfassung.Heizung.Anzahl_ein',
idAnzahl = 'javascript.0.System.Zusammenfassung.Heizung.Anzahl',
idRaum = 'javascript.0.System.Zusammenfassung.Heizung.Raum';
var cacheSelectorLevel = $('channel[state.id=*.VALVE_STATE](functions="Heizung")'); // Gewerk Heizung
function checkDevices(obj) {
// Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Heizung auf 0
var anzahlHeizungAn = 0;
var anzahlHeizung = 0;
var textRaum = [];
if (logging) log('++++++ Heizung Anzahl ++++ ');
cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
var obj = getObject(id);
var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
var raumname = getObject(id, "rooms");
if (logging) {
log('-------');
log('Kanal: ' + name);
log('Status: ' + status + '%');
}
if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
++anzahlHeizungAn;
textRaum.push(raumname.enumNames);
}
++anzahlHeizung; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
});
// Funktion: Doppelte Einträge aus Array entfernen (für Räume) www.okco.de (c) codemaster
function deleteDuplicates(arr) {
var temp = {};
for (var i = 0; i < arr.length; i++) temp[arr[i]] = true;
var r = [];
for (var k in temp) r.push(k);
return r;
}
// Array mit Lichternamen sortieren
textRaum = deleteDuplicates(textRaum);
textRaum.sort();
// Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
if (logging) log("Anzahl Heizung: " + anzahlHeizung + " # davon Heizung an: " + anzahlHeizungAn);
// die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
setState(idAnzahlEin, anzahlHeizungAn);
setState(idAnzahl, anzahlHeizung); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
setState(idRaum, textRaum.join(', ')); // Räume, in denen Heizung an ist
}
// Trigger
cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
if (logging) log('Auslösende Heizung: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
checkDevices();
});
function main() {
setTimeout(function(){
if (logging) log('Auslöser Skriptstart');
checkDevices();
}, 2000);
}
main(); // Skriptstart-Auslöser