fhem.pl: Dispatch einzelnes LF

Begonnen von Dr. Boris Neubert, 24 Juni 2020, 20:35:37

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

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
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

zap

Bei der Regex muss s angehängt werden (single line modifier), damit Newlines von . gemached werden.

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

"\n" =~ /./s
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

rudolfkoenig

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.

Dr. Boris Neubert

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
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Markus Bloch

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
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)