Seite 1 von 1

REGEX in Blockly

Verfasst: 12. Jan 2024 07:57
von lenschith
Hallo zusammen,
ich möchte gerne mit Regex einige Item Namen für eine Textausgabe anpassen. Aber irgendwie macht das nicht so wie ich mir das vorgestellt habe.
Leider bringen mich die Tool im Netz auch nicht weiter. Vielleicht kann mir jemand einen Tipp geben.

Ausgangslage, ich habe viele Batterie leer Status Items die immer wie folgt aufgebaut sind.
TasterWohnen_NiedrigerBatteriestatus
HeizungWohnen__NiedrigerBatteriestatus
ShellyWohnen_NiedrigerBatteriestatus

Nun möchte ich gerne im ersten Schritt nur das Gerät Heizung angezeigt bekommen
Im zweiten Schritt möchte ich nur den Raum also hier Wohnen angezeigt bekommen

Abfrage kommt über eine Gruppe wo alle niedrigen Batterie Items vorhanden sind.
Vielleicht denke ich zu kompliziert und es gibt auch noch andere Wege. Ich bin dankbar für nen Tipp.
Das ganze mache ich über ein Blockly Script
Screenshot 2024-01-12 075345.png
Gruß Lenschi

Re: REGEX in Blockly

Verfasst: 12. Jan 2024 10:01
von udo1toni
So schön die Bilder anzuschauen sind, wichtiger wäre die Code Ansicht. Die Code Anscht hat den Vorteil, dass man den Code sehr einfach in ein bestehendes System einfügen kann, man muss also nicht erst umständlich jedes Detail händisch nachbauen (auch zur Fehleranalyse...)

Befinden sich auch noch andere Items in der Gruppe?

Mein REGEX dazu sähe so aus (ungeprüft)

Code: Alles auswählen

([A-Z][a-z]+)[A-Z].+       -> ergibt den ersten Wortteil bis zum nächsten Großbuchstaben
[A-Z][a-z]+([A-Z]\w+)_.*   -> ergibt den Wortteil ab dem zweiten Großbuchstaben bis zum Unterstrich

Allgemein wäre mein Tipp, die Itemnamen anders aufzubauen :) aber evtl. nutzt Du die Trennung am Unterstrich schon in einer Rule und müsstest dann diese Rules anpassen...
Egal, wären alle Teile des Namens jeweils mit einem Unterstrich getrennt, so könntest Du einfach so zugreifen:

Code: Alles auswählen

i.name.split("_").get(0)    -> Erster Teil
i.name.split("_").get(1)    -> Zweiter Teil

Re: REGEX in Blockly

Verfasst: 12. Jan 2024 13:42
von lenschith
Danke Udo,

so klappt das. Leider bin ich etwas gebunden. Mein System läuft schon einige Zeit und bisher hatte ich das anderes gelöst.
Aber mit dem Umstieg auf 4.1.1 wollte ich alle meine alten ECMA 5.1 Scripte in Blockly nachbauen.

Code: Alles auswählen

var i_list = items.getItem('gBatterie_leer').members;
for (var i_index in i_list) {
  i = i_list[i_index];
  if (i.state != 'ON') {
    rules.runRule('Script_Notification', {'uGruppe': 'Batterie', 'Text': ['Batteie leer ',actions.Transformation.transform('REGEX', '([A-Z][a-z]+)[A-Z].+', i.name),' ',actions.Transformation.transform('REGEX', '[A-Z][a-z]+([A-Z]\\w+)_.*', i.name),'🔋'].join(''), 'Icon': 'lowbattery', 'Status': 'Info'});
  }
}
Kurze Frage, wenn ich jetzt ein Item hätte das mit BAu beginnt klappt das nicht. Gäbe es da noch einen Trick um sowas auch abzufangen.
Aber das wäre jetzt nur noch die Krönung. Sonst klappt das super so wie es ist.

Vielen Dank
Gruß Lenschi

Re: REGEX in Blockly

Verfasst: 12. Jan 2024 15:47
von udo1toni
Solange alle aufeinanderfolgenden Großbuchstaben zu einem Wortteil gehören und die beiden Wortteile von mindestens einem kleinen Buchstaben getrennt sind, sollte das gehen. Du machst einfach nach der ersten Zeichengruppe [A-Z] noch ein +, was bedeutet, dass die vorangehende Gruppe mindestens einmal, aber auch häufiger (unmittelbar aneinander anschließend) auftreten darf.

Re: REGEX in Blockly

Verfasst: 12. Jan 2024 16:35
von lenschith
Wäre so einfach, aber die Zeichenfolge ist BAuUHeizungBuero_NiedrigerBatteriestatus.

Re: REGEX in Blockly

Verfasst: 12. Jan 2024 18:20
von udo1toni
WARUM? Überarbeite Deine Itemnamen, dann hast Du weniger Probleme... :)