NEWS
[gelöst] Objektnamen beschneiden
-
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 -
@bommel_030 Steht da immer "Fenster " im Namen ?
Wenn Ja dann sollte perconst reducedDeviceName = name.substring(0, name.indexOf(".STATE")).replace("Fenster ", "") gearbeitet werden können.
A.
-
@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. -
@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 });
-
@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!