DMXControl

Aus FHEMWiki

Einleitung

Diese Seite zeigt, wie man die Integration von DMX-Geräten über die Windows-Software DMXControl in FHEM realisieren kann.

Funktionalität:

  • Steuerung der DMX-Geräte via FHEMWEB mit Live-Colorpicker
  • Steuerung der DMX-Geräte via Android-App andFHEM mit Live-Colorpicker
  • Abrufen von Effekten (z.B. Farbverläufe)

Benötigte Software & Module:

  • FHEM
    • ECMD
    • readingsProxy
    • readingsGroup
    • Colorpicker
    • LightScenes (optional)

Funktionsbeschreibung

In DMXControl werden die DMX-Geräte definiert und entsprechende Effekte wie Farbverläufe generiert. FHEM stellt über das Modul ECMD eine Verbindung zur Terminal-Schnittstelle von DMXControl her. Da im ECMD-Modul einige Befehle fehlen, werden diese über das readingsProxy-Modul simuliert. Dieses gibt die Befehle dann über das ECMD-Modul an DMXControl weiter.

Zur Bedienung von Farb-LEDs bietet sich der FHEMWEB-Colorpicker an, der auch über eine Live-Farbänderungsfunktion verfügt.


DMXControl

In meiner Konfiguration hat jede RGB-LED 5 DMX-Kanäle: 1=rot 2=grün 3=blau 4=master(Helligkeit) 5=strobe (blinken).

Das Modul "PDA-Fernsteuerung" aka "Terminal-Schnittstelle" muss aktiviert sein. Ich benutze die Standard-Konfiguration auf COM1, 115200 kbps und Port 2145.

ECMD-Modul

Damit die Farben im Format RRGGBB gesendet werden können, müssen für jede Farbe und die sonst benötigten DMX-Kanäle eigene globale Userattribute erstellt werden. In alphabetischer Reihenfolge sieht das dann so aus:

attr global userattr DMX_B DMX_G DMX_M DMX_R DMX_S

Jedes ECMDDevice benötigt eine eigene Konfigurationsdatei, eine sog. classdef. In ihr wird beschrieben, welche Attribute konfiguriert werden können sollen. Für die DMX-Geräte heisst sie bei mir DMXControl_Devices.classdef und liegt im FHEM\ECMD-Verzeichnis.

Sie fängt so an:

params DMX_R DMX_G DMX_B DMX_M DMX_S

Dann kommt die Übersetzung der Befehle, die an die Terminal-Schnittstelle von DMXControl gesendet werden, jeweils für ein set und ein get. ein set (ECMDDevice) rgb (Farbe RRGGBB) soll folgende Aktionen ausführen:

  • Senden der Farbe Rot an den 1. Kanal der RGB-LED (in DMXControl: sc (DMX-Kanal 1) (Rot-Wert)
  • Senden der Farbe Grün an den 2. Kanal der RGB-LED
  • Senden der Farbe Blau an den 3. Kanal der RGB-LED
  • Einstellen auf maximale Helligkeit (da im Format RRGGBB die Helligkeitsinformation schon enthalten ist. Der Colorpicker funktioniert so.)

Die zu sendende Farbe wird vorher über den Colorpicker als oben beschriebene Attribute des jeweiligen Geräts eingestellt. Siehe unten.


# SET
set rgb cmd {"sc %DMX_R " . AttrVal("%NAME","DMX_R","") . "\nsc %DMX_G " . AttrVal("%NAME","DMX_G","") . "\nsc %DMX_B " . AttrVal("%NAME","DMX_B","") . "\nsc %DMX_M 255"}
set rgb postproc {sprintf("%%02x%%02x%%02x", (split(" ", "$_"))[2],(split(" ", "$_"))[5],(split(" ", "$_"))[8])}
# GET
get rgb cmd {"gc %DMX_R " . "\ngc %DMX_G " . "\ngc %DMX_B "}
get rgb postproc {sprintf("%%02x%%02x%%02x", (split(" ", "$_"))[2],(split(" ", "$_"))[5],(split(" ", "$_"))[8])}

Nun kann das ECMD-Modul zum Definieren von ECMD-Devices in der fhem.cfg definiert werden: Hinweis: bei mir laufen DMXControl und FHEM auf einem Server, deswegen ist die IP "localhost".

define DMXControl ECMD telnet localhost:2145
attr DMXControl classdefs DMXControl_Devices=ECMD\DMXControl_Devices.classdef

Nun kann die erste RGB-LED in der fhem.cfg definiert werden:

define RGB1 ECMDDevice DMXControl_Devices 1 2 3 4 5
attr RGB1 DMX_B 0
attr RGB1 DMX_G 0
attr RGB1 DMX_M 0
attr RGB1 DMX_R 0
attr RGB1 DMX_S 0
attr RGB1 room hidden

Die zweite RGB-LED wäre bei mir:

define RGB2 ECMDDevice DMXControl_Devices 6 7 8 9 10
attr RGB2 DMX_B 0
attr RGB2 DMX_G 0
attr RGB2 DMX_M 0
attr RGB2 DMX_R 0
attr RGB2 DMX_S 0
attr RGB2 room hidden

Colorpicker & readingsProxy

Eigentlich kann man jetzt schon die LEDs ansteuern. Man muss nur die Attribute des jeweiligen RGB-Geräts verädern und ein "set RGB1 rgb" ausführen. Da man so aber keine Möglichkeit hat, die Farbe direkt in einem Farbfeld auszuwählen, fügen wir diese Funktionalität nun mit dem Colorpicker hinzu. Damit dem ECMD-Device die dafür erforderlichen Befehle "beigebracht" werden, muss das Modul readingsProxy zwischen das ECMD-Modul und dem Colorpicker geschaltet werden.

Das Standard-Format für die Farbeinstellung im Colorpicker ist RRGGBB. Da DMXControl jede Farbe einzeln benötigt und das auch noch im Dezimal-Format, wird der readingsProxy so eingestellt, dass er bei einem "set (Readingsproxy) rgb RRGGBB" die Farben extrahiert, ins Dezimalformat umwandelt und es als Attribut in das ECMD-Device (RGB1) schreibt. Zum Schluss wird der Befehl gegeben, die jetzt als Attribut vorhandenen Farben über das ECMD-Modul an DMXControl zu senden. Die darauffolgenden setreadings werden für die Iconfarbe benötigt, siehe unten.

define LED1 readingsProxy RGB1:state
attr LED1 setFn {fhem ("attr RGB1 DMX_R ".hex(substr($ARGS,0,2)));;fhem ("attr RGB1 DMX_G ".hex(substr($ARGS,2,2)));;fhem ("attr RGB1 DMX_B ".hex(substr($ARGS,4,2)));;fhem ("set RGB1 rgb");;fhem ("setreading $name RGB $ARGS");;fhem ("setreading $name rgb $ARGS");;return undef}
attr LED1 setList rgb:colorpicker,RGB on off
attr LED1 webCmd rgb:rgb FF0000:rgb C8FF12:rgb 0000FF:rgb 000000

Iconfarbe in LED-Farbe

Damit die Icon-Farbe automatisch die jeweils eingestellte LED-Farbe einnimmt, fügen wir folgende Attribute hinzu:

attr LED1 getList rgb
attr LED1 getFn {fhem ("get RGB1 rgb");;fhem ("setreading LED1a RGB ".ReadingsVal("RGB1","rgb","000000"));;(ReadingsVal($name,"RGB","000000"),1) }
attr LED1 devStateIcon {Color_devStateIcon (ReadingsVal($name,"RGB","000000"))}

Anmerkung: dies funktioniert nur mit den SVG-Icons!

Live-Colorpicker

Das i-Tüpfelchen ist jetzt der Live-Colorpicker, mit dem man über das Farbfeld fahren kann und die Farbe, die das Fadenkreuz markiert, sofort eingestellt wird. Dazu benötigen wir ein globales Attribut:

attr global userattr realtimePicker

und schalten dieses auf den readingsProxy scharf:

attr LED1 realtimePicker 1

Die Android-App andFHEM verfügt ebenfalls über einen Live-Colorpicker, der automatisch erscheint, wenn man den Colorpicker in der fhem.cfg definiert hat.

Lightscenes

Damit die eingestellte Farbe auch mit dem Lightscenes-Modul funktioniert, muss folgendes Attribut gesetzt werden: Global: attr global userattr lightSceneParamsToSave Gerät:

attr LED1 lightSceneParamsToSave RGB -> rgb


Konfig-Zusammenfassung

Zusammenfassung der Config mit allen oben beschriebenen Funktionen:

  • fhem.cfg
  • FHEM\ECMD\DMXControl_Devices.classdef