WIFI LED Controller

Begonnen von jenscz, 05 November 2013, 00:12:03

Vorheriges Thema - Nächstes Thema

betateilchen

Ich war mal so frei und habe heute das Modul 98_WIFILED.pm in der bei mir seit Wochen problemlos laufenden Version (inkl. Setextensions) nach contrib eingecheckt.

Damit ist und bleibt es "as is" und niemand wird tatsächlich auf einen zeitaufwändigen Support pochen.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

AKropsch

Hallo,

ich benutze das Modul seit einigen Monaten mit 2 LW12 Controllern. Um den Controller besser auszunutzen habe ich 98_WIFILED.pm ein wenig erweitert.
Ich habe den internen Offset für mode Auswahl so angepasst, dass jetzt die "modes" gleich durchnummeriert sind wie bei der AndroidApp "Magic Color v2".
Ferner habe ich den set mode Befehl um den Argument speed erweitert so dass der Aufruf jetzt 2 Argumente verlangt z.B.:
set mein_wifi_L12_led mode 0 128

mode ist 0 ... 19
speed ist 0 ... 255 (0 am schnellsten, 255 am langsamsten)

Zur Kontrolle ist auch ein Reading speed dazugekommen.

Bei mir läuft das Modul seit Wochen ohne Probleme. ABER:
Ich bin ein absoluter Perl noob und ich hab mit Turbo Pascal als letztes aufgehört, also ist die Verwendung auf eigene Gefahr, und mit meinen Perl Kenntnissen kann ich wohl auch keine Hilfe leisten falls es doch nicht läuft.
Unten einmal der Patch und das geänderte Modul


--- 98_WIFILED.pm 2014-10-07 20:44:17.000000000 +0200
+++ 98_WIFILED2.pm 2014-10-07 21:19:11.000000000 +0200
@@ -11,7 +11,7 @@
# ############################################################################
#
#  we have the following readings
-#  state            on|off
+#  state            on|off            speed
#
# ############################################################################
#
@@ -26,6 +26,7 @@
#  IP               the IP of the device
#  RGB              for the RGB Values of color-picker
#  MODE             the last number of the built in modes
+#  SPEED            the last speed value
#
# ############################################################################
#  TODO: the speed of the animation: 0xBB, ??, ??, 0x44
@@ -91,6 +92,7 @@
     $hash->{GREEN} = 255;
     $hash->{BLUE}  = 255;
     $hash->{MODE}   = 0;
+    $hash->{SPEED}   = 128;

     if( !defined( $attr{$name}{timeout} ) ) {
$attr{$name}{timeout} = 2;
@@ -123,6 +125,12 @@
$hash->{READINGS}{dim}{TIME} = $tn;
     }

+    if( !defined( $hash->{READINGS}{speed}{VAL} ) ) {
+ $hash->{READINGS}{speed}{VAL} = 128;
+ $hash->{READINGS}{speed}{TIME} = $tn;
+    }
+
+
     return( undef );
}

