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.STATEund 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 -
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.STATEund 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. -
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.STATEund 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 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 }); -
@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!
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden