Modul zur Integration von DMXControl (über Terminal)

Begonnen von Spiff, 17 November 2013, 21:05:02

Vorheriges Thema - Nächstes Thema

Spiff

Hallo!

Ich möchte gerne ein Modul zur Integration von DMXControl schreiben.
Leider bin ich blutiger Anfänger in Sachen perl und habe mir einige Module, die eine Terminal-Verbindung benötigen, einmal angesehen. Nur steige ich da noch nicht so ganz durch.
Kann mir jemand ein Modul als Vorlage empfehlen?

Für DMXControl möchte ich in dem Modul
  • eine Terminal Verbindung über TCP/IP:port herstellen
  • Geräte definieren
    z.B: "define RGB_Light DMXControl 1,2,3" mit den ersten 3 DMX-Kanälen
  • vordefinierte Befehle senden
    z.B.: beim Verändern von RGB_Light: "sc 1 255" "sc 2 255" "sc 3 255"
    Das würde die 3 Channel/Farben von RGB_Light "voll an" stellen, also ein weiß darstellen.
  • nach Statusabfrage die Antwort aus Terminal auswerten
    z.B.: wenn man wissen will, welche Farbe gerade eingestellt ist, würde man abfragen:
    "gc 1" "gc 2" "gc 3"
    und die Antwort als Parameter speichern oder so. Dann könnte man in fhemweb direkt die RGB-Farbe darstellen

Das wäre ein riesen Wunsch von mir. Wenn mir jemand helfen könnte, wäre ich sehr dankbar.

Danke & viele Grüße
Spiff

ext23

Hallo,

ich bin ja auch ein riesen Freund von DMX, aber wieso willst du da ein Programm mit Steuern? Warum nicht ein DMX Interface direkt? Das Tool läuft nur unter Windows oder? Hast du da Gründe für?

Der einzige Vorteil den ich hier sehe ist, dass du mit dem Programm dazwischen Szenen abspielen kannst, also Farbwechsler etc, was direkt über FHEM etwas schwer werden dürfte ohne das man ein Daemon zwischen pflanzt der den DMX Stream generiert. Sonst ist FHEM da sicher an der Kotzgrenze.

Gruß
Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

Spiff

Moin Daniel,

ja, mein fhem läuft auf eh auf einem Windows-Server. Und genau die vielen Effektmöglichkeiten möchte ich gerne nutzen. Es gibt auch eine Android-App, mit der man live die RGB-LEDs steuern kann, das möchte ich nicht mehr missen. Und: ich habe verschiedene Effekte eingebaut, so blinkt es z.B. rot, wenn es an der Tür klingelt; grün, wenn jemand den Code kennt und herein kommt; gelb, wenn eine Email kommt etc. Ich würde das schon gerne erstmal so beibehalten, weil die Effekterstellung recht einfach ist und auch das Blinken eher ein sehenswertes Faden ist. Wenn fhem das direkt kann - immer gerne.

Und nun? Hast du einen Tipp für mich, wie ich die Terminal-Geschichte aufbauen kann? :-)

Viele Grüße
Spiff

abc2006

Hi, hört sich interessant an ... wenn FHEM DMX ausgeben könnte, wäre das sicher ein riesiger Funktionsgewinn ;-)
Ich würde es nutzen, kann aber leider auch zu wenig programmieren, um das da einfzufügen.

@ext23: viele DMX-Adapter ( ausgenommen die ganz billigen) generieren den DMX-Stream selbst. Die Software informiert nur über Werteänderungen, was selbst eine Fritzbox schaffen sollte.

lg
stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

justme1968

schau dir doch mal ECMD an. damit kann man über seriell oder netzwerk ein device etwa auf der ebene steuern die du beschreiben hast. vielleicht reicht das für deine zwecke ja. dannn musst du 'nur' konfigurieren statt gleich ein fhem modul schreiben.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Spiff

Hi!

Danke für den Tipp! Ich habe damit jetzt mal ein wenig herumgespielt und es geschafft, in der classdef vordefinierte fixe Werte an die DMX-Kanäle zu senden.

Jetzt wollte ich mich darum kümmern, wie man über ein Eingabefeld oder Schieberegler eine Variable einstellen und diese an das classdef übergeben kann. Tipps gerne genommen, dafür kenne ich mich in perl noch zu schlecht aus.

Dann habe ich aber das HUEDevice entdeckt und gleich mal als "Dummy" ausprobiert. Genauso habe ich mir das auch vorgestellt! Da der Colorpicker ja ein Modul ist, das sich in andere Integrieren lässt, habe ich mich gefragt, ob dies mit ECMD auch möglich ist - oder muss ich dann doch ein eigenes Modul schreiben?

Viele Grüße
Spiff

justme1968

du kannst den colorpicker und auch die schieberegler oder textfelder in jedem eigenen modul verwenden und in jedem modul bei dem du die liste der mit set zur verfügung stehenden kommandos beeinflussen kannst. also z.b. auch bei einem dummy. das sollte also auch bei ECMDDevice gehen.

wie du den coloricker in ein eigens modul integrierst steht hier: http://www.fhemwiki.de/wiki/Color. wenn du die initialisierung z.b. in ein notify auf global::INITIALIZED steckst oder ein 'use Color' in deine 99_myUtils.pm steckst geht das auch wenn du nicht direkt ein neues modul schreibst.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Spiff

Hallo Andre,

ich geb auf. Ich habe versucht, das "rgb:colorpicker,RGB" irgendwie in die classdef hineinzubekommen, bekomme es aber nicht hin.
Ich bin mir auch nicht sicher, ob das dort der richtige Ort ist.
Man kann da zwar die set-Befehle definieren, aber vielleicht nur mit direkter Verknüpfung zum Terminal? Also z.B.
set weiss cmd {"sc %DMX_R 255\nsc %DMX_G 255\nsc %DMX_B 255\nsc %DMX_M 255\nsc %DMX_S 0"}
Das "weiss" taucht dann auch in der Set-Liste auf.

Nur zum Verständnis: ein "use Color;" in der 99_myUtils.pm reicht aus oder muss es auch mit
Utils_Initialize($$)
{
  my ($hash) = @_;
 
  FHEM_colorpickerInit();
 
}


initialisiert werden?

Und wie genau müsste das (alternative?) notify aussehen?
define ColorPicker notify global:INITIALIZED {FHEM_colorpickerInit()} führt (natürlich) nicht zum Erfolg.

Und noch eine generelle Frage: wenn ein HUEDevice bereits definiert wurde, wurde der colorpicker ja schon initialisiert. Gilt das dann nur für das HUEDevice-Modul oder für alle anderen auch? Gibt's Probleme beim Doppelt-Initialisieren?

Danke, viele Grüße & sorry für die Anfängerfragen.
Spiff

justme1968

ob und wie du es in die ecmd set liste bekommt weiss ich nicht. das hab ich noch nie probiert.

das use ist nur zum laden. initialisieren musst du auch.

das notify schau eigentlich ok aus. ich probiere das mal heute abend.

eine initialisierung ist global aber es ist kein problem wenn mehrfach initialisiert wird.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ext23

Zitat von: abc2006 am 20 November 2013, 07:58:41
@ext23: viele DMX-Adapter ( ausgenommen die ganz billigen) generieren den DMX-Stream selbst. Die Software informiert nur über Werteänderungen, was selbst eine Fritzbox schaffen sollte.

Darum geht's ja nicht ;-) Aber denke mal an die Szene "Farbwechsler" dann reden wir nochmal drüber wie FHEM das schafft ;-))))) Die generiert nämlich NICHT dein DMX Adapter, der macht nur das was du sagst und das ist ein Wert zu einem Kanal ausspucken...

Gruß
Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

Spiff

Hallo!

Es gibt auch USB-Controller, die DMX können und auch Standalone vordefinierte Programme wie Farbverläufe, Feuersimulation,... aufrufen können.
Das wäre doch was, wenn man per fhem sozusagen die Programme auswählt/konfiguriert und den Rest der Controller übernimmt.
z.B. http://shop.led-studien.de/product_info.php/info/p94_SEDU-Board--DMX-nach-WS2801-.html
Ich habe so einen, um ein Vielpixel-Ambilight zu realisieren.

Viele Grüße
Spiff.

Spiff

#11
Hallo Andre,

Einen Dummy mit Colorpicker habe ich jetzt endlich hinbekommen, ohne auch ein HUEDevice zu definieren.

Ich hatte im Log folgenden Fehler entdeckt:

