Projekt: ColoLight in FHEM
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
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});
}
}
Transparenz-Hinweis (Level 2)
Für diesen Beitrag wurden mir Produkte kostenfrei zur Verfügung gestellt! Es wurden keinerlei Bedingungen, Richtlinien oder Vorgaben bezüglich der Inhalte, welche ich in meiner Bewertung äußern darf, auferlegt.
Darüber hinaus habe ich keine zusätzliche Vergütung erhalten.