Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Teil vom Gerätenamen bzw. Raumnamen entfernen

    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

    [gelöst] Teil vom Gerätenamen bzw. Raumnamen entfernen

    This topic has been deleted. Only users with topic management privileges can see it.
    • dslraser
      dslraser Forum Testing Most Active last edited by

      Hallo,

      wie kann ich einen Teil eines Gerätenamen/Raumnamen entfernen ?

      Konkret habe ich mir das Fensterscript für meine Hue Lampen angepasst.

      Hier wird ja das .on aus dem Namen entfernt, ich möchte aber gern noch vorn im Gerätenamen bzw. Raumnamen die ersten 10 Stellen entfernen.

      (das HueBridge. soll wech)

      var devicename = name.substring(0, name.indexOf(".on")); //.on aus Text entfernen
      

      Wie stelle ich das an ?

      Aktuell sieht es so aus….
      3822_licht.jpg

      Der Name stammt von hier:

      3822_licht_2.jpg

      Das ist das Script, was muß ich da ändern ?

      //Licht Status
      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',
      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 an sind als Variable unter Javascript.0 anlegen
      type: 'number',
      name: 'Anzahl der eingeschalteten Lichter',
      min: 0,
      def: 0,
      role: 'value'
      });
      createState(idText, { // Anzahl der eingeschalteten 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 eingeschaltet sind
      type: 'string',
      name: 'Räume mit eingeschalteten Lichter',
      desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
      def: ' ',
      role: 'value'
      });
      
      var cacheSelectorState = $('channel[state.id=*.on](functions="Licht")');//Gewerk Licht
      
      function checkDevices(obj) {
      // Setzt die Zähler vor dem Durchlauf aller Elemente *.on im Gewerk Licht auf 0
      var anzahlLichtAn = 0;
      var anzahlLicht = 0;
      var textLichtAn = [];
      var textRaum = [];
      
      cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.on im Gewerk Licht
      var obj = getObject(id);
      var name = getObject(id).common.name;
      var status = getState(id).val; // Zustand *.on abfragen (jedes Element)
      var devicename = name.substring(0, name.indexOf(".on")); //.on aus Text entfernen
      var raumname = getObject(id, "rooms");
      
      //if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
      if ( status){
      ++anzahlLichtAn; 
      textLichtAn.push(devicename); // Zu Array hinzufügen
      textRaum.push(raumname.enumNames);
      }
      ++anzahlLicht; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
      });
      
      textRaum = deleteDuplicates(textRaum);
      
      // Array mit Lichternamen sortieren
      textLichtAn.sort();
      textRaum.sort(); 
      // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
      if (logging) log("Text: " + textLichtAn);
      if (logging) log("Anzahl Lichter: " + anzahlLicht + " # davon Lichter an: " + anzahlLichtAn);
      // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
      setState(idText, textLichtAn.join(',\nund\n')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
      setState(idAnzahlEin, textLichtAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
      setState(idAnzahl, anzahlLicht); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
      setState(idRaum, textRaum.join(',
      ')); // Räume, in denen Lichter eingeschaltet ist
      setState(idRaum, textRaum.join(',\nund\n')); // Räume, in denen Lichter eingeschaltet ist 
      }
      
      // Trigger
      
      cacheSelectorState.on(function(obj) { // bei Zustandänderung *.on im Gewerk Lichter
      //if (logging) log('Auslösender Dimmer: ' + 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
      
      //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 = (text.length > 1) ? ' ' + strip_tags(text) : 'Alle Lampen ausgeschaltet';
          setState(idAnsage, text);
      });
      
      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        name = name.split('.')[1];
        

        oder, wenn es immer 10 Zeichen vorn sind, die weg sollen

        name = name.substring(10);
        
        dslraser 1 Reply Last reply Reply Quote 0
        • dslraser
          dslraser Forum Testing Most Active last edited by

          Danke Dir.

          so geht es wie gewünscht

          var devicename = name.substring(10, name.indexOf(".on")); //.on und HueBridge. aus Text entfernen
          
          1 Reply Last reply Reply Quote 0
          • dslraser
            dslraser Forum Testing Most Active @paul53 last edited by

            @paul53 sagte in [gelöst] Teil vom Gerätenamen bzw. Raumnamen entfernen:

            name = name.split('.')[1];
            

            oder, wenn es immer 10 Zeichen vorn sind, die weg sollen

            name = name.substring(10);
            

            Hallo @paul53
            wie macht man Zeichen von hinten weg ?

            P paul53 2 Replies Last reply Reply Quote 0
            • P
              pix @dslraser last edited by

              @dslraser Sieh Dir mal diese hervorragende Dokumentation an:
              https://javascript.info/string#getting-a-substring

              substring() schneidet einen definierten Teil weg
              substr() behält einen definierten Teil
              slice() ist variabler, da Werte auch negativ sein können

              Wie schneidet man von hinten?

              let d=-3; // es werden 3 Zeichen von hinten Weg geschnitten (minus)
              name= name.slice(-name.length, d); // Start von hinten, weil Länge des Strings die Endposition ist
              

              Ab letzter Position sollen 3 Zeichen abgeschnitten werden. Man muss halt wissen, wieviel von hinten weg muss.

              Gruß
              Pix

              1 Reply Last reply Reply Quote 2
              • paul53
                paul53 @dslraser last edited by

                @dslraser sagte:

                wie macht man Zeichen von hinten weg ?

                Eine bestimmte Anzahl ?
                Oder ab letztem Punkt ?

                idParent = id.substring(0, id.lastIndexOf('.'));
                
                dslraser 1 Reply Last reply Reply Quote 0
                • dslraser
                  dslraser Forum Testing Most Active @paul53 last edited by

                  @paul53
                  ja, eine bestimmte Anzahl von hinten soll weg, aber es gibt keinen Punkt. Ich habe nur nochmal den alten Beitrag rausgekramt. Also z.B.

                  Das ist der Name und das kann weg

                  Übrig bleiben soll

                  Das ist der Name

                  Ich bin gerade nicht zu Hause und konnte @pix seine Beispiele noch nicht probieren.

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @dslraser last edited by

                    @dslraser sagte:

                    eine bestimmte Anzahl von hinten soll weg

                    name = name.slice(0, -3); // letzte 3 Zeichen entfernen
                    
                    1 Reply Last reply Reply Quote 1
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    525
                    Online

                    31.9k
                    Users

                    80.2k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    454
                    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