2013.11.24 13:51:22 1: reload: Error:Modul 99_myUtils deactivated:
Global symbol "$FW_ME" requires explicit package name at FHEM/Color.pm line 39, <$fh> line 6.
Global symbol "$FW_ME" requires explicit package name at FHEM/Color.pm line 44, <$fh> line 6.
Global symbol "$FW_ME" requires explicit package name at FHEM/Color.pm line 50, <$fh> line 6.
Compilation failed in require at ./FHEM/99_myUtils.pm line 7, <$fh> line 6.
BEGIN failed--compilation aborted at ./FHEM/99_myUtils.pm line 7, <$fh> line 6.


Und bin über die Suche darauf gestoßen, dass die 99_-Module geladen werden, BEVOR die Variable $FW_ME bekannt ist. Demnach musste ich in die 99_myUtils noch eine Zeile einfügen, dann klappt's:

package main;

use strict;
use warnings;
use POSIX;
##### wichtig, da die in Color; verwendete Variable $FW_ME sonst noch nicht definiert ist #####
use vars qw($FW_ME);
use Color;

sub
myUtils_Initialize($$)
{
my ($hash) = @_;
FHEM_colorpickerInit();
}

1;


Jetzt muss ich nur noch herausfinden, wie man eine Variable in die classdefs importiert, dann bin ich schon ein ganzes Stück weiter.

Viele Grüße
Spiff.

ext23

Naja das stimmt schon, aber ist nicht sehr flexibel, zumal viele ein schlechtes Fading haben, da merkt man schön ein Sprung nach dem rot. Und wenn man sowas der Software überlässt geht da mehr.

Naja und teuer ;-) So ein DMX Empfänger für RGB LED Stripes ist für unter 10 Euro selber zusammengebastelt.

Aber mal ne andere Frage, dieses DMXControl, gibt's das auch für Linux? Am besten noch so als Daemon, das wäre doch was feines. Die Szenen kann man ja dann über ein Frontend oder über configs einspielen, dann spart man sich die bunte Grütze unter Linux. Hab ehe kein X Windows auf meinem Server... Also wenn sowas ginge wäre das ein Traum, naja vermutlich bleibt es auch einer :-(

Gruß
Daniel

Zitat von: Spiff am 23 November 2013, 21:04:31
Hallo!

Es gibt auch USB-Controller, die DMX können und auch Standalone vordefinierte Programme wie Farbverläufe, Feuersimulation,... aufrufen können.
Das wäre doch was, wenn man per fhem sozusagen die Programme auswählt/konfiguriert und den Rest der Controller übernimmt.
z.B. http://shop.led-studien.de/product_info.php/info/p94_SEDU-Board--DMX-nach-WS2801-.html
Ich habe so einen, um ein Vielpixel-Ambilight zu realisieren.

Viele Grüße
Spiff.
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

abc2006

Zitat von: ext23 am 24 November 2013, 22:51:36

Aber mal ne andere Frage, dieses DMXControl, gibt's das auch für Linux? Am besten noch so als Daemon, das wäre doch was feines.


:'( Leider nein. Zumindest so weit ich weiss, bisher nicht. Wenn doch: bitte korrigiert mich!:-)

FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Spiff

#14
Hallo!

Nein, DMXControl ist nur für Windows. Aber es würde mich nicht wundern, wenn es Linux-Pendants gäbe.

Vom Fading dürfte Software/Hardware kaum einen Unterschied machen. Die großen Sprünge um's Rot beobachte ich auch hier. Das liegt an dem linearen Dim-Verlauf fast aller LED-Treiber, die mit 8 bit  (=256 Stufen) laufen, weil im Standard-DMX ja auch nicht mehr vorgesehen ist. Besser sind LED-Treiber mit 16 bit und einer logarithmischen Umrechnung auf 256 Stufen, wenn es denn DMX-kompatibel bleiben soll. Das Auge nimmt die Helligkeitssprünge in den dunklen Bereichen stärker wahr.

Der SEDU wird bald in einer neuen Version mit WLAN und LAN-Schnittstelle und einem stärkeren Prozessor mit mehr Speicher herauskommen. Ich werde mal sehen, ob sich das mit FHEM vereinen lässt.

So lange allerdings zurück zu DMXControl: ich habe es endlich hinbekommen, DMXControl anzusprechen und die DMX-Kanäle und Effekte über fhem einzustellen. Hier am Beispiel für eine RGB-LED mit den DMX-Adressen 1-3 ohne Master- und Strobe-Kanal.

Notwendig sind:

- fhem.cfg: Definition der globalen User-Attribute für den Wert der jeweiligen Kanäle
attr global userattr DMX_R DMX_G DMX_B


