Hallo allerseits,
ich habe ein neues Modul entwickelt, welches Iluminize LED Stripes (https://www.iluminize.com/de/) unterstützt.
Bisher geht nur on/off. Aber evtl. schaffen wir es ja gemeinsam, das Protokoll noch weiter zu entschlüsseln.
Das Modul gibt es hier: https://github.com/kettenbach-it/FHEM-Iluminize
und ab morgen im FHEM-SVN.
Gruß
Volker
Hallo Volker,
Zwei Wünsche hatte ich. Kannst Du bitte nicht direkt in $hash->[STATE] schreiben. Statt dessen bitte das Reading state setzen.
Und eventuell wäre es Dir möglich mit packages zu arbeiten.
Wir versuchen aktuell das Wiki für die Modulentwicklung entsprechend zu aktualisieren. Wenn Du Fragen hast einfach fragen.
Meinst Du mit "nicht direkt in $hash schreiben" stattdessen
readingsSingleUpdate($hash, "state", "off", 1);
Und was heisst "mit packages" arbeiten? Ich bitte um ein Beispiel.
Zitat von: Volker Kettenbach am 12 Oktober 2018, 19:08:05
Meinst Du mit "nicht direkt in $hash schreiben" stattdessen
readingsSingleUpdate($hash, "state", "off", 1);
Hallo Volker,
Ja genau das meine ich. Ein Grund ist das der User über das Attribut stateFormat die Möglichkeit hat $hash->{STATE} zu "manipulieren"
packages ist unter Perl das selbe wie in C++ und Java Klassen sind. Es ist ein Namensraum.
Hier (https://forum.fhem.de/index.php/topic,91822.0.html) kannst Du Ansätze zur Diskussion darüber finden.
Würde in Deinem Fall (Dein Modul) so ausschauen
package main;
use strict;
use warnings;
sub Iluminize_Initialize($)
{
my ($hash) = @_;
$hash->{DefFn} = "Iluminize::Define";
$hash->{ReadFn} = "Iluminize::Get";
$hash->{SetFn} = "Iluminize::Set";
$hash->{UndefFn} = "Iluminize::Undefine";
$hash->{DeleteFn} = "Iluminize::Delete";
$hash->{AttrFn} = "Iluminize::Attr";
$hash->{AttrList} = "$readingFnAttributes";
}
package Iluminize;
use strict;
use warnings;
use POSIX;
use GPUtils qw(:all); # wird für den Import der FHEM Funktionen aus der fhem.pl benötigt
use IO::Socket::INET;
use IO::Socket::Timeout;
use SetExtensions;
my $on = chr(hex("55")) .
chr(hex("99")) .
chr(hex("5e")) .
chr(hex("bb")) .
chr(hex("01")) .
chr(hex("02")) .
chr(hex("02")) .
chr(hex("12")) .
chr(hex("ab")) .
chr(hex("c2")) .
chr(hex("aa")) .
chr(hex("aa"));
my $off= chr(hex("55")) .
chr(hex("99")) .
chr(hex("5e")) .
chr(hex("bb")) .
chr(hex("01")) .
chr(hex("02")) .
chr(hex("02")) .
chr(hex("12")) .
chr(hex("a9")) .
chr(hex("c0")) .
chr(hex("aa")) .
chr(hex("aa"));
## Import der FHEM Funktionen
BEGIN {
GP_Import(qw(
readingsSingleUpdate
readingsBulkUpdate
readingsBulkUpdateIfChanged
readingsBeginUpdate
readingsEndUpdate
Log3
))
};
sub Define($$)
{
my ($hash, $def) = @_;
my $name= $hash->{NAME};
my @a = split( "[ \t][ \t]*", $def );
return "Wrong syntax: use define <name> Iluminize <hostname/ip> " if (int(@a) != 3);
$hash->{HOST}=$a[2];
Log3 $hash, 0, "Iluminize: $name defined.";
return undef;
}
# No get so far
sub Get($$) {}
sub Set($$)
{
my ($hash, $name, $cmd, @args) = @_;
my $cmdList = "on off";
my $remote_host = $hash->{HOST};
my $remote_port = 8899;
Log3 $hash, 3, "Iluminize: $name Set <". $cmd ."> called" if ($cmd !~ /\?/);
return "\"set $name\" needs at least one argument" unless(defined($cmd));
my $command;
if ($cmd eq "on") {
$command = $on;
readingsSingleUpdate($hash, "state", "on", 1);
} elsif($cmd eq "off") {
$command = $off;
readingsSingleUpdate($hash, "state", "off", 1);
} else {
return SetExtensions($hash, $cmdList, $name, $cmd, @args);
}
my $socket = IO::Socket::INET->new(PeerAddr => $remote_host,
PeerPort => $remote_port,
Proto => 'tcp',
Type => SOCK_STREAM,
Timeout => 2 )
or return "Couldn't connect to $remote_host:$remote_port: $@\n";
$socket->write($command);
return undef;
}
sub Undefine($$)
{
my ($hash, $arg) = @_;
my $name= $hash->{NAME};
Log3 $hash, 4, "Iluminize: $name undefined.";
return;
}
sub Delete($$) {
my ($hash, $arg) = @_;
my $name= $hash->{NAME};
Log3 $hash, 0, "Ilumnize: $name deleted.";
return undef;
}
sub Attr($$$$) {
my ($cmd, $name, $aName, $aVal) = @_;
my $hash = $defs{$name};
return undef;
}
1;
Bei der Liste der zu "importierenden Funktionen aus main musst Du dann natürlich immer ergänzen. Ich habe jetzt nur mal die kleinen Klassiker genommen.
Wenn Du vergisst eine Funktion ein zu binden stürzt Dein FHEM sofort ab wenn die Funktion aufgerufen wird.
Grüße
Hab das beides umgesetzt!
Super. Hab vielen Dank.
Grüße
Hallo
ich habe versucht einen iluminize LED-Controller Funk/WiFi Modell 500.011 zu steuern. Leider ohne Erfolg.
Mit welchem LED Controller hast du dein Modul getestet?
Gruß
LuckyTV
Moin,
in der Tat steht bei mir auch 500.011 drauf.
Kommst Du auf das Webfrontend von dem Ding drauf?
Einfach http://<ip-adresse> im Browser aufrufen.
User+Passwort ist glaube ich admin/admin.
Welche Firmware hast Du?
Ich habe 1.0.08
Volker
Hallo
Ich komme auf das Webfrontend mit admin admin drauf. Version ist auch bei mir V1.0.08.
Die App Steuerung funktioniert. Im DHCP bekommt es immer die selbe IP zugewiesen.
Die Kommunikation funktionirt auch. Zumindes gibt es eine Fehlermeldung wenn ich den LED-Controller vom Strom nehme.
"Couldn't connect to 192.168.40.31:8899: IO::Socket::INET: connect: timeout"
Echt blöder Fehler
Internals:
CFGFN
DEF 192.168.40.31
HOST 192.168.40.31
NAME BZE_RGB_Licht
NR 355
STATE off
TYPE Iluminize
.attraggr:
.attrminint:
READINGS:
2018-10-24 18:08:03 state off
Attributes:
Gruß,
LuckyTV
Bitte check mal im Webfrontend, ob Du unter "Other setting" TCP-Server oder was anderes eingestellt hast.
Bei mir steht das auf TCP-Server und entsprechend ist das Modul programmiert.
Ist schon auf TCP-Server eingestellt. Was steht bei dir bei Server Adresse?
Ich habe das Device noch mal in Fhem gelöscht und wieder angelegt. Keine Änderung
Die WLAN Signalstärke ist auch OK. -44 dBm , max. mögliche Datenrate 72 / 72 Mbit/s
Hier meine Daten
Network Parameters setting
Protocol: TCP-Server
Port ID: 8899
Server Address: 10.10.10.1
TCP Time Out Setting: 300
Ich habe exakt die gleichen Settings.
Merkwürdig...
Mach mal ein "telnet <ipadresse> 8899" an der Commandline und guck, ob das einen Fehler bringt.
Guten Morgen,
da gibt es keine Fehlermeldung.
Trying 192.168.40.31...
Connected to 192.168.40.31.
Escape character is '^]'.
Hallo Volker,
ich würde dir ja gerne weiterhelfen. Wenn ich wüsste wie.
So wie es aussieht hat sonst keiner hier solch ein LED-Contoller.
Gruß,
Tobias
Nur für das Protokoll: die Iluminize Geräte sind wohl von Sunricher gebaut.
Dafür gibt es hier ein Modul: https://forum.fhem.de/index.php/topic,34254.50.html
bzw: https://forum.fhem.de/index.php/topic,18958.0.html
Ich fange jetzt mal an, diesen Thread zu aktivieren, um eine Unterstützung von Sunricher (OEM) / Iluminize (https://www.iluminize.com/) zu ermöglichen.
Ich habe zweimal den Controller 500.011.
https://www.iluminize.com/de/shop/led-steuerung/led-controller/product/155-500-011-wifi-controller-5a.html?search=500.011
Der eine ist ca. 5 Jahre alt und hat die Version 160412VE aufgedruckt.
Dieser Controller geht in FHEM mit Wifilight im Modus "RGBW Sunricher".
Er kann mit der (fürchterlichen) App "EasyLighting" (https://apps.apple.com/us/app/easylighting-easylife/id844148255) bedient werden.
Der zweite ist brandneu und hat die Version 190926V4 aufgedruckt.
Dieser Controller geht in FHEM gar nicht. Weder mit Wifilight noch mit meinem primitiven Skript, welches die üblichen Hexwerte für on und off sendet.
Er kann mit der (ebenso fürchterlichen) App "EasyHome" (https://apps.apple.com/de/app/easy-home-smart-home/id1107478095) bedient werden.
Ich habe es bisher noch nicht geschafft, den Controller mit dieser EasyHome-App zum laufen zu bekommen.
Da mache ich mich aber gleich mal dran, damit wir was zu sniffen haben.
Update: Ich hatte vergessen, die App an zu lernen :o :-[
Beide Controller laufen mit Easylighting und mit meinem Skript.
Was noch fehlt ist, dass der neue in FHEM geht. Das muss ich noch ausknobeln. Evtl. muss er angelernt werden.
Die neuere App EasyHome habe ich nicht zum Laufen bekommen. Die it noch schlimmer als EasyLighting. Der einzige Vorteil dieser ist, dass sie auch Zigbee unterstützt. Die neuen Controller von Iluminze haben das. Meine sind aber RF+Wifi.
Ich denke also, dass ich zwei verschiedene Controllerversionen habe, die unterschiedliche Protokolle haben.
Noch zur Info: die Controller können jederzeit mit einer RF-Fernbedienung bedient werden. Wobei eine Integration aller Versionen in FHEM über Wifi wäre natürlich noch schöner.
Hallo,
schön dass das Sunricher Thema wieder lebt. Werd ich auch mal meine zwei Cents dazu geben:
Erst mal zur Info meine Hardware:
Ich wollte einen Led-Stripe, den man sowohl per Wifi vom FHEM steuern kann, als auch per Hand vom Wandmodul (wegen WAF).
Die Entscheidung ist dann bei mir für den SR-2812Wi gefallen
https://www.sunricher.com/4-zone-wall-mounted-rgbw-dmx512-master-sr-2812.html
(Wandmodul + Wifi-Client/Server - da kommt DMX raus) und als Controller;
um per DMX das LED-Stripe anzusteuern den SR-2102B
(https://www.sunricher.com/constant-voltage-dmx512-decoder-sr-2102b.html)
Da das ganze von FHEM aus zwar lief, aber sehr unzuverlässig, hatte ich es mangels Zeit liegenlassen,
und mich erst jetzt wieder damit befasst.
Bin dem Teil dann mal mit Wireshark und Nmap zu Leibe gerückt.
Die Unzuverlässigleit stammt, zumindest in meinem Fall wohl von einem nachlässig implementieretn TCP Socket.
Jedenfalls ist im Wireshark zusehen, dass ein Verbindungsabbau zwar mit einem ACK bestätigt wird, aber trotzdem danach ein
Vebindungsaufbau gelegentlich abgeleht wird.
Abhilfe dazu -> Per Webinterface auf UDP umschalten. Dann läuft es zuverlässig.
Hab jetzt aber noch nicht rausbekommen, wie ich das im Wifilight.pm mache...
Die zweite Geschichte ist, dass man im Netz relativ wenig Infos zu den Teilen bekommt.
Als ich aber mal Nmap auf das Teil losgelassen habe, meldete der mir was von Http Server LimitlessLed.
Mit dem Suchwort war dann schon wesentlich mehr zu finden. Scheinbar verwendet Sunricher wie viele andere
die LimitlessLed Steuerung als Grundlage.
Nach diesem Text hier
https://github.com/joaquincasares/python-wifi-leds/tree/master/wifileds/limitlessled
wird das Zeug u.a. in folgenden Brands eingesetzt:
LimitlessLED
EasyBulb
AppLight
AppLamp
MiLight
LEDme
dekolight
iLight
und scheinbar eben auch Sunricher.
DIe Unterschiede liegen offenbar vorwiegend in der Verwendeten Version des LimitlessLed Grundmoduls.
Ich scheine V5 zu haben. Es gibt aber offenbar schon mindestens bis V7
(https://www.reddit.com/r/homeautomation/comments/6nff1n/what_happened_to_limitlessled_v7_bridges/)
EIne Fundgrube dazu habe ich hier gefunden
https://github.com/BKrajancic/LimitlessLED-DevAPI/blob/master/otherprojects.md
Mein Gerät funktioniert jedenfalls mit den hier schon diskutierten 12 Byte Codes:
01: 55 (Startbyte)
02-05: 33 61 39 02: Remote identifier, wobei die ersten 3 Bytes bei mir auch 00 sein können
06: Zone (FF scheinbar für alle Zonen)
07: Befehlstyp (08 = Color-Channel)
08: Color Channel (18 .. 21 R,G,B,W)
09: Value (00 ... 80)
10: Checksum (Summe 2. - 9. Byte)
11-12: Marker Bytes (AA, AA)
Soweit erst mal,
falls jemand noch Wireshark Mitschnitte oder sonstwas braucht, bitte melden...
t.t.