Seite 1 von 1

[V4.5] Regex-Ausdrücke nur als Parameter, nicht im Level?

Verfasst: Do Okt 09, 2025 11:27 am
von speckenbuettel
Hallo,

mir ist an mehreren Stellen aufgefallen, dass sich Custom-Logiken nicht speichern lassen (ohne konkrete Fehlermeldung im Editor) oder nicht fehlerfrei ausgeführt werden, wenn ich Regex-Ausdrücke im Level definieren.
Als Input (Parameter) funktioniert es dann einwandfrei.

Liegt das vielleicht an den Sonderzeichen, die in Regex-Ausdrücken oft enthalten sind?

Ein Beispiel ist diese Logik:

Bild

Code: Alles auswählen


{
    "Level": [
        [
            "$InResponse",
            "string,64",
            ""
        ],
        [
            "$Pre_Logeintrag",
            "string",
            "Heizung: Anlagenzeit synchronisiert ("
        ],
        [
            "$Post_Logeintrag",
            "string",
            ")"
        ],
        [
            "$OutLogeintrag",
            "string,128",
            "Heizung: Anlagenzeit synchronisiert"
        ],
        [
            "$ReturnCode",
            "string",
            ""
        ],
        [
            "$Address",
            "string",
            ""
        ],
        [
            "$Value",
            "string,32",
            ""
        ],
        [
            "$RegexExpression",
            "string,32",
            ""
        ],
		[
		    "$RegexHasMatch",
		    "bool",
		    false
	    ],
        [
            "$VAR<Inhibit?>",
            "bool",
            false
        ]
    ],

    "Module": [
        [
            "Break", [
                "$VAR<Inhibit?>"
                ]
        ],
        [
            "Regex",
                "$InResponse",
                "$RegexExpression",
                "$RegexHasMatch",
                0,
                "$ReturnCode",
                "$Address",
                "$Value",
                0,
                0
        ],
        [
            "Concat", [
                "$Pre_Logeintrag",
                "$Value",
                "$Post_Logeintrag"
                ],
                "$OutLogeintrag"
        ],
        [
            "SendExplicit",
                "$RegexHasMatch",
                "$OutLogeintrag",
                0
        ]
    ],

    "Input": [
        [
            "Rückmeldung",
            "Rückmeldung vom Optolink-Splitter",
            "$InResponse",
            "a"
        ],
        [
            "Regex",
            "Regulärer Ausdruck",
            "$RegexExpression",
            "u"
        ],
        [
            "Inhibitor",
            "Ausführung der Logik sperren",
            "$VAR<Inhibit?>",
            "u"
        ]
    ],

    "Output": [
        [
            "Logeintrag",
            "Logeintrag",
            "$OutLogeintrag",
            "x"
        ]
    ]

}
Die habe ich erst zum Laufen gebracht, nachdem ich den Text von $RegexExpression aus dem Level herausgenommen habe und als Parameter übergebe.

Der Fehler lauten:

Bild

Dabei fehlt hier keine Klammer, den Ausdruck habe ich auf der Seite regex101.com getestet.

Wenn der gleiche Regex-Ausdruck als Parameter übergeben wird, dann erscheint die Fehlermeldung nicht.

Vielen Dank und viele Grüße
Falk

Re: [V4.5] Regex-Ausdrücke nur als Parameter, nicht im Level?

Verfasst: Do Okt 09, 2025 7:03 pm
von ms20de
Hallo Falk,

kannst du bitte auch deine Regex noch Posten damit wir das untersuchen können.

Viele Grüße,
Matthias

Re: [V4.5] Regex-Ausdrücke nur als Parameter, nicht im Level?

Verfasst: Fr Okt 10, 2025 3:25 am
von speckenbuettel
Hallo Matthias,

sorry, hätte ich schon gleich oben schreiben sollen.

In dieser Logik lautet der Regex-Ausdruck:

Code: Alles auswählen

^(1);(0x088E);((Mo|Di|Mi|Do|Fr|Sa|So) .+)$
In einer ähnlichen Logik (für die Heizung):

Code: Alles auswählen

^(\d+);(0x[0-9a-fA-F]+);(.+)$
Beide funktionieren einwandfrei auf der Seite regex101, die im Wiki zum Testen von Regex-Ausdrücken genannt wird. Und beide funktionieren einwandfrei als Parameter über den Input, aber nicht, wenn ich sie im Level deklariere.

Vielen Dank und viele Grüße
Falk

Re: [V4.5] Regex-Ausdrücke nur als Parameter, nicht im Level?

Verfasst: Sa Okt 11, 2025 7:49 pm
von Robert_Mini
Kannst du die nicht funktionierende Logik auch posten?
Ich nehme an du hast den Regex-String zwischen 2 “ “ gesetzt?

Lg
Robert

Re: [V4.5] Regex-Ausdrücke nur als Parameter, nicht im Level?

Verfasst: Mo Okt 13, 2025 6:48 pm
von ms20de
Hallo Falk,

nach unseren Tests ist das Problem die Angabe des String Levels auf 32 Zeichen im Custom Logik Code.
Dadurch wird der angegebene Initalwert abgeschnitten. Die Regex ist dann nur noch ^(1);(0x088E);((Mo|Di|Mi|Do|Fr|S.
Das ist die Ursache, warum der Regex Baustein einen Fehler meldet mit fehlender Klammer.

Fehlerhafte Version:

Code: Alles auswählen

[
    "$RegexExpression",
     "string,32",
      "^(1);(0x088E);((Mo|Di|Mi|Do|Fr|Sa|So) .+)$"
],
Gute Version:

Code: Alles auswählen

[
    "$RegexExpression",
     "string",
      "^(1);(0x088E);((Mo|Di|Mi|Do|Fr|Sa|So) .+)$"
],
Wenn die Länge des Initalwerts bekannt ist und sich auch nicht ändert, muss keine Länge angeben werden. Diese wird dann automatisch ermittelt. Alternativ könnte man auch string,64 angeben und es würde auch funktionieren.

Wir prüfen ob es einfach machbar ist diese Art vom Fehler direkt im Logik-Editor abzufangen.

Viele Grüße,
Matthias