NEWS
Hilfe bei Script zur Aufzählung benötigt
-
Hallo zusammen,
ich habe versucht ein hier im Forum gefundenes Script (für die Zählung von Lichtern) anzupassen...
var logging = true; var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein', idAnzahl = 'javascript.0.Status.Lichter.Anzahl', idText = 'javascript.0.Status.Lichter.Text', idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU idAnsage = 'javascript.0.Status.Lichter.Ansage'; // Ab hier nix mehr ändern createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter type: 'number', name: 'Anzahl aller Lichter', min: 0, def: 0, role: 'value' }); createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen type: 'number', name: 'Anzahl der eingeschalteten Lichter', min: 0, def: 0, role: 'value' }); createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen 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, { // Räume, in denen Lichter brennen // <---- NEU type: 'string', name: 'Räume mit eingeschalteten Lichter', desc: 'Namen der Räume, in denen Lichter eingeschaltet sind', def: ' ', role: 'value' }); //var cacheSelectorSwitch = $('switch[state.id=*.1](functions="Strom")'); // Gewerk licht var cacheSelectorSwitch = $('state[id=*.1](functions="Strom")'); //var cacheSelectorSwitch = $('device[state.id=*.1](functions="Strom")'); //var cacheSelectorSwitch = $('state[id=*.1](functions="Strom")'); //var cacheSelectorSwitch = $('state[id=*.1](functions=Strom)[role=switch]'); function checkDevices(obj) { // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk licht auf 0 var anzahlLichterAn = 0; var anzahlLichter = 0; var textLichterAn = []; var textRaum = []; if (logging) { log('++++++ Lichter Anzahl ++++ '); log('#### SCHALTER ##### '); } cacheSelectorSwitch.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".1")); //.state aus Text entfernen var raumname = getObject(id, "rooms"); // <---- NEU if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname.enumNames); // <---- NEU } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status }); log('test: ' + anzahlLichter);
MOD-Edit: Code in Codetags gesetzt!
***** Leider bekomme ich die Steckdosen nicht gezählt Ergebins immer 0
Aufzählung Strom ist natürlich vorhanden.
Ich habe verschiedene Varianten zum auslesen versucht. Nix funktioniert und ich komme einfach nicht weiter...Hier noch das Objekt:
PS: Wie binde ich den Script-Text hier korrekt ein?
-
-
@Mrs-B sagte:
var cacheSelectorSwitch = $('state[id=*.1](functions="Strom")');
Ist "Strom" in der ID "enum.functions.Strom" groß geschrieben ?
Wo wird die Funktion checkDevices() aufgerufen ? -
args....
Das war der Fehler... in der Aufzählung heißt es ID "enum.functions.strom" ... Also "strom" ist hier klein geschrieben... und jetzt läuft es
Liebe Dank für den Hinweis... Das wird mir auch an anderen stellen weiterhelfen
-
Doch noch ne Rückfrage...
Bezogen auf meine Steckdose bekomme ich natürlich bei
var name = getObject(id).common.name;
den Namen switch_1 raus.. Das natürlich nicht so der Hit..
Wie bekomme ich denn den Namen vom Device (also vom übergeordneten DP) raus (hier "Handy-Strom").Mag mir da noch jemand auf die Sprünge helfen?
-
@Mrs-B sagt:
Wie bekomme ich denn den Namen vom Device (also vom übergeordneten DP) raus (hier "Handy-Strom").
var idDev = id.substring(0, id.lastIndexOf('.')); var name = getObject(idDev).common.name;
Mit dieser Funktion klappt es auch, wenn noch ein Kanal dazwischen ist.
-
@paul53 said in Hilfe bei Script zur Aufzählung benötigt:
var idDev = id.substring(0, id.lastIndexOf('.'));
var name = getObject(idDev).common.name;Ganz lieben Dank!! Funtioniert super!