Insider Preview IP 1 zur V 4.8 - veröffentlicht

Verehrte Nutzer des Timberwolf Servers. Wir haben die IP1 zur nächsten Hauptversion 4.8 für alle Modelle des Timberwolf Servers freigegeben.

Bild

Diese neue Version enthält eine neue Funktion zum selektiven Löschen von Datenpunkten in ein oder mehreren Zeitserien sowie 16 Verbesserungen und wichtige Fehlerkorrekturen


Insbesondere die neuen Funktionen zum selektiven Löschen in Zeitserien sind sehr wichtig, weil damit erstmals ein Bereinigen sowie ein Kürzen von Zeitserien möglich wird. Damit kann massiv Speicherplatz reduziert werden, womit auch Backup / Restore kürzer wird. Zudem können damit Datenschutzanforderungen umgesetzt werden.

Foren Diskussion: viewtopic.php?t=6070

Release Notes im Wiki: https://elabnet.atlassian.net/wiki/x/AYCEyw


WICHTIG: Dies ist die eine neue Insider Preview im Zyklus 4.8. Mit Installation der letzten Hauptversion 4.5 wurde der Bezug für Insider Versionen zurückgesetzt. Mitglieder im Insider Club müssen daher in der Systemaktualisierung erst den Bezug von Insider Versionen wieder freischalten, damit das Update angezeigt wird.

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

Informationen und Diskussionen über Logik-Engine und Logik-Editor
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten
Benutzeravatar

Ersteller
speckenbuettel
Beiträge: 435
Registriert: Mo Jun 27, 2022 9:30 am
Hat sich bedankt: 330 Mal
Danksagung erhalten: 279 Mal

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

#1

Beitrag 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
Vielen Dank und viele Grüße
Falk

TWS 3500M ID:810 - VPN aktiv - Reboot nach Absprache
1-Wire, KNX (MDT u. a.), EnOcean (Eltako u. a.), Gira TKS, ekey multi

ms20de
Elaborated Networks
Elaborated Networks
Beiträge: 1313
Registriert: Sa Aug 11, 2018 9:14 pm
Hat sich bedankt: 383 Mal
Danksagung erhalten: 787 Mal

#2

Beitrag von ms20de »

Hallo Falk,

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

Viele Grüße,
Matthias
[ Timberwolf Entwicklung ]

TWS 2400 ID:102 VPN offen, Reboot auf Nachfrage
TWS 3500 ID:695 VPN offen, Bitte kein Reboot ohne Absprache
Benutzeravatar

Ersteller
speckenbuettel
Beiträge: 435
Registriert: Mo Jun 27, 2022 9:30 am
Hat sich bedankt: 330 Mal
Danksagung erhalten: 279 Mal

#3

Beitrag 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
Vielen Dank und viele Grüße
Falk

TWS 3500M ID:810 - VPN aktiv - Reboot nach Absprache
1-Wire, KNX (MDT u. a.), EnOcean (Eltako u. a.), Gira TKS, ekey multi

Robert_Mini
Beiträge: 3910
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1283 Mal
Danksagung erhalten: 2224 Mal

#4

Beitrag von Robert_Mini »

Kannst du die nicht funktionierende Logik auch posten?
Ich nehme an du hast den Regex-String zwischen 2 “ “ gesetzt?

Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

ms20de
Elaborated Networks
Elaborated Networks
Beiträge: 1313
Registriert: Sa Aug 11, 2018 9:14 pm
Hat sich bedankt: 383 Mal
Danksagung erhalten: 787 Mal

#5

Beitrag 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
[ Timberwolf Entwicklung ]

TWS 2400 ID:102 VPN offen, Reboot auf Nachfrage
TWS 3500 ID:695 VPN offen, Bitte kein Reboot ohne Absprache
Benutzeravatar

Ersteller
speckenbuettel
Beiträge: 435
Registriert: Mo Jun 27, 2022 9:30 am
Hat sich bedankt: 330 Mal
Danksagung erhalten: 279 Mal

#6

Beitrag von speckenbuettel »

Hallo Matthias,

vielen Dank für deine Prüfung und deine Rückmeldung.

Bei dieser Logik scheint die Länge des Strings tatsächlich die Ursache zu sein. Obwohl die Logik trotzdem funktioniert hat, solange ich den Regex-Ausdruck als Parameter übergeben habe.

Hier ist eine andere Logik, die ich gar nicht erst speicher kann, wenn ich den Regex-Ausdruck im Level definiere:

Bild

Code: Alles auswählen

{

    "Level": [
        [
            "$InResponse",
            "string,32",
            ""
        ],
        [
            "$OutBetriebsart",
            "integer",
            0
        ],
        [
            "$OutRTSollnormal",
            "float",
            0
        ],
        [
            "$OutRTSollreduziert",
            "float",
            0
        ],
        [
            "$OutWWTSoll",
            "float",
            0
        ],
        [
            "$OutSparbetrieb",
            "bool",
            false
        ],
        [
            "$OutFehler",
            "bool",
            false
        ],
        [
            "$OutMeldung?",
            "string",
            "Heizung: Fehler bei der Ausführung eines Optolink-Befehls"
        ],
        [
            "$ReturnCodeStr",
            "string",
            ""
        ],
        [
            "$ReturnCode",
            "integer",
            0
        ],
        [
            "$AddressStr",
            "string",
            ""
        ],
        [
            "$Address",
            "integer",
            0
        ],
        [
            "$ValueStr",
            "string,32",
            ""
        ],
        [
            "$Value",
            "float",
            0
        ],
        [
            "$Fehler",
            "bool",
            false
        ],

        ["$Adr_Betriebsart", "string", "0x2323"],
        ["$Adr_RTSollnormal", "string", "0x2306"],
        ["$Adr_RTSollreduziert", "string", "0x2307"],
        ["$Adr_WWSoll", "string", "0x6300"],
        ["$Adr_Sparbetrieb", "string", "0x2302" ],

        ["$Adr_IsBetriebsart", "bool", false],
        ["$Adr_IsRTSollnormal", "bool", false],
        ["$Adr_IsRTSollreduziert", "bool", false],
        ["$Adr_IsWWSoll", "bool", false],
        ["$Adr_IsSparbetrieb", "bool", false],
        
        [
            "$RegexExpression",
            "string",
            "^(\d+);(0x[0-9a-fA-F]+);(.+)$"
        ],
		[
		    "$RegexHasMatch",
		    "bool",
		    false
	    ],
		[
		    "$RegexMatch",
		    "string,32",
		    ""
		],
        [
            "$SuccessStr",
            "string",
            "1"
        ],
        [
            "$CompareMode",
            "string",
            "e"
        ],
        [
            "$VAR<Inhibit?>",
            "bool",
            false
        ]
    ],

    "Module": [
        [
            "Break", [
                "$VAR<Inhibit?>"
                ]
        ],
        [
            "Regex",
                "$InResponse",
                "$RegexExpression",
                "$RegexHasMatch",
                "$RegexMatch",
                "$ReturnCodeStr",
                "$AddressStr",
                "$ValueStr",
                0,
                0
        ],
        [
            "Stringcompare",
                "$ReturnCodeStr",
                "-$Fehler",
                "$SuccessStr",
                "$CompareMode"
        ],
        [
            "Stringcompare",
                "$AddressStr",
                "$Adr_IsBetriebsart",
                "$Adr_Betriebsart",
                "$CompareMode"
        ],
        [
            "Stringcompare",
                "$AddressStr",
                "$Adr_IsRTSollnormal",
                "$Adr_RTSollnormal",
                "$CompareMode"
        ],
        [
            "Stringcompare",
                "$AddressStr",
                "$Adr_IsRTSollreduziert",
                "$Adr_RTSollreduziert",
                "$CompareMode"
        ],
        [
            "Stringcompare",
                "$AddressStr",
                "$Adr_IsWWSoll",
                "$Adr_WWSoll",
                "$CompareMode"
        ],
        [
            "Stringcompare",
                "$AddressStr",
                "$Adr_IsSparbetrieb",
                "$Adr_Sparbetrieb",
                "$CompareMode"
        ],
        [
            "STR->FLOAT",
                "$ValueStr",
                "$Value"
        ],
        [
            "Latch",
                "$Value",
                "$OutBetriebsart",
                "$Adr_IsBetriebsart",
                0
        ],
        [
            "Latch",
                "$Value",
                "$OutRTSollnormal",
                "$Adr_IsRTSollnormal",
                0
        ],
        [
            "Latch",
                "$Value",
                "$OutRTSollreduziert",
                "$Adr_IsRTSollreduziert",
                0
        ],
        [
            "Latch",
                "$Value",
                "$OutWWTSoll",
                "$Adr_IsWWSoll",
                0
        ],
        [
            "Latch",
                "$Value",
                "$OutSparbetrieb",
                "$Adr_IsSparbetrieb",
                0
        ],
        [
            "Or", [
                "-$RegexHasMatch",
                "$Fehler"
                ],
                "$OutFehler"
        ],
        [
            "SendExplicit",
                "$OutFehler",
                "$OutMeldung?",
                0
        ]
    ],

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

    "Output": [
        [
            "Betriebsart",
            "Betriebsart [0, 1, 2, 3, 4]",
            "$OutBetriebsart",
            "c"
        ],
        [
            "RT-Soll normal",
            "Raumtemperatur-Soll normal [°C]",
            "$OutRTSollnormal",
            "c"
        ],
        [
            "RT-Soll reduziert",
            "Raumtemperatur-Soll reduziert [°C]",
            "$OutRTSollreduziert",
            "c"
        ],
        [
            "WW-Soll",
            "Warmwassertemperatur-Soll [°C]",
            "$OutWWTSoll",
            "c"
        ],
        [
            "Standby-Betrieb",
            "Standby-Betrieb [Aus, Ein]",
            "$OutSparbetrieb",
            "c"
        ],
        [
            "Fehler",
            "Return_Code <> SUCCESS",
            "$OutFehler",
            "a"
        ],
        [
            "Fehlermeldung",
            "Return_Code <> SUCCESS",
            "$OutMeldung?",
            "x"
        ]
  ]

}
Laut regex101 ist der Regex-Ausdruck fehlerfrei.

Vielen Dank und viele Grüße
Falk
Vielen Dank und viele Grüße
Falk

TWS 3500M ID:810 - VPN aktiv - Reboot nach Absprache
1-Wire, KNX (MDT u. a.), EnOcean (Eltako u. a.), Gira TKS, ekey multi
Benutzeravatar

bondt
Elaborated Networks
Elaborated Networks
Beiträge: 493
Registriert: Mo Aug 27, 2018 10:48 am
Wohnort: Eschenlohe
Hat sich bedankt: 607 Mal
Danksagung erhalten: 200 Mal

#7

Beitrag von bondt »

Hallo Falk (@speckenbuettel),

Danke für die Meldung! Da gibt es zwei Themen:

1. Die RegEx-Expression muss escaped eingegeben werden. Hier \d durch \\d ersetzen:

Code: Alles auswählen

"^(\\d+);(0x[0-9a-fA-F]+);(.+)$"
2. Die Levels bei SendExplicit dürfen nicht optional sein. Hier:
Das Level $OutMeldung? sollte in den Blöcke Level und Module als nicht optional definiert und genutzt werden, wie $OutMeldung. Nur in Output kann es als optional angegeben werden, wie $OutMeldung?.

Wir haben es im Wiki aktualisiert.
Zuletzt geändert von bondt am Di Okt 14, 2025 10:50 am, insgesamt 1-mal geändert.
Viele Grüße,
Michaël

[ Timberwolf Entwicklung ]

"Have you tried turning it off and on again?"

timberwolf101, VPN offen, Reboot jederzeit
Benutzeravatar

Ersteller
speckenbuettel
Beiträge: 435
Registriert: Mo Jun 27, 2022 9:30 am
Hat sich bedankt: 330 Mal
Danksagung erhalten: 279 Mal

#8

Beitrag von speckenbuettel »

Hallo Michaël,

vielen Dank für deine Antwort.

1. Am Escapen hat es gelegen, vielen Dank für den Hinweis. Das Wiki ist jetzt auch klar.

2. Das war mir vorher auch nicht so klar, aus dem Wiki ging es leider nicht so klar hervor. Allerdings war das Fragezeichen im Level und im Module bisher kein Problem, die Logik ließ sich trotzdem speichern und lief auch einwandfrei.

Problem/Frage gelöst!

Nochmals vielen Dank und viele Grüße
Falk
Vielen Dank und viele Grüße
Falk

TWS 3500M ID:810 - VPN aktiv - Reboot nach Absprache
1-Wire, KNX (MDT u. a.), EnOcean (Eltako u. a.), Gira TKS, ekey multi
Antworten

Zurück zu „Logikengine & Logik-Editor“