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
Gruß Lenschi
REGEX in Blockly
- lenschith
- Beiträge: 313
- Registriert: 11. Dez 2020 22:36
REGEX in Blockly
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: REGEX in Blockly
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)
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:
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

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
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
- lenschith
- Beiträge: 313
- Registriert: 11. Dez 2020 22:36
Re: REGEX in Blockly
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.
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
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'});
}
}
Aber das wäre jetzt nur noch die Krönung. Sonst klappt das super so wie es ist.
Vielen Dank
Gruß Lenschi
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: REGEX in Blockly
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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
- lenschith
- Beiträge: 313
- Registriert: 11. Dez 2020 22:36
Re: REGEX in Blockly
Wäre so einfach, aber die Zeichenfolge ist BAuUHeizungBuero_NiedrigerBatteriestatus.
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: REGEX in Blockly
WARUM? Überarbeite Deine Itemnamen, dann hast Du weniger Probleme... 

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet