FHEM Forum

FHEM - Hausautomations-Systeme => Sonstige Systeme => Thema gestartet von: Volker Kettenbach am 12 Oktober 2018, 16:03:59

Titel: 24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: Volker Kettenbach am 12 Oktober 2018, 16:03:59
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
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: CoolTux am 12 Oktober 2018, 16:28:40
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.
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: Volker Kettenbach am 12 Oktober 2018, 19:08:05
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.
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: CoolTux am 12 Oktober 2018, 19:42:11
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
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: Volker Kettenbach am 15 Oktober 2018, 18:08:38
Hab das beides umgesetzt!
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: CoolTux am 15 Oktober 2018, 18:23:59
Super. Hab vielen Dank.


Grüße
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: LuckyTV am 23 Oktober 2018, 19:32:16
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
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: Volker Kettenbach am 24 Oktober 2018, 11:09:56
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
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: LuckyTV am 24 Oktober 2018, 18:16:29
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
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: Volker Kettenbach am 24 Oktober 2018, 20:19:04
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.

Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: LuckyTV am 24 Oktober 2018, 21:13:13
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
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: Volker Kettenbach am 25 Oktober 2018, 23:52:53
Ich habe exakt die gleichen Settings.
Merkwürdig...
Mach mal ein "telnet <ipadresse> 8899" an der Commandline und guck, ob das einen Fehler bringt.
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: LuckyTV am 28 Oktober 2018, 08:44:16
Guten Morgen,

da gibt es keine Fehlermeldung.

Trying 192.168.40.31...
Connected to 192.168.40.31.
Escape character is '^]'.
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: LuckyTV am 30 Oktober 2018, 13:56:14
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
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: Volker Kettenbach am 13 Mai 2020, 21:46:51
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
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: Volker Kettenbach am 23 Mai 2020, 18:08:08
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.
Titel: Antw:24_Iluminize.pm: Support für Iluminize LED stripes
Beitrag von: ttruckle am 24 Mai 2020, 19:39:44
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:


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.