Ich habe ein ECMDDevice über RS485....
Mit Hilfe eines klassischen FHEM-Schalters und der passenden Classdef, die definiert,
was an das Device gesendet werden soll, wenn man den FHEM-Schalter an oder ausschaltet,
funktioniert auch einwandfrei.
Nun möchte ich die Antwort des Relais auswerten.
Schalte ich nun auf der Weboberfläche mein Relais an,
so wird der passende Schaltbefehl der classdef zu meinem Relais geschickt:
#M(E\001\001\001\r\n
Darauf sendet das Relais die Antwort:
!M(E\001\001\001\r\n (aus #.... wurde !.... was soviel heist... ok, ausgeführt)
Mein passendes und funktinierendes matching in der classdef sieht so aus:
reading on match "!M\(E\001\001\001\r\n"
Wenn ich das Ganze jedoch in einem Regex-Tester checke, müsste es so aussehen:
!M\(E\\001\\001\\000\\r\\n
Kann mir jemand erklären, warum das so ist oder ist das gar nicht so?
Auszug commandref zum Thema der readings:
reading <reading> match "<regex>"
Declares a new reading named <reading>. A spontaneous data transmission from the physical device that matches the Perl regular expression <regex> is evaluated to become the value of the named reading. All ECMDDevice devices belonging to the ECMD device with readings with matching regular expressions will receive an update of the said readings. <regex> must match the entire reply, as in m/^<regex>$/.
Durch die // sind die / maskiert, ob das gebraucht wird kannst du nur austesten, bei den online regex testern kommt manchmal auch ein Ergebnis zu stande was in fhem nicht unbedingt stimmen muss.
VG
Frank
Hallo Frank, darum verstehe ich ja nicht, warum man bei /001 den "Schutz" weglassen kann, aber bei ( nicht.
Wie testet Ihr die regex? Aus was sollte man bei online-testern achten?