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:
    398432da-292a-447e-9e60-cd59ca3a631b-grafik.png

    PS: Wie binde ich den Script-Text hier korrekt ein?


  • @Mrs-B

    Zeile 92 ändern :

    var cacheSelectorState = $('state[id=*.state](functions="Strom")'); 
    

  • @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!

Suggested Topics

1.6k
Online

37.0k
Users

42.7k
Topics

592.8k
Posts