RGB-LED Modul - Eigenentwicklung

Begonnen von bjoernhoefer, 20 Dezember 2013, 22:24:37

Vorheriges Thema - Nächstes Thema

bjoernhoefer

Hallo,

ich bin nun seit circa 1 Jahr begeisterter FHEM Benutzer.

Da mein Haus noch nicht vollständig Automatisiert ist, hab ich mir bei amazon die schon öfters im Forum diskutierten MiLight RGB-LEDs zugelegt.

Da ich über mäßige Programmierkenntnisse verfüge, hab ich mir ein eigenes kleines Modul dafür gebaut (irgendwo gab es auch mal schon ein funktionierendes Modul dafür - kann ich aber nach längerer Suche nicht mehr finden) - und da setzt mein Request jetzt an...

Ich würde gerne so ein Modul haben - bzw. es gerne bauen, nur bin ich durch meine oben erwähnten mäßigen Programmierkenntnisse nicht wirklich in der Lage, ein bestehendes Modul zu finden, welches "einfach genug" ist, dass ich anhand dessen mein Modul "nachbauen" kann.


Leider hab ich auch diesbezüglich wenig Information gefunden (oder einfach nur falsch gesucht).

Die Anleitung im FHEM-Wiki - http://www.fhemwiki.de/wiki/99_myUtils_anlegen fand ich super und die half mir auch weiter, leider hab ich aber nichts bzw. nichts vergleichbares für eigene FHEM Module gefunden...


Falls irgendwer durch die Suchfunktion auf diesen Artikel stößt - hier gibts auch noch eine Anleitung https://docs.google.com/document/d/18jb-I2NaJ6SrQtsMppG3EN1GiiiteJuCp6umNQS3c2I/edit?usp=sharing wie man das Teil konfiguriert - denn da unterscheidet sich die von mir verwendete Version 2 von der Version 1.

Anbei mal mein derzeitiges Modul für den MiLight RGB-LED Controller, der derzeit nur mittels dummys und notify funktioniert.

package main;
use strict;
use warnings;
use POSIX;
# use Net::SSH::Perl;
# use Net::SSH::Perl::Key::RSA;
use IO::Socket;

sub
rgbledUtils_Initialize($)
{
  my ($hash) = @_;
}
##########################################################
sub rgbled ($) {

        ### ENTER YOUR SETTINGS HERE
        ## Adress of the WLAN Controller
        # my $conroller = '192.168.0.12';
        my $conroller = '192.168.100.12';

        ## Port of the WLAN Controller
        my $controllerport = 8899;

        ## Transmission Protocol of WLAN Controller
        my $controllerproto = 'udp';

        my ($startpar, $startpar2) = @_;

my $data = "";
my $transmission = 0;

my %actions =(
        "g1on"          =>      chr(0x45).chr(0x00).chr(0x55),
        "g1off"         =>      chr(0x46).chr(0x00).chr(0x55),
        "g2on"          =>      chr(0x47).chr(0x00).chr(0x55),
        "g2off"         =>      chr(0x48).chr(0x00).chr(0x55),
        "g3on"          =>      chr(0x49).chr(0x00).chr(0x55),
        "g3off"         =>      chr(0x4A).chr(0x00).chr(0x55),
        "g4on"          =>      chr(0x4B).chr(0x00).chr(0x55),
        "g4off"         =>      chr(0x4C).chr(0x00).chr(0x55),
        "green"         =>      chr(0x40).chr(0x66).chr(0x55),
        "blue"          =>      chr(0x40).chr(0x11).chr(0x55),
        "orange"        =>      chr(0x40).chr(0x99).chr(0x55),
        "sunrise"       =>      chr(0x40).chr(0x82).chr(0x55)
);

if ( exists $actions{$startpar} ) {
        $transmission = 1;
        $data = $actions{$startpar};
        Log 3, "command: ";
}
elsif ($startpar eq 'dim' ) {
        $transmission = 1;
        $data=(chr(0x4E).chr($startpar2).chr(0x55));
}

elsif ($startpar eq 'color' ) {
        $transmission = 1;
        $data=(chr(0x40).chr($startpar2).chr(0x55));
}

elsif ($startpar eq 'white' ) {
        # select(undef, undef, undef, 0.1);
        my $sock = new IO::Socket::INET(PeerAddr => $conroller, PeerPort => $controllerport, Proto => $controllerproto , Timeout => 1) or die('could not connect.');
        $sock->send(chr(0x49));
        select(undef, undef, undef, 0.1);
        $sock->send(chr(0xC9).chr(0x00).chr(0x55));
}

elsif ($startpar eq 'test' ) {
        print "TESTFUNCTION\n";
        foreach my $key (keys %actions) {
                print "$key\n";
        }
}

else {
        print "Command not found!\n";
        print "Following functions are available: ";
        foreach my $key (keys %actions) {
                print "$key,";
        }
        print "\n";
}

        if ( $transmission == 1) {
                my $sock = new IO::Socket::INET(PeerAddr => $conroller, PeerPort => $controllerport, Proto => $controllerproto , Timeout => 1) or die('could not connect.');
                $sock->send($data);
                $sock->close();
                Log 3, "RGB-LED data send"
        }



}


Würde mich freuen wenn mir wer helfen könnte, bzw. ich aktiv auch was für das wirklich tolle Produkt fhem beitragen könnte :-)

Danke im Voraus

Björn

herrmannj

#1
Hallo Björn,

ich bin aktiv an dem Modul. Du hast eine V3 bridge.

Welche LEDs hast Du am laufen ?

Edith:
gesehen. Deinem Code nach RGBWW oder RGBW, die neuen. 9W (Alukühlkörper) oder 6W (Kunststoff) ? Hast Du mehrere Gruppen im Einsatz, der code sieht so aus. Hast Du noch was anderes dran ?  Vielleicht einen RGB stripe ? :)

Kannst Du mal schauen was bei den Bulbs passiert wenn die im Discomode sind und Du setzt die Farbe (0×40) ? Springen dann auf pure Color oder Color + white ?  Gleichfalls, was passiert wenn Du im white bist und ein Color cmd absetzt ? Geht die white LED dann aus ?

Danke
Jörg

bjoernhoefer

Hallo Jörg,

tut mir leid, ich hab erst jetzt gesehen dass du auf meinen Beitrag geantwortet hast...

Stimmt, ich hab die V3 - deswegen hab ich auch das Modul "umgebaut".

Ich hab die farbigen mit Alu-Kühlkörper und die weissen mit Alu-Kühlkörper. Stipes hab ich nicht.

Ich verwende die Gruppen (nicht ganz im Sinne des Erfinders) für die einzelnen Lampen - das ist die Funktion g1-g4.


Die Versuche werd ich voraussichtlich kommende Woche machen und dir dann gleich bescheid geben.


Ich meld mich.

Björn


PS: "Bei neuen Antworten benachrichtigen" ist jetzt auch gesetzt :-)

bjoernhoefer

Hallo Jörg,

also bei mir funktioniert das mit den Alu RGB-LEDs alles so wie "erwartet".

Wenn ich die LEDs in Disco Mode setze und dann eine andere Farbe (z.B. sunrise wie im Code-Beispiel) setze, dann springt die LED auf die gewünschte Farbe um.

Die white Funktion ist leider bei mir nicht ganz so funktionell (wird von der RGB-LED ignoriert) deshalb fehlt mir hier der Test case.


Hoffe das konnte dir irgendwie helfen.

Sorry für die späte Antwort - Weihnachtsbedingt anderwertig beschäftigt gewesen :-)


Björn