@@ -169,30 +177,44 @@
   } elsif( $cmd eq "stop" ) {
       WIFILED_Write( $hash, "\x{CC}\x{22}\x{33}" );
   } elsif( $cmd eq "next" ) {
-      my $offset = 38;
+# change the offset to match the modes like in the android app
+      my $offset = 37;
       my $mode = $offset + $hash->{MODE};
       if( $mode > ( $offset + 20 ) ) {
  $mode = $offset;
       }
       $hash->{MODE} = $mode;
-      WIFILED_Write( $hash, "\x{BB}" . chr( $mode ) . "\x{19}\x{44}" );
+      WIFILED_Write( $hash, "\x{BB}" . chr( $mode ) . "\x{AA}\x{44}" );
   } elsif( $cmd eq "prev" ) {
-      my $offset = 38;
+      my $offset = 37;
       my $mode = $offset + $hash->{MODE};
       if( $mode < $offset ) {
  $mode = $offset + 20;
       }
       $hash->{MODE} = $mode;
-      WIFILED_Write( $hash, "\x{BB}" . chr( $mode ) . "\x{19}\x{44}" );
-  } elsif( $cmd eq "mode" ) {
-      my $offset = 38;
+      WIFILED_Write( $hash, "\x{BB}" . chr( $mode ) . "\x{AA}\x{44}" );
+  } elsif( $cmd eq "mode" ){
+      if( @arg != 2 ) {
+   my $msg = "WIFILED_Set: wrong number of arguments for set mode";
+   Log( $attr{$name}{loglevel}, $msg );
+   return( $msg );
+      } else {
+      my $offset = 37;
       if( ( $arg[ 0 ] < 0 ) || ( $arg[ 0 ] > 19 ) ) {
  my $msg = "WIFILED_Set: wrong mode number given";
  Log( $attr{$name}{loglevel}, $msg );
  return( $msg );
       }  
       $hash->{MODE} = $arg[ 0 ] + $offset;
-      WIFILED_Write( $hash, "\x{BB}" . chr( $hash->{MODE} ) . "\x{19}\x{44}" );
+      $hash->{SPEED} = $arg[ 1 ];
+
+      WIFILED_Write( $hash, "\x{BB}" . chr( $hash->{MODE} ) . chr ( $hash->{SPEED} ) . "\x{44}" );
+      # and update the speed reading
+      readingsSingleUpdate( $hash,
+     "speed",
+     $hash->{SPEED},
+     1 );
+      }
   } elsif( $cmd eq "color" ) {
       if( @arg != 3 ) {
  my $msg = "WIFILED_Set: wrong number of arguments for set color";
@@ -309,11 +331,15 @@
       return( $msg );
   }

+
   if( ( $a[ 1 ] eq "rgb" ) || ( $a[ 1 ] eq "RGB" ) ) {
       return( ReadingsVal( "$name", "rgb", "F0F0F0" ) );
   } elsif( ( $a[ 1 ] eq "dim" ) || ( $a[ 1 ] eq "DIM" ) ) {
       return( ReadingsVal( "$name", "dim", "50" ) );
-  } else {
+  } elsif( ( $a[ 1 ] eq "speed" ) || ( $a[ 1 ] eq "SPEED" ) ) {
+      return( ReadingsVal( "$name", "speed", "128" ) );
+  }
+    else {
       my $msg = "WIFILED_Get: unkown argument";
       Log( $attr{$name}{loglevel}, $msg );
       return( $msg );


Grüße Andreas

bugster_de

Hallo,

das sieht ja gut aus. Hast Du den Code nach Contrib eingecheckt?

Übrigens: ich habe mal vor ewiger Zeit den Netzwerkverkehr des Moduls mitgeschnitten, da es ja auch ein Rückwärtsinterface unterstützt. Sprich das Modul sendet ja auch den aktuelle Status etc. zurück. Ich komme aber einfach nicht dazu, dieses mal zu implementieren.
Anbei mal meine Analyse aus dem Netzwerkmitschnittes, falls sich jemand findet, der das implementiert. Das sind die Kommandos und deren Bedeutung, die der LW12 wieder zurück schickt. Sprich man müsste auf dem Port 49389 lauschen, und die Rückmeldungen entsprechend auswerten. Vorteil wäre halt, dass man per App und per FHEM gleichzeitig bedienen kann.

AKropsch

Hallo

Zitat von: bugster_de am 08 Oktober 2014, 10:37:54
das sieht ja gut aus. Hast Du den Code nach Contrib eingecheckt?

davon habe ich leider keine Ahnung  :-[

Grüße Andreas

Kuzl

Hallo,

Wie genau kann man denn so einen  socket auslesen?
Hab im Forum von Homematik gelesen, dass der LW12 das auch auf dem gleichen Port zurückschickt, auf dem man die Befehle schickt, stimmt das?

vg
Kuzl

jostmario

Hallo,

weis jemand ob dieses Set auch mit Fhem funktioniert.
http://www.amazon.de/STRIPS-CONTROLLER-Fernbedienung-Android-Schwarz/dp/B00G5602NI/ref=pd_rhf_se_p_img_2

Da ich die RGB Strips ins Kinderzimmer bauen wollte wäre es gut wenn die Kinder sie dann auch mit dieser Fernbedienung steuern könnten.

Gruß josty
Raspberry Pi  ---  HM-LAN ---  8X HM_HM_CC_RT_DN --- OWL+USB Strommesser    UVR1611

jostmario

Hallo

gibt es auch eine art Commandref für das Modul
welche befehle man wie eingeben muss ?

Gruß Josty
Raspberry Pi  ---  HM-LAN ---  8X HM_HM_CC_RT_DN --- OWL+USB Strommesser    UVR1611

chris1284

#157
Was unterscheidet dieses modul von dem wifilight? Der controller aus post 1 ist der den ich bisher mit http://forum.fhem.de/index.php/topic,18958.msg215066.html#msg215066 betreibe

Wiki http://www.fhemwiki.de/wiki/WifiLight

Welches bietet mehr?

Kuzl

Das Wifilight-modul bietet nicht nur die Unterstützung für den lw12 und hat daher nicht alle funktionalitäten (wie die hardwareanimationen)
Außerdem scheint es mitlerweile recht buggy zu sein (einschalten funktioniert nicht immer etc) außerdem wird der standard colorpicker von fhem darin noch nicht unterstützt. Ich würde mir wünschen, dass das modul hier weiterentwickelt wird.

chris1284

danke für die Info, das bedienen scheint in der tat hier einfacher, gerade mit dem colorpicker

wenn es denn stabil läuft, warum liegt es noch in contrib... cmdref und / oder wiki wären zu begrüßen.

eh man zb mal die funktion blinking ertüftelt hat....

Kuzl

Da bin ich ganz deiner Meinung, allerdings muss dafür dann jemand den support übernehmen und das will anscheinend keiner, keine ahnung warum

bugster_de

Zitatkeine ahnung warum
Die Antwort findet sich einen Post weiter vorne:
Zitatcmdref und / oder wiki wären zu begrüßen
wenn jemand die Doku macht ...

Kuzl

Kann ich mich mal dran setzen, allerdings weiß ich nicht welches format das haben muss. Ich mach mich morgen mal schlau.
Würdest du das Modul weiterentwickeln? Bei mir scheitert es leider an mangelnden perl-kenntnissen für den rückkanal. Als weiteren schritt wär eine idee, dass man die benutzerkonfigurierbaren animationen über fhem steuerbar macht. Das denke ich kann ich vll sogar machen.
gruß Kuzl

jostmario

Hallo

ja mir gefällt das Modul auch recht gut benutze es seit 2 Wochen.
bis jetzt keine schwierigkeiten damit.
Hoffe das es weitergeht.

Gruß Josty
Raspberry Pi  ---  HM-LAN ---  8X HM_HM_CC_RT_DN --- OWL+USB Strommesser    UVR1611

bugster_de

@Kuzl:
Zitatdass man die benutzerkonfigurierbaren animationen über fhem steuerbar
das ist doch schon drin! Ich habe aber gerade gesehen, dass ich vergessen habe die Optionen auch für FHEM sichtbar zu machen. Hole ich noch nach.

Mode direkt anwählen
set myled mode 0..19
Nächster / Vorheriger
set myled prev
set myled next

Animation starten / stoppen
set myled run
set myled stop


ZitatWürdest du das Modul weiterentwickeln?
wie bei Radio Eriwan: im Prinzip ja, aber .... Ich kenne halt meinen momentanen Grad an Freizeit, deshalb tue ich mich mit Zusagen etwas schwer. Will halt keine Erwartungshaltung schüren, die ich dann nicht halten kann.
Rückkanal habe ich ja schon mal extrahiert, was dazu notwendig ist. Im Prinzip muß man dazu (leider) das Modul kräftig umbauen, so dass die Rückantworten verarbeitet werden können, ohne dass FHEM komplett stehen bleibt. Das kann man auf zwei Arten machen (zweistufiges Modul wie meine Squeezebox Module oder mittels parallem Thread). Beides ist einiges an Codierarbeit.

Zitatallerdings weiß ich nicht welches format das haben muss
das Format ist im Prinzip HTML. Beispiele finden sich bei jedem offiziellen Modul ganz am Ende der Datei. Alles nach der Zeil 1; ist dann die zugehörige Doku.