auf 3 Zustände mit regulärem Audruck in Bedingung reagieren

Begonnen von Muschelpuster, 17 September 2016, 20:24:40

Vorheriges Thema - Nächstes Thema

Muschelpuster

Moin zusammen,

Ich bin mal wieder zu beschränkt, den richtigen Syntax zu finden. Ich möchte mein DOIF auf 3 Zustände triggern lassen. Ich hatte schon mal das Thema, dass das in der Bedingung nicht geht, aber eigentlich haben meine Recherchen ergeben, dass das nur für den Part des Events gilt, nicht für den Vergleich. Nun habe ich vieles gelesen und getestet und bin nicht wirklich weiter:define di_test DOIF ([HM_FB:state] =~ "HM_FB_BT_[1|2|3] Short") (mache was)Ich will also auf Knopf 1, 2 und 3 reagieren...
Natürlich kommt da am Ende noch mehr rein, sonst wäre ein Notify ja auch schick dafür.
Ohne reguläre Audrücke mit 2x or und der Bedingung 'eq' funktioniert das, aber ich finde es etwas lang.

irreguläre Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

Ellert


Muschelpuster

#2
Danke - aber warum jetzt eine runde Klammer  :o
Die unterschiedlichen Klammersetzungen in FHEM und Perl werden mir wohl ein Mysterium bleiben  :'(
Grundsätzlich funktioniert es, aber am Ende dann doch nicht. Es ist nun 1|3|5 eingestellt. Auf BT1 und BT5 reagiert das DOIF, auf BT3 nicht. Aber das kann nicht am DOIF liegen, denn bei einer 2. Fernbedienung gehen alle 3 Knöpfe. Da werde ich jetzt mal etwas Events analysieren.
Bei der ganzen Thematik bin ich mir auch noch nicht wirklich sicher, ob ich hier mit DOIF den besten Weg einschlage, oder ob nicht eine ReadingsGroup [edit]structure[/edit] und ein Event das schmaler lösen.

geklammerte Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

Ellert

Zitataber warum jetzt eine runde Klammer

Gegenfrage: "Wie bist Du auf eckige Klammern gekommen?"

Du verwendest einen Regulären Ausdruck, der nach bestimmten Regeln zu erstellen ist.
Perl-Dokumentation zu Regulären Ausdrücken
Reguläre Ausdrücke

In Kürze:
Runde Klammern gruppieren, Eckige geben eine Zeichenklasse an und Geschweifte Wiederholungen.

"HM_FB_BT_[123]{1} Short" müsste auch funktionieren.

Muschelpuster

Zitat von: Ellert am 18 September 2016, 16:45:00Gegenfrage: "Wie bist Du auf eckige Klammern gekommen?"
Weil ich meine Rechnung mal wieder ohne Perl gemacht habe. So daneben war ich ja auch gar nicht  8):
Zitat von: Ellert am 18 September 2016, 16:45:00...Eckige geben eine Zeichenklasse an..."HM_FB_BT_[123]{1} Short" müsste auch funktionieren.
Ich nutze reguläre Ausdrücke sehr häufig in meinem Ultraedit, welches mit seinem eigenen Dialekt, sowie im Linux-Dialekt immer die eckigen Klammern verwendet. Die runden Klammern gruppieren zwar, sind aber nur für den Ersetzen-Part zuständig. Das 'oder' in den eckigen Klammern kam erst rein, als es nicht funktionierte...

lernfähige Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

Damian

Zitat von: Muschelpuster am 18 September 2016, 18:10:46
Weil ich meine Rechnung mal wieder ohne Perl gemacht habe. So daneben war ich ja auch gar nicht  8):Ich nutze reguläre Ausdrücke sehr häufig in meinem Ultraedit, welches mit seinem eigenen Dialekt, sowie im Linux-Dialekt immer die eckigen Klammern verwendet. Die runden Klammern gruppieren zwar, sind aber nur für den Ersetzen-Part zuständig. Das 'oder' in den eckigen Klammern kam erst rein, als es nicht funktionierte...

lernfähige Grüße
Niels

Ich finde die eckigen Klammern für eine Zeichenklasse garnicht verkehrt an dieser Stelle, daher sollte ebenfalls 

"HM_FB_BT_[123] Short"

ohne Probleme funktionierten. Ohne zusätzliche Wiederholungsangabe darf 1 oder 2 oder 3 nur einmal vorkommen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Muschelpuster

Zitat von: Damian am 18 September 2016, 18:54:32
...sollte ebenfalls  "HM_FB_BT_[123] Short"ohne Probleme funktionierten....
Tja, zumeist sitzt in solchen Fällen das Problem ja vor der Tastatur  8)

Meinen zwischenzeitlichen Ansatz mit Structure und Notify habe ich übrigens wieder aufgegeben, da Structure bei jeder Statusänderung ein Event erzeugt und so das Notify ständig unnötige Befehle in die Homematic-Welt funkt. Tut nicht weh, so lange nicht die Funk-Credits aufgebraucht sind, aber das verzögert vieles im Verhalten.
Nun habe ich einen Teil davon behalten. Ich lauschen nicht mehr auf die Tasterbefehle, sondern werte den Status von meiner Structure mit DOIF aus und alles ist gut. Das ist das zwar ein Element mehr, aber für Menschen wie mich, die nicht so tief in der Materie stecken ein einfacheres Debugging. Ich kann erst einmal sehen, dass die Structure rund läuft und danach ein DOIF verwenden, was nur bei Wechsel des Status aktiv wird. Zudem habe ich wieder meinen Wait-Timer, der mir dabei hilft, nicht zu viele Befehle zugleich in der Luft zu haben.

aufgeteilte Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

Damian

Ich musste gerade feststellen, dass die Angabe "HM_FB_BT_[123] Short" in DOIF nicht funktioniert, weil DOIF eckige Klammern für eigene Definition auswertet (Stati, Readings, Timer usw.). Vielleicht gelingt es mir zukünftig solche Angaben in Anführungszeichen im DOIF nicht anzupacken. Also erst mal mit runden Klammern arbeiten (1|2|3).

Gruß

Damian




Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Was auf jeden Fall funktioniert sind eckige Klammern bei Ereignis-Regex

statt:

Statusabfrage:
define di_test DOIF ([HM_FB:state] =~ "HM_FB_BT_[123] Short") (mache was)

Ereignistrigger:
define di_test DOIF (["HM_FB_BT_[123]: Short"]) (mache was)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF