FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Dr. Boris Neubert am 24 Juni 2020, 20:35:37

Titel: fhem.pl: Dispatch einzelnes LF
Beitrag von: Dr. Boris Neubert am 24 Juni 2020, 20:35:37
Hallo,

ECMDDevice hat

$hash->{Match}     = ".+";

ECMD schickt Zeichenfolgen per Dispatch() an ECMDDevice. Dabei wird allerdings ein einzelnes \n (LF) nicht gematcht, ein einzelnes druckbares Zeichen aber schon.

Woran liegt das? Habe mir sub Dispatch() in fhem.pl angesehen aber keinen Grund gefunden. Mir ist aber aufgefallen, dass in Zeile 3981 der i-Modifier gesetzt ist. Der gehört dort m.E. nicht hin.

Viele Grüße
Boris
Titel: Antw:fhem.pl: Dispatch einzelnes LF
Beitrag von: zap am 25 Juni 2020, 07:45:02
Bei der Regex muss s angehängt werden (single line modifier), damit Newlines von . gemached werden.

Aus https://mojolicious.org/perldoc/perlrecharclass

"\n" =~ /./s
Titel: Antw:fhem.pl: Dispatch einzelnes LF
Beitrag von: rudolfkoenig am 25 Juni 2020, 10:26:21
Eigentlich sollten Raw-Messages (analog zu Events) weder Newline, noch Nicht-Druckbare Zeichen enthalten, und ich habe deswegen Raw-Messages in meinen IO-Modulen schon umgebaut.
Da mir aber z.Zt. keine Begruendung gegen NL einfaellt, habe ich den s Modifier hinzugefuegt.

Den i Modifier habe vor (gefuehlt) 10+ Jahren eingefuehrt, um eine Kompatibiitaet zwischen FHZ und CUL zu erreichen, da einer der beiden den Hex-String mit Klein-, der andere mit Grossbuchstabe formatiert hatte.
Ich habe keinen Ueberblick, wer sich darauf verlaesst, deswegen bleibt der Modifier erstmal drin.
Titel: Antw:fhem.pl: Dispatch einzelnes LF
Beitrag von: Dr. Boris Neubert am 27 Juni 2020, 19:23:25
Danke, Rudi, damit ist das Problem in Verbindung mit ECMD gelöst.

Der Anwender empfängt über eine serielle Schnittstelle zeilenweise Texte von einem Gerät, die auf \n enden. Diese werden per Dispatch an ECMDDevice verteilt. Das Vorkommen eines \n in einer Raw-Message halte ich für völlig legitim, nicht nur in diesem Fall sondern grundsätzlich sollte es möglich sein, dass ein Server an Clients Nachrichten sendet, die ein \n enthalten.

Hoffentlich denken wir noch an diesen i-Modifier, wenn das erste Modul nur auf quark matchen will und ein Quark bekommt.  :-\

Viele Grüße
Boris
Titel: Antw:fhem.pl: Dispatch einzelnes LF
Beitrag von: Markus Bloch am 18 Juli 2020, 09:20:55
Zitat von: Dr. Boris Neubert am 27 Juni 2020, 19:23:25
Hoffentlich denken wir noch an diesen i-Modifier, wenn das erste Modul nur auf quark matchen will und ein Quark bekommt.  :-\

Deswegen steht im Wiki zur Match-Liste so eine fette grüne Info-Box daneben: https://wiki.fhem.de/wiki/DevelopmentModuleIntro#Die_Match-Liste

VG
Markus