Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Hilfe bei Script zur Aufzählung benötigt

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Hilfe bei Script zur Aufzählung benötigt

    This topic has been deleted. Only users with topic management privileges can see it.
    • Mrs-B
      Mrs-B last edited by Homoran

      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?

      Glasfaser paul53 2 Replies Last reply Reply Quote 0
      • Glasfaser
        Glasfaser @Mrs-B last edited by

        @Mrs-B

        Zeile 92 ändern :

        var cacheSelectorState = $('state[id=*.state](functions="Strom")'); 
        
        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Mrs-B last edited by paul53

          @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 ?

          1 Reply Last reply Reply Quote 0
          • Mrs-B
            Mrs-B last edited by

            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 🙂

            1 Reply Last reply Reply Quote 0
            • Mrs-B
              Mrs-B last edited by Mrs-B

              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?

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Mrs-B last edited by paul53

                @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.

                Mrs-B 1 Reply Last reply Reply Quote 0
                • Mrs-B
                  Mrs-B @paul53 last edited by Mrs-B

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

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  929
                  Online

                  31.8k
                  Users

                  80.0k
                  Topics

                  1.3m
                  Posts

                  javascript
                  3
                  7
                  486
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo