DOIF im Perl-Modus, eckige Klammern escapen

Begonnen von PatrickR, 06 Juli 2018, 22:44:51

Vorheriges Thema - Nächstes Thema

PatrickR

Hallo zusammen,

folgendes Problem: Ich verwende DOIF im Perl-Modus und möchte im Ausführungsteil einen regulären Ausdruck anwenden, wofür ich eckige Klammen benötige.

Wie werden sie escaped, so dass sie nicht von DOIF sondern von Perl interpretiert werden? Workarounds wie das Auslagern in myUtils.pm möchte ich gerne vermeiden.

Danke!

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

Damian

Zitat von: PatrickR am 06 Juli 2018, 22:44:51
Hallo zusammen,

folgendes Problem: Ich verwende DOIF im Perl-Modus und möchte im Ausführungsteil einen regulären Ausdruck anwenden, wofür ich eckige Klammen benötige.

Wie werden sie escaped, so dass sie nicht von DOIF sondern von Perl interpretiert werden? Workarounds wie das Auslagern in myUtils.pm möchte ich gerne vermeiden.

Danke!

Patrick

Es gibt im DOIF eine gewisse Erkennung, ob Angaben in eckigen Klammern DOIF-Syntax darstellen oder nicht. Hast du schon etwas programmiert, was falsch erkannt wird?

Es wird demnächst einen besonderen Block im Perl-Modus geben namens def. Dieser Block wird direkt bei der Definition des DOIFs ausgeführt. Er ist dafür gedacht eigene subs zu definieren, die man nutzen kann ohne über myUtils gehen zu müssen. In diesem Block soll reine perl-Syntax erlaubt sein, ohne jegliche Ersetzungen, also ohne DOIF-Syntax in eckigen Klammern. Weiterhin wird man Timer setzen können, die nach Ablauf kein Ereignis erzeugen, auf das man triggert, sondern direkt eine Perlfunktion aufrufen, z. B. eine, die man zuvor im def-Block definiert hat.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

PatrickR

Hallo Damian!

Zitat von: Damian am 06 Juli 2018, 23:07:02
Es gibt im DOIF eine gewisse Erkennung, ob Angaben in eckigen Klammern DOIF-Syntax darstellen oder nicht. Hast du schon etwas programmiert, was falsch erkannt wird?

Leider ja:

if (ReadingsVal("$SELF", "READINGS", "") !~ m/[^;]$reading[$;]/g) {

Das wirft Fehler, dass kein gültiger Timestamp erkannt wurde. Um ehrlich zu seine wäre mir statt der def-Implementierung ein echtes Escaping lieber.

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

Damian

ja, Escaping im DOIF-Parser ist schwierig, weil es ja auch eine gültige perl-Syntax ist.

Ich werde aber die Erkennung der Timer verfeinern, denn [^;] kann z. B. kein gültiger Timer sein.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF