Wenn ich mein "alle Relais aus"-Kommando per classdef absetze,
wird selbiges an den Stellen "chr(0)" automatisch aufgeteilt und somit nicht ausgeführt. :(
Inhalt classdef:
set off cmd {chr(35).chr(77).chr(36).chr(80).chr(59).chr(0).chr(59).chr(0).chr(59).chr(0).chr(59).chr(0).chr(59).chr(13).chr(10)}
Wie kann ich das Kommando "schützen"? Klammern? Escapen?
Danke!
FHEM reference (http://fhem.de/commandref.html#ECMDClassdef):
ZitatA \000 (octal representation of control char with code zero) can be used to split the command into chunks. This is required for sending multiple Ethersex commands for one command in the class definition. The result string for the command is the concatenation of all responses received from the physical device. Use \x00 for literal zero bytes.
Vielleicht hat das etwas mit Deinem Problem zu tun. Probier doch mal eine Zeichenkette , z.B.
"\x23\x4D ...
", statt der vielen
chr()-Aufrufe.
Hallo Christian,
habe in meiner classdef geändert von:
set off cmd {chr(35).chr(77).chr(35).chr(80).chr(59).chr(0).chr(59).chr(0).chr(59).chr(0).chr(59).chr(0).chr(59).chr(13).chr(10)}
auf
set off cmd {\x23\x4Dx\x24\x50\x3B\x00\x3B\x00\x3B\x00\x3B\x00\x3B\x0D\x0A}
Dies funktioniert nicht. Im log:
leider nicht.
Das log gibt aus:
2014.12.25 12:39:11 1: PERL WARNING: Backslash found where operator expected at (eval 81) line 1, near "x0D\"
2014.12.25 12:39:11 3: eval: {\x23\x4Dx\x24\x50\x3B\x00\x3B\x00\x3B\x00\x3B\x00\x3B\x0D\x0A}
Hier nochmal das komplette Thema
-------------------------------------------
Das Ziel
1. Relaismodul per ECMD an FHEM anbinden.
2. Schaltvorgänge testen (alle Relais an/alle Relais aus)
Die fhem.cfg
#Relais definieren
define myrelais ECMD serial /dev/ttyAMA0@9600
attr myrelais classdefs myrelaisdevice=/opt/fhem/relais.classdef
define AlleRelais ECMDDevice myrelaisdevice
attr AlleRelais IODev myrelais
attr AlleRelais room Garten
Die relais.classdef
set on cmd {chr(35).chr(77).chr(35).chr(80).chr(59).chr(255).chr(59).chr(255).chr(59).chr(255).chr(59).chr(255).chr(59).chr(13).chr(10)}
set off cmd {chr(35).chr(77).chr(35).chr(80).chr(59).chr(0).chr(59).chr(0).chr(59).chr(0).chr(59).chr(0).chr(59).chr(13).chr(10)}
Im Webfrontend erscheint im Raum "Garten" ein Lampe mit der Beschriftung "AlleRelais" und ein on-Link und off-Link.
Soweit so gut.
Beim klick auf das on, wow, alle Relais ziehen, die Lampe im Frontent leuchtet. Ja, genau so wollte ich es.
Klick ich jedoh auf das off, so passiert nichts, da ich keine Rückfrage eingebaut habe, geht natürlcih die Lampe nicht aus.
Das wäre dann mal eine nächste Aufgabe. Möchte mich mit Eurer Hilfe aber nun dem Thema des off-commands zuwenden.
Im Log erscheint nämlich:
2014.12.25 00:37:14 5: Cmd: >set AlleRelais off<
2014.12.25 00:37:14 5: ECMDDevice: Analyze command >{chr(35).chr(77).chr(36).chr(80).chr(59).chr(0).chr(59).chr(0).chr(59).chr(0).chr(59).chr(0).chr(59).chr(13).chr(10)}<
2014.12.25 00:37:14 5: myrelais: command split into 5 parts.
2014.12.25 00:37:14 5: myrelais: sending command "#M$P;"
2014.12.25 00:37:14 5: SW: 234d24503b
2014.12.25 00:37:14 5: myrelais: sending command ";"
2014.12.25 00:37:14 5: SW: 3b
2014.12.25 00:37:14 5: myrelais: sending command ";"
2014.12.25 00:37:14 5: SW: 3b
2014.12.25 00:37:14 5: myrelais: sending command ";"
2014.12.25 00:37:14 5: SW: 3b
2014.12.25 00:37:14 5: myrelais: sending command ";\r\n"
2014.12.25 00:37:14 5: SW: 3b0d0a
Also wird hier der Befehlsstring bei den ASCII-0-Werten gesplittet. Dadurch funktioniert natrürlich das off-Schalten nciht.
Christians Ansatz scheint die richtige Richtung zu sein, aber funktioniert nicht, oder ich habe was falsch gemacht, wie so immer als "Anfänger" ;).
Aber vlt. liegt der Hund noch wo ganz anders begraben?
Wer hat eine Idee, oder liegt es evtl. sogar am ECMD oder ECMD-Device-Modul selbst?
Vielen lieben Dank!
Hallo, mach mal bitte Tüdelchen um die Escape - Sequenzen.
Grüße
Boris
Hallo,
nachdem ich mir den Code angesehen habe, dürfte keine der Varianten eine Null erlauben. Ich habe daher eine Funktion aktiviert, die bereits eingebaut aber noch stummgeschaltet war: die Attribute requestSeparator und responseSeparator. Aktualisiertes Modul anbei.
Bitte einmal das Gerät mit
attr yourECMDDevice requestSeparator Trenner
ergänzen und Trenner statt \000 im Kommando verwenden.
Viele Grüße
Boris
Ich glaube ich habe es nicht verstanden:
1. ich habe meine fhem.cfg per letzte Zeile angepasst
und einen Seperator definiert, der garantiert nicht vorkommt in meinen Befehlen: °
siehe letzte Zeile
#Relais definieren
define myrelais ECMD serial /dev/ttyAMA0@9600
attr myrelais classdefs myrelaisdevice=/opt/fhem/relais.classdef
attr myrelais requestSeparator °
Dann habe ich wie gewohnt den Befehl gesendet:
set on cmd {chr(35).chr(77).chr(35).chr(80).chr(59).chr(255).chr(59).chr(255).chr(59).chr(255).chr(59).chr(255).chr(59).chr(13).chr(10)}
# geht
set off cmd {chr(35).chr(77).chr(35).chr(80).chr(59).chr(0).chr(59).chr(0).chr(59).chr(0).chr(59).chr(0).chr(59).chr(13).chr(10)}
# geht nicht
Ich glaube ich habe das falsch verstanden:
Die Definition eines Seperators sagt dem Modul, dass es nun nicht mehr bei chr(0) trennen soll, sondern beim Seperator.
Wenn man also einen Seperator definiert, der ohnehin nicht vorkommt, dann wird in meinem Fall der Befehl nie getrennt und
quasi 1:1 zur Schnittstelle geschickt.
PS.: habe natürlich auch probiert alles in hex zu schreiben:
set off cmd {"\x23\x4Dx\x24\x50\x3B\x00\x3B\x00\x3B\x00\x3B\x00\x3B\x0D\x0A"}
und habe " um den ganzen Befehl hinzugefügt, oder habe ich auch "Tütchen" falsch interprediert?
Habe gar nicht erst gegoogelt, weil ich dachte, da kommen eh falsche Ergebnisse, wenn man nach "Tütchen Hexcode" sucht ;)
Daher brauch ich nochmal Hilfe. :(
Bitte den angehefteten Beitrag beachten.
Viele Grüße
Boris
Die ECMD hatte ich heruntergeladen, überspielt und Fhem mit /etc/init.d/fhem stop und /etc/init.d/fhem start "integriert".
Doch immer noch:
2014.12.26 21:58:05 5: myrelais: command split into 5 parts.
2014.12.26 21:58:05 5: myrelais: sending command "#M$P;"
2014.12.26 21:58:05 5: SW: 234d24503b
2014.12.26 21:58:05 5: myrelais: sending command ";"
2014.12.26 21:58:05 5: SW: 3b
2014.12.26 21:58:05 5: myrelais: sending command ";"
2014.12.26 21:58:05 5: SW: 3b
2014.12.26 21:58:05 5: myrelais: sending command ";"
2014.12.26 21:58:05 5: SW: 3b
2014.12.26 21:58:05 5: myrelais: sending command ";\r\n"
2014.12.26 21:58:05 5: SW: 3b0d0a
Leider passiert das auch bei Test:
set off cmd {chr(35).chr(77).chr(36).chr(80).chr(59)."\x00".chr(59)."\x00".chr(59)."\x00".chr(59)."\x00".chr(59).chr(13).chr(10)}
Ich habe nur Erfolg, wenn ich die ECMD umschreibe, also nach \000 suche und die 2 Fundstellen in (Octal) \040 oder einem anderen Wert umschreibe, der nicht im Code vorkommt.
Aber das fühlt sich für mich "falsch" an....
Aber dann erhalte ich ein schönes Log: 2014.12.27 00:45:01 5: myrelais: sending command "#M$P;\000;\000;\000;\000;\r\n"
und alle Relais schalten "off"
Füge zum Debuggen mal in ECMD_Write vor der Zeile
ECMD_Log $hash, 5, "command split into " . ($#ecmds+1) . " parts." if($#ecmds>0);
(Zeile 553 in Boris' neuer Version) folgende Zeile ein
ECMD_Log $hash, 5, "$requestSeparator: >$requestSeparator<";
und lade das Modul mittels reload 66_ECMD neu. Setz dann nochmal Deinen Befehl ab und prüf das Log. Vor
myrelais: command split into 5 parts.
müsste jetzt der Separator ausgegeben werden. Deine Fehlerbeschreibung hört sich so an, als ob es das Zirkumflex-Zeichen ° nicht bis hierher schafft.
Hallo Christian,
ich möchte ja gar nicht dass mein Befehl getrennt wird.
Im Gegenteil, ich möchte verhindern, dass fhem irgendwo einen "Seperator" entdeckt.
Insofern such ich eine Möglichkeit, wie ich fhem sagen kann, dass er mit der Trennerei aufhören soll.
Hab ja auch eine gefunden, glaube nur, dass das nciht die richtige Lösung sein kann.
Das Thema wird also dann wieder interessant, wenn ich mal mehrere Befehle senden muss.
Trotzdem vielen Dank für Deine Hilfe!
Bitte den angehefteten Beitrag beachten.
Viele Grüße
Boris
Zitat von: NeuFehm am 27 Dezember 2014, 23:30:56ich möchte ja gar nicht dass mein Befehl getrennt wird.
Ich hatte das schon verstanden. Offenbar wird der Befehl bei Dir getrennt, obwohl Du das nicht möchtest. Das Trennzeichen scheint folglich immer noch das Nullbyte zu sein. Um diese Vermutung zu bestätigen, solltest Du für die Fehlersuche mal das Trennzeichen ausgeben lassen. Dann siehst Du, ob das von Dir gesetzte Trennzeichen überhaupt verwendet wird, und kannst der Sache weiter auf die Spur gehen.
So habe das Thema nochmal aufgegriffen, da ich jetzt ein Testsystem aufgebaut und etwas mehr Ahnung mit FHEM habe ;)
Ich bin also soweit, dass ich Borische 666 heruntergeladen habe,
die fhem.cfg sieht dann wie folgt aus:
define mylampe ECMD serial /dev/ttyUSB0@9600
attr mylampe classdefs mylampedevice=/opt/fhem/lampe.classdef
attr mylampe verbose 5
attr mylampe partial 2
attr mylampe requestSeparator ~
define Testlicht ECMDDevice mylampedevice 40 1 #die 40 ist die Relaikartenadresse und die 1 das 1. Relais
attr Testlicht IODev mylampe
attr Testlicht room Test
------------lampe.classdef------------
params M_Adresse M_Relais
set off cmd {chr(35).chr(77).chr(%M_Adresse).chr(69).chr(1).chr(%M_Relais).chr(0).chr(13).chr(10)} #die chr(0) sorgt für das splitproblem
set on cmd {chr(35).chr(77).chr(%M_Adresse).chr(69).chr(1).chr(%M_Relais).chr(1).chr(13).chr(10)}
-----------------
und von Christian seine Zeile eingefügt habe:
ECMD_Log $hash, 5, "$requestSeparator: >$requestSeparator<";
Das logfile gibt nun aus:
2015.10.20 19:57:16 5: mylampe: : ><
2015.10.20 19:57:16 5: mylampe: command split into 2 parts.
2015.10.20 19:57:16 5: mylampe: sending command "#M(E\001\001"
2015.10.20 19:57:16 5: SW: 234d28450101
2015.10.20 19:57:16 5: mylampe: sending command "\r\n"
2015.10.20 19:57:16 5: SW: 0d0a
Dann habe ich Boris Post befolgt und den vorher definierten Seperator ~ ein meinen Befehl (lampe.classdef) eingebaut:
set off cmd {chr(35).chr(77).chr(%M_Adresse).chr(69).chr(1).chr(%M_Relais).chr(126).chr(13).chr(10)} # chr(126) entspricht der "~"
ja, er schaltet die Lampe AUS! Und weil die 0 nicht mehr drin ist, wird auch nicht separiert.
2015.10.20 20:26:04 5: mylampe: : ><
2015.10.20 20:26:04 5: mylampe: sending command "#M(E\001\001~\r\n"
2015.10.20 20:26:04 5: SW: 234d284501017e0d0a
2015.10.20 20:26:04 5: mylampe: Spontaneously received "!M("
2015.10.20 20:26:04 5: mylampe dispatch !M(
2015.10.20 20:26:04 5: mylampe: Spontaneously received "E\001\001~\r\n"
2015.10.20 20:26:04 5: mylampe dispatch E~
Hallo,
einfach die aktuelle Version nehmen und
deleteattr requestSeparator
Grüße
Boris
in die fhem.cfg eingefügt:
deleteattr mylampe requestSeparator
Lampe geht aus!!! :)
2015.10.20 20:53:52 5: mylampe: sending command "#M(E\001\001\000\r\n"
2015.10.20 20:53:52 5: SW: 234d28450101000d0a
2015.10.20 20:53:52 5: mylampe: Spontaneously received "!"
2015.10.20 20:53:52 5: mylampe dispatch !
2015.10.20 20:53:52 5: mylampe: Spontaneously received "M(E\001\001\000\r\n"
2015.10.20 20:53:52 5: mylampe dispatch M(E
cool, alles so, wie es sein muss/kann DANKE!!!
Jetzt muss ich nur noch ein read hinbekommen, also die Antwort auswerten ;)
Als nächsten Schritt muss ich ein READ realisieren.
-----------fhem.cfg---------------
# Lampe definieren
define mylampe ECMD serial /dev/ttyUSB0@9600
attr mylampe classdefs mylampedevice=/opt/fhem/lampe.classdef
attr mylampe verbose 5 # damit ich was sehe
attr mylampe partial 3 # erster Versuch ein "ganzes" read zu bekommen
-------------lampe.classdef-------------
# testweise mal den ganzen Antwortstring gematched
reading antwort match "!M\(E\\005\\001\\001\\r\\n"
------------- log ---------------------
2015.10.27 21:40:13 5: mylampe: Spontaneously received "#"
2015.10.27 21:40:13 5: mylampe dispatch #
2015.10.27 21:40:13 5: mylampe: Spontaneously received "M(E\005\001\001\r\n"
2015.10.27 21:40:13 5: mylampe dispatch M(E
2015.10.27 21:40:13 5: mylampe: Spontaneously received "!"
2015.10.27 21:40:13 5: mylampe dispatch !
2015.10.27 21:40:13 5: mylampe: Spontaneously received "M(E\005\001\000\r\n"
2015.10.27 21:40:13 5: mylampe dispatch M(E
------- Problem-----------
Wenn ich nun eine Lampe schalte, dann sendet die Lampe eine Antwort: !M(E\005\001\000\r\n
Ich habe nun das Problem, dass er irgendwie immer den Antwortstring aufteilt (siehe log).
Irgendwas mache ich also noch grundsätzlich falsch. :(
Habt ihr ne Idee?
Hallo,
nimm bitte mal
!M\(E\005\001\000\r\n
als Match. Gesendet wird Ausrufezeichen, M, Klammer auf, E, das Zeichen mit Code 5, das Zeichen mit Code 1, ..., CR, LF.
Bitte nächstes Mal die volle classdef anhängen oder einkopieren - mich irritiert, dass Dein Kommando antwort heissen soll.
Viele Grüße
Boris
Oh... sieht aus, als würde das jetzt funktionieren?
jetzt muss ich nur noch ..... ;) überlegen?
also ich will ja im Prinzip, dass fhem erkennt, dass die lampe wirklich aus ist,
und dann den Status auf Grund des reads auf "off" setzt...
Aber sehe ich richtig, dass Dein Tipp schon mal gut war?
--------log---------------
2015.10.28 16:52:54 5: mylampe: sending command "#M(E\001\001\000\r\n"
2015.10.28 16:52:54 5: SW: 234d28450101000d0a
2015.10.28 16:52:54 5: mylampe: Spontaneously received "!M"
2015.10.28 16:52:54 5: mylampe dispatch !M
2015.10.28 16:52:54 5: mylampe: Spontaneously received "(E\001\001\000\r\n"
2015.10.28 16:52:54 5: mylampe dispatch (E
2015.10.28 16:52:54 5: mylampe: match regex !M\(E\001\001\000\r\n for reading antwort of device Testlicht with class mylampedevice
----------classdef------------
params M_Adresse M_Relais
set off cmd {chr(35).chr(77).chr(%M_Adresse).chr(69).chr(1).chr(%M_Relais).chr(0).chr(13).chr(10)}
set on cmd {chr(35).chr(77).chr(%M_Adresse).chr(69).chr(1).chr(%M_Relais).chr(1).chr(13).chr(10)}
reading antwort match "!M\(E\005\001\000\r\n"
---------fhem.cfg-----------
# TEST
# Lampe definieren
define mylampe ECMD serial /dev/ttyUSB0@9600
attr mylampe classdefs mylampedevice=/opt/fhem/lampe.classdef
attr mylampe verbose 5
attr mylampe partial 3
#deleteattr mylampe requestSeparator
define Testlicht ECMDDevice mylampedevice 40 1
attr Testlicht IODev mylampe
attr Testlicht room Test
Wäre der nächste Schritt nun in der classdef einen postproc zu definieren, der nun die "antwort" auswertet und dann die jeweiligen Stati setzt?
ja
Danke bis hierher, werde das Ergebnis wieder posten ;)
Leider komm ich schon wieder nicht voran.
Muss mich mal noch mehr outen:
Wenn ich Änderungen mache in der classdef dann gehe ich auf "Edit config" in FHEM,
ändere nichts und speichere die fhem.cfg, weil ich das Gefühl habe, dass FHEM
sonst nicht meine Änderungen in der classdef annimmt.
Dann habe ich mein "reading Antwort match "!M\(E\001\001\000\r\n" mit einem einfachen
postproc ohne Funktion ergänzt:
reading Antwort postproc {my $status = "off"}
Das hat soweit funktioniert, denn in den Readings vom Device stand:
antwort off 2015-10-28 23:23:13
Dann habe ich etwas mit "Antwort" experimentiert und geändert:
in reading "status" und reading "state", "mylampe" und nie hat es den Status "aktualisiert"
Irgendwann habe ich "Testlicht" genommen und hatte das Gefühl, dass alles funktionierte.
Was wäre denn richtig? Welchen Namen müsste das Reading eingentlich bekommen.
Boris hatte sich schon mal gewundert warum ich das "Antwort" nenne. Wie wäre es "logischer"?
Außerdem die Frage, ist das richtig, dass ich immer die fhem.cfg scheinbar editiere und dann speichere,
nur um die Änderung der classdef zu "registrieren"?
Irre irgenwie viel zu lang umher ohne ein Stück festen Boden.
Kann mich jemand aufhalten? ;)
Derzeit wird auch nicht gematched, evtl. habe ich wieder die regex falsch?
Ich wollte dass er sowohl bei ...E\001... als auch bei ...E\005.... matched:
"!M\(E\00[1-5]\001\000\r\n"
Aktuelle Daten:
-----------fhem.cfg-------------
# TEST
# Lampe definieren
define mylampe ECMD serial /dev/ttyUSB0@9600
attr mylampe classdefs mylampedevice=/opt/fhem/lampe.classdef
attr mylampe partial 3
attr mylampe verbose 5
deleteattr mylampe requestSeparator
define Testlicht ECMDDevice mylampedevice 40 1
attr Testlicht IODev mylampe
attr Testlicht room Test
--------lampe.classdef----------
params M_Adresse M_Relais
set off cmd {chr(35).chr(77).chr(%M_Adresse).chr(69).chr(1).chr(%M_Relais).chr(0).chr(13).chr(10)}
set on cmd {chr(35).chr(77).chr(%M_Adresse).chr(69).chr(1).chr(%M_Relais).chr(1).chr(13).chr(10)}
reading Testlicht match "!M\(E\00[1-5]\001\000\r\n"
reading Testlicht postproc {my $status = "off"}
------------log------------------------
2015.10.29 08:22:25 5: mylampe: sending command "#M(E\001\001\001\r\n"
2015.10.29 08:22:25 5: SW: 234d28450101010d0a
2015.10.29 08:22:25 5: mylampe: Spontaneously received "!M"
2015.10.29 08:22:25 5: mylampe dispatch !M
2015.10.29 08:22:25 5: mylampe: Spontaneously received "(E\001\001\001\r\n"
2015.10.29 08:22:25 5: mylampe dispatch (E
2015.10.29 08:22:29 5: mylampe: sending command "#M(E\001\001\000\r\n"
2015.10.29 08:22:29 5: SW: 234d28450101000d0a
2015.10.29 08:22:29 5: mylampe: Spontaneously received "!"
2015.10.29 08:22:29 5: mylampe dispatch !
2015.10.29 08:22:29 5: mylampe: Spontaneously received "M(E\001\001\000\r\n"
2015.10.29 08:22:29 5: mylampe dispatch M(E
Die Tüdelchen im regulären Ausdruck sind überschüssig und müssen weg.
Bitte lies nochmal die Commandref. Dort steht, wie Du die Classdef neu einliest.
Außerdem gibt es dort auch ein Beispiel, wie postproc funktioniert. Der Rückgabewert des Perl-Codes wird übernommen - der Perl-Code operiert auf $_. Ohne Perl-Kenntnisse kommst Du an dieser Stelle nicht weiter.
Grüße
Boris
Tütchen = "" ?
das in der Commandref aufgeführte "set mylampe reopen" macht zwar was, aber liest die classdef nicht neu ein.
Dann habe ich die Commandref nochmal nach "classdef" oder "einlesen" durchsucht und hatte keine Treffer.
Ich glaube ich kann nur Deine Zeichen nicht richtig deuten... :(
Die postproc und perl ist weniger mein Problem... das glaube kann ich und mein:
reading Testlicht postproc {fhem "set Testlicht off"} war nur ein Test, weil ich dachte, dass wenn das MATCH stimmt,
dann der postprozessor abgearbeitet wird und dann der zumindest "stur" den Stauts setzt...
Achja, mein Regextester sagt, ich soll: !M\(E\\00[1,5]\\001\\000\\r\\n nehmen um !M(E\005\001\000\r\n oder !M(E\001\001\000\r\n zu matchen.
Warum soll ich die \\ doch als \ nehmen? Ist das FHEM-typisch?
Und inzwischen wieder eine Erkenntnis:
Test funktioniert mit: reading Testlicht match "!M\(E.*\r\n"
funktioniert nicht mit: reading Testlicht match "!M\(E.*\000\r\n"
funktioniert nicht mit: reading Testlicht match "!M\(E.*\\000\r\n"
Im Log: !M(E\005\001\000\r\n
Daher denke ich, dass er was anderes empfängt, als das Log ausgibt.
Aber zur Not könnte ich ja jetzt wenigstens das Reading mit einem postprozessor auswerten... ?
Weil "!M" ist immer ne Antwort eines Relais, welches mit \r\n endet.
Also "!M.*\r\n" wäre wahrscheinlich sogar die richtige Variante und den Rest mit Perl und postproc?
Zitat von: NeuFehm am 03 November 2015, 22:31:53
Tütchen = "" ?
Tüdelchen! https://de.wikipedia.org/wiki/Anf%C3%BChrungszeichen (https://de.wikipedia.org/wiki/Anf%C3%BChrungszeichen)
Zitat
Achja, mein Regextester sagt, ich soll: !M\(E\\00[1,5]\\001\\000\\r\\n nehmen um !M(E\005\001\000\r\n oder !M(E\001\001\000\r\n zu matchen.
Warum soll ich die \\ doch als \ nehmen? Ist das FHEM-typisch?
Weil \000 in der Ausgabe kein Literal ist sondern für eine binäre Null steht. Das macht eine spezielle Funktion zur Darstellung: alle nichtdruckbaren Zeichen werden durch die Oktaldarstellung ersetzt. Deswegen geht auch \00[0-5] im regulären Ausdruck nicht, vermutlich aber [\000-\005].
Grüße
Boris
ich komme immer noch nicht mit dem MATCHING weiter :(
Meine classdef:
reading Testlicht match "\!M\(E\001\001\001\r\n"
auch probiert in den Varianten:
reading Testlicht match "!M\(E\001\001\001\r\n"
reading Testlicht match !M\(E\001\001\001\r\n
reading Testlicht match \!M\(E\001\001\001\r\n
Wenn ich die Lampe schalte erscheint im Log trotzdem:
2015.12.14 22:14:48 5: mylampe: sending command "#M(E\001\001\001\r\n"
2015.12.14 22:14:48 5: SW: 234d28450101010d0a
2015.12.14 22:14:48 5: mylampe: Spontaneously received "!"
2015.12.14 22:14:48 5: mylampe dispatch !
2015.12.14 22:14:48 5: mylampe: Spontaneously received "M(E\001\001\001\r\n"
2015.12.14 22:14:48 5: mylampe dispatch M(E
Warum trennt der den beim "!"???
Warum ist die letzte und vorletzte Logzeile nicht identisch, liegt hier vlt. das "nichterkennen"-Problem?
Hat jemand eine Idee?
Übrigens ist das hier ein Auzug aus dem Logfile
Warum schreibt er ein anderes received als ein dispatch?
Vlt. ist hier der Hund begraben?
2015.12.15 21:24:33 5: mylampe: Spontaneously received "M(E\001\001\000\r\n"
2015.12.15 21:24:33 5: mylampe dispatch M(E^A^A^@^M