REGEX in Blockly

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
lenschith
Beiträge: 313
Registriert: 11. Dez 2020 22:36
Answers: 0

REGEX in Blockly

Beitrag 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
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

Benutzeravatar
udo1toni
Beiträge: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: REGEX in Blockly

Beitrag 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
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
lenschith
Beiträge: 313
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: REGEX in Blockly

Beitrag 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
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

Benutzeravatar
udo1toni
Beiträge: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: REGEX in Blockly

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
lenschith
Beiträge: 313
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: REGEX in Blockly

Beitrag von lenschith »

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

Benutzeravatar
udo1toni
Beiträge: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: REGEX in Blockly

Beitrag von udo1toni »

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

Antworten