[gelöst] RGB-Werte vom Dummy auf anderes Device übertragen

Begonnen von NeuFehm, 30 März 2017, 21:21:53

Vorheriges Thema - Nächstes Thema

NeuFehm

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
Raspberry Pi B+
RS 485 Schnittstellen: DIGITUS DA-70157, LINKSPTITE RS485/GPIO Shield for Raspberry Pi
RS485 Geräte: Ultraschallsensor für Zisternenfüllstand (Eigenbau), 4x8 Relais-M-Mastermodule (Eigenbau), 6 T-Module (Schalter und 3 analoge Eingänge) (Eigenbau)
sonstige Hardware: 2 Relay Modul

NeuFehm

oder gibt es eine bessere Variable als die $EVENT?
Raspberry Pi B+
RS 485 Schnittstellen: DIGITUS DA-70157, LINKSPTITE RS485/GPIO Shield for Raspberry Pi
RS485 Geräte: Ultraschallsensor für Zisternenfüllstand (Eigenbau), 4x8 Relais-M-Mastermodule (Eigenbau), 6 T-Module (Schalter und 3 analoge Eingänge) (Eigenbau)
sonstige Hardware: 2 Relay Modul

DeeSPe

Es liegt am dummy.
Gib ihm mal:
attr RGBLampe readingList rgb

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

KernSani

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.

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

#5
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.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

NeuFehm

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!
Raspberry Pi B+
RS 485 Schnittstellen: DIGITUS DA-70157, LINKSPTITE RS485/GPIO Shield for Raspberry Pi
RS485 Geräte: Ultraschallsensor für Zisternenfüllstand (Eigenbau), 4x8 Relais-M-Mastermodule (Eigenbau), 6 T-Module (Schalter und 3 analoge Eingänge) (Eigenbau)
sonstige Hardware: 2 Relay Modul