Projekt: ColoLight in FHEM

Mit ** gekennzeichnete Links auf dieser Seite sind Affiliatelinks.

Ich werde immer wieder von Firmen und Shops angeschrieben, ob ich nicht bestimmte Produkte auf dem Blog und auf YouTube zeigen möchte. Das meiste davon lehne ich ab, weil es einfach nicht in das Thema hier passt (Bluetooth-Lautsprecher, Actionscams, Handstaubsauger, Gartenlampen, …). Aber dieses Mal musste ich GearBest einfach zusagen. In diesem Blogbeitrag zeige ich Dir die LifeSmart ColoLight LS160 und wie ich diese in FHEM integrieren konnte. Mit ein wenig Geduld und WireShark ist vieles möglich. Jetzt kann ich alle Effekte über FHEM steuern, beliebige Farben einstellen und die App brauche ich auch nicht mehr. Besser geht es nicht. Natürlich habe ich alles hier für Dich dokumentiert.

Was Du brauchst?

  • Eine ColoLight
  • Optional ein FHEM-System

Video

FHEM-Kurs

Befehle

Hier habe ich mal die komplette Kommunikation dokumentiert. Alle Befehle werden per UDP auf Port 8900 an die Lampe übermittelt. In ASCII machen die Befehle keinen Sinn - und auch sonst konnte ich kein Schema erkennen. Es könnte gut sein, dass in den Befehlen ein Passwort oder eine andere Authentication versteckt ist. Da ich nur ein Modell habe, konnte ich das nicht nachvollziehen. Aber auch nach einem WLAN-Wechsel haben die Befehle noch funktioniert.

Eventuell sind ersten 4 Byte eine Seriennummer o.ä.

Wenn Du die gleichen Befehle vergleichst (z.B. für on), findest Du einen Zähler. Dieser kann eigentlich keine Prüfziffer darstellen, da dieser sich bei den gleichen Daten trotzdem ändern. Selbst, wenn man überall 01 übergibt, funktionieren die Befehle. Ich ignoriere diesen Teil einfach und übergebe immer 01

Aus der Distance bin ich noch nicht richtig schlau geworden. Am besten einmal per App konfigurieren.

Konfiguration:

On
535a303000000000002000000000000000000000000000000000 08 0000000000000000000 4 08 0301c f35
535a303000000000002000000000000000000000000000000000 0b 0000000000000000000 4 0b 0301c f35
535a303000000000002000000000000000000000000000000000 0d 0000000000000000000 4 0d 0301c f35
535a303000000000002000000000000000000000000000000000 14 0000000000000000000 4 14 0301c f35

Off
535a303000000000002000000000000000000000000000000000 07 0000000000000000000 4 07 0301c e1e
535a303000000000002000000000000000000000000000000000 0a 0000000000000000000 4 0a 0301c e1e
535a303000000000002000000000000000000000000000000000 0c 0000000000000000000 4 0c 0301c e1e

Bri 0
535a303000000000002000000000000000000000000000000000 16 0000000000000000000 4 16 0301c f00

Bri ~50
535a303000000000002000000000000000000000000000000000 17 0000000000000000000 4 17 0301c f2f

Bri 100
535a303000000000002000000000000000000000000000000000 15 0000000000000000000 4 15 0301c f63

Distance 4
535a303000000000002300000000000000000000000000000000 4d 0000000000000000000 b 4d 068700 4c004c03

Distance 5
535a303000000000002300000000000000000000000000000000 4e 0000000000000000000 b 4e 068700 5f005f03

Distance 7
535a303000000000002300000000000000000000000000000000 54 0000000000000000000 b 54 068700 85008503

Effekte:

80's club
535a303000000000002300000000000000000000000000000000 c0 0000000000000000000 4 c0 0602ff 049a0000
535a303000000000002300000000000000000000000000000000 c9 0000000000000000000 4 c9 0602ff 049a0000
535a303000000000002300000000000000000000000000000000 d6 0000000000000000000 4 d6 0602ff 049a0000
535a303000000000002300000000000000000000000000000000 df 0000000000000000000 4 df 0602ff 049a0000

cherry blossom
535a303000000000002300000000000000000000000000000000 c1 0000000000000000000 4 c1 0602ff 04940800
535a303000000000002300000000000000000000000000000000 d7 0000000000000000000 4 d7 0602ff 04940800

cocktail parade
535a303000000000002300000000000000000000000000000000 c2 0000000000000000000 4 c2 0602ff 05bd0690
535a303000000000002300000000000000000000000000000000 cf 0000000000000000000 4 cf 0602ff 05bd0690
535a303000000000002300000000000000000000000000000000 d8 0000000000000000000 4 d8 0602ff 05bd0690
535a303000000000002300000000000000000000000000000000 4b 0000000000000000000 4 4b 0602ff 05bd0690

Savasana
535a303000000000002300000000000000000000000000000000 c3 0000000000000000000 4 c3 0602ff 04970400

Sunrise
535a303000000000002300000000000000000000000000000000 c4 0000000000000000000 4 c4 0602ff 01c10a00
535a303000000000002300000000000000000000000000000000 d1 0000000000000000000 4 d1 0602ff 01c10a00

Unicorns
535a303000000000002300000000000000000000000000000000 c5 0000000000000000000 4 c5 0602ff 049a0e00
535a303000000000002300000000000000000000000000000000 d2 0000000000000000000 4 d2 0602ff 049a0e00

Pensieve
535a303000000000002300000000000000000000000000000000 c6 0000000000000000000 4 c6 0602ff 04c40600
535a303000000000002300000000000000000000000000000000 d3 0000000000000000000 4 d3 0602ff 04c40600

The circus
535a303000000000002300000000000000000000000000000000 c7 0000000000000000000 4 c7 0602ff 04810130
535a303000000000002300000000000000000000000000000000 d4 0000000000000000000 4 d4 0602ff 04810130

Instargrammer
535a303000000000002300000000000000000000000000000000 c8 0000000000000000000 4 c8 0602ff 03bc0190
535a303000000000002300000000000000000000000000000000 d5 0000000000000000000 4 d5 0602ff 03bc0190

Farben (nicht alle aufgeführt):

Hier sieht es so aus. Als wenn am Ende einfach ein HEX-Farbcode angegeben werden kann (letzte 3 Byte).

Pink yarrow
535a303000000000002300000000000000000000000000000000 3f 0000000000000000000 4 3f 0602ff 00 ff2222

Primrose yellow
535a303000000000002300000000000000000000000000000000 41 0000000000000000000 4 41 0602ff 00 ffdb15
535a303000000000002300000000000000000000000000000000 43 0000000000000000000 4 43 0602ff 00 ffdb15

Green flash
535a303000000000002300000000000000000000000000000000 44 0000000000000000000 4 44 0602ff 00 78ff25

Cackatoo
535a303000000000002300000000000000000000000000000000 45 0000000000000000000 4 45 0602ff 00 0cff50

Mit NC testen

An:

echo -n -e "\x53\x5a\x30\x30\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x01\x03\x01\xcf\x35" | nc -u 192.168.0.72 8900

Aus:

echo -n -e "\x53\x5a\x30\x30\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x01\x03\x01\xce\x1e" | nc -u 192.168.0.72 8900

FHEM-Funktion

sudo apt-get install libio-socket-ip-perl
use IO::Socket::INET;

sub sendUdpMsg($$$) {
    my ($dest, $port, $cmd) = @_;

    my $socket = IO::Socket::INET->new(
        Proto => 'udp',
        PeerPort => $port,
        PeerAddr => $dest,
        Timeout  => 1,
    ) or return 0;

    $socket->send($cmd) or return 0;

    return 1;
}
define BU_ColoLight dummy
attr BU_ColoLight alias ColoLight
attr BU_ColoLight icon light_light_dim_90
attr BU_ColoLight readingList bri rgb effect
attr BU_ColoLight room 30_Buero
attr BU_ColoLight setList on off bri:slider,1,1,100 rgb:colorpicker effect:80sclub,cherryBlossom,cocktailParade,savasana,sunrise,unicorns,pensieve,theCircus,instargrammer
attr BU_ColoLight webCmd on:off:bri:rgb:effect
define n_coloLight notify BU_ColoLight:.* {}

BU_ColoLight:.* {
    my $coloLightIp = "192.168.44.62";

    my $prefix = "\x53\x5a\x30\x30\x00\x00\x00\x00\x00";
    my $configCmd = $prefix . "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00";
    my $colorCmd = $prefix . "\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x01\x06\x02\xff";
    if ($EVENT eq "on") {
        sendUdpMsg($coloLightIp, 8900, $configCmd . "\x04\x01\x03\x01\xcf\x35");
    } elsif ($EVENT eq "off") {
        sendUdpMsg($coloLightIp, 8900, $configCmd . "\x04\x01\x03\x01\xce\x1e");
    } elsif ($EVENT =~ qr/bri: (.*)/p) {
        my $brightness = sprintf("%02X", $1);

        Log3($NAME, 3, "setting brightness to " . $brightness);
        sendUdpMsg($coloLightIp, 8900, $configCmd . "\x04\x01\x03\x01\xcf" . pack('H*', $brightness));
    } elsif ($EVENT =~ qr/rgb: (.*)/p) {
        my $rgb = $1;

        Log3($NAME, 3, "setting color to " . $rgb);
        sendUdpMsg($coloLightIp, 8900, $colorCmd . "\x00" . pack('H*', $rgb));
    } elsif ($EVENT =~ qr/effect: (.*)/p) {
        my $effect = $1;
        
        my %effects = (
            "80sclub", "\x04\x9a\x00\x00",
            "cherryBlossom", "\x04\x94\x08\x00",
            "cocktailParade", "\x05\xbd\x06\x90",
            "savasana", "\x04\x97\x04\x00",
            "sunrise", "\x01\xc1\x0a\x00",
            "unicorns", "\x04\x9a\x0e\x00",
            "pensieve", "\x04\xc4\x06\x00",
            "theCircus", "\x04\x81\x01\x30",
            "instargrammer", "\x03\xbc\x01\x90",
        );

        Log3($NAME, 3, "setting effect to " . $effect);
        sendUdpMsg($coloLightIp, 8900, $colorCmd . $effects{$effect});
    }
}

Newsletter

Trage Dich jetzt in den Newsletter ein und genieße dadurch viele Vorteile:

  • 5€-Gutschein als Dankeschön
  • Zugang zu exklusiven Inhalten
  • Angebote für Produkte

* Durch Angabe meiner E-Mail-Adresse erkläre ich mich damit einverstanden, dass mir regelmäßig Informationen und Produktempfehlungen aus dem Fachgebiet Smart Home zugesendet werden. Mit dem Eintrag akzeptieren Sie unsere Datenschutzbestimmungen. Meine Einwilligung kann ich jederzeit widerrufen.

Matthias Kleine

Matthias Kleine Autor

Großer Fan von OpenSource-Projekten und erweiterbaren Lösungen. Je offener und flexibler das System, desto besser. Ich lege mich nicht auf einzelne Protokolle oder Standards fest, sondern kombiniere aus allen Welten das Beste. Unterwegs als Softwareentwickler, Trainer und Blogger im Bereich Smart Home seit 2013.

Auf YouTube und hier im Blog gibt es bereits unzählige kostenlose Videos, Informationen und Tutorials. Wenn Dir das noch nicht reicht, ist ein Training genau das richtige für Dich! Die folgenden Trainings haben den Vorteil, dass immer von Anfang an gestartet wird und Du ohne Vorwissen teilnehmen kannst.