NEWS
[gelöst] Teil vom Gerätenamen bzw. Raumnamen entfernen
-
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….
Der Name stammt von hier:
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); });
-
name = name.split('.')[1];
oder, wenn es immer 10 Zeichen vorn sind, die weg sollen
name = name.substring(10);
-
Danke Dir.
so geht es wie gewünscht
var devicename = name.substring(10, name.indexOf(".on")); //.on und HueBridge. aus Text entfernen
-
@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 ? -
@dslraser Sieh Dir mal diese hervorragende Dokumentation an:
https://javascript.info/string#getting-a-substringsubstring()
schneidet einen definierten Teil weg
substr()
behält einen definierten Teil
slice()
ist variabler, da Werte auch negativ sein könnenWie 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 -
@dslraser sagte:
wie macht man Zeichen von hinten weg ?
Eine bestimmte Anzahl ?
Oder ab letztem Punkt ?idParent = id.substring(0, id.lastIndexOf('.'));
-
-
@dslraser sagte:
eine bestimmte Anzahl von hinten soll weg
name = name.slice(0, -3); // letzte 3 Zeichen entfernen