NEWS
[Gelöst] Skript Lichtzählen verweigert Namen Homematic-Geräte
-
Meine bisher funktionierenden Skripte zum Zählen von div. Verbrauchern (Licht, Zwischenstecker), zeigen mir die Namen meiner Homematic-Geräte nicht mehr an. Raumnamen und Anzahl werden korrekt angezeigt.
Es geht um das Skript hier aus dem Forum (Lichter zählen), dass ich meine Bedürfnissen leicht angepasst habe:
!
var logging = true; ! //Variablen deklarieren var idAnzahlEin = 'Beleuchtung.Anzahl_ein', idAnzahl = 'Beleuchtung.Anzahl', idText = 'Beleuchtung.Text', idRaum = 'Beleuchtung.Raum', idAnsage = 'Beleuchtung.Ansage'; ! // Status erstellen createState(idAnzahl, { type: 'number', name: 'Anzahl aller Lichter', min: 0, def: 0, role: 'value' }); createState(idAnzahlEin, { type: 'number', name: 'Anzahl der eingeschalteten Lichter', min: 0, def: 0, role: 'value' }); createState(idText, { type: 'string', name: 'Eingeschaltete Lichter', desc: 'Namen der eingeschalteten Lichter', def: ' ', role: 'value' }); createState(idAnsage, { type: 'string', name: 'Eingeschaltete Lichter (Ansage)', desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)', def: ' ', role: 'value' }); createState(idRaum, { type: 'string', name: 'Räume mit eingeschalteten Lichter', desc: 'Namen der Räume, in denen Lichter eingeschaltet sind', def: ' ', role: 'value' }); ! //Variablen der Geräte deklarieren var cacheSelectorState = $('channel[state.id=*.STATE](functions="Licht")'); var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Licht")'); var cacheSelectorHue = $('channel[state.id=*.ON](functions="Licht")'); var cacheSelectorSwitch1 = $('channel[state.id=*.Switch_1](functions="Licht")'); var cacheSelectorSwitch2 = $('channel[state.id=*.Switch_2](functions="Licht")'); ! function checkDevices(obj) { var anzahlLichterAn = 0; var anzahlLichter = 0; var textLichterAn = []; var textRaum = []; if (logging) { log('++++++ Lichter Anzahl ++++ '); log('#### SCHALTER ##### '); } ! cacheSelectorState.each(function(id, i) { var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; var devicename = name.substring(0, name.indexOf(".STATE")); var raumname = getObject(id, "rooms"); ! if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status); } if (status) { ++anzahlLichterAn; textLichterAn.push(devicename); textRaum.push(raumname.enumNames); } ++anzahlLichter; }); ! cacheSelectorSwitch1.each(function(id, i) { var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; var devicename = name; var raumname = getObject(id, "rooms"); ! if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status); } if (status) { ++anzahlLichterAn; textLichterAn.push(devicename); textRaum.push(raumname.enumNames); } ++anzahlLichter; }); ! cacheSelectorSwitch2.each(function(id, i) { var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; var devicename = name; var raumname = getObject(id, "rooms"); ! if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status); } if (status) { ++anzahlLichterAn; textLichterAn.push(devicename); textRaum.push(raumname.enumNames); } ++anzahlLichter; }); ! // Array mit Lichternamen sortieren textLichterAn.sort(); textRaum.sort(); if (logging) log("Text: " + textLichterAn); if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn); setState(idText, textLichterAn.join(', ')); setState(idAnzahlEin, textLichterAn.length); setState(idAnzahl, anzahlLichter); setState(idRaum, textRaum.join(', ')); } ! // Trigger cacheSelectorState.on(function(obj) { if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); checkDevices(); }); cacheSelectorSwitch1.on(function(obj) { if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); checkDevices(); }); cacheSelectorSwitch2.on(function(obj) { if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); checkDevices(); }); ! cacheSelectorHue.on(function(obj) { if (logging) log('Auslösende HUE: ' + obj.id + ': ' + obj.state.val); checkDevices(); }); cacheSelectorLevel.on(function(obj) { if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); checkDevices(); }); ! function main() { setTimeout(function() { if (logging) log('Auslöser Skriptstart'); checkDevices(); }, 2000); } ! main(); // Skriptstart-Auslöser ! // Aufbereitung für Ansage function strip_tags(data) { var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " "); return (rueckgabe); } ! on(idText, function(obj) { var text = obj.state.val; text = (getState(idAnzahl).val > 0) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet'; setState(idAnsage, text); }); !