Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Objektnamen beschneiden

    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] Objektnamen beschneiden

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

      Ich hab nach dem Umzug mal wieder ein altes Fensterskript (hier aus dem Forum kopiert) reaktiviert und möchte das nun etwas optimieren. Sobald ein Fenster geöffnet wird, wird das Skript getriggert, zählt die offenen Fenster und schreibt die offenen Fenster in einen Datenpunkt.

          hmFenster.each(function (id, i) {                                  // Schleife für jedes gefundenen Element *.STATE im Gewerk Fenster
              var status = getState(id).val;                                          // Zustand *.STATE abfragen (jedes Element)
              var obj    = getObject(id);
              var name = getObject(id).common.name;
              var devicename = name.substring(0, name.indexOf(".STATE"));             //.state aus Text entfernen
              if (status /*TFK*/ || status === 1 || status === 2 /*RHS*/) {  // wenn Zustand offen, dann wird die Anzahl der Fenster hochgezählt
                   ++anzahlFensterauf;
                   textFensterauf.push(devicename/* + ' (' + fensterstatus(status) + ')'*/);  // Name und Zustand zum Array hinzufügen
              }                
              log('Fenster #' + (i+1) + ': ' + devicename + ' ' + fensterstatus(status)/* + ' (' + status + ' / ' + typeof status + ')'*/);
              ++anzahlFenster;                                                        // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
          }); 
      

      Nun holt sich das Skript den Objektnamen z.B.:

      Fenster Garderobe.STATE
      

      und schneidet .STATE ab. Soweit so gut. Nun hätte ich gerne aber:
      a) "Fenster " am Anfang auch abgeschnitten. Ergebnis wäre dann Garderobe.
      b) gibt natürlich auch Türen ;-), also einfach die ersten 8 Stellen abschneiden geht leider nicht.

      Vielleicht kann mir ja jemand nen Schubs in die richtige Richtung geben wie ich das zerlegen/entfernen kombinieren kann.
      Danke

      Asgothian arteck 2 Replies Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @bommel_030 last edited by

        @bommel_030 Steht da immer "Fenster " im Namen ?
        Wenn Ja dann sollte per

        const reducedDeviceName = name.substring(0, name.indexOf(".STATE")).replace("Fenster ", "") gearbeitet werden können.
        

        A.

        B 1 Reply Last reply Reply Quote 1
        • B
          bommel_030 @Asgothian last edited by

          @asgothian
          Leider nicht. Ist halt auch mal ne Tür dabei. Wobei es mir egal wäre wenn er dann z.B. "Tür Wohnzimmer" schreibt wenn er Fenster nicht ersetzen kann.
          Das andere teste ich gleich mal.

          1 Reply Last reply Reply Quote 0
          • arteck
            arteck Developer Most Active @bommel_030 last edited by

            @bommel_030 schaumal so

            hmFenster.each(function (id, i) {                                  // Schleife für jedes gefundenen Element *.STATE im Gewerk Fenster
                    var status = getState(id).val;                                          // Zustand *.STATE abfragen (jedes Element)
                    var obj    = getObject(id);
                    var name = getObject(id).common.name;
            
                    let devicename = name.substring(name.indexOf(" "), name.indexOf(".STATE"));             // hier 
            
                    if (status /*TFK*/ || status === 1 || status === 2 /*RHS*/) {  // wenn Zustand offen, dann wird die Anzahl der Fenster hochgezählt
                         ++anzahlFensterauf;
                         textFensterauf.push(devicename/* + ' (' + fensterstatus(status) + ')'*/);  // Name und Zustand zum Array hinzufügen
                    }                
                    log('Fenster #' + (i+1) + ': ' + devicename + ' ' + fensterstatus(status)/* + ' (' + status + ' / ' + typeof status + ')'*/);
                    ++anzahlFenster;                                                        // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
                });
            
            B 1 Reply Last reply Reply Quote 1
            • B
              bommel_030 @arteck last edited by

              @arteck @Asgothian
              Funktionieren beide Varianten ohne Fehlermeldung. Bei der Variante mit replace bleibt die Tür erhalten. Nun hab ich den Luxus auszuwählen was mir besser gefällt.
              Vielen Dank!

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

              Support us

              ioBroker
              Community Adapters
              Donate

              711
              Online

              31.9k
              Users

              80.2k
              Topics

              1.3m
              Posts

              javascript
              3
              5
              161
              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