Mein Colorpicker-Dummy funktioniert:
define RGBLampe dummy
attr RGBLampe room LED
attr RGBLampe setList rgb:colorpicker,RGB
attr RGBLampe webCmd rgb:rgb ff0000:rgb 00ff00:rgb 0000ff:on:off
define colorInit notify global:INITIALIZED {use Color}
Nun möchte ich diese Werte (Eventmonitor):
2017-03-30 21:16:36 dummy RGBLampe rgb ff0000
komplett üer notify an ein anderes Device übertragen:
define RGBLampe1 ECMDDevice MModul
attr RGBLampe1 IODev myMModul
attr RGBLampe1 room LED
define RGBLampe1Notify notify RGBLampe:rgb.* set RGBLampe1 $EVENT
Ich hatte gehofft dass folgende im Eventmonitor erscheint:
2017-03-30 21:16:36 ECMDDevice RGBLampe1 rgb ff0000
aber es erschien nur:
2017-03-30 21:16:36 ECMDDevice RGBLampe1 rgb
Wie kann ich dafür sorgen, dass auch das "ff0000" übergeben wird?
Danke
oder gibt es eine bessere Variable als die $EVENT?
Es liegt am dummy.
Gib ihm mal:
attr RGBLampe readingList rgb
Gruß
Dan
in Ermangelung eines ECMDDevice habe ich dein Beispiel mal mit zwei Dummies durchgeführt... funktioniert wunderbar, der Fehler muss also im ECMDDevice liegen. In der Commandref zu ECMDDevice sticht mir mehrfach der Satz "The number of given parameters must match those given for the set command <commandname> definition in the class definition." ins Auge. Ich würde mir daher an deiner Stelle mal diese class definition genau ansehen bzw. sie hier posten.
Habe es gerade mal selbst ausprobiert.
$EVENT kann man natürlich nicht so ohne weiteres als set Kommando benutzen denn es enthält ja auch den Doppelpunkt.
Mit diesen beiden dummy(s) und dem notify klappt es bei mir:
define rgb1 dummy
attr rgb1 readingList rgb
attr rgb1 setList rgb:colorpicker,RGB
attr rgb1 webCmd rgb:on:off
define rgb2 dummy
attr rgb2 readingList rgb
attr rgb2 setList rgb:colorpicker,RGB
attr rgb2 webCmd rgb:on:off
define rgb1_notify_1 notify rgb1:rgb.* set rgb2 rgb $EVTPART1
Es wird aber wirklich nur rgb übertragen.
Für mehr wird es ohne Perl Code nicht auskommen.
Dann könnte das notify so aussehen:
define rgb1_notify_1 notify rgb1:.* {my $e=$EVENT;; $e=~s/://;;fhem "set rgb2 $e"}
Gruß
Dan
Das ursprüngliche Problem in Deinem notify aus #0 ist aber dass Du auf rgb triggerst!
Dadurch dass ohne readingsList bei einem dummy aber alles in state landet, kann das ja nie wirklich getriggert worden sein!? ???
Gruß
Dan
EDIT: Dein Beispiel aus #0 würde übrigens doch funktionieren wenn Du nicht auf rgb sondern gleich auf .* triggern würdest.
Damit Du auch weißt wie man das Rätsel selber hätte lösen können, man schaut sich einfach das Event genau an.
Also erstellt man sich ein notify was auf alle Events des gewünschten Device triggert und das zu verarbeitende Event einfach erst einmal in den Event Monitor (Log) ausgibt. Dafür gibt es Debug:
define RGBLampe1Notify notify RGBLampe:.* { Debug $EVENT }
Um evtl. Leerzeichen am Anfang oder Ende besser erkennen zu können kann man das auch nochmal zusätzlich "einfassen":
define RGBLampe1Notify notify RGBLampe:.* { Debug "Hier kommt das EVENT: >>>$EVENT<<<" }
Nun siehst Du genau wie Dein Event aussieht und kannst entsprechend Deinen dummy oder den Code dafür anpassen.
Es gibt ja bekanntlich auch noch $EVTPART1.... um $EVENT weiter zerlegt zu bekommen.
Gruß
Dan
HAbe den Fehler gefunden...
Ich habe die ganze Zeit auf den Eventmonitor geschaut:
2017-03-31 22:35:08 ECMDDevice RGBLampe1 rgb
2017-03-31 22:35:08 dummy RGBLampe rgb f1ff70
Bis mir auffiel, dass die Einträge ziemlich gleich lang sind und vlt. sogar "abgeschnitten"?
Bin dann ins log gegangen uns siehe da:
2017.03.31 22:33:58 5: myMModul: sending command #T"led�\000\000\001�\r\n (\043\124\042\154\145\144\377\000\000\001\377\015\012)
2017.03.31 22:33:58 5: myMModul: write #T"led�\000\000\001�\r\n (\043\124\042\154\145\144\377\000\000\001\377\015\012)
2017.03.31 22:33:58 5: SW: 2354226c6564ff000001ff0d0a
2017.03.31 22:34:06 5: myMModul: sending command #T"led\000�\000\001�\r\n (\043\124\042\154\145\144\000\377\000\001\377\015\012)
2017.03.31 22:34:06 5: myMModul: write #T"led\000�\000\001�\r\n (\043\124\042\154\145\144\000\377\000\001\377\015\012)
2017.03.31 22:34:06 5: SW: 2354226c656400ff0001ff0d0a
2017.03.31 22:34:09 5: myMModul: sending command #T"led\000\000�\001�\r\n (\043\124\042\154\145\144\000\000\377\001\377\015\012)
2017.03.31 22:34:09 5: myMModul: write #T"led\000\000�\001�\r\n (\043\124\042\154\145\144\000\000\377\001\377\015\012)
2017.03.31 22:34:09 5: SW: 2354226c65640000ff01ff0d0a
2017.03.31 22:34:40 5: myMModul: sending command #T"led��R\001�\r\n (\043\124\042\154\145\144\377\213\122\001\377\015\012)
2017.03.31 22:34:40 5: myMModul: write #T"led��R\001�\r\n (\043\124\042\154\145\144\377\213\122\001\377\015\012)
2017.03.31 22:34:40 5: SW: 2354226c6564ff8b5201ff0d0a
2017.03.31 22:35:08 5: myMModul: sending command #T"led��p\001�\r\n (\043\124\042\154\145\144\361\377\160\001\377\015\012)
2017.03.31 22:35:08 5: myMModul: write #T"led��p\001�\r\n (\043\124\042\154\145\144\361\377\160\001\377\015\012)
2017.03.31 22:35:08 5: SW: 2354226c6564f1ff7001ff0d0a
Wie man sieht hat das ECMD immer andere Kommandos gesendet, je nach Farbwahl, also genau das was ich wollte.
Also das funktioniert schon mal!
Außerdem habe ich mich echt über eure sinnvollen Kommentare gefreut, weil ich darüber hinaus gleich noch mehr gelernt habe, auf was man achten muss und wie ich selber noch besser klar komme.
DANKE!!!
Hier übrigens mal meine Classdef:
set rgb params rgb
set rgb cmd {chr(35).chr(84).chr(34).chr(108).chr(101).chr(100).chr(hex(substr('%rgb',0,2))).chr(hex(substr('%rgb',2,2))).chr(hex(substr('%rgb',4,2))).chr(1).chr(255).chr(13).chr(10)}
Erklärung:
schickt man ein "set rgb FF00FF" zum Device, dann zerlegt die classdef den Wert von rgb (%rgb) in die jeweiligen einzelnen Werte. Das Device erwartet neben den Begrüßungsstring dann 3 einzelne Helligkeitswerte als ASCII. Daher die Maskierung chr(255).chr(0).chr(0) für das ff0000
Nochmals DANKE an Alle!