ECMD expect liest zu viel - was mache ich falsch?

Begonnen von FotoFieber, 25 Januar 2015, 21:16:51

Vorheriges Thema - Nächstes Thema

FotoFieber

Mit einem Arduino habe ich eine RGBLED konfiguriert und seriell angehängt. Mit dem Befehl

RGBLED RRGGBB

kann ich nun die LED steuern. Das Arduino gibt dann zurück

OK\n
RGBLED RRGGBB\n

Die Antwort über den aktuellen Status der LED soll auch spontan vom Arduino übermittelt werden. Leider interpretiert nun ECMD die Antwort vom Arduino als eine und aktualisiert den Wert rgb in FHEM nicht.

Auszug aus dem Log, zuerst mit spontaner Übermittlung des Farbwertes (20:49:49) und anschliessen nach aktivem Setzen des Farbwertes:

2015.01.25 20:49:49 5: Arduino dispatch RGBLED ff0000

2015.01.25 20:49:49 5: Arduino: match regex RGBLED.*\n for reading rgb of device Arduino_Sensors with class AS
2015.01.25 20:50:13 5: Arduino: sending command "RGBLED 00FF00\n"
2015.01.25 20:50:13 3: Arduino: write "RGBLED 00FF00\n", expect OK\n
2015.01.25 20:50:13 5: SW: 5247424c4544203030464630300a
2015.01.25 20:50:13 3: Arduino: read "OK\nRGBLED 00ff00\n"
2015.01.25 20:50:13 1: Arduino: unexpected answer "OK\nRGBLED 00ff00\n" received (wrote "RGBLED 00FF00\n", expected OK\n)
2015.01.25 20:50:13 5: Arduino: received answer "OK\nRGBLED 00ff00\n"


Das Problem scheint mir hier zu liegen:
2015.01.25 20:50:13 3: Arduino: read "OK\nRGBLED 00ff00\n"

Die Antwort vom Arduino wird als eine interpretiert anstelle von zweien.

Meine sensos.classdef

params LED
set LED params switch
set LED cmd {"LED %switch\n"}
set LED expect "OK\n"

params BEEP
set BEEP params value
set BEEP cmd {"BEEP %value\n"}
set BEEP expect "OK\n"

params RGBLED
set RGBLED params color
set RGBLED cmd {"RGBLED %color\n"}
set RGBLED expect "OK\n"

reading ir match "IR.*\n"
reading ir postproc { substr($_,3,99) }

reading rf match "RF.*\n"
reading rf postproc { substr($_,3,99) }

reading rgb match "RGBLED.*\n"
reading rgb postproc { substr($_,7,99) }

reading motion match "MOTION\n"
reading motion postproc { $_ }

reading DHT match "DHT .*\n"
reading DHT postproc { substr($_,4,99) }


Und mein fhem.cfg Ausschnitt zu ECMD:

define Arduino ECMD serial /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0@9600
attr Arduino classdefs AS=/opt/fhem/ECMD/sensor.classdef
attr Arduino logTraffic 3
attr Arduino verbose 5

define Arduino_Sensors ECMDDevice AS LED


Wie kann ich das Problem beheben? Ein Delay auf dem Arduino scheint mir nicht sinnvoll.

Wäre es besser, mehrere Classdefs zu machen?

Vielen Dank für Eure Tips