- fhem.cfg: Definition der DMXControl-Schnittstelle
define DMXControl ECMD telnet localhost:2145
attr DMXControl classdefs DMXControl_Devices=ECMD\DMXControl_Devices.classdef:DMXControl_Effects=ECMD\DMXControl_Effects.classdef



- ECMD\DMXControl_Devices.classdef: Konfigurationsdatei für die Definition der an DMXControl zu sendenden Befehle für RGB-LEDs
params DMX_R DMX_G DMX_B
set ColorPicker cmd {"sc %DMX_R " . AttrVal("%NAME","DMX_R","") . "\nsc %DMX_G " . AttrVal("%NAME","DMX_G","") . "\nsc %DMX_B " . AttrVal("%NAME","DMX_B","")}



- ECMD\DMXControl_Effects.classdef: Konfigurationsdatei für die Definition der an DMXControl zu sendenden Befehle für in DMXControl vordefinierte Effekte (Farbverläufe etc.):
set Klingel cmd {"runcommand 7 17 3"}
set Tueroeffner cmd {"runcommand 7 18 3"}
set Nachricht cmd {"runcommand 7 19 3"}

set Licht_0 cmd {"runcommand 7 7 3\nruncommand 7 6 3"}
set Licht_1 cmd {"runcommand 7 8 3"}
set Licht_2 cmd {"runcommand 7 9 3"}
set Licht_3 cmd {"runcommand 7 10 3"}
set Licht_4 cmd {"runcommand 7 11 3"}
set Licht_5 cmd {"runcommand 7 12 3"}
set Licht_6 cmd {"runcommand 7 13 3"}
set Licht_7 cmd {"runcommand 7 14 3"}
set Licht_8 cmd {"runcommand 7 15 3"}
set Licht_9 cmd {"runcommand 7 16 3"}



- fhem.cfg: Definition der RGB-LED mit den Kanälen 1=rot 2=grün 3=blau
define RGB1 ECMDDevice DMXControl_Devices 1 2 3
attr RGB1 room Lichtsteuerung
attr RGB1 DMX_R 0
attr RGB1 DMX_G 0
attr RGB1 DMX_B 0



- 99_myUtils.pm: den ColorPicker laden & initialisieren
package main;

use strict;
use warnings;
use POSIX;
##### wichtig, da die in Color; verwendete Variable $FW_ME sonst noch nicht definiert ist #####
use vars qw($FW_ME);
use Color;

sub
myUtils_Initialize($$)
{
my ($hash) = @_;
FHEM_colorpickerInit();
}
1;



- fhem.cfg: Definition eines Dummys, der den ColorPicker zur Hilfe nimmt, um die Farbe einzustellen und den dazugehörigen Notify, um die Werte als Dezimalzahl (von DMXControl so verlangt) in die drei Farben aufzuteilen, in die User-Attribute zu schreiben und danach den Befehl aufzurufen, die Werte an DMXControl zu senden:
define RGB1_Dummy dummy
attr RGB1_Dummy room Lichtsteuerung
attr RGB1_Dummy setList rgb:colorpicker,RGB
attr RGB1_Dummy webCmd rgb:rgb FF0000:rgb C8FF12:rgb 0000FF:toggle:on:off

define not_RGB1_Dummy notify RGB1_Dummy {\
fhem ("attr RGB1 DMX_R ".hex(substr($EVTPART1,0,2)))};;{\
fhem ("attr RGB1 DMX_G ".hex(substr($EVTPART1,2,2)))};;{\
fhem ("attr RGB1 DMX_B ".hex(substr($EVTPART1,4,2)))};;{\
fhem ("set RGB1 ColorPicker")}



- fhem.cfg: Definition eines ECMDDevices für das Aufrufen von Effekten
define DMX_Effects ECMDDevice DMXControl_Effects
attr DMX_Effects alias DMX Effekte
attr DMX_Effects room Lichtsteuerung


Da geht sicher noch vieles schicker und als nächstes baue ich die Master- und Strobe-Kanäle ein.
Wenn jemand eine Idee hat, wie ich um die Definition jeder einzelnen Lampe mit dessen Notify herumkomme: immer gerne! Ich möchte die fhem.cfg deswegen nicht so aufblähen.

Vielen Dank an Boris und Andre für die Hilfe und die Erstellung der notwendigen Module!

Gruß,
Spiff.